Comment lancer une macro Excel VBA à l’ouverture de n’importe quel classeur ?

C’est une question souvent posée sur Internet et les réponses sont pratiquement toujours la façon d’exécuter une macro à l’ouverture d’un classeur spécifique, en créant fort correctement un module Workbook_Open dans le conteneur ThisWorkBook de ce classeur.

Mais comment utiliser Excel VBA pour avoir une macro lancée quel que soit le classeur ouvert, sans faire de modification dans chaque classeur ?

Il faut écrire une classe qui permet de traiter les événements de la classe Application, puis affecter l’objet Application réel à cette nouvelle classe.

Par exemple, dans un module de classe appelé MonApp, tapez le code suivant :

Option Explicit
Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
MsgBox (« Ouverture du classeur  » & Wb.Name)
End Sub

Puis dans le conteneur ThisWorkBook du fichier de macro personnel (PERSO.XLS), il faut instancier la classe MonApp et écrire un module Workbook_Open. Le code ressemble à ceci :

Option Explicit
Dim MonExcel As New MonApp

Private Sub Workbook_Open()
Set MonExcel.App = Application
End Sub

Et le tour est joué.

Si ces opérations vous semblent de la magie noire, c’est qu’il vous manque quelques notions de programmation VBA que vous pouvez découvrir lors d’une formation à Excel..

2 commentaires sur “Comment lancer une macro Excel VBA à l’ouverture de n’importe quel classeur ?”

  1. Bonsoir
    J’ai très bien appliqué ce que vous avez dit et ça marche très bien.
    Sauf que mon problème est plutôt ailleurs. En fait ma macro PERSO est plutôt un classeur enregistré avec l’extension xlam et est intégré à excel comme macro complémentaire (complément Excel), Dans ce cas votre solution n’a pas fonctionnée. Y’a t’il un moyen d’intégrer votre solution dans un complément Excel? Si oui votre aide me serais d’une très grande utilité. Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *