Bonsoir JORDAN, bonsoir Porcinet, bonsoir à toutes et à tous
🙂
JORDAN, j'avais lu le fil dans lequel tu demandais pourquoi ton code n'allait pas au-delà de la ligne 11. Du coup, tu as rajouté un bout de code pour réussir à faire ce que tu souhaitais, mais honnêtement, ça n'était pas satistaisant.
Je crois que dans de tels cas, il vaut mieux casser son code et tout revoir plutôt que d'ajouter des pansements :sick:
Je te propose le code joint (à toi de voir s'il correspond à ce que tu attends) :
Dim i%
Dim L%
'
' on détermine la ligne de la première cellule vide de la
' feuille 'NomFeuille' srictement inférieure à 49 (d'autres
' données à partir de la ligne 50)
L = 10
Do While L ‹= 49 And Sheets(NomFeuille).Cells(L, 1) ‹› ''
L = L + 1
Loop
'
' Si L est inférieur ou égal à 49, c'est qu'une ligne vide
' a été trouvée, les suivantes (jusqu'à 49) sont également
' vides.
If L <= 49 Then
'
' on sélectionne la feuille 'RESULTAT'
Sheets('RESULTAT').Select
'
' Puis, pour chaque ligne de 1 à la dernière ligne de données
' de la colonne C (feuille RESULTAT)
For i = 1 To Range('C65536').End(xlUp).Row
'
' si dans la colonne C, ligne i on trouve la valeur
' NomFeuille, les données sont à copier sur cette
' feuille
If Cells(i, 3).Value = NomFeuille Then
'
' on copie donc les données voulues de la ligne i de la
' feuille RESULTAT vers la ligne L de la feuille NomFeuille
Range('A' & i & ':B' & i & ',D' & i).Select
Selection.Copy Sheets(NomFeuille).Cells(L, 1)
'
' puis on incrémente L jusqu'à 49 (sortie de boucle à 50)
L = L + 1
If L › 49 Then Exit For
End If
Next i
End If
Attention aux signes ‹ et › si tu fais un copier/coller.
Maintenant, l'explication de l'erreur qui se produisait après la 2ème copie et lors du 2ème passage dans la boucle
For i = ...
Reprends ton code et regarde ce qu'il se passe :
1) tu rentres dans ta boucle
For i donc i = 1, à ce stade, la feuille RESULTAT est la feuille active,
2) tu actives la feuille
NomFeuille,
3) la ligne 10 colonne A est vide (c'est évident si tu as réussi à copier 2 lignes) donc tu entres dans le
If Sheets(NomFeuille).Cells(10, 1).Value = '' Then
4) tu sélectionnes, tu colles et tu rends à nouveau la feuille RESULTAT active,
4) retour à la boucle
For i et i = 2, (ou plus mais on va partir de l'hypothèse que
Cells(2, 3).Value = NomFeuille)
5) tu copies, tu sélectionnes la feuille
NomFeuille mais là, tu entres dans le 'sinon' du
If Sheets(NomFeuille).Cells(10, 1).Value = '' Then,
6) zut !!! une nouvelle boucle For avec
L,
7) Cells(10, 1) a déjà été rempli, donc on passe à la ligne 11 (qui est vide)
8) la cellule (L, 1) est sélectionnée, copie sur cette ligne, puis
activation de la feuille RESULTAT, mais... on continue la boucle
For L = ...
9) au 2ème passage dans le
If de cette boucle, tu essaies de sélectionner une cellule de la feuille
NomFeuille, or, c'est maintenant la feuille
RESULTAT qui est active !!! :sick:
donc PLANTAGE ...
Voili voilà
J'espère avoir été clair :unsure:
A+
😉