nanardino64
Messages postés131Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention17 mars 2010
-
28 août 2007 à 13:41
nanardino64
Messages postés131Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention17 mars 2010
-
29 août 2007 à 15:19
Bonjour tout le monde,
Mon problème est que j'ai une répétition for qui ne s'arrête jamais car la variable ne s'arrête pas ?!?
C'est pour un logiciel de mise en barre, mes longueurs sont inscrites en colonne et chaque fois que j'en place une je transfère la valeur dans une autre feuille et je la supprime de la colonne (en prenant soin de modifier les valeurs de ma répétition. Voici le code :
Sub Mise_en_Barre_IPE()
I = 2
J = 2
Int_Reste_15 = 15000
While Not Sheets("IPE").Cells(2, 1).Value = ""
While Not Sheets("IPE").Cells(I, 1).Value = ""
I = I + 1
Wend
Int_Dernière_Ligne = I - 1
For I = 2 To Int_Dernière_Ligne
Int_Barre_Active = Sheets("IPE").Cells(I, 1).Value
If Int_Reste_15 > Int_Barre_Active Then
Int_Reste_15 = Int_Reste_15 - Int_Barre_Active
Sheets("IPE").Cells(I, 1).Delete Shift:=xlUp
Sheets("Mise en barre").Cells(J, 2).Value = Int_Barre_Active
J = J + 1
If I <> Int_Dernière_Ligne Then
I = I - 1
Int_Dernière_Ligne = Int_Dernière_Ligne - 1
End If
End If
Next I
J = J + 1
Wend
End Sub
Ce qui se passe c'est que I dépasse la valeur de Int_Dernière_Ligne...
Qu'est-ce qui se passe
If Int_Reste_15 > Int_Barre_Active And Int_Barre_Active <> 0 Then
Int_Reste_15 = Int_Reste_15 - Int_Barre_Active
Sheets("IPE").Cells(I, 1).Delete Shift:=xlUp
Sheets("Mise en barre").Cells(J, 2).Value = Int_Barre_Active
J = J + 1
Else
I = I + 1
End If
If Sheets("IPE").Cells(I, 1).Value = "" And I <> 2 Then
I = 2
Int_Reste_15 = 15000
J = J + 1
End If
Wend
End Sub
Bon ben comme ça, ça marche
merci à vous
allez chous
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 28 août 2007 à 13:56
En règle général, on ne doit jamais modifier la valeur de la variable de boucle dans un For !
Je ne sais pas ce que vaut la variable Int_Dernière_Ligne, mais si celle-ci ne vaut pas la même chose que I (à savoir 2 au premier tour de boucle) ta variable I n'augmentera jamais, car le For l'incrémente, et la clause Then du If la décrémente.
A mon avis, tu devrais revoir toute ta boucle For ... Next
en plus, tu utilises cette même variable I en dehors de la boucle For ... Next !
Ce n'est pas recommandé non plus ! Surtout que c'est dans une boucle While ... Wend
lucfrfr
Messages postés5Date d'inscriptionmercredi 24 août 2005StatutMembreDernière intervention19 mai 2009 29 août 2007 à 11:38
ok alors je pense que juste avant For I = 2 To Int_Dernière_Ligne, tu devrais faire un if I>=int_derniere_ligne then. et evidement fermer cette condition (end if) après le next i .
Par contre juste une chose...
Evite fortement les accents pour le nom des variables, comme Int_Derniè re_Ligne.
Vous n’avez pas trouvé la réponse que vous recherchez ?
nanardino64
Messages postés131Date d'inscriptionvendredi 18 août 2006StatutMembreDernière intervention17 mars 2010 29 août 2007 à 13:37
Ok ben merci Mortalino pour la petite astuce qui va bien je connaissais pas la commande, ma méthode était un peu plus lourde.
Je sors tout de suite l'accent de ma variable, je fais quelques modifs et je vous tiens au courant.
C'est quand même bizarre cette histoire car même si je modifie la valeur du compteur dans la répétition normalement une fois que I=Int_Derniere_Ligne (ce qui se produit, j'avais vérifié en exécutant pas à pas) il ne devrait plus repartir dans la boucle ce qu'il fait et du coup I va vers l'infini.