Figer couleur avec donnée lors d'une actualisation d'un graphique

AdrienK

XLDnaute Nouveau
Bonjour,

Je vous explique mon petit problème.
Je souhaiterais figer les couleurs de mon graphique histogramme avec les données dont il est issu.
Par exemple, sur mon fichier en PJ, je souhaite que le rouge soit toujours associé à la donnée "Voiture A", vert avec "Voiture B", jaune avec "Voiture C".

En effet, mon fichier peut subir des modifications et étant donné que j'ai affecté une macro de tri décroissant pour la ligne "total" de mon tableau, je souhaite que le graphique s'actualise en valeur, mais aussi par les couleurs. Actuellement si je change les scores et que par exemple, le score total de la voiture B dépasse celle de la voiture A, les score vont évolués et les places vont changer correctement, mais sur le graphique, les couleurs vont permuter...

Merci de bien vouloir m'aider! :)
 

Pièces jointes

  • Graphique couleur.xlsm
    19.9 KB · Affichages: 31
  • Graphique couleur.xlsm
    19.9 KB · Affichages: 37
  • Graphique couleur.xlsm
    19.9 KB · Affichages: 31

ROGER2327

XLDnaute Barbatruc
Re : Figer couleur avec donnée lors d'une actualisation d'un graphique

Bonjour AdrienK.


Un essai. C'est du brut de décoffrage, voyez si on est sur la bonne voie...​
VB:
Sub Macro_tri_auto()
Dim i&, j&, c()

    With ActiveWorkbook.Worksheets("Feuil1").Range("D2:F2")
        ReDim c(1 To .Cells.Count, 1)
        For i = 1 To .Cells.Count
            With .Cells(i)
                c(i, 0) = .Value
                j = .Interior.Color
                c(i, 1) = Array(j Mod 256, (j \ 256) Mod 256, j \ 65536)
            End With
        Next

        With .Parent.Sort
            .SortFields.Clear
            .SortFields.Add Key:=.Parent.Range("C7:F7"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
            .SetRange .Parent.Range("C2:F7")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlLeftToRight
            .SortMethod = xlPinYin
            .Apply
        End With

        .Parent.ChartObjects("Graphique 1").Activate
        For i = 1 To .Cells.Count: For j = 1 To .Cells.Count
            If .Cells(i).Value = c(j, 0) Then
                .Cells(i).Interior.Color = RGB(c(j, 1)(0), c(j, 1)(1), c(j, 1)(2))
                ActiveChart.SeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = RGB(c(j, 1)(0), c(j, 1)(1), c(j, 1)(2))
                Exit For
            End If
        Next j, i
    End With

    Range("H8").Select

End Sub

Bonne journée.


ℝOGER2327
#7472


Vendredi 27 Gidouille 141 (Sainte Gandouse, hygiéniste - fête Suprême Quarte)
23 Messidor An CCXXII, 4,2188h - haricot
2014-W28-5T10:07:31Z
 

Pièces jointes

  • Graphique couleur.xlsm
    25.1 KB · Affichages: 33
  • Graphique couleur.xlsm
    25.1 KB · Affichages: 34
  • Graphique couleur.xlsm
    25.1 KB · Affichages: 38

AdrienK

XLDnaute Nouveau
Re : Figer couleur avec donnée lors d'une actualisation d'un graphique

Tout d'abord, je voudrais vous remercier d'avoir pris du temps pour mon problème, et vous dire que c'est exactement le résulat que je recherchais. :D

A prèsent, je souhaiterais adapter le code à mon fichier professionnel. Le tableau qui m'interesse dispose de 5 colonnes, avec des couleurs différentes. Je ne pense pas qu'il y ait beaucoup de choses à changer. Pouvez-vous m'indiquer ce qu'il est possible de remplacer (peut-être par des commentaires à l'interieur du code ?) ?
Encore une fois, merci! :)

Adrien

EDIT: J'ai bien reussi à adapter le code à mon fichier pro, un grand merci ROGER2327 ;)
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Figer couleur avec donnée lors d'une actualisation d'un graphique

Re...


(...)
A prèsent, je souhaiterais adapter le code à mon fichier professionnel. (...)
Comme d'habitude, on pose un problème pour en résoudre un autre.
Comme d'habitude, je m'en doutais un peu. J'ai donc anticipé un peu en essayant de rendre les modifications aussi facile que possible. Il devrait être possible d'adapter la chose en modifiant ces lignes :​
VB:
    With ActiveWorkbook.Worksheets("Feuil1").Range("D2:F2")
VB:
            .SortFields.Add Key:=.Parent.Range("C7:F7"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
            .SetRange .Parent.Range("C2:F7")
VB:
        .Parent.ChartObjects("Graphique 1").Activate
et, peut-être,​
VB:
    Range("H8").Select
Mais on pourrait faire beaucoup plus souple si on avait connaissance du problème réel...​


Bonne journée.


ℝOGER2327
#7473


Vendredi 27 Gidouille 141 (Sainte Gandouse, hygiéniste - fête Suprême Quarte)
23 Messidor An CCXXII, 5,1333h - haricot
2014-W28-5T12:19:11Z
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 097
Messages
2 085 257
Membres
102 840
dernier inscrit
blaise09