Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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: 9

jkbox

XLDnaute Nouveau
Bonjour Sylvanu,

Un grand merci pour ce retour rapide !
C'est à s'arracher les cheveux ! Chez moi, la même manip ne marche pas...
 

Pièces jointes

  • Enregistrement 2023-06-14 160116.gif
    775.8 KB · Affichages: 14

jkbox

XLDnaute Nouveau
Désolé pour la qualité du GIF..
Mais on voit bien à la fin que les colonnes deviennent jaunes et les étiquettes disparaissent...
Je suis sous Excel 2021. Si quelqu'un a une idée...
 

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.
 

jkbox

XLDnaute Nouveau
Bonjour Dudu2,

Merci pour ce retour.
En fait, j'ai besoin de copier/coller ces graphiques sur plusieurs pages et de modifier les zones de données à chaque fois.
C'est vraiment ça le souci.
 

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:

Dudu2

XLDnaute Barbatruc
Je n'arrive pas à récupérer le SourceData d'un ChartObject existant.
Y a bien un méthode SetSourceData mais évidemment pas GetSourceData. Ce serait trop simple bien sûr.
Si quelqu'un a une idée...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ô ChatGPT, mon ami, dit moi : Excel vba récupérer le SourceData d'un ChartObject ?
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

Bien évidemment, sans aucune garantie .
 

Dudu2

XLDnaute Barbatruc
@sylvanu ,
Merci pour cette tentative.
J'ai exploré les propriétés de l'Object Chart, mais pas de SourceData hélas !
Alors j'ai bien des Chart.SeriesCollection(i).Formula mais je ne sais pas (encore) reconstituer les SourceData avec ça.
 

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 :

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

Réponses
2
Affichages
197
Réponses
12
Affichages
254
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…