Cours VBA : les événements Workbook

Les événements

Jusque-là, nous avons lancé nos macros en cliquant sur un bouton.

Il est également possible de les exécuter automatiquement lors d'un événement particulier du classeur, tel que l'ouverture du classeur, sa fermeture, son enregistrement, etc.


Workbook_Open (à l'ouverture)

Pour exécuter des instructions à l'ouverture du classeur (après l'activation des macros par l'utilisateur), rendez-vous dans ThisWorkbook et sélectionnez Workbook :

workbook evenements classeur

L'événement Workbook_Open est ajouté par défaut, il agit à l'ouverture du classeur :

Private Sub Workbook_Open()

End Sub

Par exemple, en ajoutant l'instruction suivante, une boîte de dialogue sera affichée à l'ouverture du classeur :

Private Sub Workbook_Open()

    MsgBox "Message de bienvenue"

End Sub

Workbook_BeforeClose (avant fermeture)

Pour exécuter des instructions juste avant la fermeture du classeur, choisissez BeforeClose :

close evenements classeur
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

La fermeture du classeur peut être annulée en attribuant la valeur True à la variable Cancel.

Voici un exemple où l'utilisateur doit confirmer la fermeture du classeur :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    'Si l'utilisateur répond Non, la variable Cancel vaudra True (ce qui annulera la fermeture)
    If MsgBox("Etes-vous certain de vouloir fermer ce classeur ?", 36, "Confirmation") = vbNo Then
        Cancel = True
    End If

End Sub

Workbook_BeforeSave (avant enregistrement)

Cet événement se déclenche juste avant l'enregistrement :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

L'enregistrement peut être annulé en attribuant la valeur True à la variable Cancel.

Workbook_AfterSave (après enregistrement)

Cet événement se déclenche juste après l'enregistrement :

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

End Sub

Workbook_BeforePrint (avant impression)

Cet événement se déclenche juste avant l'impression :

Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub

L'impression peut être annulée en attribuant la valeur True à la variable Cancel.

Workbook_SheetActivate (à l'activation d'une feuille)

Cet événement se déclenche à chaque changement de feuille :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

Par exemple, affichage du nom de la feuille dans une boîte de dialogue :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    MsgBox "Nom de la feuille : " & Sh.Name

End Sub

Workbook_SheetBeforeDoubleClick (avant double-clic)

Cet événement se déclenche juste avant un double-clic sur une cellule :

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub

Par exemple, coloration d'une cellule double-cliquée en fonction de la feuille :

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

    If Sh.Name = "Feuil1" Then
        Target.Interior.Color = RGB(255, 108, 0) 'Couleur orange
    Else
        Target.Interior.Color = RGB(136, 255, 0) 'Couleur verte
    End If

End Sub

Le double-clic peut être annulé en attribuant la valeur True à la variable Cancel.

Workbook_SheetBeforeRightClick (avant clic droit)

Cet événement se déclenche juste avant un clic droit sur une cellule :

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub

Workbook_SheetChange (à chaque modification de cellule)

Cet événement se déclenche à chaque modification du contenu d'une cellule :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub

Workbook_SheetSelectionChange (à chaque changement de sélection)

Cet événement se déclenche à chaque changement de sélection sur une feuille de calcul :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

End Sub

Par exemple, coloration de la sélection si A1 est vide :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    If Range("A1") = "" Then
        Target.Interior.Color = RGB(124, 255, 255) 'Bleu clair
    End If

End Sub

Workbook_NewSheet (à l'insertion d'une feuille)

Cet événement se déclenche à chaque insertion d'une nouvelle feuille :

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub