web-dev-qa-db-fra.com

Boucle "Do While" "et boucle" While "" Wend ". Quelle est la différence?

En lisant certaines réponses dans stackoverflow, j'ai vu une boucle whilewend. Je suis habitué au do whileloop, donc je me demandais quelle serait la différence entre ces deux boucles.

J'ai fait quelques tests (code ci-dessous) et les deux semblent me donner les mêmes résultats.

Sub test_loop_1()
Dim i As Integer
i = 1
Do While i < 10
    Cells(i, 1) = i
    i = i + 1
Loop

End Sub

Sub test_loop_2()
Dim i As Integer
i = 1
While i < 10
    Cells(i, 1) = i
    i = i + 1
Wend

End Sub
19
umLu

Une réponse à laquelle j'ai fait référence n'est plus visible, mais cette réponse est toujours vraie. Alors que/Wend est une gueule de bois de base et Do/Loop devrait être votre syntaxe préférée car:

  1. Il prend en charge la vérification de la condition avant entrer dans la boucle Do While [condition] ... Loop (zéro ou plusieurs exécutions de boucle)
  2. Il prend en charge la vérification de la condition après entrer dans la boucle Do ... Loop While [condition] (une ou plusieurs exécutions de boucle)
  3. Il ne prend en charge aucune condition spécifique Do ...(some logic) (Exit Do) ... Loop (une ou plusieurs exécutions de boucle, potentiellement infinies)
25
NeepNeepNeep

Je ne pense pas qu'il y ait beaucoup de différence dans leur exécution autre que les options syntaxiques que While Wendn'est pas capable de:

Do
    someCode
While (someCondition)

Quant à la vitesse, j'ai fait un test simple:

Sub whileLoopTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

While (i < 500000000)
    j = i + 2
    i = i + 1
Wend

Debug.Print "While execution time: " & Timer - StartTime
End Sub


Sub doWhileTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

Do While (i < 500000000)
    j = i + 2
    i = i + 1
Loop

Debug.Print "Do While execution time: " & Timer - StartTime
End Sub

Résultats:

While execution time: 6,429688  
While execution time: 6,429688
While execution time: 6,441406
Do While execution time: 6,429688
Do While execution time: 6,449219
Do While execution time: 6,4375
7
Vegard