Graphique depuis TCD

Fermé
Mike - 13 janv. 2021 à 17:17
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
- 16 janv. 2021 à 14:51
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

8 réponses

yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197
13 janv. 2021 à 20:32
bonjour,
c'est quasi impossible, à moins que tu nous donnes plus d'information.
0
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!
0
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197 > Mike
13 janv. 2021 à 22:39
par quel hasard le second graphique hérite-t'il des infos du premier?
ton code VBA est-il secret?
0
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
0
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197
14 janv. 2021 à 10:33
je ne vois rien dans ton code qui s'occupe de configurer les graphes.
peux-tu partager ton fichier?
0
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 ?
0
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197
14 janv. 2021 à 12:50
as-tu essayé avec l'enregistreur de macros?
0
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.
0
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197
15 janv. 2021 à 09:52
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike_2822
Messages postés
2
Date d'inscription
samedi 16 janvier 2021
Statut
Membre
Dernière intervention
16 janvier 2021

16 janv. 2021 à 10:54
Merci pour ton retour,

Le code ne fonctionne pas, il bloque sur :
gr2.SetSourceData Source:=PvtTCD2.TableRange1


cela fonctionne si je supprime le TCD, et défini la plage de donnée avec un Range, mais je préférerais le faire directement depuis le TCD si possible.

Est ce que tu as une solution ?

Je joins un fichier d'exemple

https://www.transfernow.net/files/?utm_source=RUn44I012021&utm_medium=&utm_content=en
0
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197
16 janv. 2021 à 10:55
bloque-t'il avec un message d'erreur?
0
Oui le message est le suivant :

Erreur d'exécution 438

Propriété ou méthode non gérée par cet objet
0
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197
16 janv. 2021 à 12:29
suggestion:
Option Explicit

Sub test()

Dim WsTCD As Worksheet, PvtTCD As PivotTable, PvtTCD2 As PivotTable, Champs As PivotField
Set WsTCD = ActiveWorkbook.Sheets("TCD")
WsTCD.[A11].Select
Set PvtTCD = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Tableau1"). _
                CreatePivotTable(TableDestination:=WsTCD.Range("A1"), TableName:="TCD_1")
WsTCD.Activate
            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("Nbre Habitant"), "Somme de Nbre Habitant", xlSum
                 
'//////////////////////////////////  Ajout TCD 2 //////////////////////////////////////////////////////////
     
        ' Ajout d'un TCD s
            Set PvtTCD2 = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Tableau2") _
            .CreatePivotTable(TableDestination:=WsTCD.Range("A15"), TableName:="TCD_2")
            
            With ActiveSheet.PivotTables("TCD_2")
                .InGridDropZones = True
                .RowAxisLayout xlTabularRow
            End With
            
        ' Ajout  critère
            With PvtTCD2.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
            PvtTCD2.AddDataField ActiveSheet.PivotTables("TCD_2").PivotFields("Nbre Ménages"), "Somme de Nbre Ménages", xlSum


'///////////////////////////////////////// Création des graph ////////////////////////
            Dim gr1 As Shape
            Set gr1 = WsTCD.Shapes.AddChart
            gr1.Name = "Graph_1"
            Dim s1 As Range, s2 As Range
            Set s1 = PvtTCD.TableRange1
            gr1.Chart.SetSourceData Source:=s1

            Dim gr2 As Shape
            Set gr2 = WsTCD.Shapes.AddChart
            gr2.Name = "Graph_2"
            Set s2 = PvtTCD2.TableRange1
            gr1.Chart.SetSourceData Source:=s1
            gr2.Chart.SetSourceData Source:=s2
End Sub
0
Mike_2822
Messages postés
2
Date d'inscription
samedi 16 janvier 2021
Statut
Membre
Dernière intervention
16 janvier 2021

16 janv. 2021 à 14:38
Merci pour cette proposition, le

 gr2.Chart.SetSourceData Source:=s2


génère un message d'erreur,


je ne comprend pas pourquoi !?
0
yg_be
Messages postés
20053
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2022
1 197
16 janv. 2021 à 14:51
as-tu testé le code complet que j'ai envoyé?
0