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

Souci d'affectation de variables entre deux macros

2 réponses
Avatar
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 :)

2 réponses

Avatar
Jean-François Aubert
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é" a écrit dans le message de news:

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


Avatar
Ludovic Laé
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

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