Extraction VBA des données d'un TCD variant

THERY

XLDnaute Nouveau
Bonjour,
J'ai une base de données qui alimente un TCD. Cette base de données est importée plusieurs fois par jour (annule et remplace l'import précédent).
Je dois extraire les données du TCD répondant aux critères : Lib Marque Fab = Mq B et Lib Pays Dest = Pays-Bas (les données sont volontairement fausses - j'adapterai le code en fonction). Les données extraites du total alimentent une nouvelle feuille (identique au double-clic sur le grand total du TCD).
J'ai crée un code VBA pour filtrer sur ces éléments. Je souhaite obtenir la liste répondant à la fonction .ShowDetail = True, mais le Grand Total n'est jamais au même endroit (dans le fichier joint il est en G13 mais en fonction des éléments additionnés ou retirés à la base, il peut être ailleurs).
Je peine à trouver le code qui permette de sélectionner le total du TCD et d'en extraire les valeurs dans une nouvelle feuille.
Merci de vos aides et conseils
 

Pièces jointes

  • Classeur1.zip
    21.4 KB · Affichages: 22
  • Classeur1.zip
    21.4 KB · Affichages: 41
  • Classeur1.zip
    21.4 KB · Affichages: 32

THERY

XLDnaute Nouveau
Re : Extraction VBA des données d'un TCD variant

Bonjour,

Merci pour ce lien Chris. J'ai compris la démarche globale d'Herdet dans son fichier, mais je peine à l'adapter à mon cas (peut-être parce que je suis à mes débuts en VBA !). La propriété est reconnue par la version 2003, mais je n'ai sans doute pas utilisé la bonne syntaxe.
DataBodyRange Edit me retourne une erreur. DataBodyRange.Select fonctionne mais ne permet pas d'accéder au détail avec Selection.Showdetail = True.
Une idée sur ce qui ne fonctionne pas ?

Merci d'avance,
 

chris

XLDnaute Barbatruc
Re : Extraction VBA des données d'un TCD variant

Bonjour

La propriété permet de savoir le range occupé par le corps du TCD (hors champs de filtre ou page) :
Code:
Plage = PivotTables("TCD").DataBodyRange.Address

te donne par exemple $B$6:$I$10 : le total est donc en $I$10. On obtient cette adresse par

Code:
Plage = Mid(Plage, InStr(Plage, ":") + 1, 100)
(on peut le faire de diverses manières)
Code:
Range(Plage).ShowDetail = True
te fait l'extrait
 

THERY

XLDnaute Nouveau
Re : Extraction VBA des données d'un TCD variant

Merci Chris. Les codes sont en version image - je ne peux pas les voir intégralement. Je suis preneur de ta méthode qui semble différente de celle que j'ai bricolé entre temps dont voici le résultat :
For Each pvt In ActiveSheet.PivotTables
With pvt
.ColumnGrand = True
.RowGrand = True
End With
Set rng = pvt.DataBodyRange
rng.Cells(rng.Rows.Count, rng.Columns.Count).ShowDetail = True
Next pvt
Bien à toi,
 

chris

XLDnaute Barbatruc
Re : Extraction VBA des données d'un TCD variant

Re

Oui c'est parfait et même plus élégant que ma proposition :rolleyes:
(j'ai mis dans des balises code : c'est curieux que tu aies un PB. Signale-le à notre Webmaster...)
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 913
Membres
101 837
dernier inscrit
Ugo