VBA : Récupération de données dans un TCD

Bien le bonjour à tous,

J'ai une erreur 1004 "Erreur défine par l'application ou par l'objet"
Sur ce code :

Dim wb As Workbook
Dim ws As Worksheet
Dim TCD_CSV As PivotTable

Set wb = ActiveWorkbook
Set ws = ActiveSheet
Set TCD_CSV = ws.PivotTables("TCD_CSV")

'MsgBox (TCD_CSV.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002"))

Dim test As Range
test = TCD_CSV.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002")
MsgBox test.Value

Le problème intervient sur cette ligne :

TCD_CSV.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002")

Sauf que je l'ai codé comme défini absolument partout alors je ne comprend pas le problème...

2024 06 18 11 43 48 tdb compteurs eaux xlsm excel 2024 06 18 11 43 36 tdb compteurs eaux xlsm excel

Je voulais que mon MsgBox me sorte "50"

L'objectif pour moi sera de créer une boucle sur les "N° compteur CSV" dans ce TCD pour en récupérer l'index et aller le reporter dans un autre fichier pour le même compteur.

Mais déjà si j'ai pas la 1ère étape ça risque pas de marcher

Merci d'avance pour vos réponses,

Cordialement,

vous voulez les infos d'une cellule du "RowRange" du TCD, c'est çà ?

Bonjour,

Un petit test via la fonction =getpivotdata m'indique la formule ci-dessous :

=GETPIVOTDATA("index";$A$10;"etiquette";"aep002")

Avec pour moi en A10 la cellule de référence de la table.

Les formules sont un peu différentes du VBA mais etes vous surs qu'à la ligne

Set TCD_CSV = ws.PivotTables("TCD_CSV")

Votre référence est établie correctement ?

Si oui alors je suspecte que vous deviez référencer le "N° COMPTEUR CSV" par son nom que vous avez modifié, a savoir "Etiquettes de lignes".

TCD_CSV.GetPivotData("INDEX", "Etiquettes de lignes", "AEP002")

En utilisant

Debug.Print ThisWorkbook.Worksheets(1).Range("A10").PivotTable.GetPivotData("index", "etiquette", "aep002")

j'obtiens le résultat souhaité.

image

Bonjour à tous les 2
@BsAlv, je ne comprend pas exactement ce que tu me demandes mais je souhaite effectivement récupérer l'INDEX (ici 50) qui est sur la même ligne que le numéro du compteur (ici AEP002).

@saboh12617, ma déclaration semble fonctionner si j'en crois mon espion et plutôt que de renommer N° COMPTEUR CSV en "Etiquettes de lignes" j'ai fait l'inverse j'ai renommé "Etiquettes de lignes" en N° COMPTEUR CVS sur mon tableau. A priori l'effet devrait être identique, mais cela n'a pas fonctionné non plus.

2024 06 19 11 08 45 tdb compteurs eaux xlsm excel
Dim test As Range
test = TCD_CSV.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002")
MsgBox test.Value

Me sort toujours le même message d'erreur.

Re,

Excusez moi ca ne m'avais pas sauté aux yeux mais vous assignez un objet (Range) sans "Set". Le mot clé est nécessaire pour tous les objets (!= variables).

Essayez

Set test = TCD_CSV.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002")

Merci pour ton aide,
Malheureusement cela n'a pas fonctionné.

Dim test As Range
Set test = TCD_CSV.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002")
MsgBox test.Value

Le message d'erreur reste inchangé.

J'ai aussi tenté, via un exemple venant du site automateexcel, Guide VBA des Tableaux Croisés Dynamiques
(Je ne peux pas mettre de lien avant mon 30ème message apparemment!)

Qui lui fait cela :

MsgBox ActiveCell.PivotTable.GetPivotData("Ventes", "Région", "Est")

Où Ventes est mon INDEX, Région est mon N° COMPTEUR CSV et Est est mon AEP002...

MsgBox ActiveCell.PivotTable.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002")

En mettant la cellule active sur le champs "N° COMPTEUR CSV".
Mais le message d'erreur là aussi est inchangé.

Je commence à penser à autre chose, ce pourrait-il que le problème vienne du fait que mon TCD est issu d'un modèle de données ?
N° COMPTEUR CSV vient d'une table et l'INDEX d'une autre...

J'ai beau chercher et tester pleins de trucs, ben je continue de chercher la solution.
Si un motivé, voici le fichier ça sera plus pratique pour expérimenter...
Sub Macro1()
'
Dim wb As Workbook
Dim ws As Worksheet
Dim TCD_CSV As PivotTable

Set wb = ActiveWorkbook
Set ws = ActiveSheet
Set TCD_CSV = ws.PivotTables("TCD_CSV")

MsgBox (TCD_CSV.GetPivotData("[Measures].[Somme de INDEX]", "[T_ITEMS].[N° COMPTEUR CSV]", "[T_ITEMS].[N° COMPTEUR CSV].&[AEP002]"))
' via Excel: GETPIVOTDATA("[Measures].[Somme de INDEX]";$A$4;"[T_ITEMS].[N° COMPTEUR CSV]";"[T_ITEMS].[N° COMPTEUR CSV].&[AEP002]")
Dim test As Range
Set test = TCD_CSV.GetPivotData("[Measures].[Somme de INDEX]", "[T_ITEMS].[N° COMPTEUR CSV]", "[T_ITEMS].[N° COMPTEUR CSV].&[AEP002]")
MsgBox test.Value

'MsgBox ActiveCell.PivotTable.GetPivotData("INDEX", "N° COMPTEUR CSV", "AEP002")

End Sub

Vous devez référencer les tables de valeurs initiales via [ table ].[ valeur ]

Et ce n'est pas "Index" que vous cherchez mais bien la Somme des Indexes.

Chez moi la correction ci-dessus fonctionne.

Prenez le temps d'utiliser Excel : j'ai simplement écris "=" puis cliqué sur la cellule souhaitée dans le TCD et il m'a donné le résultat donné en commentaire. Ensuite l'adaptation au code est triviale.

Effectivement...
J'ai eu essayé des syntaxes similaires, mais j'avais tout faux pour la partie "[Measures].[Somme de INDEX]" !

Je n'imaginais pas qu'un "=" puis clic sur la cellule du TCD me donnerai ce que j'attendais.

Merci beaucoup pour ton aide..!

Rechercher des sujets similaires à "vba recuperation donnees tcd"