Boucles mutltiples

Bonjour , une petite question qui me revient assez souvent

si je dois boucler sur plusieurs variables à l'aide du " for - next" c'est un peu fastidieux d'ecrire

for  a =  1 to  10 
 for  b = 2  to 8 
   for c = 3 to 11 
     for  d  = 4 to 20 
      for  e = ......
        'traitement 
     next
   next
next
...
next

d'une part c'est laid et si j'ai 15 variables ...c'est pas top

Existe t il d'apres vous une parade ?

Merci pour vos avis

Bonjour,

je ne vois pas ce qui est "laid " dans cette manière d'écrire. Elle a selon moi l'avantage d'être bien lisible et facilement compréhensible, son inconvénient c'est que le nombre de boucles (et donc de variables) est statique.

des autres possibilités, utilisation d'une pile et d'un pointeur de pile qui indique quelle variable on est en train de traiter, procédure récursive, ...

[code]Sub aargh()
'avec une pile
    vi = Array(1, 2, 3, 4) 'valeurs initiales des boucles (4 valeurs-> 4 boucles imbriquées)
    vf = Array(10, 8, 11, 20) 'valeurs finales des boucles
    ReDim pile(UBound(vi))
    pointeurpile = 0
    Do
        If pile(pointeurpile) = "" Then pile(pointeurpile) = vi(pointeurpile) Else pile(pointeurpile) = pile(pointeurpile) + 1
        If pile(pointeurpile) > vf(pointeurpile) Then
            pile(pointeurpile) = ""
            pointeurpile = pointeurpile - 1
        Else
            If pointeurpile = UBound(vi) Then
                'traitement
                t = ""
                For i = LBound(pile) To UBound(pile)
                    t = t & " " & pile(i)
                Next i
                ctrl = ctrl + 1
                Cells(ctrl, 1) = t
            Else
                If pointeurpile < UBound(vi) Then
                    pointeurpile = pointeurpile + 1
                End If
            End If
        End If
    Loop Until pointeurpile = -1
End Sub
Sub aargh1()
'avec un traitement récursif
    vi = Array(1, 2, 3, 4)
    vf = Array(10, 8, 11, 20)
    combine vi, vf
End Sub

Sub combine(vi, vf, Optional n = 0, Optional t= "", Optional ctrl = 0)
    ot = t
    For i = vi(n) To vf(n)
        t = t & " " & i
        If n = UBound(vi) Then
            'traitement
            ctrl = ctrl + 1
            Cells(ctrl, 1) = t
        Else
            combine vi, vf, n + 1, s, ctrl
        End If
        t = ot
    Next i
End Sub

En tout cas un grand merci pour vos réponse même si je n ai pas bien compris cette histoire de pile, je vais regarder ça de près... Merci à vous

Bonjour,

comme je le disais, cela perd en lisibilité et donc en facilité de compréhension du code.

Rechercher des sujets similaires à "boucles mutltiples"