Passer une variable à d'autres macros
Hello,
Je n'arrive pas à passer une variable d'une macro aux autres macros.
Voici ma syntaxe :
Option Explicit
Dim Fichier As Workbook
Sub macro
Dim Fichier as workbook
Set Fichier = Workbooks.Open("C:\wb.xlsm")
[...]
Call macro2
end sub
Sub macro2(ByRef Fichier As Workbook)
With Fichier.sheets("mafeuille")
[...]
end with
End sub
J'ai lu des trucs sur ByRef et ByVal, mais je peine pour ce qui est des appels de macros.
Bonjour Kit,
Je te propose ce 1er code VBA :
Option Explicit
Sub macro()
Dim Fichier As Workbook
Set Fichier = Workbooks.Open("C:\wb.xlsm")
'[...]
macro2 Fichier
End Sub
Sub macro2(Fichier As Workbook)
With Fichier.Sheets("mafeuille")
'[...]
End With
End Sub
Remarque bien qu'il n'y a pas de variable globale Fichier ; il y a une variable locale Fichier dans macro(), qui est envoyée à macro2() lors de l'appel de la seconde sub.
Je te propose maintenant ce 2ème code VBA :
Option Explicit
Dim Fichier As Workbook
Sub macro()
Set Fichier = Workbooks.Open("C:\wb.xlsm")
'[...]
macro2
End Sub
Sub macro2()
With Fichier.Sheets("mafeuille")
'[...]
End With
End Sub
Cette fois, il y a une variable globale Fichier ; donc elle est connue des 2 subs
➯ c'est inutile que macro() envoie cette variable à macro2() !
⚠ Si tu déclares en plus une variable Fichier dans une sub, elle sera « prioritaire » car elle « masquera » la variable globale ; c'est donc la variable Fichier qui est locale à la sub qui sera référencée, et pas la variable Fichier globale !
Pour plus d'infos, regarde l'aide VBA sur la « portée des variables ».
dhany