Boucles imbriquées sans fin

Bonjour

J'ai fait une macro avec une boucle imbriquée dans une autre et bien sûr la condition de la 1ere boucle n'est jamais remplie donc la boucle Do Until ne s'arrête jamais et ne vois pas passer la condition de sortie.

Y aurait il une manière propre pour sortir de la première ou 2 eme boucle dès que l'une ou l'autre voit la condition:

num_lign = 100 ?

Voici mon programme, merci:

Sub Calcul_Energie()
'
' Calcul_Energie Macro

'Déclaration variables
Dim num_column As Integer
Dim num_lign As Integer
Dim Energy As Single
Dim Affichage_column As Integer
Dim Affichage_lign As Integer
Dim compteur As Integer
Dim Tfinal As Single
Dim Tinitial As Single

'Initialisation
num_column = 8
num_lign = 3
Affichage_column = 11
Affichage_lign = 4

      Do Until num_lign = 100
            While Cells(num_lign, num_column) = True
                    If (compteur = 0) Then
                    Tinitial = Cells(num_lign, 4)
                    End If
                compteur = compteur + 1
                num_lign = num_lign + 1
            Wend
                Tfinal = Cells(num_lign - 1, 4)
                Energy = Cells(num_lign - 1, 7) * (Tfinal - Tinitial)
                Cells(num_lign, Affichage_column) = Energy
                compteur = 0
                num_lign = num_lign + 1

     Loop

End Sub

Bonsoir,

Sans doute que While... Wend n'est pas le type de boucle adaptée... Microsoft l'a remplacée par Do... Loop qui permet d'en sortir de 5 façons différentes depuis une bonne vingtaine d'années...

Bonsoir,

    Sub Calcul_Energie()
    '
    ' Calcul_Energie Macro

    'Déclaration variables
    Dim num_column As Integer
    Dim num_lign As Integer
    Dim Energy As Single
    Dim Affichage_column As Integer
    Dim Affichage_lign As Integer
    Dim compteur As Integer
    Dim Tfinal As Single
    Dim Tinitial As Single

    'Initialisation
    num_column = 8
    num_lign = 3
    Affichage_column = 11
    Affichage_lign = 4

          Do Until num_lign = 100
                While Cells(num_lign, num_column) = True
                        If (compteur = 0) Then
                        Tinitial = Cells(num_lign, 4)
                        End If
                    compteur = compteur + 1
                    num_lign = num_lign + 1     'première addition
                Wend
                    Tfinal = Cells(num_lign - 1, 4)
                    Energy = Cells(num_lign - 1, 7) * (Tfinal - Tinitial)
                    Cells(num_lign, Affichage_column) = Energy
                    compteur = 0
                    num_lign = num_lign + 1     'seconde addition !

         Loop

    End Sub

si je ne me trompe, avec num_lign = num_lign + 1 inscrit 2 fois, il se peut que num_lign ne passe jamais à 100, mais de 99 à 101...

il me semblerai plus prudent de revoir la condition, tant que num_lign < 100.

Do while num_lign <100

Re,

Je confirme, revoir la condition.

Si valeur = vrai à la ligne 99, alors incrémentation de num_lign deux fois, la valeur 100 n'est jamais vu au passage de Loop.

Boucle sans fin, et dans ce cas, le terme est vrai.

Rechercher des sujets similaires à "boucles imbriquees fin"