Voila ma question : comment passer la valeur d’une variable d’une macro M1 vers une macro M2 lancée par M1 ?
Mes 2 macros fonctionnent, mais pas le passage d'une valeur de la macro appelante (M1) vers la macro appelée (M2).
Peu importe le type de variable, ca peut être un integer comme un boolean.
Option Explicit
Sub M1()
Dim Variable
Variable = 123
M2 Variable
Variable = True
M2 Variable
End Sub
Sub M2(ByVal Valeur)
MsgBox "Valeur passée de type " & TypeName(Valeur) & " valant " & Valeur, vbInformation, "M2"
End Sub
Sub m1()
Dim s As String
s = "test"
m2 s
End Sub
Sub m2(param As String)
MsgBox param
End Sub
Tu peux aussi définir des variables globales, à déclarer avant tout code :
Dim s As String
VB:
Dim s As String
Sub m1()
s = "test"
m2 s
End Sub
Sub m2(param As String)
MsgBox param
End Sub
ici s sera visible de toutes les procédures du module.
Si tu la déclares avec Public au lieu de Dim, elle sera visible de tous les modules.
Dans ces 2 façons la valeur est conservée entre 2 appels.
eric
Merci à Dranreb et Eriiic pour vos réponses, mais j'ai oublié l'essentiel dans ma question : les macros M1 et M2 sont dans 2 fichiers séparés, M1 lançant le fichier contenant M2....
Bonsoir.
Si le classeur est fermé au moment du Run il faut lui préciser son chemin pour qu'il puisse l'ouvrir.
Le pense que pour ne pas me tromper j'essayerais d'affecter la macro à un bouton de formulaire, puis de fermer le classeur contenant la macro à appeler, enfin de récupérer la propriété OnAction du bouton de formulaire alors qu'il est toujours fermé. (J'avais constaté il y a fort longtemps que le chemin disparaissait de la propriété OnAction une fois qu'il est ouvert)
Remarque, je pense que s'il a fallu une apostrophe au début, il en faut aussi une juste avant le point d'exclamation.