ScreenUpDating sur des feuilles

Bonjour à tous,

J'ai un problème avec "Application. ScreenUpDating = False"

Je pense avoir compris qu'il faut la mettre au début de la procédure, mais si on change de feuille au cours de cette procédure, "Application. ScreenUpDating = False" n'est plus opérationnel...

Pourriez-vous me confirmer ?

Y a-t-il un moyen de la placer sur un classeur une fois pour toutes ?

Existe-t-il un moyen de connaître l'état de ScreenUpDating en débogage ?

Merci de vos réponses.

Salut,

as-tu essayé de mettre la macro sur ThisWorkBook au lieu d'une feuille ?

Bonjour Doux Rêveur,

Non, je n'ai pas essayé ce procédé...

Si je comprends bien, je dois mettre ceci sous procédure dans ThisWorkBook :

Sub Ecran_muet ()
       Application. ScreenUpDating = False
End Sub

Est-ce bien comme ça que je dois l'écrire ?

Bonsoir,

ce qu'en sait :
Application.ScreenUpdating = False est valable du moment où il est mis jusqu'à la fin de la procédure où il est inscrit ou bien jusqu'à la "rencontre" avec un Application.ScreenUpdating=True.

Si on le met à FALSE alors il est inutile de la mettre à TRUE avant de rendre l'application à l'utilisateur.

Lors d'un Débogage, ou bien un pas à pas il reste à TRUE.
Pour connaitre son état lors d'un débogage, il faut, je pense, à chaque appel mettre sa valeur dans une cellule afin de garder l'information.

Un petit fichier pas très pratique à utiliser qui lance une procédure événementielle sur le SelectionChange de la feuille 1, et qui va modifier les 5 feuilles avec Application.ScreenUpdating = false au début, puis un True en milieu de code.
Si vous "commentez" le True en milieu de code vous verrez alors que la Application.ScreenUpdating=True en fin de procédure "parent" n'est pas utile.

Le fichier :

16classeur1.xlsm (20.32 Ko)

Application.ScreenUpdating et On Error Resume Next s'initialisent à la fin de la sub appelante, contrairement à Application.EnableEvents qui reste éteint si on ne le réactive pas et Application.Calculation qui reste dans l'état où on l'a mis par exemple pour les "plus utiliser" pour les optimisations de fonctionnement de code VBA.

@ bientôt

LouReeD

Bonjour LouReed,

J'ai bien compris la première partie de votre réponse, moins l'exemple...

- On met "Application.ScreenUpdating = False" au début de la procédure et il est inutile de la remettre en True, cela se fait automatiquement au End Sub

- Dans le débogage, il est toujours à True

- A chaque appel, mettre sa valeur dans une cellule : comment dois-je faire ?

Exemple :

Application.ScreenUpdating = False

Range ("A1"). Value = ???

Qu'est-ce que j'écris à la place des points d'interrogation ?

re,

c'est plus facile que cela, supposons une macro "Main" et la macro de LouReeD

Sub main()
     MsgBox "main, " & i & vbLf & Application.ScreenUpdating  'on commence et c'est toujours True
     Application.ScreenUpdating = False      'false jusqu'au moment où toutes les macros sont terminées ou si on le remet à true
     For i = 1 To 5
          TestLRD i
          MsgBox "main, " & i & vbLf & Application.ScreenUpdating     'montrer l'état de screenupdating
     Next
     Application.ScreenUpdating = False      'au bout on le met à false, mais comme la macro se termine, l'état sera directement remis à true sans intervention
End Sub

Sub TestLRD(i)
     'For i = 1 To 5
     MsgBox "testlrd, " & i & vbLf & Application.ScreenUpdating     'l'état de screenupdating
     With Sheets(i)
          .Activate
          For j = 1 To 10
               .Cells(j, 1).Value = "LouReeD" & Time
               tempo = Timer
               Do
                    DoEvents
               Loop While tempo + 0.2 > Timer
          Next j
     End With
     ' si on veut rendre l'affichage à jour avant la fin de la procédure "à la demande", ici dernière feuille
     If i = 4 Then Application.ScreenUpdating = True
     ' si cette ligne est mise en commentaire alors à la fin de la Sub SelectionChange
     ' Application.ScreenUpdating sera remis à True automatiquement
     'Next i
     Sheets(1).Activate
End Sub

Oui ! Voilà ! C'est exactement ce que je voulais dire !

@ bientôt

LouReeD

Bonjour LouReeD et BsAlv,

Merci de vos réponses...

Cependant, je me contenterai de la ligne qui répond à ma question de savoir comment connaître l'état de ScreenUpDating :

  MsgBox "............" & Application.ScreenUpdating     'montrer l'état de screenupdating

Cela suffit amplement à mes besoins.

Cela dit, je me répète, mais je vous remercie encore de prendre la peine de me répondre de manière aussi circonstanciée.

Bonsoir,

merci de votre retour et remerciement !

@ bientôt

LouReeD

Rechercher des sujets similaires à "screenupdating feuilles"