Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Appeler une variable présente dans une autre macro

4 réponses
Avatar
Tommy Stylee
Bonjour tout le monde et bon week-end à vous.

Je suis nouveau en vba et j'ai un soucis. Ne maîtrisant pas vraiment l'outil
je créé plusieurs petites macros que je regroupe toutes dans une macro
principale via l'instruction "call".

Le hic c'est que dans une macro1 je définis une variable Var1.
Et j'aimerais faire appelle à la valeur de cette variable dans d'autres
macros du même module (je ne passe pas par des fonctions ou des procédures).
Mais je ne sais pas comment faire. Car si j'inclue cette variable
directement dans une autre macro, ça bug. Je ne sais même pas s'il faut que
je redéclare cette variable dans mon autre macro.

Bien évidemment, la solution la plus simple serait de n'écrire qu'une seule
macro avec toutes mes variables dedans mais je préfèrerais éviter cette
solution.

Par avance merci.

4 réponses

Avatar
MichDenis
Il y a 2 façons de passer la valeur d'une variable :

A ) Tu déclares ta variable dans le haut d'un module Standard et
tu utilises le mot Public dans la ligne de déclaration :
Public MyVar As String ' Exemple ....
Attention, tu ne dois pas déclarer dans chacune de tes procédures
une variable du même nom que la variable Public ... car c'est la variable
locale (définit au niveau de la procédure) qui aurait la préséance sur la
variable Public.

B ) Tu peux passer une variable comme argument à une procédure :
Exemple :

Sub Test()
Bonjour "Denis"
End Sub

Sub Bonjour(Nom as string)
Msgbox Nom
End Sub




"Tommy Stylee" a écrit dans le message de news:

Bonjour tout le monde et bon week-end à vous.

Je suis nouveau en vba et j'ai un soucis. Ne maîtrisant pas vraiment l'outil
je créé plusieurs petites macros que je regroupe toutes dans une macro
principale via l'instruction "call".

Le hic c'est que dans une macro1 je définis une variable Var1.
Et j'aimerais faire appelle à la valeur de cette variable dans d'autres
macros du même module (je ne passe pas par des fonctions ou des procédures).
Mais je ne sais pas comment faire. Car si j'inclue cette variable
directement dans une autre macro, ça bug. Je ne sais même pas s'il faut que
je redéclare cette variable dans mon autre macro.

Bien évidemment, la solution la plus simple serait de n'écrire qu'une seule
macro avec toutes mes variables dedans mais je préfèrerais éviter cette
solution.

Par avance merci.
Avatar
Tommy Stylee
Merci MichDenis.
J'ai essayé la méthode A mais au lancement de la macro une fenêtre
d'avertissement apparaît stilant :
"Erreur de compilation:
Attribut incorrect dans une procédure Sub ou Function"

Je ne comprends pas pourquoi...


Il y a 2 façons de passer la valeur d'une variable :

A ) Tu déclares ta variable dans le haut d'un module Standard et
tu utilises le mot Public dans la ligne de déclaration :
Public MyVar As String ' Exemple ....
Attention, tu ne dois pas déclarer dans chacune de tes procédures
une variable du même nom que la variable Public ... car c'est la variable
locale (définit au niveau de la procédure) qui aurait la préséance sur la
variable Public.

B ) Tu peux passer une variable comme argument à une procédure :
Exemple :

Sub Test()
Bonjour "Denis"
End Sub

Sub Bonjour(Nom as string)
Msgbox Nom
End Sub




Avatar
Tommy Stylee
Autant pour moi, je n'avais pas déclaré la variable en haut du module mais
dans la macro....

Merci MichDenis. Ca marche très bien.

Bon week-end et merci de m'avoir répondu aussi rapidement.



Il y a 2 façons de passer la valeur d'une variable :

A ) Tu déclares ta variable dans le haut d'un module Standard et
tu utilises le mot Public dans la ligne de déclaration :
Public MyVar As String ' Exemple ....
Attention, tu ne dois pas déclarer dans chacune de tes procédures
une variable du même nom que la variable Public ... car c'est la variable
locale (définit au niveau de la procédure) qui aurait la préséance sur la
variable Public.

B ) Tu peux passer une variable comme argument à une procédure :
Exemple :

Sub Test()
Bonjour "Denis"
End Sub

Sub Bonjour(Nom as string)
Msgbox Nom
End Sub






Avatar
Bruno Nicoletti
Bonjour tout le monde et bon week-end à vous.

Je suis nouveau en vba et j'ai un soucis. Ne maîtrisant pas vraiment l'outil
je créé plusieurs petites macros que je regroupe toutes dans une macro
principale via l'instruction "call".

Le hic c'est que dans une macro1 je définis une variable Var1.
Et j'aimerais faire appelle à la valeur de cette variable dans d'autres
macros du même module (je ne passe pas par des fonctions ou des procédures).
Mais je ne sais pas comment faire. Car si j'inclue cette variable
directement dans une autre macro, ça bug. Je ne sais même pas s'il faut que
je redéclare cette variable dans mon autre macro.

Bien évidemment, la solution la plus simple serait de n'écrire qu'une seule
macro avec toutes mes variables dedans mais je préfèrerais éviter cette
solution.

Par avance merci.
Bjr

Les variables ont une portée (et une durée de vie) en fonction de
l'endroit ou elles sont déclarées
Si déclarées dans la macro (sub) elles ne sont visibles que dans cette
sub (macro).
Pour une utilisation de la variables par toutes les sub du module (un
module est associé à une feuille excel) il suffit de la déclarer au
niveau superieur du module dans la zone des declaration hors toutes sub.
Bien sur pour une utilisation par tous les modules il faut la declarer à
l'exterieur d'un module de feuille... soit dans un module global que
vous ajoutez en sus des module de feuille. Attention de ne pas ajouter
un module de classe.
Cela fait donc 3 niveau de portée...

1 dans la sub = niveau local
2 au niveau du module de feuille
3 au niveau du classeur (dans un module global )

Bon courage
Bruno