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
Jusque là tout va bien.
J'ai ensuite lu une autre astuce trouvée sur Internet:
Du coup j'ai ajouté
mais ce faisant j'ai ensuite le message d'erreur "Erreur de compilaltion ; Variable non définie" sur l'instruction
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
je n'ai plus de message d'erreur mais je me demande si ma déclaration 'simple' (sans rien)
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
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()
Code:
screenUpdateState = Application.ScreenUpdating
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
Code:
Dim screenUpdateState
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: