Comment obtenir le temps en millisecondes en VBA? 1



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:

Public Function TempsAvecCentiemesDeSeconde() As String
'par Excel-Malin.com ( http://excel-malin.com )

On Error GoTo Erreur

Dim Maintenant As Date
Maintenant = Now()

TempsAvecCentiemesDeSeconde = Format(Maintenant, "hh:mm:ss:") & Right(Format(Timer, "#0.00"), 2)
Exit Function

Erreur:
TempsAvecCentiemesDeSeconde = ""
End Function

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…

'par Excel-Malin.com ( http://excel-malin.com )
Private Type SYSTEMTIME
xAnnee As Integer
xMois As Integer
xJourSemaine As Integer
xJour As Integer
xHeure As Integer
xMinute As Integer
xSeconde As Integer
xMilliseconde As Integer
End Type
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)


Public Function TempsAvecMillisecondes() As String
Dim TempsSysteme As SYSTEMTIME
Dim TempsTemporaire
Dim Maintenant As Date

On Error GoTo Erreur
GetSystemTime TempsSysteme

Maintenant = Now()
TempsTemporaire = Right("0" & Hour(Maintenant), 2) & ":" & Right("0" & Minute(Maintenant), 2) & ":" _
& Right("0" & Second(Maintenant), 2) & ":" & Format(TempsSysteme.xMilliseconde, "000")

TempsAvecMillisecondes = TempsTemporaire
Exit Function

Erreur:
TempsAvecMillisecondes = ""
End Function

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

Sub TestPrecisionMillisecondes()
Dim i As Integer
For i = 1 To 100
    Debug.Print i & "-->" & TempsAvecMillisecondes
Next i
End Sub

Ce qui vous donnera un résultat semblable à ceci:

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…

Voici d'autres articles qui pourraient vous intéresser.

 

2 0

Pourrait vous intéresser


Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

Commentaire sur “Comment obtenir le temps en millisecondes en VBA?