J'utilise DoEvents
pour forcer une mise à jour d'un indicateur de progression dans la barre d'état (ou dans une cellule de la feuille) comme dans l'exemple de code ci-dessous. Mais l'écran ne se rafraîchit pas, ou arrête de rafraîchir à un moment donné. La tâche se termine finalement mais la barre de progression est inutile.DoEvents ne fait pas les événements ... Pourquoi?
Pourquoi ne pas DoEvents
"faire les événements"? Que puis-je faire pour forcer une mise à jour de l'écran?
Editer: J'utilise Excel 2003 sur Windows XP. Il s'agit d'un suivi d'un earlier question; Merci à Robert Mearns pour sa réponse et l'exemple de code ci-dessous.
Sub ProgressMeter()
Dim booStatusBarState As Boolean
Dim iMax As Integer
Dim i As Integer
iMax = 100
Application.ScreenUpdating = False
''//Turn off screen updating
booStatusBarState = Application.DisplayStatusBar
''//Get the statusbar display setting
Application.DisplayStatusBar = True
''//Make sure that the statusbar is visible
For i = 1 To iMax ''// imax is usually 30 or so
fractionDone = CDbl(i)/CDbl(iMax)
Application.StatusBar = Format(fractionDone, "0%") & " done..."
''// or, alternatively:
''// statusRange.value = Format(fractionDone, "0%") & " done..."
''// Some code.......
DoEvents
''//Yield Control
Next i
Application.DisplayStatusBar = booStatusBarState
''//Reset Status bar display setting
Application.StatusBar = False
''//Return control of the Status bar to Excel
Application.ScreenUpdating = True
''//Turn on screen updating
End Sub
Avez-vous essayé sans 'Application.ScreenUpdating = FALSE'? –
Curieux ... il fonctionne bien (en ajoutant une boucle interne pour prendre un peu de temps) sur ma machine ... –
Veuillez poster les versions Excel & OS –