portée illimitée d'une variable?

  • Initiateur de la discussion Initiateur de la discussion Frédéric
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F

Frédéric

Guest
Bonjour à tous, accros du vba,
je voudrais, en tant qu'autodidacte d'excel vba, vous soumettre une petite question, mais tout dabord, je vous rappelle le contexte :
j'ai une variable qui se crée à l'ouverture d'un fichier, mais qui se décharge dès l'arret du code
l'utilisateur de ce fichier est amené à lancer une macro qui va devoir faire appel au contenu de cette variable.

Ma question est la suivante : comment la déclarer et où afin qu'elle ne soit pas perdue à l'arret du code pour etre réutilisée ensuite? (la portée illimitée existe t' elle?)

J'ai essayé les "Public", "Static", "Public constant" mais rien n'y fait.

"Public constant" ne fonctionne pas car ma variable " nomBO" contient une constante + une variable (nomBO = "cmdouv - " & Vusername)

nb : si aucune solution n'existe je me verrais dans l'obligation de la mettre dans une cellule de mon fichier, mais bon, c'est pas top...

Merci d'avance à tous pour vos éventuelles réponses.
Bonne journée.
Cdt
FL
 
Bonjour!

mais qu'en est-il pour une variable define dans un classeur et que l'on veut reprendre en executant une macro dans un autre classeur. Est-ce qu'une variable peut avoir une portee sur l'ensemble de l'application Excel?

Merci!

Olive
 
Bonjour

un extrait de l'aide

Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les applications, à moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille.

Cordialement, A+
 
Eh bien c'est cense etre comme cela, mais je n'y arrive toujours pas...

prenons un cas pratique: je dois mal me debrouiller (je suis novice en la matiere):

OBJECTIF: Je voudrais pouvoir utiliser une variable d'un classeur dans un autre. Explication: j'ai un classeur 1 qui fait appel a une macro d'un classeur 2 (qui est mon classeur de macros). Je n'arrive pas a utiliser dans le classeur 2 une variable definie dans le classeur 1 .

Imaginons la macro dans le classeur 1
-----------------------
sub macro1

mavar="bonjour" 'je definis ma variable
workbooks.open ("c:testmacro.xls") 'j'ouvre le classeur ou se trouve la macro que je veux lancer
run ("testmacro.xls!macro2") 'lance la macro

end sub
-----------------------
et dans le classeur 2, une fois ouvert
-----------------------
sub macro2

msg=msgbox(mavar)

end sub
-----------------------

Lorsque la macro2 se lance, mavar est revenue a une valeur "empty".


Alors j'ai essaye les choses suivantes:

-----------------------
Option Explicit
Public MaVar As String

Sub macro1()

MaVar = "bonjour" 'je definis ma variable
Workbooks.Open ("c:testmacro.xls") 'j'ouvre le classeur ou se trouve la macro que je veux lancer
Run ("testmacro.xls!macro2") 'lance la macro===> ON PASSE SUR LA MACRO2
End Sub
-----------------------
Sub macro2()

msg = MsgBox(MaVar) '==> IL N'A PAS GARDE LA VALEUR DE MAVAR

End Sub
-----------------------


J'ai egalement esaye ceci:
-----------------------
Option Explicit
Public MaVar As String

Sub macro1()

MaVar = "bonjour" 'je definis ma variable
Workbooks.Open ("c:testmacro.xls") 'j'ouvre le classeur ou se trouve la macro que je veux lancer
Run ("testmacro.xls!macro2(MaVar)") 'lance la macro==> MARCHE PAS: THE MACRO CANNOT BE FOUND

End Sub

-----------------------
Enfin, j'ai essaye les deux macros ci-dessus avec la macro2 suivante:

Sub macro2(MaVar As String)

msg = MsgBox(MaVar)

End Sub



Est-ce que vous pouvez m'aider?
Ca a l'air vraiment simple, mais je n'y arrive toujours pas

merci beaucoup!!!
 
Bonjour

J'ai testé et ce n'est effectivement pas si simple. Les variables publiques ne se transmettent pas mais on peut contourner.
l'exemple joint utilise une méthode basée sur des fonctions du classeur 1 appelées à l'ouverture et à la fermeture du classeur 2.
il suffit que les deux classeurs soient ouverts pour que la valeur de la variable se transmette de l'un à l'autre.

tu peux utiliser la même syntaxe pour lancer une macro d'un autre classeur avec en arguments les variables du classeur qui lance la macro. Cela serait encore plus simple.
Application.Run("autreclasseur.xls!Macroalancer", Ma_Variable1, Ma_Variable2, Ma_Variable3, Ma_Variable4, Ma_Variable5)

Cordialement, A+
 

Pièces jointes

Merci pour votre aide!!

En effet, il fallait specifier les arguments pour exporter la variable... Ca fonctionne maintenant...
Mais a present, j'ai un autre probleme pour ces macros liees: je n'arrive pas pas faire un exit sub correct...

Donc, nouveau sujet!

Frederic, est-ce que ca repond a tes attentes?

Merci a tous!
 
Bonjour à tous,

merci pour vos réponses, grace à elles, nous pouvons avancer dans nos démarches, nous les autodidactes du vba.

Merci pour ces infos sur les variables qui répondent à 95% à mes besoins (les 5% manquants?......, cela correspondrait à creer une variable "indestructible" qui garderait sa valeur meme quand le vba est stoppé, mais bon, j'ai cru comprendre que cela n'etait pas possible..., alors on fera avec)

encore merci

A bientot

excel-lement
frederic
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour