🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA DisplayAlerts dans Excel — supprimer les invites de confirmation des macros sans surveillance (et pourquoi il valide automatiquement les plus dangereuses)

|

VBA DisplayAlerts dans Excel — supprimer les invites de confirmation des macros sans surveillance (et pourquoi il valide automatiquement les plus dangereuses)

TL;DRApplication.DisplayAlerts = False dit à Excel de cesser d'afficher ses boîtes de dialogue de confirmation et d'avertissement pendant l'exécution de votre macro, si bien qu'une macro peut supprimer une feuille ou enregistrer par-dessus un fichier sans s'arrêter pour demander à un humain de cliquer sur OK. Le piège, c'est qu'il n'annule pas la question — il y répond avec la réponse par défaut d'Excel, et pour les invites destructrices, cette réponse est « vas-y ». Réactivez-le à l'instant même où la ligne risquée est terminée, et rétablissez-le dans un gestionnaire d'erreurs pour qu'un plantage ne puisse pas laisser les alertes désactivées pendant qu'une invite ultérieure reçoit une réponse automatique :

Sub DeleteSheetQuietly()
    Application.DisplayAlerts = False        ' Excel ne demandera pas "etes-vous sur ?"
    On Error GoTo CleanExit                   ' pour qu'une erreur ne laisse pas les alertes desactivees
    ThisWorkbook.Worksheets("Temp").Delete    ' aucune invite - Excel la supprime directement
CleanExit:
    Application.DisplayAlerts = True          ' reactiver les avertissements aussitot
End Sub

Avant une poignée d'opérations risquées — supprimer une feuille, enregistrer par-dessus un fichier existant, fermer avec des modifications non enregistrées — Excel s'arrête et affiche une boîte de dialogue pour s'assurer qu'un humain l'a bien voulu. C'est exactement le bon comportement pour une personne qui clique çà et là, et exactement le mauvais comportement pour une macro censée s'exécuter du début à la fin toute seule. DisplayAlerts = False supprime l'interruption. Ce guide repose sur une seule idée — DisplayAlerts ne fait pas taire l'avertissement, il y répond à votre place avec la réponse par défaut d'Excel, et pour les invites destructrices, cette réponse est oui. Une fois que vous le voyez ainsi, vous savez où il a sa place (une invite précise que vous maîtrisez et comprenez) et où il devient une arme chargée (couvrir toute une macro que vous n'avez pas auditée).

Ce que vous allez apprendre

  • Le modèle mental — Excel demande avant les opérations risquées ; cet interrupteur répond avec la valeur par défaut
  • Où la réponse par défaut est « oui, détruis-le » — les invites qui deviennent silencieuses et dangereuses
  • La règle qui compte le plus — réduisez la fenêtre à la seule ligne qui en a besoin, puis rétablissez
  • Pourquoi DisplayAlerts = False n'est pas de la gestion d'erreurs — une erreur d'exécution arrête quand même votre macro
  • En quoi il diffère de ScreenUpdating, Calculation et EnableEvents
  • Quand vous voulez vraiment la boîte de dialogue — et vous tournez plutôt vers MsgBox

Le modèle mental : Excel demande, cet interrupteur répond avec la valeur par défaut

Un petit ensemble d'opérations Excel sont traitées comme des moments « êtes-vous sûr ? ». Supprimez une feuille de calcul, et Excel vous prévient que c'est définitif. Faites un SaveAs vers un nom de fichier qui existe déjà, et il demande avant d'écraser. Fermez un classeur avec des modifications non enregistrées, et il propose d'enregistrer. Chacune de ces opérations affiche une boîte de dialogue modale et attend un clic.

Application.DisplayAlerts = False dit à Excel de sauter la boîte de dialogue et de continuer avec son bouton par défaut — celui qui est présélectionné à l'apparition de la boîte. Il ne cache pas la boîte en mettant en pause ; il choisit une réponse et poursuit. Cette distinction, c'est tout l'article. Vous ne coupez pas le son d'un rappel agaçant, vous approuvez à l'avance une décision — et la valeur par défaut d'Excel pour une suppression ou un écrasement, c'est de le faire.

Application.DisplayAlerts = False   ' Excel cesse de demander et utilise la reponse par defaut
' ... l'operation risquee s'execute sans boite de dialogue ...
Application.DisplayAlerts = True    ' les demandes reprennent

Où la réponse par défaut est « oui, détruis-le »

C'est la partie que les tutoriels « désactiver les messages d'avertissement » sautent. Voici ce que fait réellement la valeur par défaut supprimée :

Opération La boîte de dialogue que vous supprimez Ce que fait DisplayAlerts = False
Worksheets("X").Delete « Cette feuille sera définitivement supprimée » La supprime, sans confirmation
SaveAs sur un fichier existant « Un fichier existe déjà — le remplacer ? » Écrase l'ancien fichier
Close avec des modifications non enregistrées « Voulez-vous enregistrer ? » Utilise la valeur par défaut (peut abandonner les modifications)
Coller sur des cellules non vides « Écraser le contenu ? » Les écrase

Chacun de ces cas est une situation où l'avertissement existait pour vous protéger, et le désactiver ne rend pas l'opération plus sûre — il la rend silencieuse. Une personne aurait lu la boîte et aurait eu la possibilité de dire non. Votre macro dit oui à toutes, instantanément, sans aucune trace.

La règle qui compte le plus : réduire la fenêtre, puis rétablir

Puisque vous approuvez à l'avance les valeurs par défaut d'Excel, le danger croît avec la durée pendant laquelle les alertes restent désactivées et la quantité de code qui s'exécute pendant cette fenêtre. La discipline est l'inverse de celle des interrupteurs de performance, où l'on enveloppe toute la macro. Avec DisplayAlerts, n'enveloppez que la seule opération qui en a besoin :

' BON - la fenetre ne fait qu'une ligne de large
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Temp").Delete
Application.DisplayAlerts = True
' ... le reste de la macro s'execute, avertissements reactives ...
' RISQUE - les alertes sont desactivees pour toute la macro
Application.DisplayAlerts = False
' ... 200 lignes, dont chacune peut declencher une invite d'ecrasement ou de suppression ...
Application.DisplayAlerts = True

Dans la version risquée, si une ligne de ce bloc déclenche une invite « enregistrer par-dessus ce fichier ? » ou « effacer cette plage ? » que vous n'aviez pas anticipée, elle reçoit la réponse « oui » avant même que vous sachiez que c'est arrivé. Gardez la fenêtre étroite, et protégez-la tout de même avec On Error GoTo CleanExit, pour que si la ligne risquée elle-même échoue, vous ne laissiez pas les alertes désactivées pendant que l'invite suivante de la macro est validée automatiquement. Le rétablissement relève de la même discipline d'étiquette CleanExit que partage tout le cluster — voir VBA On Error.

Il se réinitialise tout seul — mais ne comptez pas là-dessus

Contrairement à Calculation et EnableEvents, qui restent désactivés jusqu'à ce que vous — ou un redémarrage — les réactiviez, DisplayAlerts se remet à True automatiquement quand votre macro se termine et que le contrôle revient à Excel. On dirait que cela rend la ligne de rétablissement facultative. Ce n'est pas le cas, pour deux raisons :

  1. Le mal est déjà fait. La réinitialisation automatique survient après la fin de la macro. Si une feuille a été supprimée en silence à la ligne 40, réinitialiser les alertes à la ligne 200 ne la ramène pas.
  2. C'est la fenêtre qui compte, pas la fin. Entre le « désactiver » et le « retour du contrôle à Excel », chaque invite reçoit une réponse automatique. Une erreur en plein milieu de la macro qui saute votre rétablissement laisse les alertes désactivées pour tout ce qui s'exécute ensuite dans cet appel. Un rétablissement explicite maintient la fenêtre exactement aussi large que vous le vouliez.

Considérez donc la réinitialisation automatique comme un filet de sécurité pour la session, pas comme une raison de sauter la ligne. Rétablissez-le vous-même, juste après l'opération qui exigeait de le désactiver.

Pourquoi ce n'est pas de la gestion d'erreurs

Une confusion fréquente : les gens mettent DisplayAlerts = False en s'attendant à ce que la macro passe en force malgré une erreur d'exécution — comme s'il supprimait toutes les interruptions. Ce n'est pas le cas. Il supprime les boîtes de dialogue de confirmation et d'avertissement d'Excel. Une vraie erreur d'exécution (une 1004 due à une plage incorrecte, une incompatibilité de type, un fichier introuvable) se déclenche quand même et arrête net votre macro.

Application.DisplayAlerts = False
Workbooks.Open "C:\does-not-exist.xlsx"   ' leve quand meme l'erreur d'execution 1004 - desactiver les alertes n'aide pas

Si vous voulez que votre macro survive aux erreurs, c'est le rôle de On Error, pas celui-ci. DisplayAlerts décide si Excel demande ; On Error décide ce qui se passe quand quelque chose casse. Deux problèmes différents, deux outils différents.

DisplayAlerts face aux interrupteurs qu'on lui associe souvent

Vous verrez DisplayAlerts = False en tête d'une macro à côté de ScreenUpdating et de Calculation, et il est tentant de les ranger tous sous « le passe-partout qu'on met pour accélérer les choses ». Ce ne sont pas des choses de même nature :

  • ScreenUpdating est cosmétique — au pire, une fenêtre d'apparence figée qu'un redémarrage corrige.
  • Calculation concerne la justesse des nombres — laissé désactivé, il affiche des valeurs périmées.
  • EnableEvents concerne la justesse des événements — laissé désactivé, les gestionnaires du classeur cessent de se déclencher.
  • DisplayAlerts concerne les décisions — il fait qu'Excel s'engage dans des actions destructrices sans demander.

Et c'est le seul qui, tout en se corrigeant généralement de lui-même, peut causer des dégâts irréversibles à l'intérieur de la fenêtre. Les autres échouent bruyamment (écran figé) ou en silence mais de façon récupérable (un recalcul corrige les nombres périmés). Une feuille supprimée alors que les alertes étaient désactivées est tout simplement perdue.

Comment ExcelMaster aide

DisplayAlerts tient en une ligne, mais bien l'utiliser suppose de réduire la fenêtre à la seule opération qui en a besoin, de le rétablir dans un gestionnaire d'erreurs, et de ne jamais le confondre avec de la gestion d'erreurs ni avec un interrupteur fourre-tout « rends ma macro silencieuse ». Cela fait beaucoup de jugement pour une propriété que les gens collent en tête de chaque macro.

ExcelMaster écrit la version prudente par défaut. Demandez-lui de « supprimer les feuilles temporaires sans les fenêtres de confirmation », et il désactive les alertes autour de ces seules suppressions, les rétablit dans un gestionnaire CleanExit, et laisse le reste de la macro avec ses avertissements intacts — vous obtenez ainsi l'exécution sans surveillance sans approuver en silence à l'avance chaque invite qu'Excel aurait levée.

Questions fréquentes

Que fait Application.DisplayAlerts = False en VBA ?

Cela dit à Excel de cesser d'afficher ses boîtes de dialogue de confirmation et d'avertissement pendant l'exécution de votre macro et de continuer plutôt avec la réponse par défaut de chaque boîte. Les opérations qui demanderaient normalement — supprimer une feuille, écraser un fichier sur SaveAs, fermer avec des modifications non enregistrées — se font sans invite. Il ne masque pas les erreurs d'exécution, seulement les alertes intégrées d'Excel.

Dois-je remettre DisplayAlerts à True ?

Excel le remet à True automatiquement à la fin de la macro, vous ne le laisserez donc pas désactivé d'une session à l'autre. Mais vous devriez tout de même le rétablir explicitement, juste après l'opération qui exigeait de le désactiver, car chaque invite levée pendant qu'il est désactivé reçoit une réponse automatique. Placez le rétablissement dans un gestionnaire d'erreurs (On Error GoTo CleanExit) pour qu'un plantage en plein milieu de la macro ne puisse pas laisser les alertes désactivées pour tout ce qui s'exécute ensuite.

DisplayAlerts = False empêche-t-il ma macro de planter sur les erreurs ?

Non. Il supprime les boîtes de dialogue de confirmation et d'avertissement d'Excel, pas les erreurs d'exécution de VBA. Un chemin de fichier incorrect, une plage invalide ou une incompatibilité de type déclenche quand même une erreur et arrête la macro. Pour gérer les erreurs, utilisez On Error — c'est un mécanisme distinct de DisplayAlerts.

Pourquoi ma feuille a-t-elle été supprimée ou mon fichier écrasé sans avertissement ?

Parce que DisplayAlerts = False était actif, donc Excel a utilisé la réponse par défaut pour l'invite « êtes-vous sûr ? » — et pour supprimer une feuille ou écraser un fichier, la valeur par défaut est de le faire. Réduisez la fenêtre pour que les alertes ne soient désactivées qu'autour de la seule opération que vous visez, et réactivez-les immédiatement après.

Quelle est la différence entre DisplayAlerts, ScreenUpdating et Calculation ?

Ils contrôlent des choses différentes. DisplayAlerts décide si Excel demande avant les opérations risquées. ScreenUpdating arrête les redessins de l'écran (cosmétique). Calculation arrête le recalcul des formules (le laisser désactivé affiche des nombres périmés). On les règle souvent ensemble, mais oublier chacun coûte quelque chose de très différent.

Testé dans

Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 18/08/2026.

Guides associés : VBA StatusBar · VBA DoEvents · VBA ScreenUpdating · VBA On Error · VBA MsgBox