Boucle VBA jusqu'à validation condition

skyzino Messages postés 32 Statut Membre -  
chossette9 Messages postés 6855 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

  1. skyzino Messages postés 32 Statut Membre
     
    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
  2. Freedomsoul Messages postés 538 Statut Membre 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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. skyzino Messages postés 32 Statut Membre
     
    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
  7. skyzino Messages postés 32 Statut Membre
     
    Chossette,

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

    Merci quand même
    0
    1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      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
  8. Freedomsoul Messages postés 538 Statut Membre 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