[ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

T

Tchupacabra

Guest
[ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

Bonjour à tous,

je n'arrive pas à trouver comment avoir les millisecondes pour faire un chrono plus préci .....

Pour le moment, je n'obtient que la durée en HH:MM:SS

mon code :

Sub MiseAJour()
Dim debut As Date
Dim fin As Date
Dim Duree As Date

debut = Time

' traitement des données

fin = Time

Duree = fin - debut

End Sub


si quelqu'un pouvait m'aider.......pour compléter mon p'tit bout de code......
merci d'avance

@+
 
T

Tchupacabra

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ?

Bah j'ai essayé mais ça n'a pas l'air d'être ça ......


debut = "2/11/2057 17:38:36"
fin = "1/12/2057 21:21:36"

et

Duree = "28/01/1900 03:44:38"



:(
 
P

Pascal76

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

Bonjour le fil

Voici ce que déclre l'aide VBA sur Timer :

Renvoie une valeur de type Single représentant le nombre de secondes écoulées depuis minuit.

donc si tu mets début = timer il ne faut pas mettre au format date et heure car ce sont des secondes que cela te donne

Bonne journée

Pascal
 
T

Ti

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

je me souviens avoir mis un tel timer sur ce forum un jour, pour tester la vitesse d'exécution d'une procédure. Le plus dur est de la retrouver.
 
@

@+Thierry

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

Bonjour Ti, Pascal, Tchupacabra, maraboul, le Forum

Oui Ti je me souviens d'avoir vu ce timer de ta part, mais idem, je ne le trace plus...

Sinon en m'inspirant d'un Truc de Yeahou, voici ce que celà pourrait donner mais par contre c'est pour faire l'inverse (reporter des secondes arrondies et pas de centièmes/millièmes)

Sub TheBigBoucle()
Dim TheTime(1 To 3) As Long, TheTimerStart As Long, TheTimerStop As Long
Dim Message As String
Dim i As Byte, y As Integer

TheTimerStart = Timer

For i = 1 To 254
For y = 1 To 50
Cells(i, y) = Chr(y)
Next y
Next i

TheTimerStop = Timer - TheTimerStart

If TheTimerStop < 0 Then TheTimerStop = TheTimerStop + 86400 'si déroulement à 0:00
TheTime(1) = Fix(TheTimerStop / 3600)
TheTime(2) = Fix((TheTimerStop - (TheTime(1) * 3600)) / 60)
TheTime(3) = CInt(TheTimerStop - ((TheTime(1) * 3600) + (TheTime(2) * 60)))
If TheTime(1) = 0 Then
Message = "Macro exécutée en " & Right("0" & TheTime(2), 2) & " minutes, " & Right("0" & TheTime(3), 2) & " secondes !"
Else
Message = "Macro exécutée en " & Right("0" & TheTime(1), 2) & " heures, " & Right("0" & TheTime(2), 2) & " minutes, " & Right("0" & TheTime(3), 2) & " secondes !"
End If

MsgBox Message
End Sub



Maintenant on peut aussi "truquer" en appliquant un code comme ceci :

Sub TheBigBoucle2()
Dim TheTimerStart As Long
Dim Message As String
Dim i As Byte, y As Integer

TheTimerStart = Timer

For i = 1 To 254
For y = 1 To 50
Cells(i, y) = Chr(y)
Next y
Next i

MsgBox " Durée : " & Format(Timer - TheTimerStart, "#0") & " secondes " & Right(Format(Timer - TheTimerStart, ".00"), 2) & " centièmes"

End Sub


Mais bon, je ne sais pas si c'est vraiment utile d'essayer de comptabiliser les centiémes... ou les millisecondes... pour une macro !

Bonne Fin de Journée
@+Thierry
 
M

Michel_M

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

Salut à tous,

Mazette, il y a tous les grands costauds sur ce fil !

j'y vais quand m^me:

Simplement pour dire que j'ai vu des scripts de timer sur le site de Frédéric Sigonneau au lien "temporisations, timers". Vous dire si ils conviennent est trop costaud pour moi...

Bonne soirée

Michel
 
M

Michel_M

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

RE,

le listing que l'on peut utiliser pour mesurer la durée d'une procédure (à la milliseconde SVP) est timerAPI.txt sur le site de F.Sigonneau.

Je ne le mets pas en pièce jointe car souvent les auteurs ont horreur que l'on reproduise leur production sur l'autres sites (netiquette).

A+
Michel
 
C

Celeda

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

&nbsp;&nbsp;Bonsoir,

J'ai vu de la lumière, j'ai reconnu les voix alors je me suis faufilée comme une tite souris et avant
d'aller discuter avec les anges, je suis allée Lien supprimé
Si cela peut vous aider…..(là aussi yavait du monde!!!)

Celeda
 
T

Tchupacabra

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ?

Merci à tous pour votre aide..... :)

cependant j'aurais aimé n'utilisé que du code VBA car mon *.xls risque de ne pas fonctionner partout car il va aller sur plusieurs postes.....J'ai donc peur qu'il ne trouve pas les *.dll nécessaire.....

alors est-ce que le code ci-dessous est bon ?



Sub MiseAJour()

Dim debut As Single
Dim fin As Single
Dim Duree As Single

debut = Timer

' traitement des données

fin = Timer

Duree = fin - debut

End Sub


merci

@+
 
@

@+Thierry

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

Bonjour Tchupacabra , Michel, Celeda, Ti, Pascal, Maraboul, le Forum

Et bien si tu avais regardé mon post d'hier la macro "TheBigBoucle2" est identique... mis à part que je déclare le Temps as Long et que je formatte le msgbox...

Bon Appétit
@+Thierry
 
Y

Yeahou

Guest
Re: [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

Bonjour tout le monde, le forum

Thierry s'est inspiré d'un de mes trucs et moi je me suis inspiré de sa modification. La boucle est bouclée et cela donne un code timer gérant les centièmes. Ca, c'est du travail de groupe!!!

Cordialement, A+

Sub TheBigBoucle3()
Dim TheTime(1 To 4) As Long, TheTimerStart As Double, TheTimerStop As Double
Dim Message As String
Dim i As Byte, y As Integer

TheTimerStart = Timer

For i = 1 To 254
For y = 1 To 50
Cells(i, y) = Chr(y)
Next y
Next i

TheTimerStop = Timer - TheTimerStart

If TheTimerStop < 0 Then TheTimerStop = TheTimerStop + 86400 'si déroulement à 0:00
TheTime(1) = Fix(TheTimerStop / 3600)
TheTime(2) = Fix((TheTimerStop - (TheTime(1) * 3600)) / 60)
TheTime(3) = Fix(TheTimerStop - ((TheTime(1) * 3600) + (TheTime(2) * 60)))
TheTime(4) = CInt((TheTimerStop - Fix(TheTimerStop)) * 100)
If TheTime(1) = 0 Then
Message = "Macro exécutée en " & Right("0" & TheTime(2), 2) & " minutes, " & Right("0" & TheTime(3), 2) & " secondes, " & Right("0" & TheTime(4), 2) & " centièmes de secondes!"
Else
Message = "Macro exécutée en " & Right("0" & TheTime(1), 2) & " heures, " & Right("0" & TheTime(2), 2) & " minutes, " & Right("0" & TheTime(3), 2) & " secondes, " & Right("0" & TheTime(4), 2) & " centièmes de secondes!"
End If

MsgBox Message
End Sub
 

Romain37

XLDnaute Nouveau
Re : [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

*Et désolé pour le mega déterrage !
Comme quoi 9 ans après c'est toujours utile :p

Bonjour,

Vu que ce code m'a été très utile, j'en profite pour y rajouter quelques commentaires pour les gens comme moi qui voudraient savoir à quel endroit de ce code placer la macro qu'ils veulent mesurer :)
J'ai aussi créé une variable "Temps Ecoulé" avec le temps total en format digital et modifié le message de sortie pour qu'on puisse copier-coller le temps renvoyé dans un fichier, en détournant pour cela une InputBox :rolleyes:

Code:
'Modèle de Timer pour mesurer le temps d'exécution d'une macro en heures, minutes, secondes et centièmes :
Public Sub TheBigBoucle3()

    Dim TheTime(1 To 4) As Long, TheTimerStart As Double, TheTimerStop As Double
    Dim Message As String
    Dim i As Byte, y As Integer
    
    TheTimerStart = Timer
    
    'Mettre le code à exécuter et dont on mesure le temps d'exécution ici
    
    TheTimerStop = Timer - TheTimerStart
    
    If TheTimerStop < 0 Then TheTimerStop = TheTimerStop + 86400 'si déroulement à 0:00
    TheTime(1) = Fix(TheTimerStop / 3600)
    TheTime(2) = Fix((TheTimerStop - (TheTime(1) * 3600)) / 60)
    TheTime(3) = Fix(TheTimerStop - ((TheTime(1) * 3600) + (TheTime(2) * 60)))
    TheTime(4) = CInt((TheTimerStop - Fix(TheTimerStop)) * 100)
    
    Dim Temps_Ecoule As String
    Temps_Ecoule = Right("0" & TheTime(1), 2) & ":" & Right("0" & TheTime(2), 2) & ":" & Right("0" & TheTime(3), 2) & ":" & Right("0" & TheTime(4), 2)
    
    Message = "Macro exécutée en " & Right("0" & TheTime(1), 2) & " heures, " & Right("0" & TheTime(2), 2) & " minutes, " _
    & Right("0" & TheTime(3), 2) & " secondes et " & Right("0" & TheTime(4), 2) & " centièmes de secondes. " _
    & vbCrLf & vbCrLf & "Durée d'exécution (hh:mm:ss:cc) = " & Right("0" & TheTime(1), 2) & ":" & Right("0" & TheTime(2), 2) & ":" & Right("0" & TheTime(3), 2) & ":" & Right("0" & TheTime(4), 2)
      
    Message = InputBox(Message, "Mesure du temps d'exécution de la macro", Temps_Ecoule)

End Sub

Merci !
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re : [ VBA ] >> Faire un chrono en milliseconde sur la durée d'une procédure ???

Bonjour à tous

rien ne se perd sur XLD!
ce code m'a été très utile pour mesurer la performance de mes programmes, content qu'il rende encore service neuf ans après.

Cordialement, @+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 319
Membres
103 177
dernier inscrit
grizly