Comment obtenir le temps en millisecondes en VBA?

On a parfois besoin de mesurer le temps avec une plus grande précision qu'une seconde. Généralement, on mesure alors le temps en millisecondes. Cette précision peut s'avérer nécessaire pour la création des logs ou encore pour mesurer la vitesse quand on veut tester la performance des macros en VBA.

Alors, "Comment obtenir le temps en millisecondes en VBA?"

Réponse rapide:

Ce n'est pas possible en VBA (de manière 100% fiable).

Réponse plus longue:

Il existe en VBA deux méthodes d'obtenir un temps plus précis qu'une seconde…


VBA: temps en millisecondes et centièmes de seconde

Voici donc ces deux méthodes plus en détail…

1. Obtenir le temps en CENTIÈMES de seconde en VBA

Si vous pouvez vous satisfaire de la précision à 1/100 de seconde, il est possible d'utiliser la fonction VBA Timer. Cette fonction nous donne le nombre de secondes depuis minuit, avec une précision à 1/100 de l'unité ce qui est donc 1/100 de seconde…

On peut donc utiliser le résultat de la fonction Now() qui a la précision d'une seconde, la formater de la manière dont on a besoin avec la fonction Format() et ajouter à la fin la valeur derrière la virgule de la fonction Timer

En VBA, on obtient donc le code suivant:

Vous pouvez, évidemment, formater le résultat à votre convenance. Quelques exemples (modification de la ligne n°9 du code VBA qui précède):

  • ... Format(Maintenant, "hh:mm:ss:") ... –>  12:05:15:29
  • ... Format(Maintenant, "mm:ss:") ... –>  05:15:29
  • ... Format(Maintenant, "mm:ss,") ... –>  05:15,29
  • ... Format(Maintenant, "ss,") ... –>  15,29

 

2. Utilisation de GetSystemTime pour obtenir le temps en millisecondes

Cette méthode fait appel à Kernel pour obtenir le temps de système. Le temps en millisecondes est disponible mais en réalité, on ne peut obtenir que la précision à 15 millièmes de seconde. Ce qui, finalement, rend cette méthode moins précise que la méthode utilisant le Timer pour obtenir des centièmes de seconde que j'ai montré dans la section précédente.

Je vous donne quand même le code VBA pour que vous puissiez constater par vous-mêmes…

Si vous voulez tester, vous pouvez afficher les valeurs dans une boucle:

Ce qui vous donnera un résultat semblable à ceci (et qui s'affichera dans la fenêtre "Exécution" de l'éditeur VBA):

1–>11:23:59:816
2–>11:23:59:816

7–>11:23:59:816
8–>11:23:59:816
9–>11:23:59:816
10–>11:23:59:816
11–>11:23:59:831
12–>11:23:59:831

36–>11:23:59:831
37–>11:23:59:831
38–>11:23:59:847
39–>11:23:59:847

Comme vous pouvez le constater, le temps en millisecondes est visible mais on passe, par exemple, de 831 ms à 847 ms

Conclusion: Précision à 1/100 de seconde

On peut donc conclure de manière suivante: Il est impossible d'afficher de manière fiable le temps en millisecondes en VBA mais on peut travailler sans problème avec la précision à des centièmes de seconde.  Ce qui, avouons-le, sera suffisant dans une très grande majorité des cas…

Pour aller plus loin en VBA…

Voici d'autres articles qui pourraient vous intéresser et vous être utiles dans votre travail avec VBA…

 

Laissez un commentaire

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

3 commentaires sur “Comment obtenir le temps en millisecondes en VBA?”