Voir aussi
Portée des variables utilisées dans un userform
J'ai défini des variables dans le code d'un userform mais je ne parviens pas à en récupérer la valeur dans un autre module. Pourquoi ?
Quand tu déclares une variable comme "Public" dans un module de classe (ce qu'est un formulaire, le ThisWorkbook, le module feuille de chaque feuille), ce que tu obtiens ce n'est pas une variable mais une propriété appartenant au module de classe. Si tu utilises cette propriété (ce que tu appelles ta variable) à l'extérieur du module Formulaire, tu dois appeler ta variable en utilisant devant le nom du module de classe où tu l'a déclarée... si tu utilises seulement le nom de la variable(Propriété), elle retourne "Rien"

à l'extérieur du module formulaire :
Userform1.MaVariable

Dans le formulaire lui-même, tu peux te contenter du nom de MaVariable

Si tu veux utiliser la même variable dans plusieurs procédures de ton formulaire :

A ) Tes variables doivent être définies dans le haut du module de ton formulaire

Public db_regime As Recordset
Public DB As Database
Public Requete As QueryDef

B ) Dans toutes tes procédures, tu ne dois pas déclarer une variable au niveau de la procédure portant le même nom que tes variables déclarées dans le haut ton formulaire car excel utilisera la variable déclarée au niveau de la procédure au lieu de la variable définie au niveau du module. Elle a préséance.

C ) Évidemment, la bibliothèque DAO 3.6 Objets Librairy doit être ajouté à ton programme.

D ) Si dans le même fichier, tu utilises DAO et ADO, lors de la déclaration de tes variables, utilise la référence à la bibliothèque devant ta variable pour t'assurer de ne pas confoncre Excel comme dans cet exemple :
Public Rst As dao.Recordset -> référence à la bibliothèque DAO
Public Rst As Ado.Recordset -> référence à la bibliothèque ADO
Denis Michon,
Ajouté ou modifié le 16/03/2008 (N°1987)
Des variables de portée application
Déclarer un variable public permet normalement de l'utiliser dans tous les modules et classeurs ouverts par l'application. Cependant, il semble parfois qu'excel les oublie en cours de route.
J'ai déjà rencontré ce problème avec des macros contenant beaucoup de UserForms, sous
Excel 97. Des variables publiques étaient vidées sans aucune raison en cours d'exécution.

Si tu ne trouves pas de solution, si tu as peu de variables publiques et si tu veux éviter
de les stocker dans un classeur masqué, tu peux toujours utiliser ce truc:

- Définir une variable "MaVariable" contenant la valeur 100 :

ExecuteExcel4Macro "SET.NAME(""MaVariable"",100)"

- Obtenir la valeur de la "MaVariable" :

MsgBox ExecuteExcel4Macro("MaVariable")

Les variables créées de cette manière seront indestructibles tant qu'Excel reste ouvert,
même si les macros sont réinitialisées et si tous les classeurs sont fermés. Le
désavantage c'est qu'elles ne sont pas typées et que l'éxécution sera plus lente.
Laurent Longre,
Ajouté ou modifié le 23/04/2005 (N°1613)
Déclarer en une fois 30 variables
J'ai besoin de 30 variables n1 à n30 que je dois déclarer comme integer. Dois-je taper 30 fois dim n1 as integer ?
Tu peu utiliser cette formulation :
Dim n%(1 To 30)
Michel Pierron,
Ajouté ou modifié le 24/10/2004 (N°1506)
Variables accessibles dans tous les modules
Comment déclarer mes variables pour qu'elles soient utilisables dans tous mes programmes VBA ?
Tu ne peux pas exécuter d'instructions en dehors d'une procédure.

Donc soit tu initialises tes variables dans la procédure Workbook_Open de ton
classeur (tout en les déclarant dans un module standard en tant que variables
Public):

Private Sub Workbook_Open()
C1 = RGB(0, 0, 0)
C2 = RGB(255, 255, 255)
C3 = RGB(255, 0, 0)
C4 = RGB(0, 255, 0)
End Sub

...soit tu utilises des constantes Public, avec des valeurs "en dur" :

Public Const C1 = 0 ' RGB(0, 0, 0)
Public Const C2 = 16777215 ' RGB(255, 255, 255)
Public Const C3 = 255 ' RGB(255, 0, 0)
Public Const C4 = 65280 ' RGB(0, 255, 0)

Personnellement, j'opterais pour la deuxième solution.
Laurent Longre,
Ajouté ou modifié le 16/05/2004 (N°1413)
Aide à la saisie des variables
Faut-il toujours saisir les variables en entier
Pour afficher facilement les variables, tu commences par saisir les premiers
caractères de ta variable et tu appuies simultanément sur Ctrl + "Espace"

Si les lettres que tu as saisies renvoient vers une seule variable alors son nom s'affiche,
sinon, une zone de sélection t'affichera toutes les
variables correspondants aux lettres saisies.
Frédéric Le Guen,
Ajouté ou modifié le 15/05/2004 (N°1393)
Stocker des variables en les cachant
Est-il possible de stocker des valeurs de type divers avec le classeur mais pas dans les feuilles ?
Stocke tes donnees dans une feuille, que tu caches. Comme ça l'utilisateur
ne peux la voir et tu y stockes ce que tu veux !!!

Tu rajoutes ça dans la feuille de config, ainsi les utilisateurs ne pourront
pas la rendre visible sans passer par l'éditeur VBA:

Private Sub Worksheet_Activate()
Sheets("Config").Visible = False
End Sub
Private Sub Worksheet_DeActivate()
Sheets("Config").Visible = False
End Sub

Ce code se lance à l'activation ou à la désactivation de
ta feuille. Donc même si l'utilisateur fait
FormatFeuilleAfficher
pour afficher les feuilles masquées, rien ne s'affichera, sauf si il passe par l'éditeur VBA....
Bob, (N°1122)
Passage de variable d'un classeur à un autre
Comment passer une variable, déclarée comme publique dans un module normal d'un classeur, à un autre classeur ?
Tu as plusieurs solutions :

A) Il te faut déclarer une variable publique dans ton classeur "Principal"
Ajouter une référence à ce classeur (dans l'éditeur VB Outils Références) dans
chacun des classeurs pouvant utiliser cette variable.
Mais il faut renommer le projet VBAProject du classeur 1, sinon il sera probablement
impossible à référencer car son nom "VBAProject" entrera en conflit avec
d'autres VBAProject apparaissant dans la liste, même si ceux-ci ne sont
pas cochés.

B ) Si ta variable est déclarée "Public" dans un des modules feuille du classeur, il
devient un
objet de ce module de Classe et tu peux y faire référence directement dans un autre
classeur "OUVERT" sans aucun intermédiaire.

Comme ceci :
'La variable s'appelle Denis
V = Workbooks("AutreClasseur").Worksheets("Feuil1").Denis

Cependant, cela signifie que chaque fois dans le classeur d'origine que tu voudras faire
référence
à la variable "Denis"
dans ton code, tu devras la faire précéder du nom de son module de classeur : Exemple :
a = Feuil1.Denis et non de cette façon
a = Worksheets("Feuil1").Denis

C ) Tu peux mettre la valeur de la variable soit dans une cellule du classeur d'origine
soit dans un "Nom" (du menu insertion / nom) et y faire référence directement.

Public Denis As Long

Sub OK()
Denis = 25
'Crée un nom "Den" qui prend la valeur de la variable Denis
ThisWorkbook.Names.Add "Den", Denis
End Sub

'Pour récupérer la valeur de cette variable dans un autre classeur :

Dim V As Variant
V = Workbooks("AutreClasseur").Names("den")
V = Right(V, Len(V) - 1)
Denis Michon, Pierre Fauconnier, Papou,
Ajouté ou modifié le 18/12/2004 (N°1121)
De l'intérêt de la déclaration des variables
Pourquoi le code ci dessous ne fonctionne-t-il pas avec une date en cellule R4 ? If Day(R4) =19 Then Range("Q24").Interior.ColorIndex = 4
Il faut mettre option explicit au début de CHAQUE module de code. Cet exemple
illustre très clairement le problème que tu rencontres :
dans ton code,
If Day(R4) = 19 Then...

R4 n'est pas une variable déclarée ou initialisée. Du coup,
VBA crée une nouvelle variable et lui affecte la valeur 0. En VBA bien sur,
Day(0) équivaut à 30, et donc tu ne pourras jamais trouver la valeur 19.

Si tu écris le code suivant :
If Day(Range("R4")) = 19 Then
tu auras le résultat que tu souhaites.
Mais pour éviter de perdre du temps, s'il te plait, ajoute option explicit en haut
de tes modules ou mieux, dans VBA va dans outils/options/Editeur et coche déclaration
de variable obligatoire.
(traduc Flo)
Chip Pearson, (N°1120)
Taper sans erreur les variables
J'aime bien les noms de variables longs et informatifs. Mais... C'est long à taper !
Pour afficher facilement les variables, tu commences par saisir les premiers
caractères de ta variable et tu appuies simultanément sur Ctrl + "Espace"

Si les lettres que tu as saisies renvoi vers une seule variable alors ta
variable s'affiche, sinon, une zone de sélection t'affichera toutes les
variables correspondants aux lettres saisies.
Frédéric Le Guen,
Ajouté ou modifié le 25/10/2003 (N°1089)