Problème avec code Application.screenupdating = true

bonjour

J'ai un petit problème avec le code "Application.screenupdating = true". en effet pour éviter de voir les procédure d'une macro assez complexe, j'ai ajouter le code "application.screenupdating = false" en début de macro et remis en "true" à la fin de la macro. mais le rafraichissement ne fonctionne plus ce qui me fige complètement mon fichier. je suis sur excel 2021.

si quelqu'un a une idée ou une alternative je suis preneur merci d'avance.

Bonjour franckythebest,

Les seules fois où ça m'arrive, c'est quand la macro est en exécution et ne se termine pas : par exemple la macro exécute une "boucle de la mort" i.e. une boucle sans fin car la condition de sortie n'est jamais vérifiée. Pour s'en rendre compte, on lance la macro dans l'environnement VBE, et dans la barre de titre de la fenêtre, VBE affiche qu'un code est en exécution.

Si la boucle ne rend jamais la main à l'environnement (soit directement par un DoEvents soit indirectement - par exemple une écriture sur une feuille de calcul), les évènements du clavier et de la souris ne sont jamais interceptés et on n'a plus d'interaction avec Excel.

Mais il y a sans doute bien d'autres explications toutes aussi plausibles.

Bonsoir,

Si tu as une instruction comme Exit Sub, il faut la remplacer par

    Goto Fin
…/…
Fin:
    Application ScreenUpdating =True
End Sub

Benead

bonsoir Benead

Application.screenupdating est automatiquement remis à true lorsque la macro (ou l'enchainement de macros) est terminée, Quoi qu'en dise la documentation.

pour tester

Sub test()
    MsgBox "valeur de screenupdating " & Application.ScreenUpdating
    Application.ScreenUpdating = False
    Exit Sub
End Sub

à lancer 2 fois pour vérifier

Bonsoir à tous,

Je plusoie aux précédentes réponses :

H2So4 a raison. Si la macro rend la main à Excel inutile de se préoccuper de Application.ScreenUpdating à la sortie de la macro.

Benead n'a pas faux non plus. Si la macro a été appelée par une autre macro, il vaut mieux remettre la valeur de ScreenUpdating à la valeur lors de l'appel (et non pas forcément à True) pour ne pas interférer indûment avec la macro appelante.

Sub macro1()
   Call macro2
End Sub

Sub macro2()
Dim old as Boolean
   old = Application.ScreenUpdating
   Application.ScreenUpdating = False (ou = True)
   '- code
   '- code
   '- code
   If condition_exit Then Application.ScreenUpdating = old: Exit Sub
   '- code
   '- code
   '- code
   Application.ScreenUpdating = old
End Sub

Bonjour,

@h2So4, visiblement non plus maintenant, en tout cas pas toujours, notamment quand on arrête le programme en cours d'exécution, c'est vrai que sur les anciennes versions, je n'avais pas de problème, mais depuis que je suis sur 365 j'ai constaté, sans aller plus loin dans l'analyse, que je devais relancer une sub remettant le ScreenUpdating à True sinon je me retrouve avec un classeur invisible (page grise).

Benead

Rechercher des sujets similaires à "probleme code application screenupdating true"