Trier lignes par couleur de cellule

Bonjour à tous,

(La réponse à ma question existe peut-être sur le forum, mais je ne l’ai pas trouvée…)

J’ai, dans une feuille, une colonne dont les cellules ont des couleurs différentes.

Y a-t-il un moyen de trier la feuille suivant la couleur des cellules de cette colonne ?

Par avance : merci !

Bonjour

Oui.

exemple joint

Cordialement

1'719tricouleurs.zip (7.00 Ko)

Merci beaucoup pour ta réponse.

Ça marche en effet, mais bizarrement, dès que j'effectue un tri, les cellules de la colonne affichent le message d'erreur : #VALEUR!

Il "suffit" ensuite d'éditer le code de la feuille, faire un changement sans incidence (ajouter un espace), quitter le VBA, recalculer la feuille pour que les valeurs de la colonne 2 réapparaissent.

Autre problème : quand je change une couleur, la valeur de la colonne 2 ne change pas automatiquement.

Je suis obligé de faire la même manip que ci-dessus pour que les valeurs se mettent à jour...

Si tu peux me dire comment faire pour que le n° de couleur soit maintenu à jour sans faire toutes ces manips, je dois pouvoir me débrouiller moi-même pour créer une macro qui effectue le tri.

Merci !

Re bonjour

Je n'avais pas rencontré de pb lors du test par tri avec la souris et Données Trier.

Une Macro récupérée (Source XLD) qui semble donner le résultat souhaité et sans colonne intermédiaire.

Cordialement

966triecouleurs.zip (8.28 Ko)

Merci beaucoup pour ta réponse. Ça marche !

J'aimerais adapter cette macro pour qu'elle trie une plage de cellules nommées, suivant la couleur des cellules de la colonne F (sans avoir à renseigner de champ. Je créerai un bouton qui lance la macro directement).

Malheureusement, mes connaissances en VBA sont insuffisantes pour savoir le faire moi-même jusqu'au bout.

Quelqu'un pourrait-il m'aider ?

Bonjour,

Sujet intéressant tiens...

Il faudrait savoir si les cellules en couleur de la colonne F contiennent uniquement de la couleur ou s'il y a des valeurs dans ces cellules.

Mets un petit fichier avec quelques lignes contenant la plage à trier et une colonne F contenant les couleurs en question. Ce sera plus simple.

Amicalement

Merci pour ta réponse.

Voilà donc un fichier qui illustre ma question :

267exemple.xls (15.50 Ko)

– la plage de cellules est nommée (ça me donne plus d'évolutivité que si la zone à trier était spécifiée dans le code)

- les cellules contiennent effectivement du texte

– ce que je recherche : 1ère "clé" de tri : la couleur, 2ème clé : la valeur de la cellule

- le n° de couleur Excel me va bien comme ordre de tri par couleur

Merci à qui pourra m'aider !

Bonjour

A voir

647tri-couleurs-v001.zip (10.60 Ko)

Banzaï !!!!

C'est parfait, merci !!!!

-- Dim Jan 16, 2011 3:05 pm --

...euh, en fait je rencontre un petit problème, parce que je n'avais pas bien posé ma question :

  • ta macro marche impec sur des plages de x lignes par 1 colonne, comme je l'avais souhaité
  • mais j'ai essayé de l'adapter à mon usage précis, où la plage fait x lignes par y colonnes (voir fichier joint, avec une plage =Feuil1!$G$23), et là, ça crée plein de colonnes et c'est le bazar.
  • comment faire pour que ta macro fonctionne dans ce cas ?

- autre problème, plus mineur, avec ta macro : le 1er tri marche impec, mais quand on le répète, j'ai l'impression qu'Excel considère qu'il y a une ligne de titre, donc la 1ère ligne n'est pas triée...

Voilà, toute aide sera bien venue !

Merci à tous.

re,

vois le fichier joint

On met une colonne K avec la valeur de la couleur par formule (VBA) puis tu tries la Plage en fonction de cette colonne

Amicalement

532tricouleursv003.zip (9.97 Ko)

Merci beaucoup ! Ça marche !

Deux bémols :

  • il me semble qu'il n'y a plus de tri suivant la valeur de la cellule
  • est-on obligé d'en passer par une cellule avec la valeur de la couleur ? (ça crée une complication supplémentaire, mais je peux m'en arranger)

En tous cas, merci !

re,

edit Dan

Re,

essaie comme ceci :

Sub tricouleur()
'Macro dan pour gloub
Dim i As Byte, dlg As Byte
dlg = Range("F" & Rows.Count).End(xlUp).Row
For i = 2 To dlg
Range("K" & i) = Range("F" & i).Interior.ColorIndex
Next
Range("A2:K" & dlg).Sort Key1:=Range("K2"), Order1:=xlAscending, Key2:=Range("F2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom
Range("K2:K" & dlg).clearcontents
End Sub

Amicalement

Bonjour

Une autre tentative

125tri-couleurs-v002.zip (13.47 Ko)

@ banzai64 : très impressionnant ! Voire même plus que nécessaire dans mon cas, mais ça doit pouvoir servir dans d'autres cas.

Comment adapter le code si je veux créer un bouton qui ne trie que sur la colonne K ?

@ Dan : comme tu n'utilise pas de plage de cellules nommées, j'ai adapté le code à mon cas perso, où la plage à trier commence à la ligne 22 : ça marche super.

En revanche, quand le nombre de lignes à trier augmente (dans mon cas, environ 150 lignes), le temps d'exécution devient - relativement - long (plus long qu'avec la méthode de Banzai64).

Merci à tous les 2 !!!

re,

En revanche, quand le nombre de lignes à trier augmente (dans mon cas, environ 150 lignes), le temps d'exécution devient - relativement - long

Je ne vois pas pourquoi cela serait plus long car on parle de 150 lignes ici...

La plage nommée n'est pas vraiment nécessaire puisque le code prévoit l'augmentation de tes lignes.

Voici une petite modifications en changeant les variables et en prévoyant la plage à trier de sorte que le nom plage_à_classer n'est pas nécessaire.

Sub tricouleur()
'Macro dan pour gloub
Dim i As Integer, dlg As Integer
Dim plage As Range
dlg = Range("F" & Rows.Count).End(xlUp).Row
For i = 2 To dlg
Range("K" & i) = Range("F" & i).Interior.ColorIndex
Next
Set plage = Range("A2:K" & dlg)
plage.Sort Key1:=Range("K2"), Order1:=xlAscending, Key2:=Range("F2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom
Range("K2:K" & dlg).Delete
End Sub

Si ok, n'oublie pas ce cloturer le fil --> cliue sur le V vert.

Amicalement

Merci pour ta nouvelle réponse.

Je te confirme que l'exécution est lente (je vois les chiffres s'afficher un par un dans la colonne K), alors que mon fichier ne pèse que 100Ko...

Mais bon, ça marche.

re,

Ce n'est pas le code qui pose souci. Ce serait intéressant d'avoir ton fichier pour vérifier ce qui est le pb.

Vois déjà du coté des couleurs présentes. Elles ne doivent concerner que les cellules dont tu as besoin. Je pense notamment à ce que je vois bien souvent pour raison de facilité. Couleur dans une colonne jusqu'en bas de la feuille, idemn pour des bordures partout, etc... mais surtout si tu as des formules de type matricielle.

Dans ton code juste au début mets cette instruction --> Application.screenupdating = false

A te relire

Bonjour

je viens de tester la macro de Dan et question rapidité (comme elle en fait un peut moins que la mienne) est plus rapide

Mais je n'ai pas vu de différence

Un seul reproche(amical) c'est qu'à la fin elle supprime les cases utilisées pour stocker les couleurs et cela décale les colonnes situées à droite

C'est tout

Donc je ne comprends pas pourquoi elle est lente chez toi

Bonne journée

Re,

elle supprime les cases utilisées pour stocker les couleurs et cela décale les colonnes situées à droite

Pour Banzai, effectivement mais :.

  • Pour les cases c'était quelque chose qui gênait "gloub"
  • pour ce qui des colonnes il suffit de remplacer le "DELETE" par "CLEARCONTENTS. Bizarre d'ailleurs car hier soir j'avais changé le DELETE. Apparement j'ai du aller trop vite et le code n'a pas été changé. Merci à toi donc de l'avoir mentionné.

Gloub ? quoi de neuf ?

Rechercher des sujets similaires à "trier lignes couleur"