Ma macro met à jour une feuille de calcul volumineuse avec des nombres, mais elle s'exécute très lentement car Excel restitue le résultat lorsqu'il le calcule. Comment puis-je arrêter Excel de rendre la sortie jusqu'à ce que la macro est terminée?Comment empêcher Excel de rendre la feuille de calcul comme ma macro le calcule?
Répondre
J'utilise les deux solutions proposées:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Vous pouvez désactiver le calcul automatique dans la boîte de dialogue d'options, il le règle de sorte qu'il ne calcule que lorsque vous appuyez sur F9.
Application.ScreenUpdating = False
Et bien sûr le remettre à nouveau vrai lorsque vous avez terminé, même si une erreur est soulevée. Exemple:
Public Sub MyMacro
On Error GoTo ErrHandler
Application.ScreenUpdating = False
... do my stuff that might raise an error
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
Application.ScreenUpdating = True
... Do something with the error, e.g. MsgBox
End Sub
appuyant sur Joe et SEER (celui-ci utilise l'ancienne syntaxe il est donc compatible avec VBA Office 2000):
On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Je préfère aussi utiliser les deux solutions proposées, mais en gardant aussi le mode de calcul précédent des utilisateurs.
Pour cette application particulière cela pourrait être pas trop grave, mais il est généralement préférable pratique de laisser les utilisateurs ont leurs paramètres restaurés après votre procédure est terminée:
Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True
NB. Il vaut également la peine d'insérer une erreur de traitement qui active Application.ScreenUpdating en cas d'erreur dans votre code générique;) Si la mémoire est bonne, Excel ne montrera aucun message d'erreur, etc., lorsque ScreenUpdating = false. Quelque chose comme ceci:
Sub DoSomeThing
On Error Goto DisplayError
Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True
Exit Sub
DisplayError:
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True
MsgBox Err.Description
End 'This stops execution of macro, in some macros this might not be what you want'
'(i.e you might want to close files etc)'
End Sub
ma macro ne fonctionne que quand je l'exécute donc je suis bien à cet égard, mais je ne veux pas regarder la copie Excel autour des données (comme spécifié par la macro), seulement le résultat final – Oskar