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
- Vlc lecture en boucle ✓ - Forum Lecteurs et supports vidéo
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Huawei s'allume et s'éteint en boucle - Forum Huawei
- Redémarrage en boucle Xiamo mi note 10 - 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