Accueil | Ce site | CV | Excel | Livre dor | Macros XL4 | Modèles | VBA
La portée est la zone dans laquelle un élément peut être utilisé en étant identifié. Par élément, nous entendons, une variable, une constante, une procédure ou une fonction.
En ce qui concerne la portée, variables et constantes obéissent aux mêmes règles. Tout ce qui, dans cette page, concerne les variables sapplique donc également aux constantes.
De même, les fonctions (Function) suivent les mêmes règles que les procédures (Sub).
De manière générale, il faut restreindre au maximum la portée pour éviter les conflits : peu importe quon utilise la variable i dans différentes boucles du type :
For i = 1 To NbLignes ' Code exécuté dans la boucle Next i
si chaque occurrence de la variable i a une portée locale.
Une variable est en général définie à laide du mot-clef standard Dim. Elle peut être définie au niveau dun module ou au sein dune procédure (ou dune fonction).
Voici 2 exemples de définition de variables avec Dim :

Fig. 1 - Le curseur (trait vertical) est en ligne 2, après Boolean

Fig. 2 - Le curseur est cette fois en ligne 5, après Integer
Le contenu des figures 1 et 2 est identique, à la position du curseur près. Cette simple nuance entraîne une autre différence dans le menu déroulant situé en haut à droite dans les 2 figures.
est remplacé par
.
Le fait que le menu de la figure 1 contienne le texte Déclarations confirme que la partie supérieure du module, située avant la première procédure ou fonction est destinée à déclarer des variables et/ou des constantes. Celles-ci sont dites de niveau module et peuvent être employées dans toute procédure ou fonction située dans le même module. Cest le cas de la variable Choix, définie comme un booléen.
Dans la figure 2, le menu contient le texte SaisieNum, qui est le nom de la procédure dans laquelle se trouve le curseur. Une variable définie à lintérieur dun Sub End Sub est dite de niveau procédure. Elle nest utilisable quau sein de cette procédure. On dit également quelle nest visible quà lintérieur de la procédure où elle est définie. Cette dernière expression est en fait un raccourci qui signifie que la définition de la variable nest pas visible, lorsque la variable est au mauvais endroit, on pourrait dire hors de portée.
Si lon tente dutiliser une variable qui na pas été définie ou qui nest pas visible à lendroit où elle est employée, un message d erreur est affiché (figure 3).

Fig. 3 - Message derreur si on tente demployer une variable
sans lavoir définie au préalable, ou si elle nest pas visible.
Il est possible daccroître la portée dune variable en utilsant le mot-clef Public à la place de Dim. Elle est alors utilisable dans tout VBComponent du projet où elle a été définie.
Une variable définie avec Public doit lêtre au niveau module, dans un module classique ou un module de classe : il nest pas possible de définir ce type de variable dans le code associé à une feuille de classeur ou à un UserForm.
On peut également utiliser Private à la place de Dim, mais cela na aucun effet : pour une variable ou une constante, Private et Dim sont équivalents. Certains puristes considèrent quil faut utiliser Private pour définir une variable au niveau module, et Dim au niveau procédure. Le seul intérêt réel de Private est memnotechnique, pour montrer quune variable nest pas Public.
Enfin, une variable peut être définie avec Static, mais cela modifie sa durée de vie, mais pas sa portée.