Macro mise en forme automatique graphique

Bonjour à toutes et à tous,

J'ai un fichier Excel (sous Excel 2013) qui comporte de nombreux onglets composés de tableaux croisés dynamiques et de graphiques associés.

Je souhaiterais avoir une macro qui gère automatiquement la mise en forme des graphique et plus particulièrement la couleur des graphiques suivant le nom des étiquettes (celles-ci pouvant variées suivant la mise à jour des données).

J'ai réussi à faire une première macro qui fonctionne pour les graphiques de type "courbe" et "histogramme" mais uniquement en sélectionnant le graphique avant de lancer la macro.

Je voudrais une macro qui agisse directement sur tous les graphiques de mon fichier et une macro qui gère également les graphiques "camembert".

Je vous mets un fichier "test" sur lequel il y a ma première macro et quelques graphes pour que vous compreniez bien ce que je veux.

Si quelqu'un a une idée, je suis preneur ...

Merci d'avance pour le coup de main !

En complément, j'ai ceci qui fonctionne (je me rapproche du but) :

Sub Mise_en_forme_graphiques()
'Mise en forme automatique de tous les graphique d'un classeur en fonction du nom des différentes séries

'Lancement de la macro soit avec un bouton soit automatiquement
'A FAIRE

'Déclaration des variables
Dim S As SERIES
Dim i As Integer
Dim j As Integer

'Boucle qui active et passe ne revue tous les graphiques du classeur
For i = 1 To Sheets.Count
'Selectionner et activer la première feuille du classeur
Sheets(i).Activate
    'Boucle pour selectionner un à un les graphiques de la feuille active et faire les modifications
    For j = 1 To ActiveSheet.ChartObjects.Count
    Sheets(i).ChartObjects(j).Activate
        With ActiveChart
        'Lire l'ensemble des séries des graphiques du classeur
        'Boucle permettant de lire les noms des différentes séries et qui applique la mise en forme correspondante
            For Each S In .SeriesCollection
            'Selection des noms de séries
            Select Case S.Name
            Case "Propane"
            S.Format.Line.ForeColor.RGB = RGB(235, 107, 10) 'Mise en forme des couleurs RGB correspondantes (couleur de fond)
            S.Format.Fill.ForeColor.RGB = RGB(235, 107, 10) 'Mise en forme des couleurs RGB correspondantes (conleur du contour)
            Case "Electricité"
            S.Format.Line.ForeColor.RGB = RGB(0, 69, 121)
            S.Format.Fill.ForeColor.RGB = RGB(0, 69, 121)
            Case "Fuel domestique"
            S.Format.Line.ForeColor.RGB = RGB(191, 63, 255)
            S.Format.Fill.ForeColor.RGB = RGB(191, 63, 255)
            End Select
            Next
        End With
    Next j
Next i
MsgBox "test ok"
End Sub

Par contre, je ne gère pas ainsi les camemberts (qui fonctionnent en "point" et non pas en "série"). Si vous avez une idée, je suis preneur.

Dans l'idéal, il faudrait que je recherche la forme du graphique (courbe, histo ou camembert) avec une boucle if else (par exemple) et j'applique le coder de mise en forme qui va bien en fonction des résultats.

La ligne "S.Format.Line.ForeColor" permet de modifier la couleur des courbes mais colore aussi les contours des histo (non nécessaire).

Comment faire pour que la macro se lance à l'ouverture du fichier Excel ?

Merci

Pour ceux que ça intéresse, j'ai fini par trouver le code pour gérer les graphiques de type "camembert" :

With ActiveChart.SeriesCollection(1)
            'Je n'ai qu'une seule série dans mes graphs camembert
                For Each p In .Points 'passe en revue tous les points de ma série
                    p.HasDataLabel = False
                    p.HasDataLabel = True 'je réinitialise les étiquettes de données 
                    p.DataLabel.ShowCategoryName = True 
                    p.DataLabel.ShowValue = False'ne fais apparaître que le nom de la catégorie et supprime la valeur (affichée par défaut) 
                    'Selection des noms des étiquettes de données
                    Select Case p.DataLabel.Text
                    Case "Propane"
                    p.Format.Fill.ForeColor.RGB = RGB(235, 107, 10) 'Mise en forme des couleurs RGB correspondantes (conleur de fond)
                    Case "Electricité"
                    p.Format.Fill.ForeColor.RGB = RGB(0, 69, 121)
                    Case "Fuel domestique"
                    p.Format.Fill.ForeColor.RGB = RGB(191, 63, 255)
                    Case "Gaz naturel"
                    p.Format.Fill.ForeColor.RGB = RGB(242, 197, 4)
                    Case "Bois"
                    p.Format.Fill.ForeColor.RGB = RGB(0, 128, 0)
                    Case "Chauffage urbain"
                    p.Format.Fill.ForeColor.RGB = RGB(240, 69, 16)
                    Case "Essence"
                    p.Format.Fill.ForeColor.RGB = RGB(109, 218, 0)
                    Case "Gazole"
                    p.Format.Fill.ForeColor.RGB = RGB(242, 197, 4)
                    Case "Gazole non routier"
                    p.Format.Fill.ForeColor.RGB = RGB(153, 102, 51)
                    Case "Eau"
                    p.Format.Fill.ForeColor.RGB = RGB(0, 150, 217)
                    Case "Consommations (kWhEF)"
                    p.Format.Fill.ForeColor.RGB = RGB(109, 218, 0)
                    Case "Dépenses (€ TTC)"
                    p.Format.Fill.ForeColor.RGB = RGB(235, 107, 10)
                    End Select

                    p.DataLabel.ShowPercentage = True'ajoute dans les étiquettes de données le %
                    p.DataLabel.Position = xlLabelPositionBestFit
                    p.DataLabel.Separator = " " & " " 'avec un séparateur "nouvelle ligne"
                    p.Format.Line.Visible = msoTrue
                Next

            End With

Bonjour Tibo16,

Je ne m'y connais pas trop en macro mais ton code à l'air super

Juste pour savoir : ton code sert juste à mettre en forme des graphique en fonction de données dans un tableau de façon automatique ?

Mais peut-on l'utiliser pour les graphiques ayant des histogrammes ET des courbes sur les mêmes axes ?

Sam

Bonjour Sam_P,

Ma macro me permet de mettre en forme des graphiques en fonction des intitulés des séries (ou des étiquettes de données pour les camemberts).

Dans la version finale, j'ai fais une distinction des opérations suivant le type de graphique mais si tu prends le 1er code que j'ai posté (2ème message du sujet) il doit pouvoir marcher pour les graphiques combinés sans soucis.

Par contre, la commande qui permet de modifier la couleur des lignes est la même que celle qui modifie la couleur des contours des histogrammes.

J'espère avoir répondu à ta question.

Oui tu as parfaitement répondu à ma question.

Je vais le tester alors et puis je te dirais ce qu'il en est, merci

Si j'ai des améliorations à apporter je t'en ferais part également même si vu mon niveau j'en doute lol.

Sam

Salut Tibo16

Ton code marche à merveille, et répond parfaitement à mon besoin donc je n'ai quasiment rien changé dessus.

Excepté les noms des séries à sélectionner et les couleurs dont j'avais besoin.

Donc c'est super

A plus

Sam

Salut Sam_P

Tip top alors,

Merci pour ton retour !

Rechercher des sujets similaires à "macro mise forme automatique graphique"