2008-09-27 9 views

Répondre

14

J'utilise les deux solutions proposées:

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
... 
... 
... 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
0

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.

+0

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

2

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 
+0

comment puis-je m'assurer de le récupérer après une erreur? – Oskar

+0

J'ai ajouté un exemple pour le montrer. – Joe

1

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 
2

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 
Questions connexes