Problème avec une boucle do while
Résolu
Orelyi
-
Orelyi -
Orelyi -
Bonjour,
Je suis débutante en VBA et je viens de me lancer dans une des premières macros et je ne comprends pas pourquoi ma boucle do loop while ne fonctionne pas.
Do
Sheets("sheet2").Select
POcomplet = Cells(k, 1)
Sheets("ListePO").Select
For Each cell1 In Range("B2:B200")
Sheets("ListePO").Select
If cell1 = POcomplet Then
cell1 = "complet"
End If
Sheets("sheet2").Select
Next
k = k + 1
Loop While Cells(k, 1) <> ""
J'ai 2 listes: une dans sheet2 et l'autre dans liste PO et je souhaite comparer les 2, si une des valeurs dans liste PO et également présente dans sheet 2 je remplace alors la valeur par "complet"
Je voulais faire cela avec deux boucles do while imbriquées mais cela ne fonctionne pas, j'ai alors choisi l'alternative avec des boucles for each et là cela fonctionne. Cependant c'est très long et je pense qu'avec un do while cela serait plus efficace.
Est ce que qqn aurait une idée du problème?
Merci d'avance
Je suis débutante en VBA et je viens de me lancer dans une des premières macros et je ne comprends pas pourquoi ma boucle do loop while ne fonctionne pas.
Do
Sheets("sheet2").Select
POcomplet = Cells(k, 1)
Sheets("ListePO").Select
For Each cell1 In Range("B2:B200")
Sheets("ListePO").Select
If cell1 = POcomplet Then
cell1 = "complet"
End If
Sheets("sheet2").Select
Next
k = k + 1
Loop While Cells(k, 1) <> ""
J'ai 2 listes: une dans sheet2 et l'autre dans liste PO et je souhaite comparer les 2, si une des valeurs dans liste PO et également présente dans sheet 2 je remplace alors la valeur par "complet"
Je voulais faire cela avec deux boucles do while imbriquées mais cela ne fonctionne pas, j'ai alors choisi l'alternative avec des boucles for each et là cela fonctionne. Cependant c'est très long et je pense qu'avec un do while cela serait plus efficace.
Est ce que qqn aurait une idée du problème?
Merci d'avance
A voir également:
- Problème avec une boucle do while
- My people do - Télécharger - Organisation
- Do not turn off target traduction - Forum Samsung
- Samsung galaxy tab S Bloquer Downloading do not turn off target - Forum Téléphones & tablettes Android
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- What you do what you say - Forum Audio
1 réponse
bonjour
1. quelques simplifications dans ton code (les Select ne sont pas terribles)
au point de vue rapidité ça ne devrait pas être très significatif avec deux boucles do ... loop while
j'ai ajouté un exit for qui permet de quitter la boucle for each dès que POComplet est trouvé dans la feuille ListePO
2. un code un peu plus explicite avec deux boucles for ... next
bonne suite
1. quelques simplifications dans ton code (les Select ne sont pas terribles)
au point de vue rapidité ça ne devrait pas être très significatif avec deux boucles do ... loop while
j'ai ajouté un exit for qui permet de quitter la boucle for each dès que POComplet est trouvé dans la feuille ListePO
Do
k = 1
POcomplet = Sheets("sheet2").Cells(k, 1)
For Each cell1 In Sheets("ListePO").Range("B2:B200")
If cell1 = POcomplet Then
cell1 = "complet"
exit for
End If
Next
suite:
k = k + 1
Loop While Sheets("sheet2").Cells(k, 1) <> ""
2. un code un peu plus explicite avec deux boucles for ... next
Dim liPO As Long, lifinPO As Long
Dim lish2 As Long, lifinsh2 As Long
Dim POcomplet
' desactive le rafraichissement ecran
Application.ScreenUpdating = False
' recuperation de la dernière ligne non vide feuille ListePO colonne 1
lifinPO = Sheets("ListePO").Cells(Rows.Count, 1).End(xlUp).Row
' recuperation de la dernière ligne non vide feuille sheet2 colonne 2
lifinsh2 = Sheets("sheet2").Cells(Rows.Count, 2).End(xlUp).Row
' on decrit la liste de la feuille sheet2
For lish2 = 2 To lifinsh2
POcomplet = Sheets("sheet2").Cells(lish2, 2).Value
' pour cette valeur de v on décrit la feuille ListePO
For liPO = 1 To lifinPO
If Sheets("ListePO").Cells(liPO, 1).Value = POcomplet Then
' on met complet dans la cellule a droite (pour ne pas effacer)
Sheets("ListePO").Cells(liPO, 2).Value = "complet"
' on quitte la boucle si POComplet dans sheet2 ne figure
' qu'une fois dans ListePO
' sinon supprimer Exit for
Exit For
End If
Next liPO
Next lish2
Application.ScreenUpdating = True
bonne suite
Orelyi
merci beaucoup! La deuxième boucle que tu m'as proposé fonctionne trés bien et vraiment rapidement, je pense que l'exit for y est pour beaucoup!