Boucle indéfini

platypus69 -  
 platypus69 -
Bonjour,

j'ai cherché un peu sur le net, mais je ne suis pas bien sur de savoir l'appliquer. mon but est de parcourir une feuille pour récupérer des informations (feuille donnee) et les copier sur une autre feuille (suivi_ca).

j'ai mis en place un boucle en FOR avec une fin en Nb_ligne_suivi_CA mais cette variable va changer car il peux y avoir deux fois le même élément cherché et dans ce cas le programme insère une ligne.

Comment peut-on faire pour que FOR reprenne en considération ce changement ? Faut-il utiliser un Do -> Loop until et si oui comment ?

Merci par avance

Sub recherche_client_test()
' /// permet de trouver les CA des clients de la liste
'Création des variables
Dim Nb_ligne_suivi_CA As Long
Dim Nb_ligne_donnee As Long
Dim code_nav As String
Dim compteur As Integer
Dim plant As String
Dim libelle As String
Dim cp As String
Dim bd As String
Dim CAN3 As Long
Dim CAN2 As Long
Dim CAN1 As Long
Dim forecast As Long
Dim cumul As Long


'Définit les valeurs des variables
Nb_ligne_suivi_CA = Sheets("suivi_CA").Range("A65536").End(xlUp).Row 'Numéro de la dernière ligne écrite
Nb_ligne_donnee = Sheets("donnee").Range("A65536").End(xlUp).Row 'Numéro de la dernière ligne écrite
'Range("B25").Value = Nb_ligne_suivi_CA ' donne le nomdre de ligne (valeur test)

For I = 2 To Nb_ligne_suivi_CA 'premiere boucle pour la feuille suivi_CA
compteur = 0
'on récupe le code_nav de la premiere ligne pour le comparer avec la feuille donnee
code_nav = Sheets("suivi_CA").Range("A" & I).Value
    
    For J = 2 To Nb_ligne_donnee 'deuxieme boucle pour faire la comparaison
    If code_nav = Sheets("donnee").Range("N" & J).Value Then
        If compteur >= 1 Then
        Rows(I + 1).Select
        Selection.Insert Shift:=xlDown
        I = I + compteur
        End If
    ' permet de convertir les formats textes en chiffre
    CAN3 = Sheets("donnee").Range("W" & J).Value
    CAN2 = Sheets("donnee").Range("X" & J).Value
    CAN1 = Sheets("donnee").Range("Y" & J).Value
    forecast = Sheets("donnee").Range("AF" & J).Value
    cumul = Sheets("donnee").Range("AG" & J).Value

    ' on réécrit les valeurs dans les cases en lignes
    Sheets("suivi_CA").Range("B" & I).Value = Sheets("donnee").Range("O" & J).Value
    Sheets("suivi_CA").Range("C" & I).Value = Sheets("donnee").Range("P" & J).Value
    Sheets("suivi_CA").Range("D" & I).Value = Sheets("donnee").Range("R" & J).Value
    Sheets("suivi_CA").Range("E" & I).Value = Sheets("donnee").Range("S" & J).Value
    Sheets("suivi_CA").Range("F" & I).Value = CAN3
    Sheets("suivi_CA").Range("G" & I).Value = CAN2
    Sheets("suivi_CA").Range("H" & I).Value = CAN1
    Sheets("suivi_CA").Range("I" & I).Value = forecast
    Sheets("suivi_CA").Range("J" & I).Value = cumul
    
    compteur = compteur + 1
    
    Range("B25").Value = compteur '(valeur test)

    End If
    
    Next
Nb_ligne_suivi_CA = Sheets("suivi_CA").Range("A65536").End(xlUp).Row
Range("C25").Value = Nb_ligne_suivi_CA '(valeur test)
Next

End Sub

1 réponse

  1. platypus69
     
    après avoir bien cherché toute la nuit, j'ai trouvé comment utiliser le DO LOOP.

    Maintenant, quand le compteur passe à 2, et qu'il y a encore des lignes à marquer, il me rajoute une ligne vide.

    J'aimerais savoir où il y a une erreur.

    Merci par avance

    'Définit les valeurs des variables
    Nb_ligne_suivi_CA = Sheets("suivi_CA").Range("A65536").End(xlUp).Row 'Numéro de la dernière ligne écrite
    Nb_ligne_donnee = Sheets("donnee").Range("A65536").End(xlUp).Row 'Numéro de la dernière ligne écrite
    'Range("B25").Value = Nb_ligne_suivi_CA ' donne le nomdre de ligne (valeur test)
    I = 2
        Do 'premiere boucle pour la feuille suivi_CA
        compteur = 0
       
        'on récupe le code_nav de la premiere ligne pour le comparer avec la feuille donnee
        code_nav = Sheets("suivi_CA").Range("A" & I).Value
        
            For J = 2 To Nb_ligne_donnee 'deuxieme boucle pour faire la comparaison
                If code_nav = Sheets("donnee").Range("N" & J).Value Then
                    If compteur >= 1 Then
                    Rows(I + 1).Insert Shift:=xlDown
                    I = I + compteur
                    Sheets("suivi_CA").Range("A" & I).Value = code_nav
                    Nb_ligne_suivi_CA = Nb_ligne_suivi_CA + 1
                    End If
                    
                    
                    
                ' permet de convertir les formats textes en chiffre
                CAN3 = Sheets("donnee").Range("W" & J).Value
                CAN2 = Sheets("donnee").Range("X" & J).Value
                CAN1 = Sheets("donnee").Range("Y" & J).Value
                forecast = Sheets("donnee").Range("AF" & J).Value
                cumul = Sheets("donnee").Range("AG" & J).Value
                
                ' on réécrit les valeurs dans les cases en lignes
                Sheets("suivi_CA").Range("B" & I).Value = Sheets("donnee").Range("O" & J).Value
                Sheets("suivi_CA").Range("C" & I).Value = Sheets("donnee").Range("P" & J).Value
                Sheets("suivi_CA").Range("D" & I).Value = Sheets("donnee").Range("R" & J).Value
                Sheets("suivi_CA").Range("E" & I).Value = Sheets("donnee").Range("S" & J).Value
                Sheets("suivi_CA").Range("F" & I).Value = CAN3
                Sheets("suivi_CA").Range("G" & I).Value = CAN2
                Sheets("suivi_CA").Range("H" & I).Value = CAN1
                Sheets("suivi_CA").Range("I" & I).Value = forecast
                Sheets("suivi_CA").Range("J" & I).Value = cumul
        
                Range("B25").Value = compteur '(valeur test)
                Range("C25").Value = I
                Range("E25").Value = Nb_ligne_suivi_CA
                
                compteur = compteur + 1
                
                End If
        
            Next
            I = I + 1
        'Range("C25").Value = Nb_ligne_suivi_CA '(valeur test)
        Loop Until I > Nb_ligne_suivi_CA
    
    0