Redéfinir la borne supérieure d’une boucle

Bonjour à tous,

En cours d'une boucle for, je me serais obligé d'augmenter la borne supérieure.

Mais voila cette nouvelle valeur n'est pas pris en compte par la boucle et elle se contente de s'arrêter à l'ancienne valeur.

Une solution ?

Sub test()
    Dim i As Long, NBlg As Long

    NBlg = 3
    For i = 1 To NBlg
        Range("A" & i) = i
        If i = 2 Then NBlg = 4
    Next i
End Sub

Merci d'avance.

Salut,

2 propositions (le principe général reste le même, l'une emploie la commande Goto qui en dérange certains, l'autre non.)

Sub test()
Dim i As Long, NBlg As Long
i = 1
NBlog = 3
routine i, NBlog
End Sub

Sub routine(a, zz)
For i = a To zz
    Range("A" & i) = i
    If i = 2 Then routine i + 1, 7
Next i
End Sub
Sub test2()
    Dim i As Long, NBlg As Long
    a = 1
    NBlg = 3
1
    For i = a To NBlg
        Range("A" & i) = i
        If i = 2 Then a = i + 1: NBlg = 7: GoTo 1
    Next i
End Sub

Bonjour, Salut Game Over,

Une autre manière de faire :

Sub test1()
    Dim i As Long, NBlg As Long
    NBlg = 3
    i = 1
    Do Until i > NBlg
        Range("A" & i) = i
        If i = 2 Then NBlg = 4
        i = i + 1
    Loop
End Sub

Remarque : la boucle For est normalement utilisée quand on connaît d'avance les bornes, alors que la boucle Do ... loop teste la condition de sortie à chaque itération. La seule contrainte de cette boucle, par rapport à la boucle For qui gère une sortie automatique par le biais de l'instruction Next, et qu'on doit incrémenter le numéro d'itération à lintérior de la boucle sinon elle deviendra une boucle sans fin.

Bonjour GameOver, Raja,

Merci pour les solutions proposées.

Rechercher des sujets similaires à "redefinir borne superieure boucle"