Comment mesurer la vitesse des macros VBA?

L'optimalisation de la vitesse des macros VBA est d'une importance capitale pour le bon fonctionnement de vos programmes. Plus une macro est rapide, plus le travail est efficace. De plus, une macro (trop) lente peut être contre-productive ou induire l'utilisateur en erreur s'il pense que la macro est "bloquée".

Optimiser les macros Excel en testant leur vitesse

Pour pouvoir optimiser une macro / un script VBA, il est donc nécessaire de pouvoir mesurer sa vitesse. C'est assez simple et quelques lignes de code suffisent. En fait, il suffit de stocker l'heure exacte de début et l'heure exacte de la fin de la macro dans une variable et les comparer à la fin. Cela vous donnera le temps exact que la macro a pris pour tourner.

Voici un exemple pratique de code VBA qui permet de voir la vitesse de la macro.

 

Vitesse des macros VBA: vitesse partielle pour les différentes parties du code VBA

Connaître la durée totale de l'exécution d'une macro n'est que le début. Il est évidemment possible de mesurer la vitesse de différentes parties du code de la macro et trouver ainsi la partie qui, éventuellement, ralenti toute la procédure. Une fois la partie du code la plus lente identifiée, vous pourrez vous concentrer à son optimisation.

Car selon la Loi de Pareto, 80% du temps d'exécution de la macro est causé par 20% du code… Si vous identifiez le "goulot d'étranglement", la correction peut augmenter exponentiellement la vitesse de votre macro VBA.

Code VBA pour déterminer la vitesse des blocs du code

Le code VBA qui suit va vous indiquer la durée nécessaire à l'exécution de différentes parties d'une macro.

Vitesse des macros VBA: durée d'exécution

Pour exemple, le code VBA qui suit est séparé en trois parties dont la durée d'exécution est calculée séparément. Bien sûr, vous pouvez séparer le code en autant de partie que vous voulez.

Il suffit de stocker le moment de la fin de chaque étape (comme: MacroEtape8 = Now ) dans une variable de type Date et à la fin, calculer autant de fois la durée de chaque étape (= le moment de la fin d'une étape – le moment de la fin de l'étape précédente; par ex. MacroEtape8_duree = Format(MacroEtape8 - MacroEtape7, "hh:mm:ss").

Vous pouvez choisir le format de la durée à afficher selon votre convenance. J'ai opté pour le format hh:mm:ss

 

Petite remarque pratique: le message final va s'afficher en plusieurs lignes. Voici deux tutos pratiques qui pourraient bien vous servir: Continuer le code VBA sur une nouvelle ligne et VBA: retour à la ligne, formater un MsgBox

Vitesse des macros VBA: quelle précision?

Avec le code VBA indiqué plus haut, vous pouvez voir la durée d'exécution de vos macros avec la précision d'une seconde. Ce sera suffisant pour la plupart des macros – disons celles dont le temps d'exécution dépasse 10 secondes.

Si votre macro est plus courte ou si vous avez besoin de l'optimiser au maximum, je vous conseille de mesurer la durée avec la précision en millisecondes. Comment faire? Vous trouverez les informations nécessaires dans le tutoriel Comment obtenir le temps en millisecondes en VBA? 

Conclusion

J'espère que cette petite astuce vous permettra de rendre vos macros encore plus rapides et encore plus efficaces!

Si vous voulez aller encore plus en profondeur, vous pouvez par exemple exporter les informations vers un fichier texte (créer un log) plutôt que de les afficher dans une fenêtre pop-up (MsgBox). Cela vous permettrait de 1) stocker les résultats de manière durable & 2) ne pas interrompre l'exécution de la macro par l'utilisation du MsgBox (même s'il est possible de créer des MsgBox qui se ferment automatiquement)… Si vous ne savez pas comment créer un fichier journal ou comment exporter un texte vers un fichier, vous pouvez utiliser le code prêt à l'emploi qui se trouve dans  VBA: Sauvegarder un texte dans un fichier.

Pour aller plus loin en VBA

Et pour terminer, voici quelques articles qui pourraient vous intéresser et vous servir dans votre travail avec VBA…

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *