XL 2019 Graph Camenbert avec double proportion

carlos

XLDnaute Impliqué
Supporter XLD
Bonsoir,
Est il possible de créér un graphique en camenbert avec 3 couleurs (Maxi 5) representant les choix et en respectant les proportions dans le choix lui meme et dans tous les choix?
Proportion dans le choix et proportion dans tous les choix.
Voir le dessin schématique ci dessous et PJ .
Désolé pour mes piètres qualités de dessinateur
Bonne soirée
1721585130195.png
 
Solution
Je le re-joins parce qu'il me semble que la modification du tableau est un peu malaisée si à chaque changement il le reclasse et recalcule les couleurs …
Dans cette version ce n'est fait que si on sélectionne une cellule n'appartenant plus au tableau.

crocrocro

XLDnaute Impliqué
Bonjour Carlos,
une proposition en pj
à noter que le tableau d'origine correspond aux données non consolidées.
Elles sont prises en charge dans le TCD
Edit : Les couleurs de chaque valeur de choix sont définies 'en dur'. Pour toute nouvelle valeur, il faudra la définir manuellement.
 

Pièces jointes

  • Camembert.xlsx
    415.9 KB · Affichages: 9
Dernière édition:

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour Carlos,
une proposition en pj
à noter que le tableau d'origine correspond aux données non consolidées.
Elles sont prises en charge dans le TCD
Bravo Crocrocro,
C'est exactement cela pour le resuultat. Beau travail.
Mais il faut passer obligatoirement par un TCD?
Si je veux rajouter des choix (4 et 5) cela est il possibl?
Sera t'il possible d'automatiser cela sans que les personnes n'aient à faire quoi que ce soit.?
Merci encore.
 

crocrocro

XLDnaute Impliqué
Mais il faut passer obligatoirement par un TCD?
Oui, pour ma proposition, le graphique étant basé sur le TCD (Graphique de Tableau dynamique)
Si je veux rajouter des choix (4 et 5) cela est il possibl?
Oui, il est possible d'ajouter ou de modifier des valeurs des colonnes Choix ou Type mais en actualisant le TCD et son graphique, les valeurs créées ou modifiées des colonnes Choix et Type, provoquent un changement de la couleur (deviennent ici jaune) pour les secteurs concernés.
Edit : il faut donc leur affecter manuellement la couleur souhaitée.
Sera t'il possible d'automatiser cela sans que les personnes n'aient à faire quoi que ce soit.?
A ma connaissance, cela ne peut se faire qu'en passant par du code VBA.
 

crocrocro

XLDnaute Impliqué
A ma connaissance, cela ne peut se faire qu'en passant par du code VBA.
Un exemple avec du code (on doit pouvoir trouver directement la valeur de la catégorie, sans passer par ObjPoint.DataLabel.Caption)
Il faut que les étiquettes soit avec le format ci-dessous (Nom e la catégorie) pour la recherche dans le code
1721669199695.png


1721669149675.png

le code à activer à chaque modification du tableau

VB:
Sub CouleurChoix()
Dim ObjPoint As Point
    ActiveSheet.ChartObjects("Graphique 3").Activate
    With ActiveChart
        For Each ObjPoint In ActiveChart.SeriesCollection(1).Points
            Select Case True
                Case InStr(ObjPoint.DataLabel.Caption, "Choix1") <> 0
                    ObjPoint.Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent6
                Case InStr(ObjPoint.DataLabel.Caption, "Choix2") <> 0
                    ObjPoint.Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2
                Case InStr(ObjPoint.DataLabel.Caption, "Choix3") <> 0
                    ObjPoint.Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent4
            End Select
        Next ObjPoint
    End With
End Sub
edit : pour la couleur, limitée avec ObjectThemeColor on peut jouer sur le RGB
VB:
ObjPoint.Format.Fill.ForeColor.RGB = RGB(255, 255, 0) 'pour jaune
ou utiliser la valeur d'une cellule modèle de chaque valeur de choix
VB:
ObjPoint.Format.Fill.ForeColor.RGB = Range("COULEUR_1").Interior.Color
 
Dernière édition:

crocrocro

XLDnaute Impliqué
Un nouveau code qui utilise pour chaque valeur de choix une cellule Modèle et qui s'affranchit de la contrainte que j'avais indiquée dans mon post précédent.
J'ai laissé en commentaires dans le code les syntaxes précédentes.
Il faut que les étiquettes soit avec le format ci-dessous (Nom e la catégorie) pour la recherche dans le code

VB:
Sub CouleurChoix()
Dim ObjPoint As Point
Dim i As Integer
Dim TabPoints As Variant
    ActiveSheet.ChartObjects("Graphique 3").Activate
    With ActiveChart
        TabPoints = ActiveChart.SeriesCollection(1).XValues
        i = 0
        For Each ObjPoint In ActiveChart.SeriesCollection(1).Points
            i = i + 1
            Select Case True
                'Case InStr(ObjPoint.DataLabel.Caption, "Choix1") <> 0
                Case InStr(TabPoints(i), "Choix1") <> 0
                    'ObjPoint.Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent6
                    'ObjPoint.Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
                    ObjPoint.Format.Fill.ForeColor.RGB = Range("COULEUR_1").Interior.Color
                Case InStr(TabPoints(i), "Choix2") <> 0
                    ObjPoint.Format.Fill.ForeColor.RGB = Range("COULEUR_2").Interior.Color
                Case InStr(TabPoints(i), "Choix3") <> 0
                    ObjPoint.Format.Fill.ForeColor.RGB = Range("COULEUR_3").Interior.Color
            End Select
        Next ObjPoint
    End With
End Sub
 

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour Crocrocro,
merci pour ton travail et ta proposition.
J'ai mis à jour ton fichier avec tes codes.
le changement des couleur est opérationnel.
Par contre si je change une valeur du tableau cela ne se met pas à jour automatiquement et je n'arrive pas non plus à le faire manuellement.
Merci encore.
 

Pièces jointes

  • Graph Camenbert avec Double proportion.xlsm
    425.2 KB · Affichages: 3

crocrocro

XLDnaute Impliqué
Tu n'as pas donné le bon nom aux cellules modèles. Dans le code, remplace COULEUR_ par Couleur
Pour aller plus loin, c'est à dire ne pas avoir à modifier le fichier à chaque nouvelle valeur de choix :
- Utilise une table qui liste toutes les valeurs de choix. Sélection par liste déroulante dans ton tableau que tu contrôles dans la saisie. A chaque valeur (la cellule) de la table tu donnes une couleur de fond, et c'est cette couleur que tu utilises comme modèle.
- Pour éviter d'avoir à utiliser le bouton Couleur, tu actives la macro sur l'événement Change.
Mais c'est peut-être ce que tu as déjà prévu dans ton fichier
Edit :

Il y a une erreur dans les proportions des secteurs par valeur de Choix, passée inaperçue jusque-là pour ma part. Les secteurs d'une couleur ne sont pas proportionnels aux valeurs (Total Choix1, Total Choix2, Total Choix3). Peu importe les valeurs, on a toujours 360° / 3 = 120° pour chacun.
J'essaie de comprendre... et de corriger, si possible. Sinon, ma solution est KO :mad:
 
Dernière édition:

crocrocro

XLDnaute Impliqué
Trouvé ;)
Dans le TCD, il faut supprimer la colonne Proportion Choix.
En pj :
La correction avec également ce dont je te parlais dans le post précédent
Pour aller plus loin, c'est à dire ne pas avoir à modifier le fichier à chaque nouvelle valeur de choix :
- Utilise une table qui liste toutes les valeurs de choix. Sélection par liste déroulante dans ton tableau que tu contrôles dans la saisie. A chaque valeur (la cellule) de la table tu donnes une couleur de fond, et c'est cette couleur que tu utilises comme modèle.
- Pour éviter d'avoir à utiliser le bouton Couleur, tu actives la macro sur l'événement Change.
Je n'ai cependant pas supprimé le code précédent
- le bouton (qui ne sert plus)
- les noms COULEUR_1, COULEUR_2, COULEUR_3
- la macro

Les modifications :
- de nouvelles entrées dans le gestionnaire de noms (TableauChoix, TableauSaisie)
- TableauChoix (G21:G24) avec pour chaque valeur, la couleur de fond qui détermine celle des secteurs du camembert.
- Saisie par liste déroulante du choix
- Dans le TCD, suppression de la colonne Proportion Choix.
- le Code VBA
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("TableauSaisie")) Is Nothing Then
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
        CouleurChoixParTable
    End If
End Sub
et
Code:
Sub CouleurChoixParTable()
Dim ObjPoint As Point
Dim i As Integer
Dim TabPoints As Variant
Dim Cell As Range
    ActiveSheet.ChartObjects("Graphique 3").Activate
    With ActiveChart
        TabPoints = ActiveChart.SeriesCollection(1).XValues
        i = 0
        For Each ObjPoint In ActiveChart.SeriesCollection(1).Points
            i = i + 1
            For Each Cell In Range("TableauChoix")
                If InStr(TabPoints(i), Cell.Value) <> 0 Then
                    ObjPoint.Format.Fill.ForeColor.RGB = Cell.Interior.Color
                End If
            Next Cell
        Next ObjPoint
    End With
End Sub
 

Pièces jointes

  • Camembert2.xlsm
    30.5 KB · Affichages: 5

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour Crocrocro,
J'ai tenté de modifier quelques petits points pour me rapprocher de mon projet.
J'"ai allongé allongé la plage "TableauSaisie" et modifié les choix1 par CA1 par exemple.
J'ai aussi allongé les Couleur_4 et 5.
J'ai aussi mis le code du module1 dans la Feuil1.
Tout marche bien sauf 2 poinrs :
1 - Le CA3 (Ou choix3) ne se met pas à jour dans le TCD voir fichier joint
2 : Lorsque je deplace cette feuille vers mon fichier -Projet en utilisant le menu contextuel en bas de la feuille (Copier ou deplacer) , et que je met à jour le TCD alors j'ai ce messegae :
Erreur d'execution 1004, A priori il este en connexion avec le fichier source.


Je suis content car mon projet à déjà bien avancé.
Bonne soirée
 

Pièces jointes

  • Camembert3.xlsm
    39.7 KB · Affichages: 4

crocrocro

XLDnaute Impliqué
Bonjour Carlos,
quand tu as ajouté les nouveaux cas, tu les a fait en dehors du Tableau TableauChoix (voir copie d'écran du gestionnaire de noms).
En pj, un nouveau fichier, mieux structuré (avec les valeurs initiales, pas tes nouvelles que tu vas devoir re-saisir) :
- Le TCD et le graphique sont dans une feuille à part
- Le Tableau e la Feuil1 est un tableau structuré (ce qui facilite la cohérence avec le TCD en cas d'ajout de lignes)
- le rafraichissement du TCD et du Graphique sont automatisés (je te laisse regarder le code).
- j'ai supprimé ici (voir post #11)
- le bouton (qui ne sert plus)
- les noms COULEUR_1, COULEUR_2, COULEUR_3
- la macro


1721925297437.png
 

Pièces jointes

  • Camembert3.xlsm
    34.7 KB · Affichages: 3

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour Crocrocro,
J'ai déplacé les 2 feuilles du camenbert3 dans mon fichier à l'aide du menucontextuelle de la page (Copier ou deplacé") mais les données restent attachées au fichier source(Camenbert3).
1721974902743.png

1721974985496.png
J'ai tenté d'interrompre les liaisons du classeur ou de modifier la source mais ca ne marche pas car le fichier de destination n'est pas proposé.Que faire?
Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 174
Membres
112 677
dernier inscrit
Justine11