Calcul temps execution code

  • Initiateur de la discussion Initiateur de la discussion vgendron
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

vgendron

XLDnaute Barbatruc
Bonjour le forum !!

Certain(e) s d'entre vous sont tellement bons que vous allez jusqu'à mesurer des temps d'execution, ce qui vous permet de nous proposer différents codes associés à leur temps d'execution.. et c'est top !
ex: code1 -->10s
code2-->1.27s

il apparait ainsi évident que l'utilisation de tableaux ou de dictionnaires est souvent bien plus rapide que faire des boucles interminables..

THE question:
comment mesurez vous ces temps d'execution?
s'agit il d'une fonction VBA? ou d'un bout de code que vous inserez? (je ne vous imagine pas vraiment avec votre chrono à la main 🙂 encore que :-D
 
Bonjour
Il s'agit d'API :
VB:
Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Private Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
Private TopDépart As Currency, TopFin As Currency, DTop1sec As Currency
…
…
…
Rem — Départ action
QueryPerformanceCounter TopDépart
…
…
…
Rem — Fin action
QueryPerformanceCounter TopFin
QueryPerformanceFrequency DTop1sec
msgbox "Ça a duré " & (TopFin - TopDépart) / DTop1sec & " secondes"
 
Dernière édition:
Bonjour à toutes et à tous,

Ou bien :
Code:
Option Explicit
Sub Durée_calculer()
    Dim c As Range, durée
    durée = Timer
'    For Each c In Selection
'        c = 2 * 2
'    Next
    MsgBox "Durée : " & Format(Timer - durée, " 0.0000")
End Sub
A bientôt 🙂
 
Bonjour DoubleZéro,
Oui, si on ne souhaite qu'un résultat beaucoup moins précis, à 15,625 millisecondes près.
(Parfois un peu plus, parfois un peu moins, enfin c'est le délai typique entre deux révisions périodiques de la valeur donnée par VBA.Timer.)
QueryPerformanceCounter donne des résultats plus précis qu'à la microseconde près.
 
Dernière édition:
VB:
Sub t()
Dim F As Currency, C1 As Currency, C2 As Currency
QueryPerformanceFrequency F
QueryPerformanceCounter C1
QueryPerformanceCounter C2
MsgBox Format(1000000000 * (C2 - C1) / F, "000") & " nanosecondes"
End Sub
Remarque: rarement, cette manœuvre peut donner 0.

Dans un UserForm montrant l'activité d'un traitement pouvant durer aussi bien quelques µs que quelques jours (on l’interrompt quand ça commence à se présenter comme ça), j'ai cette méthode appelée par le processus lorsque ça se termine bien :
VB:
Public Sub Conclure()
Dim T As Double, S() As String, M As Double, E As Long
QueryPerformanceCounter Top
T = (Top - TopDépart) / DTop1sec
SMin = 1: SMax = 1: Visu 1: Me.Height = 54: Me.Caption = "Tirage réussi."
Select Case T
   Case Is < 10: S = Split(Format(T, "000.E+00"), "E"): E = S(1) \ 3: M = S(0) * 10 ^ S(1) * 1000 ^ -E
                  LabFait.Caption = Choose(1 - E, "Dénoué", "Réglé", "Aperçu") & " en " _
      & M & " " & Choose(1 - E, "", "milli", "micro") & "seconde" & IIf(M > 1, "s", "") & "."
   Case Is < 60:  LabFait.Caption = "Dépêtré en " & Int(T * 10 + 0.5) / 10 & " seconde" & "."
   Case Else:     LabFait.Caption = "Achevé en " & DuréeEnClairSec(T) & "."
   End Select
Terminé = True: MessageBeep vbInformation: Décharger.PlanifierDans 5
End Sub
'

Function DuréeEnClairSec(ByVal DuRest As Double) As String
Dim U As Long, DuUnit As Double, NbUnit As Long, Niv As Long, Trad As String
For U = 1 To 7
  DuUnit = Choose(U, 31556952, 2629746, 604800, 86400, 3600, 60, 1)
  NbUnit = Int(DuRest / DuUnit)
  If NbUnit > 0 Or Niv > 0 Then Niv = Niv + 1: If Niv > 2 Then Exit Function
  If NbUnit > 0 Then
  Trad = NbUnit & " " & Choose(U, "an", "mois", "semaine", "jour", "heure", "minute", "seconde")
  If NbUnit * Choose(U, 1, 0, 1, 1, 1, 1, 1) > 1 Then Trad = Trad & "s"
  If Niv = 2 Then DuréeEnClairSec = DuréeEnClairSec & " et "
  DuréeEnClairSec = DuréeEnClairSec & Trad: End If
  DuRest = DuRest - DuUnit * NbUnit: Next U
End Function
End Sub
Peut être pouvez vous vous en inspirer…
 
Bonjour,

à noter cette page intéressante sur l'optimisation :
Ce lien n'existe plus
A chapitre 'Accélération des calculs dans les classeurs' ils te proposent des routines de mesures (avec QueryPerformanceFrequency également).
eric
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour