megaphone_article

Appeler une macro dans une autre – La fonction Call

31/08/2016

Appeler une macro depuis une autre macro peut être utile, cela permet de :

La fonction Call

La fonction call sert à appeler une macro dans une autre : depuis le code de votre macro vous appeler au moment opportun le nom de votre procédure.

Sub Macro_principale()

    Call Macro_annexe

End Sub

Sub Macro_annexe()

    ActiveSheet.Name = "Comptes"
    
End Sub

Par exemple, ici, la macro principale appelle la macro annexe qui renomme la feuille active « Comptes ».

 

Les pièges

Call Faire_mes_comptes.Macro_annexe

 

Fonction Call avec des paramètres

Vous pouvez appeler une fonction avec des paramètres déjà prédéfinis dans la définition de la macro. Pour faire appel à cette macro il faudra donc lui donner un paramètre dans la fonction Call. Le type du paramètre est à définir, il faut ensuite bien veiller à le respecter lorsque vous appelez la procédure correspondante.

Exemple de déclaration de variable en public :

Public montant_loyer As Integer

Sub Macro_principale()

   ActiveSheet.Range("A1") = "Loyer"
   montant_loyer = 1200
   Call Macro_annexe

End Sub

Sub Macro_annexe()

   ActiveSheet.Name = "Comptes"
   If ActiveSheet.Range("A1").Value = "Loyer" Then
      ActiveSheet.Range("B1") = montant_loyer
   End If

 End Sub

Exemple de fonction Call avec un paramètre :

Sub Macro_principale()

   ActiveSheet.Range("A1") = "Loyer"
   Call Macro_annexe(1200)

End Sub

Sub Macro_annexe(montant_loyer As Integer)

   ActiveSheet.Name = "Comptes"
   If ActiveSheet.Range("A1").Value = "Loyer" Then
      ActiveSheet.Range("B1") = montant_loyer
   End If

End Sub

Ces deux exemples font exactement la même chose : ils inscrivent en A1 et B1 respectivement le titre « Loyer » et son montant. Ils illustrent les deux techniques pour définir une variable à travers les macros et les modules. La méthode de Call avec paramètre(s) est souvent plus efficace et ne définit pas de variables publiques.

 

Appeler une macro située dans un autre classeur

Votre classeur est-il toujours ouvert lorsque vous faites appel à cette macro ?

Sub Macro_principale()

  ActiveSheet.Range("A1") = "Loyer"
  Application.Run "'Classeur_comptes.xlsm'!Faire_mes_comptes.macro_annexes"

End Sub
'C:\Users\fin31\Desktop\Classeur_comptes.xlsm'!Faire_mes_comptes.macro_annexes

Le plus simple pour trouver ce chemin est d’ouvrir le classeur en question et de faire une mini macro :

Sub chemin()
    Dim chemin As String
    
    chemin = ThisWorkbook.FullName
    ActiveSheet.Range("A1") = chemin

End Sub

Une fois le chemin récupéré (ici en cellule A1 du classeur en question) vous pouvez faire appel à votre macro même si le classeur est fermé comme ceci :

Sub Macro_principale()

    ActiveSheet.Range("A1") = "Loyer"
    Application.Run "'C:\Users\fin31\Desktop\Classeur_comptes.xlsm'!Faire_mes_comptes.macro_annexes"

End Sub

Voilà, vous connaissez maintenant tout sur l’appel d’une macro dans une autre macro !