Les variables : définition

- Les variables : des boîtes virtuelles !
Dans tout programme VBA, vous aurez besoin d'utiliser des variables. Une variable est à la fois très simple à manipuler, mais finalement assez complexe à définir et à bien gérer, si vous êtes débutant.
Vous pouvez voir une variable comme une sorte de boîte virtuelle, réservée en mémoire, et dans laquelle vous allez placer quelque chose temporairement.
- Une variable porte un nom sans espace (par exemple : x, y, z, FeuilleDeClasseur, BaseDeDonnees, taux_de_tva...). Ce nom doit débuter par une lettre, et non par un chiffre.
- Une variable peut recevoir un certain type de contenu (par exemple : du texte, un chiffre entier, un chiffre décimal, une date...). Voir le tableau plus bas.
- En fonction de son contenu, une variable occupe une certaine quantité de mémoire. Un entier (Integer) occupe ainsi moins de place en mémoire qu'un réel double (Double).
- Le contenu d'une variable peut changer au cours du programme (d'où le nom !).
- Une variable a une certaine durée de vie. En général, les variables commencent leur existence à partir du moment où elles sont déclarées par l'instruction Dim. Elles sont automatiquement supprimées lorsque la portion de code (Sub / End Sub, par exemple) se termine.
Déclarer une variable
Il est fortement conseillé de déclarer une variable avant de l'utiliser : déclarer une variable équivaut à réserver de la mémoire pour cette variable, et à "prévenir" Visual Basic de l'utilisation future de cette variable. Déclarer une variable ne suffit pas : il faut toujours lui affecter une valeur après (on parle d'initialisation de la variable).
En résumé
Une variable doit être déclarée puis initialisée avant de pouvoir être utilisée.
L'instruction VB permettant de déclarer une variable est Dim.
Dim i As Integer
Dim j As Integer
Dim a As String, b As Integer, c As Date
Dans le même genre, les variables de l'illustration plus haut — x (valeur entière), y (chaîne de texte) et z (date) — se déclarent de cette manière :
Dim x As Integer
Dim y As String
Dim z As Date
Où placer l'instruction Dim ?
En général les variables se déclarent à l'intérieur des procédures (Sub) ou des fonctions (Function), sauf s'il s'agit de variables globales.
Notes :
- Si vous déclarez les variables sur des lignes séparées (voir i et j ci-dessus), vous devez retaper systématiquement l'instruction Dim.
- Pour gagner du temps, vous pouvez déclarer plusieurs variables sur une seule ligne, en séparant chaque déclaration d'une virgule. Dans ce cas, un seul Dim se place en début de ligne.
Attention :
Une erreur fréquemment commise en VB/VBA consiste à écrire :
Dim a, b, c As Integer
au lieu de :
Dim a As Integer, b As Integer, c As Integer
Dans le 1er cas, seule la variable c est de type Integer. Les autres variables se voient affecter le type Variant, qui est une sorte de type générique. Le 1er cas est en fait équivalent à :
Dim a As Variant, b As Variant, c As Integer
Info
En VB.NET, par contre, la syntaxe Dim a, b, c As Integer déclare bien 3 entiers...
Attention au Variant !
Le type Variant a des avantages et des inconvénients. Vous ne devriez l'utiliser qu'en connaissance de cause. Une page du site traitera spécifiquement de ce type de variable.
Principaux types de variables
Il existe un grand nombre de variables en Visual Basic. On distinguera principalement :
- les variables simples
- les variables composées, définies par vous-même
- les variables de type tableau
- les variable objet
Le tableau ci-dessous est extrait de la documentation VB/VBA, et présente seulement les principaux types simples :
Note
VB.NET conserve ces types de données, mais comporte quelques différences. Le type Integer, par exemple, occupe 4 octets en VB.NET, il a donc une limite supérieure à 32767.
| Type de données | Traduction | Taille mémoire | Plage de valeurs | Notes |
| Byte | Octet | 1 octet | 0 à 255 | |
| Boolean | Booléen ou valeur logique | 2 octets | True (Vrai) ou False (Faux) | On trouve parfois aussi -1 pour True, 0 pour False. |
| Integer | Entier | 2 octets | -32 768 à 32 767 | Il s'agit ici d'un entier au sens informatique (notez les valeurs acceptées) et non mathématique. |
| Long | Entier long | 4 octets | -2 147 483 648 à 2 147 483 647 | id. |
| Single (à virgule flottante en simple précision) |
Réel simple, à virgule flottante en simple précision | 4 octets | -3,402823E38 à -1,401298E-45 pour les valeurs négatives ; 1,401298E-45 à 3,402823E38 pour les valeurs positives | |
| Double | Réel double, à virgule flottante en double précision | 8 octets | -1,79769313486231E308 à -4,94065645841247E-324 pour les valeurs négatives ; 4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives |
|
| Date | Date | 8 octets | 1er janvier 100 au 31 décembre 9999 | VB raisonne à l'anglo-saxonne. Une date s'écrira donc mm/jj/aaaa (voir exemple plus bas). |
| String (longueur variable) |
Chaîne de caractères | 10 octets + longueur de la chaîne | 0 à environ 2 milliards | |
| String (longueur fixe) |
Chaîne de caractères | Longueur de la chaîne | 1 à environ 65 400 | |
| Variant (nombres) |
Variant | 16 octets | Toute valeur numérique, avec la même plage de valeurs qu'une donnée de type Double | |
| Variant (caractères) |
Variant | 22 octets + longueur de la chaîne | Même plage de valeurs qu'une donnée de type String de longueur variable |
Initialiser les variables
Une fois une variable déclarée, il faut lui affecter une valeur (l'initialiser). Ceci se fait tout simplement via le signe Egal (=) en VB. Ce qui donne quelque chose comme :
Dim variable As type
variable = valeur
Exemples
- Dim i As Integer, j As integer
- Dim a As String
- ' i reçoit la valeur 5
- i = 5
- ' j reçoit la valeur i * 20, soit 100
- j = i * 20
- ' j reçoit la valeur j+1, soit 101 (et perd sa valeur précédente)
- j = j + 1
- ' a reçoit le texte bonjour
- a = "bonjour"
Note
Vous ne pouvez pas affecter n'importe quoi à une variable. Le contenu d'une variable doit correspondre à la déclaration de la variable, faute de quoi vous obtiendriez une erreur "Type incompatible".
Essayez d'écrire x = "lundi", si x est de type Integer, pour voir !
Valeur par défaut
Si vous n'initialisez pas une variable, celle-ci reçoit une valeur par défaut, en fonction de son type de données. Par exemple, un Integer vaudra 0 par défaut, une chaîne (String) vaudra "" par défaut.
Mais ce n'est généralement pas une bonne idée de supposer cela : il vaut mieux donner une valeur explicitement dans votre programme !
Voici quelques exemples corrects :
Pour mémoire : l'instruction MsgBox affiche un message ou une variable à l'écran.
- Sub Test1()
- ' Déclaration d'une variable entière
- Dim a As Integer
- ' Initialisation de la variable
- a = 25
- ' Affichage à l'écran du résultat
- MsgBox a
- End Sub
- Sub Test2()
- ' Déclaration d'une variable texte
- Dim a As String
- ' Initialisation de la variable
- a = "lundi"
- ' Affichage à l'écran du résultat
- MsgBox a
- End Sub
- Sub Test3()
- ' Déclaration d'une variable date
- Dim a As Date
- ' Initialisation de la variable
- a = #12/31/2010#
- ' Affichage à l'écran du résultat
- MsgBox a
- End Sub
Vous avez peut-être remarqué que...
- Les valeurs de type texte (String) sont délimitées par des guillemets.
- Les valeurs de type Date sont délimitées par des dièses (#). D'autre part, en VB, elles sont écrites au format mm/jj/aaaa.
- Les autres valeurs (numériques et booléennes) n'ont pas de délimiteur.
Voici par contre quelques exemples incorrects :
- Sub Test10()
- Dim a As Integer
- ' Incorrect : Un entier VB/VBA va de -32768 à 32767
- a = 33000
- MsgBox a
- End Sub
- Sub Test11()
- Dim a As Integer
- a = 32000
- ' Incorrect : Un nom de variable ne comporte pas de guillemets
- ' L'écran affichera la lettre a, et pas 32000
- MsgBox "a"
- End Sub
- Sub Test12()
- Dim a As Integer
- ' Incorrect : on affecte une date à un entier
- a = #12/31/2010#
- MsgBox a
- End Sub
- Sub Test13()
- Dim a As Integer
- ' Incorrect : on affecte une chaîne de caractères à un entier
- a = "lundi"
- MsgBox a
- End Sub
Précisions sur le signe "="
L'informatique est sans doute très liée aux mathématiques, mais il ne faut pas toujours mélanger les deux ! Je m'explique : en maths, ces deux lignes sont équivalentes :
5 = 2 + 3
2 + 3 = 5
Par contre, quand vous gérez des variables, le signe "=" est un signe d'affectation, pas d'égalité. Donc quand vous écrivez x = 102 vous affectez toujours la valeur de droite (102) à la variable située à gauche (x). Il faut comprendre cette ligne comme ceci :
x ← 102 "ranger 102 dans une boîte nommée x"
Inversement, la ligne suivante est incorrecte. Il est impossible de "ranger" une variable dans un chiffre fixe...
102 = x
Quick Quizz
A votre avis, qu'affiche le programme suivant ?
- Sub Quizz()
- ' On déclare 2 variables
- Dim x As Integer, y As Integer
- ' On initialise les 2 variables
- x = 100
- x = y
- ' On affiche le résultat
- MsgBox x
- MsgBox y
- End Sub
Réponse
- En ligne 3, on déclare 2 variables entières, qui valent implicitement 0.
- En ligne 6, x reçoit la valeur 100.
- En ligne 7, x reçoit cette fois la valeur contenue dans y, soit 0. A ce stade, x et y valent donc 0.
- Enfin, on affiche les 2 variables, ce qui donne deux fois 0.
Remarque
En écrivant y = x en ligne 7, on change complètement le programme : x garde alors sa valeur de 100, et cette fois, y reçoit la même valeur. Ce qui confirme que x = y et y = x ne sont pas la même chose !

Dans cet article...
Article mis à jour le 16/03/2010