[RESOLU] - Couleur et liste

Neo37

XLDnaute Junior
Bonjour à vous :)

Voici le topo:

Feuil2 sont présentes des noms de valeurs avec des horaires associées, ex:
Valeur1 Valeur2 etc...
6h03 - 11h03
6h04 - 12h04

Ces valeurs avec les horaires associées sont peintes (couleur de fond) de différentes couleurs.
En Feuil1 je souhaiterai pouvoir avec une cellule de type listes (Valeur rouge/Valeur bleu/Valeur verte/Valeur blanche)récupérer, faire un tri, de mes blocs de valeurs selon leur couleur.

Donc voilà, comment dois-je m'y prendre? (fichier d'exemple joint)
Merci d'avance à ceux qui m'aideront :)
 

Pièces jointes

  • Couleur.xls
    24 KB · Affichages: 59
  • Couleur.xls
    24 KB · Affichages: 57
  • Couleur.xls
    24 KB · Affichages: 56
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : Couleur et liste

Bonjour et bienvenu sur le forum Neo37,

Personnellement, je ne connais qu'une solution : via une macro.

Tu connais les macro? Si oui, tu connais les variables? Les boucles? Comment déclencher une macro?

Si oui, je pourrais t'expliquer brièvement ma macro (cf. fichier ci-joint). Sinon dis moi ce que tu ne comprend pas et je rentrerais plus dans les détails.

Bonne fin d'après midi
 

Pièces jointes

  • Couleur complété.xls
    26.5 KB · Affichages: 59

Excel-lent

XLDnaute Barbatruc
Re : Couleur et liste

Re-bonjour,

Tu remarqueras que sur ton onglet "Feuil1", colonne G ou H (je ne sais plus), j'ai effacé ta liste de couleur.

Etant donné que le nombre de couleur est succinct, pour t'éviter d'avoir une liste de couleur en plein milieu de ta page, je l'ai supprimé.

Car ce n'est pas très seyant, ni très pratique (t'oblige à définir une zone d'impression, et si l'utilisateur y touche par inadvertance, ...)

Pour cela j'ai :
-> sélectionné la cellule A6 (où se trouve ta liste)
-> cliqué sur "données" / "validation..."
-> dans la zone autorisé j'ai laissé "liste"
-> dans la zone source, au lieu d'indiqué l'endroit où se trouve ta liste, j'ai écris :
Valeur rouge;Valeur bleu;Valeur verte;Valeur blanche

Bref, comme tu le vois, il suffit de séparer chaque texte par un point virgule.

A bientôt
 

Neo37

XLDnaute Junior
Re : Couleur et liste

Merci à toi Excel-lent :)

Donc oui je me doutais bien qu'il faudrait passer par une macro, je sais disons les réutiliser, mais pas les créer, je n'ai jamais eu de formation en VBA.
Comme à mon travail j'ai voulu informatiser et automatiser pas mal de choses, jusque là je m'étais débrouillé avec ce que je trouvais, mais là mon soucis était un peu plus pointu que d'habitude (enfin pour moi).
En gros on peut m'assimiler à une une sorte de pilleur :p

Je pense que je vais pouvoir me débrouiller avec ce que tu m'as fourni, je vais me plancher dessus ce soir. J'ai le principe, faut que je l'applique à une base de données plus étoffée on va dire.
Si cela me suffit je clôturerai le sujet demain

Merci encore pour la rapidité et la qualité de ta réponse :)
 

Excel-lent

XLDnaute Barbatruc
Re : Couleur et liste

Salut Neo37,

Donc les explications ci-dessous devrait te suffire :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
' Déclencher la macro à chaque changement sur cette onglet : "Feuil1"

Dim ColonneFeuil1 As Integer
'Cette variable indiquera le numéro de la colonne où écrire la valeur n°...
'La variable "ColonneFeuil1" contiendra des nombres entier inclus entre -32 768 et 32 767
'Sur les version Excel inférieur ou égale à Excel 2003, le nombre maximum de colonne est de 256
'Sur les version Excel 2007 et 2010, le nombre maximum de colonne est de 16 384
'Donc avec 32 767 on a la marge lol
Dim DernièreColonneFeuil2 As Integer
'Cette variable contiendra le numéro de la colonne contenant la dernière "Valeur"
'Permis ainsi d'adapter automatiquement la macro aux nombre de colonne à traiter.
'La variable "DernièreColonneFeuil2" contiendra des nombres entier inclus entre -32 768 et 32 767

'La macro est situé sur l'onglet "Feuil1", donc si on ne précise rien dans le code, cela sous entend
'qu'on travail sur l'onglet "Feuil1".

On Error GoTo fin
'En cas d'erreur, aller à la balise "fin" situé à la fin de la macro
   
If Target.Address = "$A$6" Then
'Si l'utilisateur effectue une saisie dans la cellule A6 de l'onglet "Feuil1", via la liste de validation
'Alors effectuer la macro ci-dessous, sinon ce rendre directement à la ligne de code : "End If"
    If [A6] = "" Then [A6].Interior.ColorIndex = xlNone
    'Si la cellule A6 de l'onglet "Feuil1" est vide, alors la colorier la cellule A6 en blanc
    If [A6] = "Valeur rouge" Then [A6].Interior.ColorIndex = 3
    'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur rouge", alors la colorier en rouge (couleur n°3)
    If [A6] = "Valeur bleu" Then [A6].Interior.ColorIndex = 5
    'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur bleu", alors la colorier en rouge (couleur n°5)
    If [A6] = "Valeur verte" Then [A6].Interior.ColorIndex = 4
    'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur verte", alors la colorier en vert (couleur n°4)
    If [A6] = "Valeur blanche" Then [A6].Interior.ColorIndex = xlNone
    'Si la cellule A6 de l'onglet "Feuil1" contient le texte "Valeur blanche", alors la colorier en blanc (couleur : aucune couleur)
    
    Range([C6:C8], [C6:C8].End(xlToRight)).ClearContents
    'Onglet "Feuil1" cellules C6 à C8 + toutes les cellules pleines situés à leurs droites => effacer le contenu

    With Sheets("Feuil2")
    'Grâce à cette ligne de code au lieu d'écrire 'Sheets("Feuil2")' devant chaque élèment, il suffira de mettre un point
    'pour qu'excel sache qu'on parle de cet onglet. Et cela jusqu'à la ligne de code "End With"
        DernièreColonneFeuil2 = .[IV6].End(xlToLeft).Column + 1
        'Se mettre sur la dernière colonne (si tu utilise une version d'Excel inférieur ou égale à 2003), ligne 6
        'Et à partir d'ici se déplacer vers la gauche à la recherche de la première cellule pleine
        'Ajouter 1 à la valeur ainsi trouvé (pour avoir la première cellule VIDE)
        'Et mettre cette valeur dans la variable "DernièreColonneFeuil2"
        ColonneFeuil1 = 3
        'Mettre 3 dans la variable "ColonneFeuil1"
        
        For i = 1 To DernièreColonneFeuil2
        'Boucle : exécuter le code situé entre cette ligne et la ligne "Next i"
        'autant de fois qu'il y a de colonnes rempli (ligne 5-6-7), sur l'onglet "Feuil2"
            If .Cells(5, i).Interior.ColorIndex = [A6].Interior.ColorIndex Then
                'Si la couleur de la cellule ligne 5, colonne i, sur l'onglet "Feuil2" est identique
                'à la couleur de la cellule A6 onglet "Feuil1" alors exécuter le code situé ci-dessous
                'jusqu'à la ligne de code "End If", sinon aller directement à cette ligne
                Cells(6, ColonneFeuil1) = .Cells(5, i)
                'Ecrire dans la cellule ligne 6, colonne : valeur contenu dans la variable "ColonneFeuil1" (3 la première fois)
                'de l'onglet "Feuil1", la valeur situé dans
                'la cellule ligne 5, colonne : valeur contenu dans la variable "i" de l'onglet "Feuil2" car il y un "point"
                'situé juste devant "Cells"
                Cells(7, ColonneFeuil1) = .Cells(6, i)
                'idem que si dessus mais pour les lignes 7 de l'onglet "Feuil1" et 6 de l'onglet "Feuil2"
                Cells(8, ColonneFeuil1) = .Cells(7, i)
                'idem ...
                ColonneFeuil1 = ColonneFeuil1 + 1
                'incrémenter la variable ColonneFeuil1 de 1
                'ainsi les nouvelles données qui seront trouvées lors de la prochaine exécution de cette boucle
                'seront copier dans la colonne suivante
            End If
        Next i
    End With
    
End If
'Balise "fin"
fin:
End Sub

Persévère, c'est ainsi qu'on progresse ;)

Bonne soirée
 

Neo37

XLDnaute Junior
Re : Couleur et liste

Salut Excel-lent

J'ai travaillé un peu dessus, l'essentiel de la macro j'ai réussi à la comprendre et à la re-adapter à mon fichier, mais merci pour le descriptif détaillé.
Je voudrai abuser une dernière fois de tes lumières. :)
Mes valeurs ne se trouvent pas que sur un seul étage, j'en ai sur 3 ou 4.
Ca veut dire que la partie qui recherche en ligne 5 de la Feuil2 la correspondance de couleur:

If .Cells(5, i).Interior.ColorIndex = [A6].Interior.ColorIndex Then
'Si la couleur de la cellule ligne 5, colonne i, sur l'onglet "Feuil2" est identique
'à la couleur de la cellule A6 onglet "Feuil1" alors exécuter le code situé ci-dessous
'jusqu'à la ligne de code "End If", sinon aller directement à cette ligne

J'aimerai pouvoir la faire en même temps sur les lignes 5, 10, et 15 par exemple, et que ça continu à les ranger les unes à la suite des autres sur la Feuil1.

Ca fait une petite heure que je cherche à bricoler, mais je ne trouve pas. C'est peut-être plus simple que je ne le pense, mais pas assez pour moi.

A bientôt :rolleyes:
 

Excel-lent

XLDnaute Barbatruc
Re : Couleur et liste

Salut Neo37,

Simple? Tout dépend de la solution adopté ;)

Si comme ci-joint tu n'utilise pas les boucles, mais te borne à recopier le code 3 fois, à condition de savoir où le faire (c'est à dire avoir compris la logique de la macro), c'est long mais très simple.

Sinon tu peux reprendre toute la macro et insérer une boucle supplémentaire pour éviter cette répétition. Mais pour cela il faut utiliser un tableau à 2 dimensions pour gérer ces 3 variables (beaucoup plus complexe).

Bonne après midi

Edition : comme tu pourras le remarquer, j'ai profité de l'occasion pour rajouter quelques lignes de code pour gérer la mise en forme (bordures) de ton onglet "Feuil1"
 

Pièces jointes

  • Couleur complété version 2.xls
    33.5 KB · Affichages: 43
Dernière édition:

Neo37

XLDnaute Junior
Re : Couleur et liste

Salut

Bon bah là je crois que je vais pouvoir marquer ce sujet comme RÉSOLU. :D
Merci à ce Forum d'exister, et surtout un grand MERCI à toi Excel-lent, et avec la gestion des bordures, c'est nickel.
Je n'aurais jamais cru pouvoir en récolter autant.

Longue vie à Excel Downloads

Bonne continuation à tous :)
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 248
Membres
103 164
dernier inscrit
axelheili2