Bonsoir PierreJean,
Bonsoir à tous,
je joins la macro que tu as écrite:
Sub test()
fin = Range('F1').End(xlDown).Row
For n = 1 To fin
If Cells(n, 6).Interior.ColorIndex = 3 Then
Rows(n).Copy Destination:=Rows(fin + 1)
Rows(n).Delete
End If
Next n
End Sub
Cette macro copie en bas de tableau puis supprime les lignes dont la colonne 6 est rouge (code 3)
Quand j'ai lancé la macro avec mon fichier, je me suis aperçu qu'elle laissait des lignes avec des cellules rouges éparpillées dans le fichier? (alors que le petit fichier de test fonctionnait)
J'ai compris que l'erreur se produisait quand 2 (ou plus) lignes avec des cellules rouges se 'touchaient', la ligne déplacée et supprimée semble ne pas être testée.
La macro fonctionne parfaitement si les lignes 'rouges' ne se touchent pas (une au dessus ou dessous de l'autre)
Que faudrait il rajouter à la macro pour éviter ces' oublis' ?
le msgbox(fin) est à supprimer
il me servait à voir ou le bat blessait
toutes mes excuses
voila le bon fichier [file name=pourJJ_20060216131411.zip size=7800]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/pourJJ_20060216131411.zip[/file]
j'ai posté le message' à l'attention de ...' car le message était ciblé pour PierreJean qui avait écrit la macro, CQFD.
Mais quiconque pouvait intervenir bien sûr...
Pour revenir à nos moutons!! j'ai testé la macro ce matin (sans ligne vierge dans le fichier) et ça ne marche toujours pas... (pourtant j'ai remonté le fichier (fin to 1) et rajouté n=n-1 ), il faut relancer la macro autant de fois qu'il y a de cellules rouges 'collées'.
La macro fonctionne bien si aucune cellule rouge n'est collée au dessus ou dessous d'une autre.
Que dois je faire?
je vais tester le fichier zip joint
merci et bonne AM
JJ
Tu n'a pas du bien comprendre ce que l'on a tta proposé, il faut utiliser la ligne : For i=fin to 1 step -1
c'est a dire que l'on part de la fin de la page vers le haut, step -1 etant le pas qui permet de remonter.
Si tu utilises cette ligne, tu n'as pas besoin de mettre n=n-1
Bonjour Pierrejean
On oublie les cellules vides (lignes vierges) , dans ma macro j'ai remplacé clear contents par delete, le fichier de données n'a donc aucun 'trou' et va de la ligne 1 a la fin sans aucune ligne vide.
Par contre le problème subsiste pour les cellules rouges 'oubliées 'par la macro, j'ai pourtant modifié comme vous me l'aviez dit.
a+
JJ
rebonjour
je viens de faire un fichier Excel d'exemple compressé que je joins.
Bonne AM
JJ [file name=rouge.zip size=2617]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/rouge.zip[/file]
Je veins de tester sur ton fichier et sur d'autre exemple, et la macro qui suit marche a chaque fois :
Code:
Sub test_v5()
Dim i As Integer, fin As Integer
fin = Range('A65536').End(xlUp).Row
For i = fin To 1 Step -1
If Cells(i, 6).Font.ColorIndex = 3 Then
Rows(i).Copy Destination:=Rows(fin + 1)
Rows(i).Delete
End If
Next i
End Sub
Tu remarqueras que j'ai changer le .Interior.ColorIndex en Font.ColorIndex.
Pierrejean, heureusement que tu suis plus que moi parce que sinon je crois qu'on s'en sortirai pas, j'avais pas compris qu'il fallait garder l'odre des données.
Je crois que si on continue comme ca, on va battre le record du plus long fil
Et merci à vous 3 pour la réussite de la résolution de ce problème difficile car la macro marche super depuis que j'ai enlevé le n=n-1 (et le classement est conservé!)
BRAVO
JJ
Bon WE
PS : A l'attention de Pascal 76 (Modérateur)
Le roblème est résolu par les intervenants da la première heure. En effet, il facile à celui qui a conçu et créé une macro de la modifier ...
Le sujet peut être renommé :'déplacement de lignes'
Cordialement
JJ