Souci d'affectation de variables entre deux macros

Le
Ludovic Laé
Bonjour,

j'ai un petit souci d'affectation de variables entre deux macros se
trouvant dans deux fichiers distincts, ouverts tous les deux.

Voici la macro appelée dans le fichier Fichier1.xls :

sub Treat_File(ByRef ACol as long, Bref ARow as long)
ACol=1
ARow=1
end sub

Voici la macro appelante dans le fichier Fichier2.xls

sub Test()
dim Row as long
Dim Col as long

Row=0
Col=0

Application.run "Fichier1.xls!Treat_File", Row, Col

msgbox Str(Row)
msgbox Str(Col)

end sub

En mode debug, je vois parfaitement que la macro Treat_File est
correctement appelée. ARow et ACol valent bien 0 dans Treat_File. Leur
initialisation à 1 s'effectue et pourtant Row vaut toujours 0 dans la
msgbox et Col aussi.

Tout se passe comme si j'avais défini ARow et ACol comme "Byval".

Si quelqu'un a une idée Merci d'avance :)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-François Aubert
Le #18948961
Salut Ludovic,
apparemment on ne peux pas retourner la valeur des variable depuis le
fichier "appelé"

alors j'ai adapté tes macros avec une réponse faite par Michdenis en 2003
(cela nous rajeunit pas !)

Sub Test()
Dim Row As Long
Dim Col As Long
Dim leFich

leFich = ThisWorkbook.Name
Row = 0
Col = 0

Application.Run "Fichier1.xls!Treat_File", Row, Col, leFich

a = ThisWorkbook.Names("varARow")
a = ThisWorkbook.Names("varARow")
Row = Right(a, Len(a) - 1)
a = Workbooks("Fichier2.xls").Names("varACol")
Col = Right(a, Len(a) - 1)

ThisWorkbook.Names("varACol").Delete
ThisWorkbook.Names("varARow").Delete

MsgBox Str(Row)
MsgBox Str(Col)

End Sub

'****************************************

Sub Treat_File(ByRef ACol As Long, ByRef ARow As Long, leFich)
ACol = 1
ARow = 1

Workbooks(leFich).Names.Add "varACol", ACol
Workbooks(leFich).Names.Add "varARow", ARow

End Sub

'*******************************************


--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Ludovic Laé"
Bonjour,

j'ai un petit souci d'affectation de variables entre deux macros se
trouvant dans deux fichiers distincts, ouverts tous les deux.

Voici la macro appelée dans le fichier Fichier1.xls :

sub Treat_File(ByRef ACol as long, Bref ARow as long)
ACol=1
ARow=1
end sub

Voici la macro appelante dans le fichier Fichier2.xls

sub Test()
dim Row as long
Dim Col as long

Row=0
Col=0

Application.run "Fichier1.xls!Treat_File", Row, Col

msgbox Str(Row)
msgbox Str(Col)
end sub

En mode debug, je vois parfaitement que la macro Treat_File est
correctement appelée. ARow et ACol valent bien 0 dans Treat_File. Leur
initialisation à 1 s'effectue et pourtant... Row vaut toujours 0 dans la
msgbox et Col aussi.

Tout se passe comme si j'avais défini ARow et ACol comme "Byval".

Si quelqu'un a une idée... Merci d'avance :)


Ludovic Laé
Le #18960011
Merci pour la réponse. C'est très étonnant cette histoire car lorsque
j'appelle cette même macro Treat_File (dans un autre cadre) via OLE ; ça
fonctionne bien en byref.


Jean-François Aubert a écrit :
Salut Ludovic,
apparemment on ne peux pas retourner la valeur des variable depuis le
fichier "appelé"

alors j'ai adapté tes macros avec une réponse faite par Michdenis en 2003
(cela nous rajeunit pas !)

Sub Test()
Dim Row As Long
Dim Col As Long
Dim leFich

leFich = ThisWorkbook.Name
Row = 0
Col = 0

Application.Run "Fichier1.xls!Treat_File", Row, Col, leFich

a = ThisWorkbook.Names("varARow")
a = ThisWorkbook.Names("varARow")
Row = Right(a, Len(a) - 1)
a = Workbooks("Fichier2.xls").Names("varACol")
Col = Right(a, Len(a) - 1)

ThisWorkbook.Names("varACol").Delete
ThisWorkbook.Names("varARow").Delete

MsgBox Str(Row)
MsgBox Str(Col)

End Sub

'****************************************

Sub Treat_File(ByRef ACol As Long, ByRef ARow As Long, leFich)
ACol = 1
ARow = 1

Workbooks(leFich).Names.Add "varACol", ACol
Workbooks(leFich).Names.Add "varARow", ARow

End Sub

'*******************************************




Publicité
Poster une réponse
Anonyme