Utiliser eds variables d'un classeur à l'autre
Bonjour, j'aimerais savoir comment je fais pour utiliser des variables en passant d'un classeur à l'autre. Je m'explique: dans un classeur, je part une macro qui ouvre un classeur déjà existant dans lequel il y a des macros. Je veux pouvoir utiliser les macros du nouveau classeur qui s'ouvre mais en ayant toujours accès aux variables de mon autre classeur précédent. Toutes mes variables sont public.
Dans mon premier classeur, j'exécute ces lignes:
WB_Principal.Activate est mon premier classeur
ouvrir 2e classeur
WB_Secondaire.Activate est mon deuxième classeur
Application.Run "'Classeur2.xlsm'!main"
je veux pouvoir utiliser la variable (variable1) de mon premier classeur dans mon deuxième classeur.
J'ai essayé : WB_Principal.mapage.macellule.value, qui est la valeur de variable1
mais j'ai comme message dans mon 2e classeur que WB_Principal n'est pas déclaré donc il ne fait pas de lien avec mes variables de mon premier classeur.
Est-ce que cela se fait et si oui, comment?
merci de votre aide!
Bonsoir Infodes,
Perso pour ce genre de besoin, je passe par un fichier ".ini" dans lequel j'inscris les clés et valeurs requises
Ensuite lors du lancement du 2ème classeur, je lis ces valeurs
A+
Bonjour,
Le ini peu-t être une bonne solution.
Sinon ce n'est pas instinctif...
qq solutions proposées sur le site disparu Excelabo :
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 :
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)
Ex:
'Classeur1
Sub test()
Dim varTest As Long
varTest = 7 ' initialiser la valeur avant .Names.Add
ThisWorkbook.Names.Add "test", RefersTo:=varTest, Visible:=False
End Sub
'Classeur2
Sub test()
Debug.Print Workbooks("Classeur1.xlsm").Names("test") ' retourne: "=7"
End Sub