Lancer des macros avec un fichier “batch” 7


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" apparait, 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.

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:

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

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.

 

16 0

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

7 commentaires sur “Lancer des macros avec un fichier “batch”

  • Daniel

    Bonjour,
    Avec "ApplicationExcel.Quit", l'alerte pour sauvegarder les modifications apparait.
    Comment sauvegarder automatiquement les modifications ?

    Merci d'avance

      • excel-malin.com Auteur du billet

        En effet, si vous voulez modifier le fichier Excel même qui lance la macro, il faut le sauvegarder:
        1) soit comme vous l'avez trouvé – dans le fichier "batch"
        2) soit dans le fichier Excel même (soit à la fin de votre macro, soit avec l'event "Workbook_BeforeClose")

  • seb

    Bonjour,
    bon tuto,
    en avez-vous d'autres traitant du même sujet?
    avez-vous des sites de références parlant de ce langage?
    Merci et bonne journée
    Seb

    • excel-malin.com Auteur du billet

      Merci,
      pour le moment, il n'y a pas encore d'autres tutoriels concernant les batch et le VBS.

      Vous pouvez trouver d'autres infos (livres, sites,…) sur VBA dans la section Ressources. Si vous parlez de VBS, vous pouvez regarder ici

      Bonne journée à vous aussi.
      Martin

  • Boris

    Bonjour et merci pour le tuto

    Question subsidiaire : la macro lancée peut-elle résider ailleurs que dans le classeur ouvert ? idéalement dans le fichier .vbs ou un fichier .vba adjacent.

    Explication : je souhaite lancer une même macro sur plusieurs classeurs différents. Pour le moment la macro est copiée dans chaque classeur mais j'aimerais plus maintenable…

    • excel-malin.com Auteur du billet

      Bonjour Boris,
      désolé pour la réponse tardive, j'étais en congé…

      Oui, c'est possible. Vous pouvez stocker un macro dans un autre fichier .vbs. Après, il faut l'appeler via Shell plutôt que via ApplicationExcel.Run

      Il suffit d'ajouter ceci:
      Shell "wscript C:\MonDossier\MonScript.vbs", vbNormalFocus

      Deux remarques:
      – attention, cela ne marche pas si le chemin du fichier contient des espaces (" ")
      – si vous utilisez ce code dans un fichier Excel, il faut activer la référence "Microsoft Script Control"

      J'espère que cela répond à votre question.
      Bien à vous, Martin

      PS: j'ai trouvé encore cette approche: intéressant!
      http://stackoverflow.com/a/14235931/2646902