Boucle VBA jusqu'à validation condition

skyzino Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
chossette9 Messages postés 4239 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   97
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Contributeur Dernière intervention   1 311
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 311
 
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   Statut Membre Dernière intervention   97
 
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