Boucle indéfini

Fermé
platypus69 - Modifié par platypus69 le 2/07/2013 à 16:51
 platypus69 - 3 juil. 2013 à 14:07
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

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