Utilisation d’EnableEvents et de DisableEvents, Excel VBA

Utilisation d’EnableEvents et de DisableEvents, Excel VBA

Voici un exemple détaillé d’utilisation de EnableEvents et DisableEvents en VBA, accompagné d’une explication détaillée.
EnableEvents / DisableEvents en VBA
La propriété EnableEvents en VBA est utilisée pour contrôler si Excel doit ou non déclencher des événements tels que Workbook_Open, Worksheet_Change, Workbook_SheetChange, etc. Par défaut, les événements sont activés, mais dans certaines situations, vous pouvez vouloir les désactiver temporairement, en particulier lorsque vous effectuez des modifications massives afin d’éviter que des événements soient déclenchés plusieurs fois.
Le concept principal est :

  • EnableEvents = True : Les événements sont déclenchés normalement.
  • EnableEvents = False : Les événements sont désactivés, ce qui signifie que les modifications que vous effectuez ne déclencheront pas les événements associés.

Cas d’utilisation courant :
Lors de la modification de cellules ou de l’exécution de plusieurs actions dans une feuille de calcul (comme des mises à jour massives ou des calculs), vous voudrez peut-être désactiver les événements afin d’éviter qu’Excel ne réagisse à chaque action (ce qui peut entraîner des problèmes de performance ou des effets secondaires indésirables). Après avoir terminé les modifications, vous pourrez réactiver les événements.
Exemple de code :

Sub ExempleEnableDisableEvents()
    ' Étape 1 : Désactiver les événements
    Application.EnableEvents = False
    ' Étape 2 : Effectuer des actions sans déclencher d'événements
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ' Mise à jour en masse : Modifier les valeurs dans une plage sans déclencher l'événement Worksheet_Change
    ws.Range("A1:A10").Value = "Nouvelle valeur"
    ' Vous pouvez ajouter d'autres actions qui manipulent les données ou effectuent des opérations sur la feuille
    ws.Range("B1").Value = "Mis à jour"
    ws.Range("C1").Formula = "=SOMME(A1:A10)"
    ' D'autres actions peuvent être ajoutées ici...
    ' Étape 3 : Réactiver les événements
    Application.EnableEvents = True
    ' Optionnel : Informer l'utilisateur que les modifications sont terminées
    MsgBox "Les modifications en masse sont terminées, et les événements sont réactivés.", vbInformation
End Sub

Explication détaillée étape par étape :
Étape 1 : Désactiver les événements
Application.EnableEvents = False
Cette ligne de code désactive le système de gestion des événements d’Excel. Cela signifie que les événements, tels que Worksheet_Change, Workbook_SheetChange, etc., ne seront pas déclenchés pendant l’exécution du code. Cela est particulièrement utile lors de la réalisation de modifications en masse ou d’opérations qui ne nécessitent pas la gestion d’événements à chaque modification.
Étape 2 : Effectuer des actions sans déclencher d’événements

Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("A1:A10").Value = "Nouvelle valeur"
ws.Range("B1").Value = "Mis à jour"
ws.Range("C1").Formula = "=SOMME(A1:A10)"

Ici, vous modifiez la feuille de calcul (ws) sans déclencher aucun événement, car Application.EnableEvents est défini sur False. Dans une situation classique, la modification de valeurs de cellules ou de formules pourrait déclencher des événements comme Worksheet_Change. Cependant, avec les événements désactivés, ces changements se produisent sans déclencher ces événements.

  • Vous pouvez ainsi mettre à jour plusieurs plages de cellules, ajouter des formules, ou effectuer d’autres modifications sans craindre que cela ne déclenche des événements à chaque action.
  • Le processus de désactivation des événements est particulièrement utile dans des cas comme les importations de données en masse, les calculs ou les mises à jour en lot de grands ensembles de données.

Étape 3 : Réactiver les événements
Application.EnableEvents = True
Après avoir terminé toutes les actions pour lesquelles vous ne vouliez pas que des événements soient déclenchés, vous devez réactiver les événements en définissant Application.EnableEvents sur True. Cela permet de rétablir la gestion des événements dans Excel et les futurs changements de la feuille déclencheront les événements appropriés.
Étape 4 : Informer l’utilisateur
MsgBox "Les modifications en masse sont terminées, et les événements sont réactivés.", vbInformation
Cette étape est facultative, mais elle permet d’afficher une boîte de message pour informer l’utilisateur que les modifications ont été effectuées et que les événements sont désormais réactivés. Cela peut être utile lors de l’automatisation des processus, car cela garde l’utilisateur informé des progrès.
Pourquoi utiliser EnableEvents et DisableEvents ?
Il existe plusieurs raisons pour lesquelles vous pourriez vouloir contrôler le déclenchement des événements :
1. Performance : Lorsqu’on effectue des modifications massives sur une feuille de calcul (par exemple, la mise à jour de milliers de lignes), il peut être très coûteux en termes de performance de laisser Excel déclencher un événement (Worksheet_Change) après chaque mise à jour. En désactivant les événements, vous évitez cet alourdissement du processus.
2. Prévenir la récursion : Parfois, un événement (comme Worksheet_Change) peut se déclencher lui-même ou d’autres événements de manière involontaire. Par exemple, si votre gestionnaire d’événements modifie la valeur d’une cellule, cela pourrait à nouveau déclencher le même événement. Désactiver les événements temporairement permet d’éviter ce genre de comportement.
3. Modifications en masse : Lors de modifications complexes ou massives de données, la désactivation des événements permet de réaliser ces changements sans interruption, ce qui conduit à une exécution plus rapide.
4. Gestion des erreurs : Désactiver les événements vous permet de mieux contrôler le processus de modification des données et d’éviter des boucles infinies ou des erreurs dues à des événements déclenchés par erreur.
Considérations et bonnes pratiques

    • Réactiver toujours les événements : Il est important de toujours réactiver les événements (c’est-à-dire, Application.EnableEvents = True) même si une erreur survient. Sinon, votre session Excel restera dans un état où les événements sont désactivés en permanence.
    • Gestion des erreurs : Utilisez des instructions On Error pour vous assurer que EnableEvents soit réactivé même si une erreur se produit pendant l’exécution du code. Par exemple :
Sub ExempleSécuriséEnableDisable()
    On Error GoTo GestionErreur
    ' Désactiver les événements
    Application.EnableEvents = False
    ' Votre code ici...
ExitProcedure:
    ' Réactiver les événements avant de quitter
    Application.EnableEvents = True
    Exit Sub
GestionErreur:
    ' Gérer les erreurs ici
    MsgBox "Une erreur est survenue : " & Err.Description, vbCritical
    Resume ExitProcedure
End Sub

Cela garantit que les événements seront toujours réactivés, même si quelque chose ne se passe pas comme prévu pendant l’exécution du code.
Conclusion :
Utiliser EnableEvents et DisableEvents en VBA est un moyen puissant de contrôler le déclenchement des événements lors de l’exécution de tâches qui autrement entraîneraient une gestion d’événements inefficace ou indésirable. Désactiver les événements temporairement permet d’effectuer des mises à jour massives ou des calculs de manière plus rapide et plus contrôlée, tandis que leur réactivation permet de continuer la gestion des événements de manière classique.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x