VBA Problème de boucle
Résolu
onra
-
onra -
onra -
A voir également:
- VBA Problème de boucle
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum Excel
- Dépassement de capacité vba ✓ - Forum Excel
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Vba attendre 1 seconde ✓ - Forum VB / VBA
8 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Quel est le but de While (Worksheets(3).Cells(i, 1).Value = "") ?
Bonjour,
si tu cherches la première cellule vide ce n'est pas : While (Worksheets(3).Cells(i, 1).Value = "") qu'il faut faire mais
While Worksheets(3).Cells(i, 1).Value <> "" ... ici tu incrémentes bien i à chaque ligne non vide trouvée et tu sors du While à la première cellule vide trouvée.
;o)
si tu cherches la première cellule vide ce n'est pas : While (Worksheets(3).Cells(i, 1).Value = "") qu'il faut faire mais
While Worksheets(3).Cells(i, 1).Value <> "" ... ici tu incrémentes bien i à chaque ligne non vide trouvée et tu sors du While à la première cellule vide trouvée.
;o)
Merci beaucoup, c'est nettement mieux - en tout cas ca me redonne espoir.
Donc avec cette boucle ca me eprmet de copeir sur la première ligne vide.
Mais le problème c'est que c'est une boucle infinie
et au lieu de me copier toutes les lignes qui comporte le Lot 1 ca me copie seulement la première ligne indéfiniment.
Je cherche toujours..............
Donc avec cette boucle ca me eprmet de copeir sur la première ligne vide.
Mais le problème c'est que c'est une boucle infinie
et au lieu de me copier toutes les lignes qui comporte le Lot 1 ca me copie seulement la première ligne indéfiniment.
Je cherche toujours..............
je vous remet le code entier, peut être y a t'il certaines erreurs que je n'ai pas vu:
Ligne = 1
i = 1
Do Until Worksheets("Bdd").Cells(Ligne, 4).Value = ""
If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then
While Worksheets(3).Cells(i, 1).Value <> ""
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6)
MsgBox ("i" & i)
Wend
i = i + 1
End If
Ligne = Ligne + 1
MsgBox ("ligne" & Ligne)
Loop
Columns("A:L").EntireColumn.AutoFit
Ligne = 1
i = 1
Do Until Worksheets("Bdd").Cells(Ligne, 4).Value = ""
If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then
While Worksheets(3).Cells(i, 1).Value <> ""
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6)
MsgBox ("i" & i)
Wend
i = i + 1
End If
Ligne = Ligne + 1
MsgBox ("ligne" & Ligne)
Loop
Columns("A:L").EntireColumn.AutoFit
re
Essaies comme ça:
et dis ce que ça donne...
;o)
Essaies comme ça:
Ligne = 1 i = 1 While Worksheets("Bdd").Cells(Ligne, 4).Value <> "" If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then While Worksheets(3).Cells(i, 1).Value <> "" Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5) Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6) 'MsgBox ("i" & i) i = i + 1 Wend End If Ligne = Ligne + 1 'MsgBox ("ligne" & Ligne) Wend
et dis ce que ça donne...
;o)
Ca m'enmerde de te dire ca, mais.... c'est pas encore ca.
Quand je test ta boucle ca me copie indéfiniement la première ligne comportent le lot1 de la feuille 1 vers la feuille 3.
Alors le premier probleme , c'est que c'est une boucle infinie
Je vais donc aussi essayé de réespliquer ce dont j'ai besoin
J'ai une feuille1 avec un tableau dont une colonne comporte une série de lot
Par exemple: Lot1
Lot2
Lot5
Lot8
Lot1
Lot3
A ces cellule sont associées d'autre cellules avec certaines valeurs définissant ces lots
Mon but est de trier ce tableau, en prenant toutes les valeurs associées à un lot (lot1 par exemple) pour les copier lignes par ligne dans un aure tableau feuille3
Voila pour les explications....
Maintenant, je comprend vraiement pas pourquoi cette boucle ne fonctionne pas
Quand je test ta boucle ca me copie indéfiniement la première ligne comportent le lot1 de la feuille 1 vers la feuille 3.
Alors le premier probleme , c'est que c'est une boucle infinie
Je vais donc aussi essayé de réespliquer ce dont j'ai besoin
J'ai une feuille1 avec un tableau dont une colonne comporte une série de lot
Par exemple: Lot1
Lot2
Lot5
Lot8
Lot1
Lot3
A ces cellule sont associées d'autre cellules avec certaines valeurs définissant ces lots
Mon but est de trier ce tableau, en prenant toutes les valeurs associées à un lot (lot1 par exemple) pour les copier lignes par ligne dans un aure tableau feuille3
Voila pour les explications....
Maintenant, je comprend vraiement pas pourquoi cette boucle ne fonctionne pas
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
et ceci ?
Ligne = 1
i = 1
While Worksheets("Bdd").Cells(Ligne, 4).Value <> ""
If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6)
'MsgBox ("i" & i)
i = i + 1
End If
Ligne = Ligne + 1
'MsgBox ("ligne" & Ligne)
Wend
Ligne = 1
i = 1
While Worksheets("Bdd").Cells(Ligne, 4).Value <> ""
If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6)
'MsgBox ("i" & i)
i = i + 1
End If
Ligne = Ligne + 1
'MsgBox ("ligne" & Ligne)
Wend
Oui je suis d'accord ca serait plus simple, mais pour mon tableau ce n'est pas possible.
La petite boucle while au mileu me permet de chercher la première ligne vide du tableau de la feuille 3 et c'est indispensable.
En fait elle a un peu la meme fonction que la première boucle while, qui engendre l'action demandée tant que le code ne rencontre pas une cellule vide.
La petite boucle while au mileu me permet de chercher la première ligne vide du tableau de la feuille 3 et c'est indispensable.
En fait elle a un peu la meme fonction que la première boucle while, qui engendre l'action demandée tant que le code ne rencontre pas une cellule vide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
re
pitete comme ça
Ligne = 1 i = 1 While Worksheets("Bdd").Cells(Ligne, 4).Value <> "" If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then While Worksheets(3).Cells(i, 1).Value <> "" i = i + 1 wend Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5) Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6) 'MsgBox ("i" & i) End If Ligne = Ligne + 1 'MsgBox ("ligne" & Ligne) Wend
pitete comme ça
Ligne = 1
i = 1
While Worksheets("Bdd").Cells(Ligne, 4).Value <> ""
If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then
While Worksheets(3).Cells(i, 1).Value <> ""
i = i + 1
wend
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6)
'MsgBox ("i" & i)
i=i+1
End If
Ligne = Ligne + 1
'MsgBox ("ligne" & Ligne)
Wend
i = 1
While Worksheets("Bdd").Cells(Ligne, 4).Value <> ""
If Worksheets("Bdd").Cells(Ligne, 4) = "Lot1" Then
While Worksheets(3).Cells(i, 1).Value <> ""
i = i + 1
wend
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
Worksheets(3).Cells(i + 1, 2) = Worksheets(1).Cells(Ligne, 6)
'MsgBox ("i" & i)
i=i+1
End If
Ligne = Ligne + 1
'MsgBox ("ligne" & Ligne)
Wend
ok j'ai compris, tu copies sur la ligne vide trouvée + 1 :
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
est-ce normal ?
Si oui, alors rajoute après :
ligne = ligne + 1
i = 1
;o)
EDIT: il ne faut pas que tu ais des lignes vides dans worksheets(3) à partir de la première ligne renseignée jusqu'à la dernière ligne rensignée.
Worksheets(3).Cells(i + 1, 1) = Worksheets(1).Cells(Ligne, 5)
est-ce normal ?
Si oui, alors rajoute après :
ligne = ligne + 1
i = 1
;o)
EDIT: il ne faut pas que tu ais des lignes vides dans worksheets(3) à partir de la première ligne renseignée jusqu'à la dernière ligne rensignée.
While (Worksheets(3).Cells(i, 1).Value = "")
i = i+1
wend
Worksheets(3).Cells(i, 1) = Worksheets(1).Cells(Ligne, 5)
Worksheets(3).Cells(i, 2) = Worksheets(1).Cells(Ligne, 6)
Donc toujours pas de solution
Merci quand meme