Les variables (déclaration et portée) dans Excel VBA

Une variable peut simplement être un nombre unique, un morceau de texte ou une série d’informations que le programme doit conserver et auquel il se réfère pendant son exécution.  Le programme peut modifier la valeur d’une variable lors de son exécution. C’est pourquoi on l’appelle une variable. Si une variable a été définie en tant que type donné, les données spécifiées en tant que type différent ne seront pas acceptées. Par exemple, si vous avez défini une variable sous la forme d’un nombre entier, vous ne pouvez pas y insérer de texte.

1 Déclaration de variables

Pour créer une variable, vous devez la déclarer, c’est-à-dire lui affecter un nom qu’il suffira par la suite de réutiliser pour exploiter la valeur qui y est stockée. La déclaration de variables en VBA peut être implicite ou explicite. Autrement dit, les programmes VBA savent reconnaître une nouvelle variable sans qu’elle soit préalablement créée dans une instruction de déclaration. Vous pouvez aussi paramétrer Visual Basic Editor afin d’exiger la déclaration explicite des variables avant leur utilisation.

Vous pouvez attribuer le nom de votre choix à une variable, à condition qu’il respecte les règles suivantes :

■ il doit commencer par une lettre ;

■ il ne peut contenir plus de 255 caractères ;

■ le point, le point d’exclamation, les espaces et les caractères @, &, $ et # ne sont pas autorisés ;

■ le nom de la variable ne doit pas être un mot réservé, c’est-à-dire un mot reconnu comme un élément du langage Visual Basic (nom de fonction, d’objet, de propriété, d’argument, etc.).

NOTE

Les lettres majuscules et minuscules sont identiques dans les noms des variables.

Déclaration implicite
Il n’est pas nécessaire de déclarer une variable avant de l’utiliser. Vous pouvez simplement inclure la déclaration :

DeclaVaria = 10

Une variable sera automatiquement créée pour DeclaVaria comme une variable de type variant (type par défaut) et aura la valeur 10.

Les types de variables sont présentés plus loin dans ce chapitre.
Cependant, un problème est que cela peut entraîner des erreurs subtiles dans votre code si vous orthographiez mal le nom de la variable dans une instruction ultérieure. Par exemple, si vous faites référence à DeVaria au lieu de DeclaVaria, vous savez ce que vous voulez dire, mais pas VBA. Il suppose que DeVaria est une nouvelle variable et l’assigne comme telle. L’ancienne variable, DeclaVaria, est toujours là mais n’est plus utilisée. Vous avez maintenant deux variables différentes, bien que vous pensiez n’en avoir qu’une. Cela peut entraîner d’énormes problèmes qui peuvent prendre un certain temps à se redresser dans votre code.

Déclaration explicite
Pour éviter le problème de nom incorrect des variables, vous pouvez stipuler que VBA génère toujours un message d’erreur chaque fois qu’il rencontre une variable non déclarée.

Pour forcer la déclaration des variables avant leur utilisation, ajoutez l’instruction Option Explicit. Son utilisation évite les risques d’erreurs liées à une faute de frappe dans le nom d’une variable. Pour cela, placez-vous dans la section Déclarations de la fenêtre Code du module et saisissez-y l’instruction Option Explicit, comme le montre la figure suivante.

Dorénavant, l’apparition de noms de variables non préalablement déclarées à l’aide de l’instruction Dim générera une erreur, comme la figure 

Figure : Message d’erreur généré par une variable non déclarée

Vous pouvez aussi paramétrer Visual Basic Editor pour que l’instruction Option Explicit soit systématiquement placée dans la section de Déclarations de tout nouveau module. Voici comment procéder :

■ Sélectionnez la commande Options du menu Outils et placez-vous sur l’onglet Éditeur.

■ Cochez la case Déclaration explicite des variables, puis cliquez sur OK, comme la figure .

Figure : Déclaration des variables obligatoire


La méthode que vous utilisez (implicite ou explicite) dépend de vos préférences personnelles. Le codage est souvent beaucoup plus rapide avec implicite, car vous n’avez pas besoin de définir vos variables pour la première fois avant de les utiliser. Vous pouvez simplement faire des déclarations variables et VBA se chargera du reste. Cependant, comme indiqué précédemment, cela peut entraîner des erreurs, à moins que vous n’ayez une bonne mémoire pour les variables que vous utilisez et que vous ayez l’expérience nécessaire pour savoir exactement ce que vous faites. L’option implicite peut également rendre plus difficile la compréhension de votre code par quelqu’un d’autre. Utiliser Option Explicit est la meilleure pratique et permet d’arrêter les erreurs d’exécution.

Déclarer une variable avec l’instruction Dim

La déclaration de variables se fait à l’aide de l’instruction Dim, selon la syntaxe suivante :

Dim NomDeLaVariable As Type

Commentaires

■ L’instruction Dim, diminutif de Dimension, permet de définir un nom comme variable et en allouant un espace de stockage.

■ NomDeLaVariable est le nom choisi pour cette variable.

■ L’instruction As permet de déclarer le type de données.

■ L’argument Type représente le type de données et peut prendre les valeurs Long (type entier), Double (type décimal), String (type texte)… C’est un argument facultatif, mais la déclaration d’un type de variable fait souvent économiser de l’espace mémoire et améliore ainsi les performances de votre programme.

Il est possible de faire plusieurs déclarations de variable sur une seule ligne :

Dim MaVariable1, MaVariable2, MaVariable3 As Long

Dans cette exemple, MaVariable1 et MaVariable2 sont déclarés en tant que type Variant (qui est le type par défaut dans VBA) et seul MaVariable3 est déclaré en tant que type Long (Nombre entier). Pourquoi ? Parce qu’Excel VBA exige du programmeur qu’il déclare explicitement le type de chaque variable, même si elle est déclarée sur la même ligne (contrairement au langage C ou à de nombreuses autres langages). Pour déclarer les trois variables en tant que type Long, l’instruction doit être écrite comme suit:

Dim MaVariable3 As Long, MaVariable3 As Long, MaVariable3 As Long

2 Portée et durée de vie des variables

Toutes les procédures, fonctions, variables et constantes dans VBA ont leur propre portée. Cela signifie qu’ils ne peuvent être utilisés qu’à un certain endroit dans le code du programme, exactement là où ils sont décrits.

Par exemple, si la variable A est décrite dans le corps d’une procédure nommée Procedure1 (), cette procédure est sa portée. Ainsi, si une autre procédure Procedure2 () existe, vous ne pouvez pas y utiliser la même variable. Si vous essayez de le faire, vous obtiendrez soit un message d’erreur en raison d’une variable non décrite (dans le cas où vous utilisez l’instruction Option Explicit mentionnée précédemment), ou vous obtiendrez simplement une autre variable avec le même nom, mais sans aucun rapport avec la variable du même nom de la première procédure.
Il existe trois types de portée des variables:
La portée au niveau de la procédure : Les variables de niveau procédure ne sont reconnues que dans la procédure dans laquelle elles sont décrites à l’aide de l’instruction Dim ou Static. Ces variables sont appelées locales;

La portée au niveau de module : Les variables de niveau module sont utilisées uniquement dans le module dans lequel elles sont décrites, mais pas dans les autres modules de ce projet. Ils sont décrits à l’aide de l’opérateur Dim ou Private dans la zone de description du module, c’est-à-dire avant la description de la procédure;
La portée au niveau du projet : Les variables au niveau du module décrites à l’aide de l’instruction public sont disponibles pour toutes les procédures de projet. Ces variables sont appelées variables publiques.
Une variable décrite avec l’instruction Private ne conserve sa valeur que pendant l’exécution de la procédure dans laquelle cette variable est décrite. À la fin de la procédure, la valeur de la variable est perdue et lorsque la procédure est redémarrée, elle doit être réinitialisée. Les variables décrites par l’instruction Static conservent leur valeur après avoir quitté la procédure, pendant que le programme est en cours d’exécution.
Examinons maintenant la portée des procédures et des fonctions.

Les procédures et les fonctions n’ont que deux niveaux de portée: portée au niveau du module et portée au niveau du projet. La valeur par défaut est la portée au niveau du projet. Ainsi, une procédure ou une fonction peut être appelée par toute autre procédure ou fonction de ce projet. Le mot clé facultatif Public peut également être utilisé lors de la description de procédures et de fonctions au niveau du projet. La présence ou l’absence de ce mot n’a aucun effet sur la procédure.
Si vous souhaitez décrire une procédure utilisée uniquement au niveau du module, le mot clé Private est utilisé. Veuillez noter qu’une telle description réduit non seulement la portée de la procédure, mais interdit également son utilisation en tant que procédure indépendante, elle ne peut être appelée qu’à partir d’une autre procédure.
Enfin, le mot clé Static peut être utilisé pour décrire des procédures ou des fonctions. Elle n’affecte en aucune façon la portée de la procédure, mais elle affecte toutes les variables décrites dans cette procédure ou fonction. Dans ce cas, toutes les variables locales sont déclarées avec l’instruction Static, et restent donc en mémoire après la fin d’une telle procédure et, lorsqu’elle est appelée à nouveau, conservent leurs valeurs précédentes.
Prénons l’exemple suivant :

Public B1 As String
Private B2 As Integer
Dim B3 As Single
Sub Procedure1()
Dim B4 As Integer
Static B5 As Integer
B1 = "Un texte"
B2 = 2
B3 = 3.14
B4 = B4 + 4
B5 = B5 + 5
MsgBox B4
MsgBox B5
End Sub
Sub Procedure2()
Procedure1
MsgBox B1
MsgBox B2
MsgBox B3
MsgBox B4
MsgBox B5
Procedure1
End Sub

Commentaires

■ Dans cet exemple, la variable B1 est définie au niveau de l’ensemble du projet (à l’aide du mot-clé Public), les variables B2 et B3 sont définies au niveau du module, la variable B4 est au niveau de la procédure Procedure1 (), et la variable B5, bien qu’elle soit définie dans le corps de la procédure Procedure1 () mais est décrit comme Static.
■ Lors de l’appel de la procédure Procedure2 (), celle-ci  appellera la procédure Procedure1 (), qui attribuera des valeurs aux cinq variables B1, B2, B3, B4 et B5, puis affichera les valeurs actuelles des variables B4 et B5 dans la boîte de dialogue.
■ Une fois la procédure Procedure1 () terminée, les valeurs actuelles des variables B1, B2, B3, B4 et B5 seront affichées. Il s’avère que les variables B1, B2 et B3 ont conservé leurs valeurs, puisqu’elles sont décrites au niveau du module, et que les variables B4 et B5 ont des valeurs vides, car la portée de ces variables sont les procédures dans lesquelles elles sont utilisées. Toute modification de ces variables dans l’une des procédures n’a rien à voir avec des variables similaires dans l’autre procédure – en fait, ce sont des variables différentes, elles utilisent simplement les mêmes noms.
■ Après cela, un autre appel de la procédure Procedure1 () a lieu, et il change à nouveau et affiche les valeurs des variables B4 et B5. Dans ce cas, la variable B4 recevra à nouveau la valeur 4, car avec un nouvel appel à la procédure, la mémoire pour cette variable sera réallouée, et elle sera initialisée à vide.

■ Contrairement à B4, la variable B5, qualifiée de statique, conservera sa valeur précédente de l’appel précédent de cette procédure, par conséquent, sa valeur sera égale à 10 lorsqu’elle sera appelée à nouveau.

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x