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

Rechercher des sujets similaires à "passer variable macros"