XL 2010 Passer 1 variable d’une macro M1 vers une macro M2 lancée par M1

Wyrgle

XLDnaute Junior
Bonjour à tous/toutes,

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.

Auriez-vous un début de piste ?

Merci !!!
Wyrgle
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
VB:
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
 

eriiic

XLDnaute Barbatruc
Bonjour,

VB:
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
 

Wyrgle

XLDnaute Junior
Bonsoir.
Essayez Application.Run "NomClasseur.xlsm!M2", Paramètre

Merci Dranreb,
Voici un petit test qui aboutit à un message d'erreur :

Code:
Sub Test_Parent()

My_Data = 123456789
Workbooks.Open Filename:="P:\Chemin\Child.xlsm"

' classeur fermé :
'Application.Run "'Child.xlsm!Test_Child", My_Data

' classeur déjà ouvert :
Application.Run "Child.xlsm!Test_Child", My_Data

End Sub

Selon que mon classeur est ouvert ou pas (Parent lance Child), il semblerait que la syntaxe soit différente (" ' au lieu de ").
Ca me semble bizarre.

Meme en déclarant My_Data en Global avant la macro Parent, sa valeur n'apparait pas lors du lancement de Child ds un MsgBox.


Franchement je ne vois pas ou est l'erreur...
 

Dranreb

XLDnaute Barbatruc
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.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG