Comment Exécuter une Macro dans Excel
Bien que l’exécution d’une macro dans Excel ne soit pas difficile, il existe de nombreuses façons de les exécuter. Certaines sont destinées à faciliter l’utilisation des macros, tandis que d’autres peuvent changer complètement la façon dont un utilisateur interagit avec votre classeur. Dans cet article, nous aborderons certains moyens évidents d’exécuter des macros, comme la liste des macros et les contrôles de boutons, et d’autres plus obscurs, comme l’éditeur VB et les événements.
Premièrement : S’Assurer que les Macros sont Activées
Les fonctions de sécurité d’Excel désactivent les macros par défaut. Lorsqu’un classeur prenant en charge les macros est ouvert, les utilisateurs sont généralement invités à activer les macros.
Si vous n’êtes pas en mesure d’exécuter des macros, essayez de suivre ces instructions :
- Sauvegarder le classeur
- Fermez le classeur, puis ouvrez-le à nouveau
- Lorsque le classeur se charge, vous verrez apparaître un message d’Avertissement de Sécurité (illustré ci-dessous). Cliquez sur Activer le Contenu.
Exécuter une Macro à Partir de la Liste des Macros
Une liste de macros est accessible à partir de l’onglet Affichage. Pour afficher cette liste :
- Sélectionnez l’onglet Affichage
- Cliquez sur le bouton Macros pour faire apparaître la liste des macros
- Sélectionnez la macro que vous souhaitez exécuter dans la liste, puis cliquez sur le bouton Exécuter
Vous pouvez également afficher la liste des macros à tout moment en appuyant sur ALT+F8.
Exécuter une Macro à l’Aide d’un Raccourci Clavier
Vous pouvez attribuer un raccourci clavier à une macro que vous utilisez souvent, sous la forme CTRL+<lettre> ou CTRL+MAJ+<lettre>. Pour ce faire, procédez comme suit
- Affichez la liste des macros (Affichage > Macros, ou ALT+F8)
- Sélectionnez la macro à laquelle vous voulez appliquer un raccourci
- Cliquez sur Options… pour afficher la sous-boîte de dialogue Options de macro
- Dans la zone de texte sous Touche de raccourci, tapez une seule lettre, puis cliquez sur OK. Si vous maintenez la touche MAJ enfoncée pendant que vous tapez la lettre, l’étiquette à côté de la case indiquera MAJ comme faisant partie du raccourci
REMARQUE: il est fortement recommandé d’utiliser MAJ lorsque vous créez une touche de raccourci! Excel utilise les raccourcis de type CTRL+ pour lui-même, par exemple CTRL+C pour Copier, ou CTRL+S pour Enregistrer. Si vous créez un raccourci de macro en utilisant ces raccourcis ou d’autres raccourcis Excel, vous écraserez le raccourci Excel jusqu’à ce que vous réassigniez le raccourci de macro.
Exécution d’une Macro à Partir de l’Éditeur VB
Les macros peuvent également être exécutées à partir de l’éditeur VB. L’éditeur VB vous permet de revoir le code d’une macro et d’y apporter les modifications souhaitées avant de l’exécuter.
Pour exécuter une macro dans l’éditeur VB :
- Ouvrez l’éditeur VB (onglet Développeur > Visual Basic, ou ALT+F11)
- Dans la fenêtre Projet, double-cliquez sur le module contenant la macro que vous souhaitez tester
- Dans la fenêtre de code du module, placez le curseur n’importe où dans le code de la macro entre « Sub » et « End Sub »
- Cliquez sur le bouton Exécuter de la barre d’outils ou appuyez sur le raccourci clavier F5
Exécution d’une Macro à l’Aide d’un Bouton ou d’une Forme
Il est souvent utile de disposer d’un contrôle sur la feuille de calcul sur lequel l’utilisateur peut cliquer pour exécuter une macro, comme un bouton ou une forme. Pour les utilisateurs finaux, c’est beaucoup plus rapide que d’ouvrir des listes de macros ou de chercher dans le code des macros dans l’éditeur VB.
Vous trouverez des informations sur la création d’un bouton ou d’une forme cliquable ici : Ajouter un bouton et assigner une macro dans Excel.
Exécution Automatique d’une Macro à l’Aide d’Événements en VBA
Il est possible de faire en sorte qu’une macro s’exécute lorsque quelque chose se produit dans Excel – par exemple, lorsqu’un classeur est ouvert ou lorsque la valeur d’une cellule est modifiée. Ces actions sont appelés Événements, et vous pouvez écrire du code VBA lié à ceux-ci afin d’appeler des macros ou d’effectuer d’autres opérations.
Pour écrire du code lié à un événement, vous devez utiliser l’éditeur VB. Par exemple, pour afficher les événements du classeur :
- Ouvrez l’éditeur VB (ALT+F11)
- Double-cliquez sur l’objet ThisWorkbook dans la fenêtre de projet de l’éditeur VB
- Choisissez « Workbook » dans la liste déroulante en haut à gauche de la fenêtre de code
- Cliquez sur la liste déroulante à droite pour voir une liste d’événements
Voici un petit échantillon, mais utile, d’événements Excel à partir desquels vous pourriez exécuter des macros.
Workbook_Open()
L’événement Workbook_Open() se déclenche lorsqu’un classeur est ouvert. Si vous obtenez l’avertissement de sécurité après avoir ouvert un classeur, cet événement se déclenche après avoir cliqué sur « Activer le contenu ».
Private Sub Workbook_Open()
MsgBox "Classeur ouvert!"
End Sub
Workbook_BeforeClose(Cancel as Boolean)
Workbook_BeforeClose() se déclenche lorsque l’utilisateur tente de fermer le classeur. Cela se produit avant que toute vérification ne soit faite pour voir si le classeur doit être sauvegardé.
Le paramètre Cancel peut être défini à VRAI (« True« ) pour empêcher la fermeture du classeur.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("Êtes-vous sûr?", vbYesNo + vbQuestion, "Close") = vbNo Then
Cancel = True
End If
End Sub
Worksheet_Change(ByVal Cible As Range)
Worksheet_Change() se déclenche lorsque la valeur d’une cellule est modifiée, que ce soit par une macro, par une opération de copier/coller ou par un lien externe. En revanche, elle ne se déclenche pas lorsqu’une valeur est recalculée au moyen d’une formule.
Le paramètre Target représente les cellules dont la valeur a été modifiée.
Si vous modifiez la valeur d’autres cellules dans cet événement, celui-ci se déclenchera à nouveau. Cela peut éventuellement provoquer une boucle infinie. Si vous devez modifier les valeurs des cellules sans déclencher cet événement, pensez à définir d’abord Application.EnableEvents à FAUX (« False »), puis à le remettre à VRAI (« True ») à la fin de la procédure de l’événement.
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Cellules modifiées : " & Target.Address
Application.EnableEvents = False
Range("A2").Value = Range("A2").Value + Target.Cells.Count
Application.EnableEvents = True
End Sub
Worksheet_SelectionChange(ByVal Target As Range)
Cet événement se déclenche chaque fois que différentes cellules sont sélectionnées à l’aide du réticule de ciblage. Le paramètre Target représente les nouvelles cellules qui ont été sélectionnées.
Vous pouvez également déclencher cet événement avec du code, par exemple « Range(« A1″).Select ». Comme avec Worksheet_Change(), vous devez faire attention à ne pas sélectionner d’autres cellules dans cet événement, car vous pouvez provoquer une boucle infinie. Utilisez Application.EnableEvents.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox "Curseur en position de départ"
End If
End Sub
Arrêter une Macro en Cours d’Exécution
Une macro en cours d’exécution peut être interrompue en appuyant sur ESC ou CTRL+PAUSE. Par défaut, une macro interrompue affiche la boîte de dialogue suivante :
Si vous cliquez sur Fin, la macro s’arrête, tandis que Continuer la reprend. En cliquant sur Débogage, la macro s’ouvre dans l’éditeur VB et la ligne de code sur laquelle l’exécution a été interrompue est mise en évidence. (Dans l’éditeur VB, vous pouvez arrêter ou reprendre la macro à l’aide des boutons Exécuter ou Fin de la barre d’outils)
Application.EnableCancelKey
Vous pouvez désactiver la possibilité d’arrêter une macro avec ESC ou CTRL+BREAK en définissant la propriété Application.EnableCancelKey. Cette propriété a trois valeurs possibles :
- xlInterrupt – il s’agit de la valeur par défaut, qui fait qu’Excel affiche le dialogue ci-dessus
- xlDisabled – supprime la possibilité d’arrêter une macro en cours d’exécution
- xlErrorHandler – lorsqu’une tentative d’interruption est effectuée, une erreur est soulevée et peut être traitée dans le code
Chaque fois que l’exécution du code s’arrête, Excel réinitialise toujours la valeur de Application.EnableCancelKey à xlInterrupt.
Une bonne raison d’utiliser cette propriété est la sécurité. Par exemple, si vous aviez une macro qui déprotégeait temporairement certaines parties de votre classeur, un utilisateur pourrait potentiellement arrêter la macro juste après la déprotection et accéder à du contenu que vous ne vouliez pas qu’il ait accès. En définissant Application.EnableCancelKey, vous pouvez désactiver complètement leur capacité à le faire, ou gérer leur interruption de manière élégante avec un gestionnaire d’erreur qui protège à nouveau le classeur.
Sub UpdateBaseData(ByVal NewData As Range, ByVal Target As Range)
Application.EnableCancelKey = xlDisabled
Target.Worksheet.Unprotect "MonMotdePasse"
NewData.Copy Target
Target.Worksheet.Protect "MonMotdePasse"
Application.EnableCancelKey = xlInterrupt
End Sub
Forcer la Fermeture d’Excel avec le Gestionnaire des Tâches de Windows
Si l’exécution d’une macro s’est suspendue de façon inattendue, ou si Excel est devenu trop occupé pour reconnaître une tentative d’interruption, vous devrez peut-être forcer la fermeture d’Excel à l’aide du Gestionnaire des Tâches de Windows. (REMARQUE : en utilisant cette technique, vous risquez de perdre tout travail non sauvegardé, et de devoir compter sur une version de récupération automatique de votre classeur)
- Ouvrez directement le gestionnaire des tâches en utilisant CTRL+MAJ+ESC
- Sélectionnez l’onglet « Processus »
- Développez l’élément « Microsoft Excel » pour afficher tous les classeurs
- Sélectionnez le classeur que vous souhaitez fermer, puis cliquez sur Fin de tâche dans le coin inférieur droit