Boucle pour tri avec couleur

Bonsoir le forum

En pièce jointe j'ai placé un fichier contenant une boucle qui tri des plages de cellules en fonction de la couleur des cellules d'une colonne.

Cela fonctionne bien pour la première couleur mais pas pour les autres

Si quelqu'un pouvait y jeter une oeil

D'avance je vous remercie pour votre aide et votre disponibilité

18pmz-pa.xlsm (155.55 Ko)

Bonsoir,

première chose, merci d'avoir mis un fichier

deuxième chose : votre boucle avec i devrait commencer à 6 pour démarrer directement sur la première ligne de données.

troisième chose : les valeurs de vos Case ne sont pas bonnes ! au lieu de 8 c'est 44 et au lieu de 10 c'est 43

Ce qui donne le code suivant :

Sub pmz_pa()

Dim n, derlig As Long
Dim colori As Integer

A_ws = ActiveSheet.Name

Worksheets(A_ws).Activate

  For n = 6 To Range("A65536").End(xlUp).Row
  'On définit la Couleur de fond de la cellule
  colori = Range("I" & n).Interior.ColorIndex
  Select Case colori

    Case 6 'Jaunes
    'Si Jaune
     feuil = (A_ws)
     derlig = Sheets(feuil).Range("AH65536").End(xlUp).Row + 1
     Range("A" & n & ":O" & n).Copy Destination:=Sheets(feuil).Cells(derlig, 34)

    Case 43 'Vert
    'Si Vert
     feuil = (A_ws)
     derlig = Sheets(feuil).Range("AX65536").End(xlUp).Row + 1
     Range("A" & n & ":O" & n).Copy Destination:=Sheets(feuil).Cells(derlig, 50)

    Case 44 'Turquoise
    'Si Turquoise
     feuil = (A_ws)
     derlig = Sheets(feuil).Range("BN65536").End(xlUp).Row + 1
     Range("A" & n & ":O" & n).Copy Destination:=Sheets(feuil).Cells(derlig, 64)

  End Select

  Next n

End Sub

Comment trouver la correspondance ? Avec le pas à pas dans VBA par exemple qui permet de faire dérouler le code ligne par ligne et lorsque l'on met le pointeur de la souris sur une variable alors VBA affiche sa valeur....

@ bientôt

LouReeD

Bonsoir LouReed

Merci pour votre aide ça fonctionne

2 questions SVP

Comment avez vous fais pour connaitre les N° des couleurs?

Actuellement ma boucle, si je ne ma trompe pas passe tous les codes 1 première fois pour trouvé les jaunes, puis une deuxième fois pour trouvé les verts et une troisième fois pour les turquoise, comme faire alors pour ne passer qu'une seule fois?

Bonsoir, rebonsoir LouReed !

La gestion des couleurs est fortement modifiée depuis Excel 2007 et la palette de couleurs des versions antérieures (à laquelle réfère la propriété ColorIndex) n'est plus utilisée. Certes une valeur de ColorIndex est toujours renvoyée pour toutes couleurs mais c'est l'index le plus proche de la palette, et diverses nuances ayant des valeurs de couleur différentes renverront le même index.

Autrefois, seules les couleurs de la palette pouvaient être affichées, donc pas de souci, mais ce n'est plus le cas !

Il serait donc préférable de ne plus utiliser ColorIndex (sauf pour xlAutomatic et xlNone) et de travailler avec la propriété Color plus adéquate au mode de gestion des couleurs...

Cordialement.

Bonjour le forum

Bonjour Mferrrand

Merci pour ton intervention

Bonjour,

Maréchal bonjour à vous !

En fait à force de lire les posts je m'aperçois que je suis loin d'être une crac !

Pour ce qui est de la deuxième question :

Actuellement ma boucle, si je ne ma trompe pas passe tous les codes 1 première fois pour trouvé les jaunes, puis une deuxième fois pour trouvé les verts et une troisième fois pour les turquoise, comme faire alors pour ne passer qu'une seule fois?

En fait non... Regardez :

Sub pmz_pa()

Dim n, derlig As Long
Dim colori As Integer

A_ws = ActiveSheet.Name

Worksheets(A_ws).Activate

For n = 6 To Range("A65536").End(xlUp).Row
  'On définit la Couleur de fond de la cellule
  colori = Range("I" & n).Interior.ColorIndex
  Select Case colori

    Case 6 'Jaunes
    'Si Jaune
     feuil = (A_ws)
     derlig = Sheets(feuil).Range("AH65536").End(xlUp).Row + 1
     Range("A" & n & ":O" & n).Copy Destination:=Sheets(feuil).Cells(derlig, 34)

    Case 43 'Vert
    'Si Vert
     feuil = (A_ws)
     derlig = Sheets(feuil).Range("AX65536").End(xlUp).Row + 1
     Range("A" & n & ":O" & n).Copy Destination:=Sheets(feuil).Cells(derlig, 50)

    Case 44 'Turquoise
    'Si Turquoise
     feuil = (A_ws)
     derlig = Sheets(feuil).Range("BN65536").End(xlUp).Row + 1
     Range("A" & n & ":O" & n).Copy Destination:=Sheets(feuil).Cells(derlig, 64)

  End Select

Next n

End Sub

j'ai surligné la boucle, vous allez bien de la ligne 6 à la dernière de la colonne, mais vous ne le faite qu'une fois...

Ce qui vous induit en erreur et penser que vous faisiez trois fois la boucle, c'est peut-être (certainement) du au fait qu'il y avait une erreur au niveau des index de couleur, du coup "visuellement" seul les jaunes fonctionnaient et on pouvait se demandait pourquoi la boucle ne repartait pas pour les deux autres couleurs...

Ceci dit dans votre façon de faire, c'est à dire trier les cellules par leur couleur pour les copier dans trois zones différentes, nul besoin de tourner trois fois sur les lignes. Si vous aviez eu l'envie de mettre ce tri sur les même colonnes alors là oui il aurait fallu passer trois fois sur la zone de contrôle. Ceci dit avec un "tableau" vous pouvez trier par couleur, tout dépend à quoi sert ce tri...

@ bientôt

LouReeD

Bonjour, à tous

Quel est le débat ? Oui une seule boucle dans ce code ! Mais on y examine la possibilité de toutes les couleurs cherchées.

On peut améliorer l'écriture en ne calculant derlig qu'une fois (en ne l'écrivant qu'une fois, plus exactement, car elle ne s'exécutera qu'une fois par tour de boucle), et en n'écrivant qu'une fois l'instruction d'affectation (en limitant le choix conditionnel à l'affectation du numéro de colonne à une variable). Mais ceci ne touche qu'à l'écriture...

Pour essayer d'accélérer, il faudrait affecter à des tableaux, et ne faire l'affectation à la feuille qu'une seule fois à la fin. Mais il faudrait que je remonte au sujet initial . Il n'y a pas de tri dans ce code, or on ne cesse de parler de tri ?

Bonne journée.

Bonjour Maréchal,

Bien sûr qu'il y a un tri dans le code d'origine car moi je répond au question du demandeur par rapport à ce qu'il avait avant...

Pour ce qui est de la deuxième question :

Actuellement ma boucle, si je ne ma trompe pas passe tous les codes 1 première fois pour trouvé les jaunes, puis une deuxième fois pour trouvé les verts et une troisième fois pour les turquoise, comme faire alors pour ne passer qu'une seule fois?

Et son code fait un tri en mettant les couleurs sur des colonnes différentes (34, 50 et 64), en fait il s'épare les couleurs en plusieurs colonnes, ce qui fait à la fin un tri, les jaunes en 34, les verts en 50 et les turquois en 64.

@ bientôt

LouReeD

OK !

Mais si je me souviens un peu, je n'étais intervenu dès le départ que marginalement (sans regarder de près le sujet je crois) car tu me semblais avoir répondu à la question posée...

à vous aussi !

@ bientôt

LouReeD

Bonsoir le forum

Bonsoir LouReed et MFerrand, merci pour vos lumières et pour votre aide

Dès que je peux je reviendrai sur la remarque de MFerrand concernant la propriété color

Merci LouReed pour l'explication au niveau de la boucle

Rechercher des sujets similaires à "boucle tri couleur"