Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] Tester vitesse d'exécution de deux macros

34 réponses
Avatar
Tatanka
Bonsoir, Bonsoir,

Auriez-vous la bonté de faire exécuter mes deux macros
et me retourner le temps requis par vos machines pour les
exécuter en me spécifiant quelques caractéristiques de votre ordi.
C'est que j'aimerais comparer vos résultats avec ceux
obtenus sur un ordi qu'un ami veut me vendre.
http://cjoint.com/?ebtKXK4L4f
http://cjoint.com/?ebtLBv55qQ

Merci

A --

Serge, en quête de vitesse ;-)

4 réponses

1 2 3 4
Avatar
Jac
Bonjour Modeste,

merci pour ce code, mais pourrais-tu me dire ce qu'apporte cette
syntaxe par rapport à celle que j'avais proposé :

' début du chrono ------------------------------
TEMPS = Timer

' fin du chrono --------------------------------
MsgBox vbTab & Format(Timer - TEMPS, "0.000") & " seconde(s)", , _
" La procédure a été réalisée en..."

J'ai imbriqué les deux macros et j'obtiens exactement les mêmes
résultats (parfois à 1/1000 près) par Timer et par GetTickCount&

' ---------------------------------------------
Declare Function GetTickCount& Lib "kernel32" ()

Sub TEST_NEW_TIMER()
Dim t1&, t2&
t1& = GetTickCount&
TEMPS = Timer
Stop
t2& = GetTickCount& - t1&
t3 = Format(Timer - TEMPS, "0.000")
MsgBox "GetTickCount&" & vbTab & t2& / 1000 & vbCr & vbCr & _
"Timer" & vbTab & vbTab & t3, , _
" Temps d'exécution en secondes"
End Sub
' ---------------------------------------------

Question subsidiaire : c'est quoi le kernel32 ? Rien dans l'aide Vba,
sur le net, il est question d'une dll... et d'écriture en mémoire
vive...

Jac


Bonjour Jac avec ferveur ;o))) vous nous disiez :

PS : il faudrait aller un peu plus loin qu'avec les secondes parce
qu'avec des temps courts, 9s, ça va de 8,501 à 9,499 soit 11%, ce qui
est quand même assez important quand on fait des comparaisons.


En début de module :
Declare Function GetTickCount& Lib "kernel32" ()

dans la proc :
en debut
Dim t1&, t2&
t1& = GetTickCount&

en fin :
t2& = GetTickCount& - t1&
MsgBox t2& / 1000 & " sec", vbInformation, " Temps d'exécution"



Avatar
Modeste
Bonsour® Jac avec ferveur ;o))) vous nous disiez :

merci pour ce code, mais pourrais-tu me dire ce qu'apporte cette
syntaxe par rapport à celle que j'avais proposé :


Timer, fonction
est une fonction EXCEL
Renvoie une valeur de type Single représentant le nombre de "*secondes*"
écoulées depuis minuit.

GetTickCount est une proc Windows qui fait partie des éléments du noyau su
systeme (Kernel)
The GetTickCount function retrieves the number of "*milliseconds*" that have
elapsed since Windows was started.

;o)))
j'avais répondu à la question concernant la précision sans consulter ton code
....
il est heureusement évident que les résultats ne divergent que de quelques
fractions de secondes !!!
l'obtention des millisecondes permet l'utilisation du format d'affichage
"hh:mm:ss.000"


--
--
@+
;o)))

Avatar
Jac
Merci pour la précision.

Bonsour® Jac avec ferveur ;o))) vous nous disiez :

merci pour ce code, mais pourrais-tu me dire ce qu'apporte cette
syntaxe par rapport à celle que j'avais proposé :


Timer, fonction
est une fonction EXCEL
Renvoie une valeur de type Single représentant le nombre de "*secondes*"
écoulées depuis minuit.

GetTickCount est une proc Windows qui fait partie des éléments du noyau sur
systeme (Kernel)
The GetTickCount function retrieves the number of "*milliseconds*" that have
elapsed since Windows was started.

;o)))
j'avais répondu à la question concernant la précision sans consulter ton code
....
il est heureusement évident que les résultats ne divergent que de quelques
fractions de secondes !!!
l'obtention des millisecondes permet l'utilisation du format d'affichage
"hh:mm:ss.000"


--



Avatar
PMO
Bonjour à tous,

J'ai modifié l'algorithme pour les Nombres de Keith et
j'obtiens un gain de quelques pouillèmes de seconde.
Ce n'est pas très spectaculaire mais, comme je l'ai fait,
voici le code ci-dessous.

'********************************
Declare Function GetTickCount& Lib "kernel32" ()
Const MAX As Long = 1000000

Sub PMO2_Nombres_De_Keith()
Dim n&
Dim puissance%
Dim deb&
Dim g&
Dim i&
Dim j&
Dim k&
Dim T&()
Dim T2&()
Dim T3&()
Dim somme&
Dim duree&

duree& = GetTickCount&
puissance% = 2
ReDim T&(1 To puissance%)
Do
deb& = 10 ^ (puissance% - 1)
If deb& >= MAX Then Exit Do
For i& = deb& To (deb& * 10) - 1
n& = i&
For j& = 1 To puissance%
k& = 10 ^ (puissance% - j&)
T&(j&) = n& k&
n& = n& - (T&(j&) * k&)
Next j&
Do
somme& = 0
For k& = 1 To puissance%
somme& = somme& + T&(k&)
Next k&
If somme& >= i& Then Exit Do
For k& = 1 To puissance% - 1
T&(k&) = T(k& + 1)
Next k&
T&(puissance%) = somme&
Loop
If somme& = i& Then
g& = g& + 1
ReDim Preserve T2&(1 To g&)
T2&(UBound(T2&)) = i&
End If
Next i&
puissance% = puissance% + 1
ReDim T&(1 To puissance%)
Loop
'---- Transposition ----
ReDim T3&(1 To UBound(T2&), 1 To 1)
For i& = 1 To UBound(T2&)
T3&(i&, 1) = T2&(i&)
Next i&
'-----------------------
Range("a1:a" & UBound(T2&) & "") = T3&
MsgBox "Millièmes de seconde : " & GetTickCount& - duree&
End Sub
'********************************

Cordialement.

PMO
Patrick Morange
1 2 3 4