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 SubBonsoir,
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 Subsi 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 <100Re,
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.