Présentation VBA

Accueil

Fenêtre d'exécution
Les variables
Définition d'un type de variable
Option Explicit
Pas à pas avec F8

 

Le code VBA s’écrit dans:

  • Les modules
  • Les feuilles
  • Le classeur
  • Les formulaires

Les procédures et fonctions définies dans des Modules sont accessibles de tout endroit du projet. Pour créer un module: Insertion/Module.

Fenêtre d’exécution

On peut y travailler en Mode direct, c'est à dire frapper des instructions qui sont exécutées immédiatement.

Affichage/Fenêtre d'exécution

Si par exemple, si vous frappez : Print 5*7, le résultat (35) est affiché immédiatement.

Les variables

Dans l'exemple ci dessous, nous plaçons dans une variable x la valeur 123 et dans une variable y la valeur 456.
z=x+y calcule la somme des variables x et y et range le résultat dans la variable z.


Le type des variables peut être déclaré.

Dim x,y,z As Integer        ' Entier
Dim c As String               ' Chaîne de caractères

Les variables sont initialisées avec des valeurs nulles lors de leur déclaration. Les différents types
de variables sont :

Type

Nombre octets

 

Integer

2

Nombres entiers compris entre -32768 et + 32767

Single

4

Nombres entiers compris entre -2 147 483 648 et + 2 147 483 647

Double

8

-1,79E308 et 1,79E308

 

 

 

 

 

 

     

Déclaration des types de variables

Sur l’exemple, la variable Prix est déclarée comme Integer. L’instruction Prix = "Dupont" provoque une erreur.

Sub essai()
   Dim Prix As Integer       ' Prix doit être un entier
   Prix = "Dupont"             ' Provoque une erreur à l’exécution
End Sub

Autres exemples:

Dim nom As String          ' chaîne de caractères
Dim taux_tva AS Single   ' avec décimales
Dim temp As Variant       ' type quelconque

Option Explicit

Cette instruction rend obligatoire la déclaration des variables.
Sur l’exemple, la variable ttal n’a pas été déclarée. Une erreur est détectée par VBA. Sans l’option explicit , cette erreur n’aurait pas été détectée par VBA à la compilation (ce genre d'erreur est détecté très rapidement à la mise point)

Option Explicit
Sub essai()
  Dim prix As Integer, qte As Integer, total As Integer
  prix = 123              ' 123 dans la variable Prix
  qte = 5                  ' 5 dans la variable Qte
  total = prix * qte
  MsgBox ttal             ' la variable ttal n'existe pas
End Sub

Excel écrit automatiquement Option Explicit à chaque nouveau module si on coche dans le menu :
Outils / Options / Onglet Éditeur / Déclaration des variables obligatoire

-En découpant au maximum un programme en procédures et fonctions courtes, on diminue les risques d'erreur de programmation.
-L'essentiel des bugs des programmes proviennent :
.des cas particuliers non testés.
.de variables globales. Les variables globales à un module ou les variables publiques ne doivent être utilisées qu'en cas de nécessité . D'une façon générale, il faut utiliser le passage de paramètres.

Le VBA utilisé avec des Arrays et dictionnaires est rapide. Ce qui ralenti, c'est l'accès aux cellules ou aux objets des formulaires. Il faut éviter les boucles accédant aux cellules ou objets des formulaires. Par exemple il faut:
-Lire en champ dans un Array, traiter l'Array et transférer un Array dans un champ plutôt que d'écrire cellule par cellule.
-Utliser .List pour alimenter un ComboBox ou LIstbox plutôt que Additem.
-Le réflexe fonction perso est un bon réflexe puisque les fonction sont réutilisables par le programmeur mais aussi par des utilisateurs qui ne pratiquent pas VBA et sont souvent beaucoup plus performantes que les formules matricielles.
-L'algorithme utilisé est souvent fondamental (par ex la méthode de tri).

Visibilité des variables

Par défaut, les variables ne sont connues que dans la procédure où elles sont déclarées.
Pour qu'une variable puisse être partagée par plusieurs fonctions ou procédures dans un module, il faut les déclarer dans le module en dehors des fonctions ou procédures.

Dim a As Integer ' La variable ‘a’ est connue dans toutes les procédures du module
Sub Essai
  a=123
  Essai2
End Sub

Sub Essai2
  Msgbox a ' Affiche 123
End Sub

Aide en ligne

Pour connaître la syntaxe d'un mot clé :

  • Frapper le mot clé.
  • Le sélectionner en le noircissant.
  • Appuyer sur la touche F1

Visibilité dans tout le projet

Pour que des variables puissent être partagées dans tout le projet, il faut les déclarer avec l'option Public.

Public témoin As Integer

Définition d'un type de variable

Le programmeur peut définir ses propres types de variable.

Type Personne
  Nom As String
  age As Integer
End Type

Sub essai()
   Dim a As Personne, b As Personne
   a.Nom = "Dupont"
   a.age = 30
   b = a
   MsgBox b.Nom & " " & b.age
End Sub

Sur cet exemple, nous trions un tableau:

Type Personne
  Nom As String
  age As Integer
End Type

Sub essai2()
  Dim a(1 To 5) As Personne
  Dim temp As Personne
  a(1).Nom = "Dupont": a(1).age = 40
  a(2).Nom = "Balu": a(2).age = 30
  a(3).Nom = "Charlie": a(3).age = 20
  a(4).Nom = "Durand": a(4).age = 25
  a(5).Nom = "Campas": a(5).age = 35
'---- tri
  For i = 1 To 5
    For j = i To 5
      If a(j).Nom < a(i).Nom Then
         temp = a(j)
         a(j) = a(i)
         a(i) = temp
      End If
    Next j
  Next i
  '--
  For i = 1 To 5
    MsgBox a(i).Nom & " " & a(i).age
  Next i
End Sub

ou

Tri Array structure

Type Personne
  T(1 To 3)
End Type

Sub essai()
  n = 5
  Dim a() As Personne: ReDim a(1 To n)
  Dim temp As Personne
  For i = 1 To n
     For col = 1 To 3
        a(i).T(col) = Cells(i + 1, col)
     Next col
  Next i
  '---- Tri Bubble
  For i = 1 To n
  For j = i To n
     If a(j).T(1) < a(i).T(1) Then
        temp = a(j): a(j) = a(i): a(i) = temp
     End If
   Next j
  Next i
  '-- transfert feuille
  For i = 1 To n
    For col = 1 To 3
      Cells(i + 1, col + 5) = a(i).T(col)
    Next col
  Next i
End Sub

Pas à pas avec la touche F8:

  • Curseur sur la procédure , touche F8

    Pour afficher la valeur d’une variable, déplacer le curseur sur la variable (compteur sur l’exemple)

 

 

 

 

 

 

 

 

 

Exemples