Bonjour à tous !
Intéressante discussion... J'ai pour ma part été un peu titillé par l'évaluation du temps d'exécution par NCC1701...
J'ai donc monté l'échantillon de proc. suivantes :
Sub TestFor()
Dim i%, t!
t = Timer
With ActiveSheet
For i = 1 To 100
.Cells(i, 1) = i
Next i
End With
MsgBox (Timer - t) * 1000
End Sub
Sub TestWhile()
Dim i%, t!
t = Timer
With ActiveSheet
While i < 100
i = i + 1
.Cells(i, 1) = i
Wend
End With
MsgBox (Timer - t) * 1000
End Sub
Sub TestDo()
Dim i%, t!
t = Timer
With ActiveSheet
Do
i = i + 1
.Cells(i, 1) = i
Loop While i < 100
End With
MsgBox (Timer - t) * 1000
End Sub
J'ai ajouté une boucle Do... Loop, n'utilisant jamais While... Wend (Microsoft l'a d'ailleurs explicitement remplacée par Do... Loop offrant plus de possibilités...)
Le temps est mesuré en millisecondes.
Sur 5 mesures par procédures, la valeur la plus fréquentes est 15,625 pour toutes. Il n'y a donc pas de différences significatives d'exécution (sous réserve de tests sur une boucle suffisamment longue...)
J'obtiens une valeur max. de 31,25 pour toutes les boucles également. J'ai aussi une valeur de 27,34375 pour Do... Loop et une de 11,71875 pour For... Next.
Pour aller un peu plus loin, j'ai testé une proc. utilisant un tableau :
Sub TestTbl()
Dim tbl(1 To 100, 0) As Integer, i%, t!
t = Timer
For i = 1 To 100
tbl(i, 0) = i
Next i
ActiveSheet.Range("A1:A100").Value = tbl
MsgBox (Timer - t) * 1000
End Sub
Là, la valeur mesurée la plus fréquente est carrément : 0. Et une valeur de 15,625.
Ce qui confirmerait que l'utilisation de tableaux permet une exécution plus rapide.
Cordialement, et bonne journée.