Lancer des macros avec un fichier batch (en lot)

Comme tout le monde le sait, les macros VBA sont habituellement lancées à partir d'un fichier Excel. Si vous avez une procédure standard qui requiert l'exécution régulière de plusieurs macros situées dans plusieurs fichiers, vous devriez songer à utiliser un "fichier de lot" (batch file). Ce fichier vous permet d'utiliser toutes les avantages et caractéristiques du code VBA sans devoir ouvrir Excel.

Fichier batch – utilisation du VBScript

Pour créer un fichier de lancement d'une procédure, rien de plus simple. On va utiliser le langage VBScript mais pas de panique, aucune connaissance en plus de VBA ni aucun outil spécial n'est nécessaire.

Le fichier de script peut être crée dans n'importe quel éditeur texte (Notepad, PSPad, Notepad ++, et autres). Il suffit d'écrire votre code et sauvegarder le fichier avec le suffixe "VBS" – ce qui donne par exemple "MonCode.vbs".

Remarque pour les utilisateurs avancés: si, lors de l'exécution, un message d'erreur concernant "un caractère invalide à la position ligne:1, colonne:1" apparaît, vérifiez que votre fichier est bien encodé en ANSI et non, par exemple en UTF-8.

Le code à utiliser dans le fichier batch

Dans le batch le plus simple, les seules variables à fournis sont le(s) chemin(s) de(s) fichier(s) Excel ainsi que le(s) nom(s) de(s) macro(s) à lancer. Les noms de macros sont nécessaires au cas où vous voulez lancer une macro spécifique. Si votre code VBA se trouve dans l'événement Workbook_Open de votre fichier Excel, il sera exécuté d'office et vous ne devez pas le spécifier.

Dans l'exemple qui suit, on va ouvrir le classeur "C:\Test\MonFichierExcel.xlsm" et lancer la macro "MacroTest1" qui se trouve dans ce classeur.

Option Explicit
On Error Resume Next
ExempleMacroExcel

Sub ExempleMacroExcel() 

  Dim ApplicationExcel 
  Dim ClasseurExcel 

  Set ApplicationExcel = CreateObject("Excel.Application") 
  Set ClasseurExcel = ApplicationExcel.Workbooks.Open("C:\Test\MonFichierExcel.xlsm") 
  
  ApplicationExcel.Visible = True   'les actions seront visibles. Pour tout lancer en arrière-plan, remplacer True par False
  ApplicationExcel.Run "MacroTest1" 'va lancer la macro "MacroTest1"
  ApplicationExcel.Quit 

  Set ClasseurExcel = Nothing 
  Set ApplicationExcel = Nothing 

End Sub

Comme vous pouvez le constater, c'est la ligne – ApplicationExcel.Run "MacroTest1" –  qui lance la macro. Dans cet exemple, les opérations s'exécutent de manière visible (en avant-plan). Si vous voulez que l'exécution soit invisible, changez "ApplicationExcel.Visible = True" en "ApplicationExcel.Visible = False"

Pour une simple utilisation, vous pouvez juste prendre le code ci-dessus et remplacer le chemin vers le fichier et le nom de la macro à exécuter.

Pour des utilisations un peu plus sophistiquées (ouverture de plusieurs fichiers, lancement de plusieurs macros etc.) vous pouvez vous baser sur les explications qui suivent.

Exemples avancés de fichiers "batch"

Il n'est pas trop compliqué de modifier le code de base pour qu'il corresponde à vos besoins. Vous pouvez manipuler notamment les instructions suivantes:

  • ApplicationExcel.Workbooks.Open – il est possible d'ajouter plusieurs arguments optionnels comme ouverture lecture-seule, mot de passe,… Cette méthode se comporte exactement comme en VBA. Plus de détails sur la méthode Workbooks.Open.
  • ApplicationExcel.Quit – cette instruction ferme Excel une fois que la macro est exécutée. Pour garder Excel ouvert, supprimez cette instruction.

Voici donc l'exemple pour exécuter deux macros dans le même fichier:

Option Explicit
On Error Resume Next
ExempleMacroExcel

Sub ExempleMacroExcel() 

  Dim ApplicationExcel 
  Dim ClasseurExcel 

  Set ApplicationExcel = CreateObject("Excel.Application") 
  Set ClasseurExcel = ApplicationExcel.Workbooks.Open("C:\Test\MonFichierExcel.xlsm") 
  
  ApplicationExcel.Visible = True   'les actions seront visibles. Pour tout lancer en arrière-plan, remplacer True par False
  ApplicationExcel.Run "MacroTest1" 'va lancer la macro "MacroTest1"
  ApplicationExcel.Run "MacroTest2" 'va lancer la macro "MacroTest2"
  'ApplicationExcel.Quit 

  Set ClasseurExcel = Nothing 
  Set ApplicationExcel = Nothing 

End Sub

L'exemple suivant ouvre deux classeurs Excel différents et lance une macro spécifiée dans chacun.

Option Explicit
On Error Resume Next
ExempleMacroExcel2

Sub ExempleMacroExcel2() 

  Dim ApplicationExcel 
  Dim ClasseurExcel 

  Set ApplicationExcel = CreateObject("Excel.Application") 
  
  'ouverture du premier classeur + lancement d'une macrolancement 
  Set ClasseurExcel = ApplicationExcel.Workbooks.Open("C:\Test\MonFichierExcel.xlsm") 
  ApplicationExcel.Visible = True  
  ApplicationExcel.Run "MacroTest1"
  ClasseurExcel.Close 'fermeture du premier classeur
  
  'ouverture de deuxième classeur
  Set ClasseurExcel = ApplicationExcel.Workbooks.Open("C:\Test\MonFichierExcel_2.xlsm") 
  ApplicationExcel.Visible = True  
  ApplicationExcel.Run "MacroTest2"
  
  'fermeture de Excel
  ApplicationExcel.Quit 

  Set ClasseurExcel = Nothing 
  Set ApplicationExcel = Nothing 

End Sub

Des avantages intéressants de ce procédé (utilisation de fichier .vbs) par rapport à l'utilisation d'un fichier Excel qui contient une macro dans l'événement Workbook_Open:

  • si vous devez modifier le code de la procédure, vous ne devez pas modifier vos fichiers Excel
  • le fichier .vbs ne contient que le code – il est indépendant des données qui pourraient se trouver dans le Classeur Excel
  • avec l'instruction ApplicationExcel.Quit, vous pouvez fermer l'Excel sans que la procédure soit interrompue – il est possible de continuer par exemple par une ouverture de fichier(s) Word, tout cela dans le même fichier batch. Vous pouvez même ré-ouvrir Excel plus loin dans le code et continuer d'autres manipulations de fichiers Excel. Contrairement à cela, si vous exécutez le code à partir d'un classeur, une fois Excel fermé, vous ne pourrez plus continuer.
  • il est assez simple de lancer une procédure via la ligne de commande

Si vous avez des questions, n'hésitez pas à les poser dans les commentaires.

Pour aller plus loin en VBA

Et pour terminer, voici quelques articles qui pourraient vous intéresser et rendre votre travail plus efficace…

115 0

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée.

20 commentaires sur “Lancer des macros avec un fichier batch (en lot)”