Boucle VBA jusqu'à validation condition

Fermé
skyzino Messages postés 28 Date d'inscription jeudi 20 septembre 2012 Statut Membre Dernière intervention 2 juillet 2013 - Modifié par skyzino le 8/10/2012 à 13:56
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 - 8 oct. 2012 à 14:16
Bonjour,

J'ai un peu besoin de votre aide pour que cette procédure se répète jusqu'à ce que la condition soit réalisée

Dim Derlig As Long, i As Long

With Sheets("FTP")
Derlig = .Range("F" & Rows.Count).End(xlUp).Row
For i = 2 To Derlig

If .Cells(i, 8) < .Cells(1, 16) Then
.Range("F" & i) = .Range("H" & i) + 1

.Range("H" & i) = .Range("F" & i) + .Range("G" & i)

End If
Next i
End With

End Sub

Mais je ne sais pas trop comment configurer ma boucle, pourriez-vous m'orienter sur la marche à suivre...
Par avance merci

7 réponses

skyzino Messages postés 28 Date d'inscription jeudi 20 septembre 2012 Statut Membre Dernière intervention 2 juillet 2013
8 oct. 2012 à 14:00
Peut-êtr eque mon post ne traduit pas correctement ce que je souhaite faire.

Je souhaite que la procédure ne prennent fin que lorsque cells(i,8) soit supérieur à cells(1,16)

Merci pour ceux qui prendront le temps de me donner un coup de main
0
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
8 oct. 2012 à 14:03
tu peux utiliser les Exit For pour sortir de tes for quand la condition est réalisée



c'est ça que tu veux ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 8/10/2012 à 14:06
Bonjour,
Si par hasard j'ai compris ta demande

le test de sortie se fait en arrivant sur la ligne ou se fait il après les calculs?

si ap^rès les calculs
.... 
If .Range("H" & i) < .Range("P1") Then 
     .Range("F" & i) = .Range("H" & i) + 1 
     .Range("H" & i) = .Range("F" & i) + .Range("G" & i) 
     If .Range("H" & i) >= .Range("P1") Then Exit Sub 
End If 
 
...

si "en arrivant"
.
.. 
If .Range("H" & i) >= .Range("P1") Then 
     Exit For 
Else 
     .Range("F" & i) = .Range("H" & i) + 1 
     .Range("H" & i) = .Range("F" & i) + .Range("G" & i) 
End If


Michel
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
Modifié par chossette9 le 8/10/2012 à 14:08
Bonjour,

Dim Derlig As Long, i As Long  

With Sheets("FTP")  
Derlig = .Range("F" & Rows.Count).End(xlUp).Row  
i = 2  
Do Until .Cells(i, 8) >= .Cells(1, 16)
.Range("F" & i) = .Range("H" & i) + 1  

.Range("H" & i) = .Range("F" & i) + .Range("G" & i)  
i = i +1 
Loop 
End With  

End Sub


Ce mec la n'était pas une lumière, car il était niais.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
skyzino Messages postés 28 Date d'inscription jeudi 20 septembre 2012 Statut Membre Dernière intervention 2 juillet 2013
8 oct. 2012 à 14:10
Merci à tous,

Pour ma part voici ce que j'avais fait.

Je vais essayer ta procédure chossette car la mienne est bien lente

Dim Derlig As Long, i As Long
   
    With Sheets("FTP")
      Derlig = .Range("F" & Rows.Count).End(xlUp).Row
      For i = 2 To Derlig

While .Cells(i, 8) < .Cells(1, 16)

        If .Cells(i, 8) < .Cells(1, 16) Then
          .Range("F" & i) = .Range("H" & i) + 1

          .Range("H" & i) = .Range("F" & i) + .Range("G" & i)

        End If
        
 Wend
      Next i
    End With

End Sub
0
skyzino Messages postés 28 Date d'inscription jeudi 20 septembre 2012 Statut Membre Dernière intervention 2 juillet 2013
8 oct. 2012 à 14:14
Chossette,

Le code que tu m'a communiqué n'agit pas sur les dates.

Merci quand même
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
8 oct. 2012 à 14:16
Bizarre, si ça fonctionnait avant, je ne vois pas pourquoi ça ne fonctionnerait plus maintenant. J'ai juste modifié le code pour qu'il fasse ce que tu demandes, jusqu'à ce que Cellule(i, 8) soit supérieure ou égale à Cellule(1,16).

Tu peux mettre un exemple de ce que tu souhaites faire ? Rends-toi sur cjoint.com pour créer un lien, et copie ensuite ce lien en réponse à cette conversation.

Cordialement.
0
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
Modifié par Freedomsoul le 8/10/2012 à 14:18
houlà, pas sur que ça soit super de faire ça, une double boucle ?, est-ce vraiment utile?

le plus simple serait :

Dim Derlig As Long, i As Long  
     
With Sheets("FTP")  
Derlig = .Range("F" & Rows.Count).End(xlUp).Row  
      For i = 2 To Derlig  
            If .Cells(i, 8) < .Cells(1, 16) Then  
                  .Range("F" & i) = .Range("H" & i) + 1 
        ' peut etre mieux avec ça :   =====>>     .Cells(i,6) = .Cells(i,8)+1 
        ' .Cells(i,6) = .Cells(i,8)+1 

                  .Range("H" & i) = .Range("F" & i) + .Range("G" & i)  
        ' peut etre mieux avec ça :   =====>>
        '.Cells(i,8) = .Cells(i,6) + .Cells(i,7) 

                  exit for  
            End If  
      Next i  
End With  

End Sub  
0