Macro, modification de la formule d'un graphique
Bonjour à tous
Je suis Luc, utilisateur moyen moins d'Excel. Je suis face à une problématique que je n'arrive pas à résoudre seul.
Je vais commencer par le début. Ma boite utilise un très gros fichier Excel (plus de 80Mo) pour générer divers indicateurs. Comme je ne voulais pas risquer de flinguer le fichier de prod, j'en ai fait une copie sur mon ordi pour ajouter ce que je voulais. Jusqu'ici tout va bien.
Une fois terminé, j'ai fait un copier-coller de la totalité de l'onglet que j'avais créé depuis ma sauvegarde jusqu'au fichier de prod, et c'est là que la galère commence.
Dans l'onglet que j'ai créé, il y a 88 graphiques, qui après avoir été collés sur le fichier de prod, pointent sur des données de ma sauvegarde.
Du coup, au lieu d'avoir des formules du type : =SERIE('TDB - Synthèse'!$AD$9;'TDB - Synthèse'!$AB$10:$AC$29;'TDB - Synthèse'!$AD$10:$AD$29;1) dans les données de mes graphiques, j'ai : =SERIE('[Sauvegarde_TDB.xlsx]TDB - Synthèse'!$AD$9;'[Sauvegarde_TDB.xlsx]TDB - Synthèse'!$AB$10:$AC$29;'[Sauvegarde_TDB]TDB - Synthèse'!$AD$10:$AD$29;1).
J'ai essayé un peu tous les collages spéciaux mais ça ne semble rien changer.
J'ai essayé le Rechercher/Remplacer, mais la fonction ne semble pas fonctionner dans les formule de graphique.
Il me reste donc 2 solutions. Refaire tout le boulot manuellement (je préférerais pas), ou trouver la macro adéquate. J'ai essayé plusieurs choses, mais impossible de trouver comment éditer les formule à l'intérieur des graphiques (il y en a 4 par graphique soit au total 352). Est-ce que quelqu'un aurait une idée ?
Merci par avance
Luc
Bonjour,
La formule affichée dans la barre des formules n'est qu'un affichage, mais ce n'est pas ça que l'on modifie via VBA. Je vous invite à activer l'enregistreur de macro et faire la modification manuelle sur un graphique, puis poster le code obtenu.
Selon le type de graphique, il peut y avoir quelques changements.
Merci pour votre réponse, voici le code généré quand j'enregistre la modif sur un des graphiques.
Qu'en pensez vous ?
Sub relink_TDB()
'
' relink_TDB Macro
'
'
Sheets("TDB - Synthèse").Select
ActiveSheet.ChartObjects("Graphique 250").Activate
ActiveChart.FullSeriesCollection(1).Select
Selection.Formula = _
"=SERIES('TDB - Synthèse'!R9C30,'TDB - Synthèse'!R10C28:R29C29,'TDB - Synthèse'!R10C30:R29C30,1)"
ActiveChart.FullSeriesCollection(4).Select
Selection.Formula = _
"=SERIES('TDB - Synthèse'!R9C33,'TDB - Synthèse'!R10C28:R29C29,'TDB - Synthèse'!R10C33:R29C33,4)"
ActiveChart.FullSeriesCollection(3).Select
Selection.Formula = _
"=SERIES('TDB - Synthèse'!R9C32,'TDB - Synthèse'!R10C28:R29C29,'TDB - Synthèse'!R10C32:R29C32,3)"
ActiveChart.FullSeriesCollection(2).Select
Selection.Formula = _
"=SERIES('TDB - Synthèse'!R9C31,'TDB - Synthèse'!R10C28:R29C29,'TDB - Synthèse'!R10C31:R29C31,2)"
End SubDésolé pour l'incompréhension, voilà le code
Sub relink()
'
' relink Macro
'
'
ActiveSheet.ChartObjects("Graphique 315").Activate
ActiveChart.PlotArea.Select
ActiveChart.FullSeriesCollection(1).Name = "='TDB - Synthèse'!$AZ$9"
ActiveChart.FullSeriesCollection(1).Values = "='TDB - Synthèse'!$AZ$10:$AZ$29"
ActiveChart.FullSeriesCollection(2).Name = "='TDB - Synthèse'!$BA$9"
ActiveChart.FullSeriesCollection(2).Values = "='TDB - Synthèse'!$BA$10:$BA$29"
ActiveChart.FullSeriesCollection(3).Name = "='TDB - Synthèse'!$BB$9"
ActiveChart.FullSeriesCollection(3).Values = "='TDB - Synthèse'!$BB$10:$BB$29"
ActiveChart.FullSeriesCollection(4).Name = "='TDB - Synthèse'!$BC$9"
ActiveChart.FullSeriesCollection(4).Values = "='TDB - Synthèse'!$BC$10:$BC$29"
ActiveChart.FullSeriesCollection(4).XValues = "='TDB - Synthèse'!$AX$10:$AX$29"
End SubRésolu :
Sub relink()
'
'Macro pour supprimer une expression de toutes les formules de tous les graphiques d'un onglet
'
Sheets("Nom de l'onglet").Select
For Each ChartObject In ActiveSheet.ChartObjects
For Each Series In ChartObject.Chart.SeriesCollection
Series.Select
Selection.Formula = Replace(Selection.Formula, "Expression à supprimer", "")
Next
Next ChartObject
End SubMerci pour ton aide
Bonjour,
Désolé pour le délai de réponse, j'ai été prit ailleurs. J'avais en tête quelque chose qui ressemble beaucoup à ce que tu as réussi à obtenir par toi même ! Merci également d'avoir pris la peine de mettre ta solution ici pour d'autres utilisateurs qui rencontreraient le même besoin.
Quelques suggestions sur ton code :
Sub relink()
For Each Graph In Sheets("NomOnglet").ChartObjects
For Each Serie In Graph.Chart.SeriesCollection
Serie.Formula = Replace(Serie.Formula, "Expr_A_Suppr", "Remplacement") 'Si pas de remplacement mettre ""
Next Serie
Next Graph
End Sub