CathyAstuce

VBA

GEMCCAP CONSEIL INFORMATIQUE BUREAUTIQUE
Formation - Conception Sites Internet
Applications Informatiques Personnalisées
Communauté partenaire Microsoft

PORTÉE ET DURÉE DE VIE

  Portée  Durée de vie  

Remonter I. Portée

La portée représente la disponibilité d'une variable pour son utilisation, il existe 3 niveaux : niveau de procédure, niveau de module privé et niveau de module public. Sa portée est définie lors de la déclaration de la variable et selon son emplacement dans le code.

  • Niveau de procédure : vous déclarez la variable au sein d'une procédure, dans la 2ème ligne de code de celle-ci. Elle n'est alors visible que dans la procédure, si vous tentez de la lire dans une autre procédure, elle n'existera pas. Pour comprendre cela, écrivez dans un module (si la ligne OptionExplicit existe dans ce module, supprimez la) les 2 procédures suivantes :
    Sub Lecture_Variable()
       Dim Var1 As String

       Var1 = "Ceci est le contenu de Var1"
       MsgBox Var1
       MsgBox Var2
    End Sub

    Sub Attribut_Var2()
       Dim Var2 As String

       Var2 = "Ceci est le contenu de Var2"
    End Sub

    Puis dans la fenêtre Exécution, tapez Lecture_Variable puis appuyez sur Entrée. "Ceci est le contenu de Var1" va s'afficher dans une fenêtre message, cliquez sur Ok, le 2ème message sera vide, en effet pour la procédure Lecture_Variable, Var2  n'existe pas. Si vous aviez laissé la ligne OptionExplicit , VB vous aurait signalé l'erreur "Variable non définie".
  • Niveau de module privé : en déclarant une variable en haut d'un module (juste en dessous d'OptionExplicit ), en dehors d'une procédure ou d'une fonction, celle-ci devient disponible pour toutes les procédures et fonctions du module. Par défaut les variables déclarés avec Dim et les constantes avec Const ont une portée privée, mais vous pouvez le préciser en utilisant Private. Pour utiliser l'exemple précédent, écrivez tout en haut du module :
    Private Var2 As String
    Private Const CONST1 As String = "essai"

    ou 
    Dim Var2 As String
    Const CONST1 As String = "essai"

    Dans la procédure Lecture_Variable , écrivez la ligne suivante, entre MsgBox Var1 et MsgBox Var2 :
             Attribut_Var2
    Dans la fenêtre Exécution, placez votre point d'insertion dans  Lecture_Variable puis appuyez sur Entrée. Cette fois-ci, les 3 messages auront un contenu.
  • Niveau de module public : en déclarant la variable ou la constante comme ci-dessus, mais en précisant qu'elle est publique, elle sera alors visible depuis n'importe quel module du projet. Ajoutez tout simplement le mot clé Public devant la déclaration ainsi :
    Public Var2 As String
    Public Const CONST1 As String = "essai"

Remonter II. Durée de vie

C'est la période pendant laquelle une variable contient une valeur, celle-ci peut changer plusieurs fois pendant cette durée de vie.
Lorsque la variable est hors de portée (invisible) sa vie est finie car elle n'a plus de valeur.
Lorsque la variable est déclarée, elle est initialisée. Les variables numériques sont initialisées à 0 (zéro), les chaînes de longeur variable sont initialisées à une chaîne de longeur nulle (""), les chaînes fixes sont remplies avec le caractère ASCII 0 (chr(0)), les variants sont initialisés à Empty, les variables objets sont initialisées avec Nothing.
Si dans une procédure, une variable est déclarée avec Static au lieu de Dim, la variable est hors de portée lorsque le programme quitte la procédure, mais elle garde sa valeur (et n'est donc pas réinitialisée) tant que le code est exécuté. Vous pouvez alors appeler de nouveau la procédure (ou la fonction) et retrouver sa valeur.
Écrivez dans un module les 2 procédures suivantes :
Sub Message_Incremente()
    Affiche_Mess
    Affiche_Mess
    Affiche_Mess
End Sub

Sub Affiche_Mess()
    Static N As Byte

    N = N + 1
    MsgBox "Ceci est le message N° : " & N
End Sub

Puis dans la fenêtre Exécution, tapez Message_Incremente puis appuyez sur Entrée. Vous constatez que le numéro du message est incrémenté alors que la variable n'a qu'une portée de procédure.
AccueilDébut de la page