TL;DR —
Application.ScreenUpdating = Falsedit à Excel de cesser de repeindre l'écran pendant l'exécution de votre macro et de le redessiner une seule fois à la fin. Cela supprime le scintillement et apporte un gain de vitesse modéré — mais seulement quand votre code écrit dans des cellules, sélectionne ou fait défiler. Cela ne change rien à une macro lente à cause d'un recalcul ou d'entrées-sorties de fichier. Remettez-le àTruequand vous avez fini, et ne comptez jamais sur une réinitialisation automatique — un plantage peut laisser l'écran figé et grisé :
Sub PaintRows()
Application.ScreenUpdating = False ' cesser de repeindre - plus de scintillement
On Error GoTo CleanExit ' pour qu'un plantage ne bloque pas l'ecran
Dim i As Long
For i = 2 To 5000
Cells(i, 1).Interior.Color = IIf(i Mod 2 = 0, RGB(240, 240, 240), vbWhite)
Next i
CleanExit:
Application.ScreenUpdating = True ' toujours retablir, meme apres une erreur
End Sub
Chaque fois que votre macro modifie une cellule, Excel veut redessiner l'écran pour l'afficher. Faites
cela 5 000 fois et vous payez 5 000 redessins que l'utilisateur n'avait aucun besoin de voir.
ScreenUpdating = False les regroupe en un seul redessin à la fin. Ce guide repose sur une seule
idée — ScreenUpdating est un interrupteur de redessin, pas un interrupteur de vitesse magique. Il
supprime le travail de redessin, et uniquement le travail de redessin. Comprenez cela et vous saurez
exactement quand il aide, quand c'est une ligne gâchée, et pourquoi le laisser désactivé après un
plantage est le vrai danger.
Ce que vous allez apprendre
- Le modèle mental — Excel repeint après chaque changement ; cet interrupteur regroupe les redessins en un seul
- Où il aide vraiment — écrire, sélectionner, faire défiler — et où il ne fait rien
- La règle qui compte le plus — un plantage peut laisser l'écran bloqué, alors rétablissez-le dans un gestionnaire d'erreurs
- Le piège du scintillement dû au rétablissement imbriqué — pourquoi l'écran scintille encore après l'avoir désactivé
- Comment il s'associe à Calculation et EnableEvents
ScreenUpdatingface àDisplayStatusBaret aux autres interrupteurs cosmétiques
Le modèle mental : Excel repeint après chaque changement
Par défaut, Excel garde l'écran synchronisé avec le classeur en temps réel. Votre macro définit A1,
Excel repeint ; elle définit A2, Excel repeint de nouveau. Chaque redessin est peu coûteux isolément,
mais dans une boucle qui touche des milliers de cellules, ce sont les redessins qui dominent — et vous
voyez l'écran s'agiter à mesure que la macro gribouille le long de la feuille.
Application.ScreenUpdating = False suspend cela. Excel continue de mettre à jour le classeur en
mémoire mais cesse de le dessiner. Quand vous remettez la propriété à True (ou que la macro se
termine), Excel repeint une seule fois, et le résultat final apparaît d'un seul coup net. L'utilisateur
voit l'avant et l'après, jamais le scintillement entre les deux.
Application.ScreenUpdating = False ' Excel cesse de dessiner (il continue de travailler)
' ... des milliers d'ecritures de cellules se font de maniere invisible ...
Application.ScreenUpdating = True ' un seul redessin montre l'etat final
Où il aide vraiment — et où il ne fait rien
C'est la partie que la plupart des tutoriels sautent, et c'est tout l'intérêt. ScreenUpdating
supprime le travail de redessin. Si votre macro est lente pour une autre raison, la désactiver ne
change rien.
Il aide beaucoup quand votre code :
- écrit dans de nombreuses cellules en boucle,
- utilise
.Select/.Activate(chaque sélection est un redessin), - fait défiler, ou modifie ce qui est visible à l'écran.
Il ne fait rien quand votre macro est lente à cause de :
- un recalcul lourd après chaque écriture — c'est le rôle de Calculation,
- la lecture ou l'écriture de fichiers, l'interrogation d'une base de données ou l'appel d'un service web,
- un travail purement en mémoire sur des tableaux et des variables (il n'y a rien à redessiner).
Donc si vous avez ajouté ScreenUpdating = False et que la macro reste lente, vous avez saisi le
mauvais interrupteur. Le plus grand gain de vitesse dans la vraie vie n'est en général pas celui-ci du
tout — c'est remplacer une boucle cellule par cellule par une seule lecture de tableau et une seule
écriture de tableau, ce qui supprime les redessins et le surcoût par cellule d'un même geste.
ScreenUpdating est la touche finale par-dessus cela, pas le correctif à lui seul.
La règle qui compte le plus : un plantage peut laisser l'écran bloqué
Voici la défaillance que tout le monde rencontre. Vous mettez ScreenUpdating = False, votre macro
plante à mi-parcours, et l'exécution s'arrête — avant la ligne qui le réactive. Excel se retrouve
alors avec la mise à jour de l'écran désactivée. La fenêtre paraît figée, à moitié dessinée, ou tout
simplement grise ; des images fantômes de boîtes de dialogue s'attardent. Les utilisateurs forcent la
fermeture d'Excel en croyant à un plantage, alors qu'il ne s'est rien passé d'autre qu'un interrupteur
laissé désactivé.
Vous lirez qu'Excel remet ScreenUpdating à True automatiquement à la fin d'une macro. Parfois,
c'est le cas — mais on ne peut pas concevoir un programme autour de « parfois ». Quand la macro
plante au lieu de se terminer proprement, ou quand vous avancez pas à pas en mode arrêt, l'écran
reste bloqué. La recommandation de Microsoft elle-même est de le remettre à True vous-même. La règle
est donc simple : rétablissez-le dans un gestionnaire d'erreurs, pour qu'il s'exécute que la macro
réussisse ou explose.
Sub SafeRepaint()
Application.ScreenUpdating = False
On Error GoTo CleanExit
' ... du travail susceptible de lever une erreur ...
Cells(1, 1).Value = 1 / 0 ' boum
CleanExit:
Application.ScreenUpdating = True ' ceci s'execute meme apres l'erreur ci-dessus
If Err.Number <> 0 Then MsgBox Err.Description
End Sub
Le motif On Error GoTo CleanExit / étiquette relève de la même discipline que partage tout le
cluster — voir VBA On Error. Sans lui, une seule erreur non gérée transforme
une optimisation de vitesse en ticket de support.
Le piège du scintillement dû au rétablissement imbriqué
Un bug plus subtil : vous avez désactivé ScreenUpdating, mais l'écran scintille encore. La cause
habituelle est un Sub appelé qui le remet à True.
Sub Outer()
Application.ScreenUpdating = False
FormatBlock ' ce sub le reactive - les redessins reprennent ici
WriteTotals ' scintille, car la mise a jour est de nouveau active
Application.ScreenUpdating = True
End Sub
Sub FormatBlock()
Application.ScreenUpdating = False
' ... mise en forme ...
Application.ScreenUpdating = True ' <-- le coupable : le reactive aussi pour l'appelant
End Sub
ScreenUpdating est un réglage global unique, pas une pile. Quand FormatBlock le remet à True, il
est True pour Outer aussi, et chaque écriture après l'appel repeint. Le correctif consiste à
laisser la macro de premier niveau être seule maîtresse de l'interrupteur et à ce que les Sub
auxiliaires n'y touchent pas — ou à ce que chaque auxiliaire sauvegarde et rétablisse la valeur qu'il a
trouvée au lieu de coder True en dur. C'est la même habitude « sauvegarder l'état trouvé, rétablir
l'état trouvé » qui préserve aussi Calculation.
ScreenUpdating face aux autres interrupteurs cosmétiques
ScreenUpdating a des cousins plus discrets. Application.DisplayStatusBar = False et
Application.Calculation = xlCalculationManual sont souvent posés ensemble pour la vitesse, et
Application.EnableEvents = False pour la justesse. Mais soyez au clair sur le rôle de chacun :
ScreenUpdating est purement cosmétique et sans gravité si on l'oublie — le pire cas est une
fenêtre d'apparence figée qu'un redémarrage corrige. Calculation laissé
désactivé laisse des nombres faux en silence, et EnableEvents laissé
désactivé laisse les événements du classeur morts. Ils se ressemblent dans le code — trois lignes
= False en tête — mais le coût de l'oubli de chacun est radicalement différent. Traitez les trois
comme « à rétablir impérativement », et sachez pourquoi les enjeux diffèrent.
Comment ExcelMaster aide
ScreenUpdating tient en une ligne, mais bien l'utiliser suppose de savoir quand il aide (boucles
limitées par l'écran), quand il est gâché (travail limité par le calcul ou les entrées-sorties), et de
toujours le rétablir dans un gestionnaire d'erreurs pour qu'un plantage ne bloque pas l'affichage. Cela
fait étonnamment de jugement pour une seule propriété.
ExcelMaster écrit la
version rapide par défaut. Demandez-lui de « colorer une ligne sur deux sur 5 000 lignes », et il
regroupe le travail, enveloppe ScreenUpdating (ainsi que Calculation, et EnableEvents quand des
événements sont en jeu) dans un rétablissement CleanExit, et saute complètement l'interrupteur quand
la macro n'est pas limitée par l'écran. Vous obtenez le gain de vitesse et la sécurité sans mémoriser
quel levier corrige quel type de lenteur.
Questions fréquentes
Que fait Application.ScreenUpdating = False en VBA ?
Cela dit à Excel de cesser de repeindre l'écran pendant l'exécution de votre macro. Excel continue de
mettre à jour le classeur en mémoire mais ne dessine pas les changements, ce qui supprime le
scintillement visible et le coût par redessin. Quand vous remettez ScreenUpdating = True, Excel
repeint une seule fois et le résultat final apparaît d'un seul coup.
Pourquoi ma macro reste-t-elle lente après avoir mis ScreenUpdating = False ?
Parce que ScreenUpdating ne supprime que le travail de redessin de l'écran. Si la macro est lente à
cause d'un recalcul, d'entrées-sorties de fichier ou de base de données, ou du surcoût d'une boucle par
cellule, désactiver les redessins ne change rien. Mettez Application.Calculation = xlCalculationManual
pour les macros lourdes en calcul, et remplacez les boucles cellule par cellule par une seule lecture
et écriture de tableau pour le plus grand gain.
Dois-je remettre ScreenUpdating à True ?
Oui — remettez-le explicitement. Excel le rétablit parfois quand une macro se termine proprement, mais
pas quand la macro lève une erreur non gérée ni quand vous vous arrêtez en mode arrêt, ce qui peut
laisser l'écran figé ou grisé. Rétablissez-le dans un gestionnaire d'erreurs (On Error GoTo CleanExit
avec Application.ScreenUpdating = True dans l'étiquette) pour qu'il s'exécute que la macro réussisse
ou échoue.
Pourquoi l'écran scintille-t-il encore alors que j'ai désactivé ScreenUpdating ?
En général parce qu'un Sub appelé remet ScreenUpdating = True avant de rendre la main. C'est un
réglage global unique, donc un auxiliaire qui le réactive le fait aussi pour l'appelant, et chaque
écriture après l'appel repeint. Laissez la macro de premier niveau être seule maîtresse de
l'interrupteur, et faites en sorte que les Sub auxiliaires n'y touchent pas ou sauvegardent et
rétablissent la valeur qu'ils ont trouvée.
Quelle est la différence entre ScreenUpdating, Calculation et EnableEvents ?
Les trois sont des interrupteurs Application que vous désactivez pour rendre une macro plus rapide ou
plus sûre, mais ils contrôlent des choses différentes. ScreenUpdating arrête les redessins de l'écran
(cosmétique, sans gravité si on l'oublie). Calculation arrête le recalcul
des formules (le laisser désactivé affiche des nombres périmés).
EnableEvents arrête le déclenchement des gestionnaires d'événements (le
laisser désactivé casse les événements du classeur jusqu'au redémarrage d'Excel).
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 17/08/2026.
Guides associés : VBA Calculation · VBA EnableEvents · VBA On Error · VBA Worksheet_Change · VBA Range
