[Résolu]:VBA: quel type de variable pour instruction Application.ScreenUpdating?

Pascal31

XLDnaute Nouveau
Bonjour à tous,
Je développe une macro sous VBA. Le temps d'exécution devenant problématique j'essaie de l'optimiser (comme je peux). J'ai trouvé sur le web une 1ère astuce qui consiste à inhiber certaines fonctionnalités superflues d'Excel - telle l'instruction Application.ScreenUpdating - j'ai donc codé ce qui suit ci-dessous

Code:
Sub MaMacro()
'Save the current state of Excel settings
screenUpdateState = Application.ScreenUpdating
statusBarState = Application.ScreenUpdating
calcState = Application.Calculation
eventsState = Application.EnableEvents
'Note: the following is a sheet-level setting
displayPageBreakState = ActiveSheet.DisplayPageBreak

'Turn off Excel functionality to improve performance
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
'Note: this is a sheet-level setting
ActiveSheet.DisplayPageBreaks = False

'My code...


'At the end of the code
'Restore Excel settings to original state
Application.ScreenUpdating = screenUpdateState
Application.DisplayStatusBar = statusBarState
Application.Calculation = calcState
Application.EnableEvents = eventsState
'Note: this is a sheet-level setting
ActiveSheet.DisplayPageBreaks = displayPageBreaksState

End Sub

Jusque là tout va bien.

J'ai ensuite lu une autre astuce trouvée sur Internet:
La déclaration du type de variable est une première optimisation extrêmement classique et indispensable. Afin de n'oublier aucune déclaration, utiliser en tête de module ou de Form etc... la fonction :
Option Explicit
d’une manière générale, l’emploi du type Variant (autre que dans les appels de fonctions) n'est jamais indispensable, et est à proscrire pour l’optimisation. Ce type est surtout intéressant pour faciliter la programmation aux débutants. Mais cette facilité se paye par une baisse importante des performances

Du coup j'ai ajouté
Code:
Option Explicit
Sub MaMacro()
mais ce faisant j'ai ensuite le message d'erreur "Erreur de compilaltion ; Variable non définie" sur l'instruction
Code:
screenUpdateState = Application.ScreenUpdating
ce que je comprends assez bien, après coup.

D'où ma question: de quels types dois-je déclarer les variables suivantes ?
screenUpdateState
statusBarState
calcState
eventsState
displayPageBreakState

Nota: si je mets dans mon code - par exemple
Code:
Dim screenUpdateState
screenUpdateState = Application.ScreenUpdating
je n'ai plus de message d'erreur mais je me demande si ma déclaration 'simple' (sans rien)
Code:
Dim screenUpdateState
est adéquate?

Vos avis et éléments de réponses me seront d'une aide certaine.
Merci pour le temps que vous avez pris à lire ce post.

Pascal
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : VBA: quel type de variable pour instruction Application.ScreenUpdating?

Bonjour,

petite remarque au passage, aucun intêret de stocker dans une variable le statut de "ScreenUpdating", de toute façon après exécution du code repassera à "True"... sinon, Type de données Boolean retourné par la propriété, idem pour "EnableEvents", par contre celle ci indispensable de la remettre à "true" en fin de procédure...

"Application.Calculation" quant à elle retourne une valeur de type "long".

bonne journée
@+
 

Misange

XLDnaute Barbatruc
Re : VBA: quel type de variable pour instruction Application.ScreenUpdating?

Bonjour, coucou Pierrot

pour l'accélération du code VBA je t'invite à lire cette excellente page de Laurent Longre
Ce lien n'existe plus

Le code que tu indiques est un code très général qui a l'intérêt de préserver l'état du classeur avant le début de la macro.
Je pense que l'inhibition de la barre d'état n'a dans la plus part des cas qu'un effet très modéré sur la rapidité du code, surtout si tu mets le mode de calcul sur manuel pendant le code.
 

Pascal31

XLDnaute Nouveau
Re : VBA: quel type de variable pour instruction Application.ScreenUpdating?

Merci bien Pierrot93 pour l'info sur le type des variables à déclarer, Boolean et Long, ça répond à ma question!
Et comme le dit justement Misange le but est de ne rien modifier de l'état du classeur original. (--> et donc pour être propre il faut tout de même sauvegarder le statut de ScreenUpdating au début).

Misange, merci aussi pour le lien sur les conseils d'accélération code VBA.
 

Discussions similaires

Statistiques des forums

Discussions
312 079
Messages
2 085 129
Membres
102 788
dernier inscrit
Remy003