On vient de voir que VB offrait la possibilité de déclarer ou non les variables (en tout cas, les variables locales). Mais, dans l’hypothèse de non déclaration systématique des variables, nous avions pudiquement glissé sur ce qui se passe lorsqu’une variable non déclarée est utilisée…
En fait, cette variable est automatiquement créée dans un type spécial : le type Variant. Ce type possède comme particularité d’être "souple", à savoir de pouvoir s’ajuster à n’importe quel contenu (caractère, booléen, n’importe quel sous-type de numérique). Mais, évidemment, tout à un prix, et s’il est très pratique, le type variant n’en demeure pas moins extrêmement gourmand en mémoire vive occupée.
Donc, si dans le cadre d’un petit exercice, on peut se permettre de ne pas déclarer ses variables, ce n’est pas le cas dans un projet, où l’accumulation des variables de type Variant peut conduire à de graves dysfonctionnements.
1.2 Portée des variables
L’existence d’une variable peut se dérouler sur trois niveaux :
Niveau Procédure : cela veut dire que la variable est locale. Dès que l’on quitte la procédure en question, la variable disparaît, et son contenu avec elle. Pour déclarer une variable au niveau procédure, on tape au sein de la procédure considérée :
Dim NomVariable as Type
Niveau Form : la variable est disponible pour toutes les procédures de la Form , mais pas pour les procédures se situant sur une autre Form. Pour déclarer une variable au niveau Form, on tape tout en haut de la Form, à l’extérieur des procédures :
Dim NomVariable as Type
Non, ce n’est pas une erreur, c’est bien la même chose que précédemment. Mais l’emplacement de l’instruction n’est pas le même, et c’est cela qui change tout.
Niveau Projet : la variable est disponible, et sa valeur est conservée pour toutes les procédures de l’application, quel que soit leur emplacement. Pour déclarer une variable globale, il faut d’abord créer un module. Un module est un type de feuille destiné uniquement à recevoir du code, et qui n’a donc pas, contrairement aux Form, d’apparence graphique. C’est dans un module qu’on écrit la procédure principale, lorsqu’on en veut une, et qui de là pilote les différentes Form, elles mêmes donnant accès aux procédures liés aux objets qu’elles contiennent. Sur ce module, donc, on écrit :
Public NomVariable as Type
Naturellement, est-il besoin de le préciser, il ne faut pas raisonner en termes d’artillerie lourde, et déclarer toutes les variables au niveau projet, en se disant que comme ça, on est blindé : car ce blindage, par l’excès de place mémoire, ralentira votre application, au besoin considérablement. Il faut donc pour chaque variable se demander à quel niveau on en a besoin, et faire les déclarations en fonction.