Vous souhaiterez peut-être exécuter votre macro / extrait VBA lorsqu’un classeur spécifique est sélectionné, Une feuille du classeur est sélectionnée, la cellule change de valeur, lorsqu’un double clic se produit, lorsqu’une feuille est ajoutée, etc. Dans tous ces cas, nous utilisons Gestionnaire d’événements de classeur. Le gestionnaire d’événements nous aide à exécuter du code VBA chaque fois qu’un certain événement se produit.

Dans cet article, nous découvrirons brièvement chaque gestionnaire d’événements de classeur.

Qu’est-ce qu’un gestionnaire d’événements de classeur? Un gestionnaire d’événements de classeur est une sous-routine locale à un classeur.

Ce code fonctionne uniquement sur les composants d’un classeur. C’est le classeur lui-même, ses feuilles et ses plages.

Où écrire le code du gestionnaire d’événements du classeur?

Les événements du classeur sont écrits dans l’objet classeur uniquement. Si vous écrivez un événement de classeur dans un module normal, il n’y aura pas d’erreur mais ils ne fonctionneront tout simplement pas.

Pour écrire dans l’objet classeur. Double-cliquez dessus ou faites un clic droit et cliquez sur le code d’affichage. La zone d’écriture du code s’affiche.

Comment écrire du code pour un événement spécifique dans le classeur?

Maintenant, lorsque vous êtes en mode d’édition, dans le menu déroulant du coin supérieur gauche, vous verrez général. Cliquez sur la liste déroulante et sélectionnez le classeur. Dans le menu déroulant en haut à droite, tous les événements s’afficheront. Choisissez celui dont vous avez besoin et un code squelette pour cet événement sera écrit pour vous.

Chaque événement a un nom de procédure fixe. Ce sont les noms de sous-programmes réservés qui commencent par workbook_. Vous ne pouvez pas les utiliser pour d’autres sous-programmes (vous pouvez, mais ce seront des sous-programmes normaux).

Important: Chaque sous-programme de cette liste s’exécutera sur l’événement spécifié.

_Un type de procédure événementielle de classeur ne peut être écrit qu’une seule fois sur un classeur. Si vous écrivez deux mêmes procédures de gestion d’événements dans un classeur, cela entraînera une erreur et aucune d’entre elles ne sera exécutée.

Bien sûr, l’erreur sera des sous-programmes ambigus._

Apprenons brièvement chacun des événements.

  1. L’événement Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) Cet événement se déclenche lorsque nous apportons une modification aux feuilles de calcul contenant (mise en forme exclue). Si vous voulez faire quelque chose si une modification est apportée dans une feuille, le code sera:

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

'do something

Msgbox "done something"

End Sub

Le « Sh » est toujours la feuille active. La «cible» est toujours la cellule active.

Un autre exemple: vous voudrez peut-être mettre la date et l’heure dans Cel, prl B1 si A1 change. Dans ce cas, nous utilisons l’événement workbook_sheetchange. Le code ressemblerait à ceci:

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

If Target.Address = "$A$1" Then

Range("B1").Value2 = Format(Now(), "hh:mm:ss")

End If

End Sub

Cela ciblera uniquement la cellule A1 sur chaque feuille puisque nous n’avons pas spécifié l’objet « sh ».

  1. L’événement Workbook_Activate () Cet événement est déclenché lorsque le code d’événement contenant le classeur s’active. Le code squelettique de cet événement est:

Private Sub Workbook_Activate()

End Sub

Un exemple simple montre le nom du classeur lorsqu’il est sélectionné.

Private Sub Workbook_Activate()

MsgBox "You are on workbook " & Activeworkbook.Name

End Sub

Dès que vous arriverez sur le classeur qui contient ce code, l’événement s’exécutera et s’affichera un message indiquant que « Vous êtes sur le nom du classeur » (sheet2 est dans mon cas).

  1. L’événement Workbook_Open () Celui-ci de la question la plus posée sur la façon d’exécuter une macro dès que le classeur s’ouvre. Voilà la réponse. Cet événement de classeur est exécuté dès que le classeur est ouvert. Contrairement à Workbook_Activate (), ce code ne s’exécute qu’une seule fois, pas à chaque fois qu’il est activé.

Private Sub Workbook_Open()

'your code

'

End Sub

L’exemple d’événement Workbook_Open ci-dessous affichera simplement un message de bienvenue lorsque vous ouvrez le code contenant le classeur.

Private Sub Workbook_Open()

MsgBox "Welcome to the Master File"

End Sub
  1. L’événement Workbook_Deactivate () Cet événement se déclenche lorsque vous quittez le code contenant le classeur. En d’autres termes, si vous voulez faire quelque chose, comme masquer des feuilles ou quoi que ce soit lorsque vous changez de classeur, utilisez cet événement VBA. La syntaxe est:

Private Sub Workbook_Deactivate()

'your code

'

End Sub

L’exemple d’événement Workbook_Deativate ci-dessous affichera simplement un message indiquant que vous avez quitté la feuille principale, lorsque vous quitterez cette feuille.

Private Sub Workbook_Deactivate()

MsgBox "You Left The Master Sheet"

End Sub
  1. L’événement Workbook_BeforeClose () Cet événement se déclenche lorsque vous confirmez la suppression de l’événement VBA contenant la feuille. La syntaxe est simple:

Private Sub Workbook_BeforeClose(Cancel as Boolean)

End Sub

L’annulation peut être définie sur true si vous souhaitez conserver le classeur ouvert.

Le code ci-dessous vous demandera si vous souhaitez enregistrer le contenu du classeur sur le point de fermer.

Private Sub Workbook_BeforeClose(Cancel as Boolean)

ans = MsgBox("Do you want to save the content of this workbook?", vbYesNo)

If ans = True Then

thisworkbook.save

End If

End Sub
  1. L’événement Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Cet événement se déclenche avant l’enregistrement du classeur. La syntaxe est simple:

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

End Sub

SaveAsUI est défini sur True s’il y a une modification dans le classeur (pas dans VBA).

L’annulation peut être définie sur true si vous souhaitez conserver le classeur non enregistré.

Le code ci-dessous vous demandera si vous souhaitez enregistrer le contenu du classeur sur le point d’enregistrer.

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

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. L’événement Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Cet événement se déclenche avant l’enregistrement du classeur. La syntaxe est simple:

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

End Sub

SaveAsUI est défini sur True s’il y a une modification dans le classeur (pas dans VBA).

L’annulation peut être définie sur true si vous souhaitez conserver le classeur non enregistré.

Le code ci-dessous vous demandera si vous souhaitez enregistrer le contenu du classeur sur le point d’enregistrer.

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

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. L’événement Workbook_NewSheet (ByVal Sh As Object) Cet événement se déclenche lorsque vous ajoutez une nouvelle feuille au classeur. La syntaxe est simple:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub

Le Sh est l’objet de la feuille. Le type est en fait un objet principal de sorte que si nous ajoutons une feuille de graphique, une feuille de macro ou une feuille de dialogue, l’événement fonctionne toujours.

Le code ci-dessous ajoutera et affichera le nom de la feuille qui vient d’être ajoutée.

Private Sub Workbook_NewSheet(ByVal Sh As Object)

MsgBox "You added a new sheet. " & Sh.Name

End Sub

Il existe de nombreux autres événements de l’objet classeur. Nous ne pouvons pas tous les discuter ici. Si vous voulez en savoir plus sur un événement spécifique, demandez dans la section commentaires ci-dessous. J’espère avoir été en mesure d’expliquer les bases des événements du classeur dans cet article. Faites-moi savoir si cela vous a aidé dans la section commentaires ci-dessous.

Articles liés:

`lien: / tips-using-worksheet-change-event-to-run-macro-when-any-change-is-made [Utilisation d’un événement de changement de feuille de travail pour exécuter une macro quand un changement est effectué] Donc, pour exécuter votre macro chaque fois que la feuille est mise à jour, nous utilisons les événements de feuille de travail de VBA.

lien: / events-in-vba-run-macro-if-any-change-made-on-sheet-range [Exécuter une macro si un changement est effectué sur la feuille dans la plage spécifiée] | Pour exécuter votre code de macro lorsque la valeur d’une plage spécifiée change, utilisez ce code VBA. Il détecte tout changement effectué dans la plage spécifiée et déclenche l’événement.

lien: / events-in-vba-simple-vba-code-to-highlight-current-row-and-column-using [code VBA le plus simple pour mettre en évidence la ligne et la colonne actuelles en utilisant] | Utilisez ce petit extrait de code VBA pour mettre en évidence la ligne et la colonne actuelles de la feuille.

Articles populaires:

lien: / clavier-formule-raccourcis-50-excel-raccourcis-pour-augmenter-votre-productivité [50 raccourcis Excel pour augmenter votre productivité] | Accélérez votre tâche. Ces 50 raccourcis rendront votre travail encore plus rapide sur Excel.

lien: / formules-et-fonctions-introduction-de-vlookup-function [La fonction RECHERCHEV dans Excel] | C’est l’une des fonctions les plus utilisées et les plus populaires d’Excel qui est utilisée pour rechercher des valeurs à partir de différentes plages et feuilles. lien: / tips-countif-in-microsoft-excel [COUNTIF dans Excel 2016] | Comptez les valeurs avec des conditions en utilisant cette fonction étonnante. Vous n’avez pas besoin de filtrer vos données pour compter une valeur spécifique.

La fonction Countif est indispensable pour préparer votre tableau de bord.

lien: / excel-formule-et-fonction-excel-sumif-function [Comment utiliser la fonction SUMIF dans Excel] | C’est une autre fonction essentielle du tableau de bord. Cela vous aide à résumer les valeurs sur des conditions spécifiques.