Boucle indéfini
platypus69
-
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
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
A voir également:
- Boucle indéfini
- Boucle excel sans macro - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
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
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