Boucle VBA jusqu'à validation condition

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. tu peux utiliser les Exit For pour sortir de tes for quand la condition est réalisée

      c'est ça que tu veux ?
      1. Contributeur
        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
        1. Contributeur
          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.
          1. 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
            1. Chossette,

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

              Merci quand même
              1. Contributeur
                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.
            2. 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