Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Visual Basic » Initiation à VB » VariablesConnexion
 


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

  1. Dim i As Integer, j As integer
  2. Dim a As String
  3.  
  4. ' i reçoit la valeur 5
  5. i = 5
  6.  
  7. ' j reçoit la valeur i * 20, soit 100
  8. j = i * 20
  9.  
  10. ' j reçoit la valeur j+1, soit 101 (et perd sa valeur précédente)
  11. j = j + 1
  12.  
  13. ' a reçoit le texte bonjour
  14. 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.

  1. Sub Test1()
  2.   ' Déclaration d'une variable entière
  3.   Dim a As Integer
  4.  
  5.   ' Initialisation de la variable
  6.   a = 25
  7.  
  8.   ' Affichage à l'écran du résultat
  9.   MsgBox a
  10. End Sub
  11.  
  12. Sub Test2()
  13.   ' Déclaration d'une variable texte
  14.   Dim a As String
  15.  
  16.   ' Initialisation de la variable
  17.   a = "lundi"
  18.  
  19.   ' Affichage à l'écran du résultat
  20.   MsgBox a
  21. End Sub
  22.  
  23. Sub Test3()
  24.   ' Déclaration d'une variable date
  25.   Dim a As Date
  26.  
  27.   ' Initialisation de la variable
  28.   a = #12/31/2010#
  29.  
  30.   ' Affichage à l'écran du résultat
  31.   MsgBox a
  32. 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 :

  1. Sub Test10()
  2.   Dim a As Integer
  3.  
  4.   ' Incorrect : Un entier VB/VBA va de -32768 à 32767
  5.   a = 33000
  6.  
  7.   MsgBox a   
  8. End Sub
  9.  
  10. Sub Test11()
  11.   Dim a As Integer 
  12.  
  13.   a = 32000  
  14.  
  15.   ' Incorrect : Un nom de variable ne comporte pas de guillemets
  16.   ' L'écran affichera la lettre a, et pas 32000
  17.   MsgBox "a"
  18. End Sub
  19.  
  20. Sub Test12()
  21.   Dim a As Integer 
  22.  
  23.   ' Incorrect : on affecte une date à un entier
  24.   a = #12/31/2010#
  25.  
  26.   MsgBox a   
  27. End Sub
  28.  
  29. Sub Test13()
  30.   Dim a As Integer 
  31.  
  32.   ' Incorrect : on affecte une chaîne de caractères à un entier
  33.   a = "lundi"
  34.  
  35.   MsgBox a   
  36. 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 ?

  1. Sub Quizz()
  2.   ' On déclare 2 variables
  3.   Dim x As Integer, y As Integer
  4.  
  5.   ' On initialise les 2 variables
  6.   x = 100
  7.   x = y
  8.  
  9.   ' On affiche le résultat
  10.   MsgBox x
  11.   MsgBox y
  12. 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 !

 


Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2018 hervé inisan, self-access.com Reproduction interdite ]