XL 2021 Figer/Verrouiller mise en forme d'un graphique

jkbox

XLDnaute Nouveau
Bonjour,

J'ai 3 graphiques qui vont chercher leurs données dans un tableau.
Je suis partis de modèles Offices, dont j'ai personnalisé la couleur et la mise en forme.

Mon problème : Si je veux changer une série de données la mise en forme du graphique saute : Modification de couleur, suppression d'étiquettes, ...).
J'ai essayé d'enregistrer mes graphiques comme modèle, mais ça ne résout pas le problème.

Auriez vous une astuce pour verrouiller la mise en forme du graphique quelque soient les données que je sélectionne avec le tableau ?

Je précise que j'ai besoin de copier/coller ce graphique dans plusieurs tableaux et que j'aimerais éviter de refaire la mise en forme dès que je fais une modif...

Merci beaucoup pour votre aide !
 

Pièces jointes

  • Gestion BUG.xlsx
    36.6 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jkbox, et bienvenu sur XLD,
Comment changez vous une série de données ?
Par changement dans la formule du graphique ?
Etant sous XL2007, j'ai essayé en changeant la ligne 38 en 37 et ça marche correctement.
20230614_134434.gif
 

Dudu2

XLDnaute Barbatruc
Bonjour,
La question de @sylvanu est pertinente.
1 - Si on change les valeurs dans les zones des données, pas de changement de format.
2 - Si on change les zones des données, en effet le format est modifié.

1 - Illustré avec le GIF ci-dessous
2 - Impossible le GIF fait 1.6 Mo
Note: cette limitation à 1 Mo pour les GIF animés est vraiment énervante.
G1.gif
 

Dudu2

XLDnaute Barbatruc
Peut-être faudrait-il passer par du VBA pour copier la feuille et ses graphiques de manière à pouvoir modifier les chiffres de la nouvelle feuille directement dans les zones référencées.
Je vais essayer...
 

Dudu2

XLDnaute Barbatruc
Bon, alors cette ébauche, ça marche assez bien pour les graphiques.
On pourra d'ailleurs en faire un classeur séparé qui travaillera sur le classeur des données / graphes.
VB:
Sub CopyCharts()
    Dim oChart As ChartObject
    Dim LeftPoints As Double
    Dim TopPoints As Double
    
    For Each oChart In Worksheets(1).ChartObjects
        LeftPoints = oChart.Left
        TopPoints = oChart.Top
        oChart.Copy
        Worksheets(2).Paste
        Set oChart = Worksheets(2).ChartObjects(Worksheets(2).ChartObjects.Count)
        oChart.Left = LeftPoints
        oChart.Top = TopPoints
    Next oChart
End Sub
Je suppose que tu veux aussi copier le tableau des données de la feuille d'origine et le désigner en source de données des graphiques de la feuille copiée...
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ô ChatGPT, mon ami, dit moi : Excel vba récupérer le SourceData d'un ChartObject ?
Pour récupérer le "SourceData" d'un objet "ChartObject" dans Excel VBA, vous pouvez utiliser la propriété "Chart" de l'objet "ChartObject" et ensuite accéder à la propriété "SourceData" de l'objet "Chart". Voici un exemple de code :
VB:
Sub GetChartSourceData()
    Dim myChartObject As ChartObject
    Dim myChart As Chart
    Dim sourceData As Range
    
    ' Assurez-vous que l'objet ChartObject est actif
    Set myChartObject = ActiveSheet.ChartObjects(1)
    
    ' Obtenez l'objet Chart à partir de l'objet ChartObject
    Set myChart = myChartObject.Chart
    
    ' Obtenez la plage SourceData du graphique
    Set sourceData = myChart.SourceData
    
    ' Affichez la plage SourceData dans la fenêtre Immediate
    Debug.Print "SourceData du graphique : " & sourceData.Address
End Sub
Ce code suppose que vous avez déjà un objet "ChartObject" actif dans votre feuille de calcul. Il récupère l'objet "Chart" à partir de l'objet "ChartObject" et ensuite la propriété "SourceData" de l'objet "Chart". La plage "SourceData" est ensuite affichée dans la fenêtre Immediate.

Bien évidemment, sans aucune garantie . 😂😂😂
 

Dudu2

XLDnaute Barbatruc
VB:
Sub a()
    Dim oChart As ChartObject
    Dim Chart As Chart
    Dim i As Integer
    
    For Each oChart In Worksheets(1).ChartObjects
        Set Chart = oChart.Chart
        'MsgBox Chart.
        For i = 1 To Chart.SeriesCollection.Count
            MsgBox i & " -> " & Chart.SeriesCollection(i).Formula
        Next i
    Next oChart
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Nouvel essai. et avec ça :
VB:
Sub a()
    Dim oChart As ChartObject
    Dim Chart As Chart
    Dim i As Integer
    For Each oChart In Worksheets(1).ChartObjects
        Set Chart = oChart.Chart
        For i = 1 To Chart.SeriesCollection.Count
            tablo = Split(Chart.SeriesCollection(i).Formula, ",")
            MsgBox "Plage X : " & tablo(1) & Chr(10) & _
                    "Plage Y : " & tablo(2)
        Next i
    Next oChart
End Sub
Ca donne :
1686758331216.png

Au moins on a les plages, reste à les modifier ...:)

Addon :
On peut modifier l'équation an faisant :
Code:
Sub a()
    Dim oChart As ChartObject
    Dim Chart As Chart
    Dim i As Integer
    For Each oChart In Worksheets(1).ChartObjects
        Set Chart = oChart.Chart
        For i = 1 To Chart.SeriesCollection.Count
            tablo = Split(Chart.SeriesCollection(i).Formula, ",")               ' On récupère l'équation
            PlageX = "Feuil1!$A$2:$A$24"                                        ' Nouvelles plages
            PlageY = "Feuil1!$C$2:$C$24"
            Chaine = tablo(0) & "," & PlageX & "," & PlageY & "," & tablo(3)    ' On la reconstitue
            Chart.SeriesCollection(i).Formula = Chaine                          ' On modifie la formule
        Next i
    Next oChart
End Sub
J'ai testé, ça marche.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Oui, le truc c'est de passer de ça:
=SERIES(Tableau!$A$31,Tableau!$D$28:$O$28,Tableau!$D$31:$O$31,1)
=SERIES(Tableau!$A$37,Tableau!$D$28:$O$28,Tableau!$D$37:$O$37,2)
=SERIES(Tableau!$A$38,Tableau!$D$28:$O$28,Tableau!$D$38:$O$38,3)

à ça:
Tableau!$A$28;Tableau!$D$28:$O$28;Tableau!$A$31;Tableau!$D$31:$O$31;Tableau!$A$37:$A$38;Tableau!$D$37:$O$38

Alors déjà je ne vois nulle part le Tableau!$A$28 !
 

Discussions similaires

Statistiques des forums

Discussions
314 708
Messages
2 112 097
Membres
111 416
dernier inscrit
philipperoy83