Comment faire pour utiliser des variables dans les procédures sous Excel dans Visual Basic pour Applications

Traductions disponibles Traductions disponibles
Numéro d'article: 843144 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

INTRODUCTION

Cet article décrit comment utiliser des variables dans les procédures sous Microsoft Excel dans Microsoft Visual Basic pour Applications.

Plus d'informations

Variables dans une procédure sub

Une fonctionnalité puissante de langages de programmation est la possibilité de stocker un élément dans une variable afin que le contenu de la variable peut être utilisé ou peut être modifié ultérieurement dans la procédure. Ce document aborde l'utilisation des variables dans Visual Basic suivante :
  • Manière dont les variables sont déclarées.
  • Les procédures et les projets que vous peuvent utiliser thevariable.
  • La durée de vie d'une variable.

Déclarez une variable dans une macro

Pour déclarer une variable dans une macro, le plus simple consiste à utiliser l'instruction Dim . La ligne suivante déclare deux variables, x et y, en tant qu'entiers :
Dim x As Integer, y As Integer
Avec x et y spécifiée sous forme d'entiers, vous demandez à Visual Basic de réserver suffisamment de mémoire pour une variable de type integer (2 octets pour x et y) et que les informations qui sont stockées dans x ou y sont un nombre entier compris entre -32768 et 32767.

Remarque : Si vous déclarez plusieurs variables à l'aide d'une seule instruction Dim , vous devez spécifier le type de données pour chaque variable.

Si vous ne spécifiez pas le type de données pour chaque variable, comme dans le code Visual Basic suivant, la variable y est configurée sous la forme d'une variable de type entier. La variable x est de type variant :
Dim x, y As Integer
Pour plus d'informations, consultez la section « Type de données Variant ».

Pour effectuer un test de variable, procédez comme suit :
  1. Enregistrez et fermez les classeurs ouverts et ouvrez un newworkbook.
  2. Démarrer Visual Basic Editor (appuyez sur ALT + F11).
  3. Dans le menu Insertion , cliquez surModule.
  4. Tapez le code suivant :
    Sub Variable_Test()
    Dim x As Integer, y As Integer
    x = 10
    y = 100
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End Sub
  5. Exécutez la macro Variable_Test . Le message suivant s'affiche :
    la valeur de x est de 10
    la valeur de y est de 100
  6. Cliquez sur OK.
  7. Dans la macro Variable_Test , modifiez la ligne suivante :
    x = 10
    

    pour :
    x = "error"
    
  8. Exécutez la macro Variable_Test .
Vous recevrez une erreur au moment de l'exécution parce que « erreur » n'est pas un entier et que vous essayez d'affecter cette valeur de chaîne à la variable entier x.

Résumé des types de données

Le tableau suivant répertorie les types de données de la variable courants :

Réduire ce tableauAgrandir ce tableau
Type de donnéesTaille de stockagePlage autorisée
Valeur booléenne 2 octets Valeur True ou False
Nombre entier 2 octets -32 768 et 32 767
Long 4 octets -2 147 483 648 à 2 147 483 647
Double 8 octets -1, 79769313486232E308 à - 4, 94065645841247E-324 pour les valeurs négatives ; 4, 94065645841247E-324 et 1, 79769313486232E308 pour les valeurs positives
Devise 8 octets -922,337,203,685,477.5808 à 922,337,203,685,477.5807
Date 8 octets 1 Janvier 100 et le 31 décembre 9999
Chaîne 10 octets + longueur de la chaîne

Type de données Variant

Si vous ne spécifiez pas un type de données lorsque vous déclarez une variable, ou vous ne déclarez pas de variable à tout, Visual Basic définit automatiquement le type de données variant pour cette variable. Les avantages des variables qui sont déclarées dans ce type de données sont les suivantes :
  • Peuvent contenir des variables chaîne, de date, d'heure, les valeurs booléennes, ornumeric.
  • Les variables peuvent convertir les valeurs qu'ils containautomatically.
L'inconvénient est que les variables de type variant nécessitent au moins 16 octets de mémoire. 16 octets de mémoire peut être importantes dans les grandes procédures ou dans les modules complexes.

Pour voir comment cela fonctionne dans la macro Variable_Test , procédez comme suit :
  1. Modifiez le code dans la macro Variable_Test pour :
    Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End Sub
    
  2. Exécutez la macro Variable_Test .
Vous ne recevrez pas une erreur, car vous pouvez assigner quoi que ce soit pour les variables de type variant x et y.

Remarque : Vous pouvez également laisser la ligne suivante et continuera de fonctionner la macro en tant que variables x et y sont considérés comme des types de données Variant :
Dim x, y

Portée d'une variable

Lorsque vous déclarez une variable, elle peut ou peut ne pas être vu par les autres macros dans le même module, dans d'autres modules ou dans d'autres projets. Cette disponibilité d'une variable dans les modules est appelée étendue. Les trois types d'étendue sont au niveau de la procédure, privé de niveau module et le niveau module public. La portée dépend de comment et où vous déclarez votre variable ou des variables.

Portée niveau-procédure

Une variable avec une portée de niveau procédure n'est pas visible à l'extérieur de la procédure dans laquelle elle est déclarée. Si vous définissez la valeur d'une variable qui a une portée de niveau procédure, contenu de cette variable n'apparaîtront pas à d'autres macros.

Pour vérifier qu'une variable avec une portée de niveau procédure n'est pas visible à l'extérieur de la procédure dans laquelle elle est déclarée, procédez comme suit :
  1. Insérez un nouveau module dans votre projet.
  2. Dans ce module, tapez les deux macros suivantes :
    Sub Macro1()
    Dim x As Integer
    x = 10
    MsgBox "x, as seen by Macro1 is " & x
    'the next line runs Macro2
    Macro2
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Exécutez Macro1.

    Le message suivant s'affiche :
    x, tel que perçu par Macro1 est de 10
  4. Cliquez sur OK.

    Vous recevez le message de réticules du centre :
    x, tel que perçu par Macro2is
  5. Cliquez sur OK.
Nom macro2 n'affiche pas une valeur pour la variable x, car la variable x est locale à Macro1.

Portée de niveau module privée et public

Vous pouvez définir des variables dans la section Déclarations d'un module (en haut d'un module, et surtout des procédures sub) et définir la portée de la variable à l'aide de l'instruction publique , l'instruction Dim ou l'instruction Private . Si vous placez l'instruction Public devant votre variable, la variable sera disponible pour toutes les macros dans tous les modules dans le projet. Si vous placez l'instruction Dim ou l'instruction Private devant votre variable, la variable est disponible uniquement pour les macros dans le module dans lequel elle est déclarée.

Pour voir la différence entre l'instruction Public et de l'instruction Dim , procédez comme suit :
  1. Enregistrez et fermez les classeurs ouverts, puis ouvrez un newworkbook.
  2. Démarrez l'éditeur Visual Basic.
  3. Insérez un module de votre projet.
  4. Dans ce module, tapez le code suivant :
    Public x As Integer
    Sub Macro_1a()
    x = 10
    MsgBox x
    Macro_1b
    End Sub
    Sub Macro_1b()
    x = x * 2
    MsgBox x
    Macro2
    End Sub
    
  5. Insérez un autre module dans votre projet.
  6. Dans ce module, tapez le code suivant :
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. Exécutez la macro Macro_1a dans le premier module.

    La variable x declaredas « Public x As Integer », tous les trois macros dans le projet disposent accéder à modifiez la valeur de x. La première boîte de message affiche une valeur de 10. Le deuxième messagebox affiche une valeur de 20 (car x est multipliée par 2 dans Macro_1b). Le troisième message affiche la valeur 60 (dans la mesure où la valeur x a été modifiée en 20 dans Macro_1b et ensuite qu'il a été multiplié par 3 dans Macro2).
  8. Modifier la ligne de déclaration dans le premier module à partir de :
    Public x As Integer

    pour :
    Dim x As Integer
  9. Exécutez la macro Macro_1a .

    Avec la variable x déclaré « Dim x AsInteger », seuls les macros dans le premier module d'accéder à la valeur de x. Sothe première boîte de message affiche une valeur de 10, la deuxième boîte de message affiche la valeur de 20, (car x est multipliée par 2 dans Macro_1b) et le troisième message affiche la valeur 0 (car le nom Macro2 ne voit pas la valeur de x et la valeur non initialisée de zerois utilisé par Macro 2).
  10. Modifier la ligne de déclaration dans le premier module à partir de :
    Dim x As Integer

    pour :
    Private x As Integer
  11. Exécutez la macro Macro_1a .
Les mêmes boîtes de message sont affichés à l'aide de la portée de l'instruction Private comme ils ont été à l'aide de l'instruction Dim . La variable x a la même portée, privé pour le module dans lequel elle est déclarée.

Remarque : Si vous souhaitez que l'étendue de votre variable limitée au module dans lequel elle est déclarée, utilisez l'instruction Private au lieu de l'instruction Dim . Ils sont tous deux obtenir le même effet, mais la portée est plus claire lorsque vous lisez le code si vous utilisez l'instruction Private .

Durée de vie d'une variable

La durée pendant laquelle une variable conserve sa valeur est connue en tant que sa durée de vie. La valeur d'une variable peut changer pendant sa durée de vie mais elle conserve une valeur. En outre, lorsqu'une variable perd sa portée, elle n'a plus une valeur.

Initialiser la valeur d'une variable

Lorsque vous exécutez une macro, toutes les variables sont initialisées à une valeur. Une variable numérique est initialisée à zéro, une chaîne de longueur variable est initialisée à une chaîne de longueur nulle (""), et une chaîne de longueur fixe est remplie avec le code ASCII 0. Les variables Variant sont initialisées à vide. Une variable Empty est représentée par un zéro dans un contexte numérique et une chaîne de longueur nulle ("") dans un contexte de chaîne.

Variables de niveau procédure

Si vous avez une variable qui est déclarée dans une macro à l'aide de l'instruction Dim , la variable conserve sa valeur tant que la macro s'exécute. Si cette macro appelle d'autres macros, la valeur de la variable est conservée (non disponible pour les autres macros que) tant que ces autres macros sont également en cours d'exécution.

Pour montrer comment variables de procédure fonctionne, procédez comme suit :
  1. Insérez un nouveau module dans votre projet.
  2. Dans ce module, tapez les deux macros suivantes :
    Sub Macro1()
    'set x as a procedure level variable
    Dim x As Integer
       MsgBox "the initialized value of x is " & x
    x = 10
    MsgBox "x is " & x
    'the next line runs Macro2
    Macro2
    MsgBox "x is still " & x
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Exécutez Macro1.

    Le message suivant s'affiche :
    la valeur initialisée de x est égal à 0
  4. Cliquez sur OK.

    Vous recevez le message de réticules du centre :
    x est de 10
  5. Cliquez sur OK.

    Vous recevez le message de réticules du centre :
    x, comme indiqué par le nom Macro2 est
  6. Cliquez sur OK.

    Nom macro2 n'affiche pas une valeur pour la variable x, car le variablex est local à Macro1. Le message suivant s'affiche :
    isstill x 10
  7. Cliquez sur OK.
  8. Exécutez Macro1.
Vous recevez les mêmes messages sont décrites dans les étapes 3 à 6, car dès que Macro1 arrêté en cours d'exécution à l'étape 6, la valeur de la variable x a été perdue. Par conséquent, lorsque vous exécutez de nouveau Macro1 à l'étape 7, le premier message affiche la valeur de x comme zéro (la valeur initialisée).

Mot clé static

Si une variable de niveau procédure est déclarée à l'aide du mot clé Static, la variable conserve sa valeur jusqu'à ce que votre projet soit réinitialisé. Par conséquent, si vous avez une variable statique, la prochaine fois que vous appelez la procédure, la variable statique est initialisée à sa dernière valeur.

Pour voir comment fonctionne le mot clé Static, procédez comme suit :
  1. Modifiez le code dans Macro1 à :
    Sub Macro1()
    'set x as a procedure level variable
    Static x As Integer
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
    End Sub
    
  2. Exécutez Macro1.

    Le message suivant s'affiche :
    la valeur initialisée de x est égal à 0
  3. Cliquez sur OK.

    Vous recevez le message de réticules du centre :
    x est de 10
  4. Cliquez sur OK.
  5. Exécutez Macro1.

    Le message suivant s'affiche :
    la valeur initialisée de x est de 10
  6. Cliquez sur OK.

    Vous recevez le message de réticules du centre :
    x est de 20
  7. Cliquez sur OK.
Les valeurs qui apparaissent dans les messages sont différents la deuxième fois car la variable x est déclarée comme une variable statique et la variable conserve sa valeur après l'exécution de Macro1 la première fois.

Remarque : Si vous avez une variable de niveau module, sa durée de vie est le même que s'il s'agissait d'une variable de niveau procédure statique.

Pour vérifier la durée de vie d'une variable de niveau module, procédez comme suit :
  1. Modifiez le code dans le module qui contient le nom Macro1 à ce qui suit :
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
    End Sub
    
  2. Exécutez Macro1.

    Le message suivant s'affiche :
    la valeur initialisée de x est égal à 0
  3. Cliquez sur OK.

    Vous recevez le message de réticules du centre :
    x est de 10
  4. Cliquez sur OK.
  5. Exécutez Macro1.

    Le message suivant s'affiche :
    la valeur initialisée de x est de 10
  6. Cliquez sur OK.

    Vous recevez le message de réticules du centre :
    x est de 20
  7. Cliquez sur OK.
Les valeurs qui apparaissent dans les messages sont différents la deuxième fois car la variable x est déclarée comme une variable statique et elle conserve sa valeur après l'exécution de Macro1 la première fois.

Réinitialiser un projet pour réinitialiser les variables

Si vous souhaitez réinitialiser la valeur d'une variable statique ou à une variable de niveau module, cliquez sur le bouton Réinitialiser la barre d'outils Standard , ou cliquez sur Réinitialiser dans le menu exécuter .

Si vous effectuez cette opération pour le projet Macro1 , puis réexécutez Macro1, la valeur de la variable x est initialisée à zéro et le premier message :
la valeur initialisée de x est égal à 0
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
843145 Description des procédures sous Excel dans Visual Basic pour Applications (tableaux)
retour en haut

Propriétés

Numéro d'article: 843144 - Dernière mise à jour: mardi 3 septembre 2013 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002
  • Microsoft Excel 2000 Standard
  • Microsoft Excel 97 Standard
Mots-clés : 
kbvba kbprogramming kbinfo kbmt KB843144 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d?une traduction incorrecte du contenu ou de son utilisation par les clients.
La version anglaise de cet article est la suivante: 843144
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com