Graphique depuis TCD

Signaler
-
Messages postés
13889
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
-
Bonjour,

Je mets à jour avec vba sur une même feuille Excel 3 TCD qui font références à 3 feuilles de données.
J'aimerais pouvoir mettre à jour les graphiques correspondants.
Seulement le code que j'utilise me reprend systématiquement pour les 3 graphiques le même TCD source. (Le 1er)
Pouvez vous me dire comment procéder pour que chaque graphique fasse référence au TCD nommé ?

Merci par avance

4 réponses

Messages postés
13889
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
781
bonjour,
c'est quasi impossible, à moins que tu nous donnes plus d'information.
Bonjour,

Sur une feuille TCD, je crée un 1er TCD en cellule A1qui se nome "tcd1". Il fait référence à un tableau, lui même nommé "tdb1".
Le graphique est correctement créé.

En A15, je crée un autre TCD nommé "tcd2" qui fait référence à un tableau (différent du 1er), lui même nommé "tdb2"
Le graphique est créé mais reprend les mêmes infos que le "tcd1", ils sont identiques.. la source est la même.

En A30 je crée un autre TCD qui vient lui aussi dune autre feuille qui contient un tableau nommé "tdb3" lui aussi différent des deux 1er.
Le graphique est créé mais la encore la source est la même que pour le 1er graph.

Comment puis je lier les graphiques créés a chacun des TCD ?
Est ce la bonne manière ? Et sinon comment procéder ?
D'avance merci!
Messages postés
13889
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
781 > Mike
par quel hasard le second graphique hérite-t'il des infos du premier?
ton code VBA est-il secret?
Bonjour,

Ci dessous le code utilisé :

Set PvtTCD = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="tableau_1").CreatePivotTable(TableDestination:=WsTCD.Range("A1"), TableName:="TCD_1")

WsTCD.Shapes.AddChart.Name = "Graph_1"
With ActiveSheet.PivotTables("TCD_1")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With

' Ajout critère
With PvtTCD.PivotFields("Ville")
.Orientation = xlRowField
.Position = 1
End With

'Suppression des sous totaux
For Each Champs In PvtTCD.PivotFields
If Champs.Orientation = 1 Then Champs.Subtotals = Array(False, False, False, False, _
False, False, False, False, False, False, False, False)
Next Champs

' Ajout des valeurs
PvtTCD.AddDataField ActiveSheet.PivotTables("TCD_1").PivotFields("Nb Habitant"), "Somme de Nb Habitant", xlSum
PvtTCD.AddDataField ActiveSheet.PivotTables("TCD_1").PivotFields("Nb Ménages"), "Somme de Nb Ménages", xlSum

'////////////////////////////////// Ajout TCD avec Graphique 2 //////////////////////////////////////////////////////////

' Ajout d'un TCD s
Set PvtTCD = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="tableau_Ws2") .CreatePivotTable(TableDestination:=WsTCD.Range("A15"), TableName:="TCD_2")
WsTCD.Shapes.AddChart.Name = "Graph_2"

With ActiveSheet.PivotTables("TCD_2")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With

' Ajout critère
With PvtTCD.PivotFields("Ville")
.Orientation = xlRowField
.Position = 1
End With

'Suppression des sous totaux
For Each Champs In PvtTCD.PivotFields
If Champs.Orientation = 1 Then Champs.Subtotals = Array(False, False, False, False, _
False, False, False, False, False, False, False, False)
Next Champs

' Ajout valeurs
PvtTCD.AddDataField ActiveSheet.PivotTables("TCD_2").PivotFields("Numéro d'ordre"), "Somme de Numéro d'ordre", xlCount
Messages postés
13889
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
781
je ne vois rien dans ton code qui s'occupe de configurer les graphes.
peux-tu partager ton fichier?
Oui c'est bien mon problème , je ne trouve pas les commandes me permettant de réaliser cela. Et de faire de lien avec le tps.
Serais tu m'indiquer comment procéder ?
Messages postés
13889
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
781
as-tu essayé avec l'enregistreur de macros?
Oui j'ai essayé l'enregistreur, et j'obtiens cela :

ActiveChart.SetSourceData Source:=Range("TCD!$A$1:$C$9")


La source est une plage de donnée, mais si j'essaye de mettre le nom du TCD, cela ne fonctionne pas.
Messages postés
13889
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
781
peut-être ainsi (non testé, tu n'as pas partagé ton fichier):
dim gr2 as shape, PvtTCD2 as pivottable
Set PvtTCD2 = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="tableau_Ws2") .CreatePivotTable(TableDestination:=WsTCD.Range("A15"), TableName:="TCD_2")
set gr2 = WsTCD.Shapes.AddChart
gr2.Name = "Graph_2"
gr2.SetSourceData Source:=PvtTCD2.TableRange1