Portée et visibilité
La portée se réfère à la disponibilité d'une variable, d'une constante ou d'une procédure en vue d'une utilisation par une autre procédure. Il existe trois niveaux de portée : niveau de procédure, niveau de module privé et niveau de module public.
Vous choisissez la portée d'une variable lors de sa déclaration. Il convient de déclarer toutes les variables explicitement pour éviter les erreurs de conflit d'affectation de nom entre variables de différentes portées.
Définition d'une portée de niveau procédure
Une variable ou une constante définie dans une procédure n'est pas visible à l'extérieur de celle-ci. Seule la procédure contenant la déclaration de variable peut l'utiliser. Dans l'exemple suivant, la première procédure affiche un message contenant une chaîne. La deuxième procédure affiche un message vide puisque la variable strMsg est locale dans la première procédure.
Sub LocalVariable()
Dim strMsg As String
strMsg = "Cette variable ne peut pas être utilisée en dehors de " & "cette procédure."
MsgBox strMsg
End Sub
Sub OutsideScope()
MsgBox strMsg
End Sub
Définition d'une portée de niveau module privée
Vous pouvez définir des variables et constantes de niveau module dans la section Déclarations d'un module. Les variables de niveau module peuvent être publiques ou privées. Les variables publiques sont accessibles dans toutes les procédures de tous les modules d'un projet ; les variables privées sont disponibles uniquement dans les procédures de ce module. Par défaut, les variables déclarées avec l'instruction Dim dans la section Déclarations ont une portée privée. Vous pouvez toutefois faire précéder la variable du mot clé Private pour améliorer la lisibilité de votre code.
Dans l'exemple suivant, la variable de chaîne strMsg est accessible dans toutes les procédures définies dans le module. Lorsque la deuxième procédure est appelée, elle affiche le contenu de la variable de chaîne strMsg dans une boîte de dialogue.
' Ajoute ce qui suit dans la section Déclarations du module.
Private strMsg sAs String
Sub InitializePrivateVariable()
strMsg = "Cette variable ne peut pas être utilisée à l'extérieur " & " de ce module."
End Sub
Sub UsePrivateVariable()
MsgBox strMsg
End Sub
Note Les procédures publiques dans un module standard ou dans un module de classe sont accessibles dans n'importe quel projet référant. Pour limiter au projet en cours la portée de toutes les procédures d'un module, ajoutez une instruction Option Private Module dans la section Déclarations du module. Les variables et les procédures publiques seront toujours accessibles dans les autres procédures du projet en cours, mais pas dans les projets référants.
Définition d'une portée de niveau module publique
Si vous déclarez une variable de niveau module comme publique, elle est accessible dans toutes les procédures du projet. Dans l'exemple suivant, la variable de chaîne strMsg peut être utilisée par n'importe quelle procédure de n'importe quel module du projet.
' Inclut dans la section Déclarations du module.
Public strMsg As String
Toutes les procédures sont publiques par défaut, à l'exception des procédures d'événement. Lorsque Visual Basic crée une procédure d'événement, le mot clé Private est automatiquement inséré avant la déclaration de la procédure. Pour toutes les autres procédures, vous devez explicitement déclarer la procédure avec le mot clé Private si vous ne souhaitez pas la rendre publique.
À partir de projets référants, vous pouvez utiliser des procédures, des variables et des constantes publiques définies dans des modules standard ou des modules de classe. Cependant, vous devez d'abord définir une référence au projet dans lequel elles sont définies.
Les procédures, les variables et les constantes publiques définies dans des modules autres que des modules standard ou de classe, tels que des modules de feuilles ou des modules d'état, ne sont pas accessibles dans des projets référants, puisque ces modules sont privés dans leur projet de résidence.