TCD Excel et VBA
Fermé
Bonjour,
J'utilise beaucoup les TCD dans excel. Hors, pour obtenir des valeurs issues de ces tableaux, je voudrais créer des macros. Je m'y perds un peu dans l'utilisation des fonctions VBA liées aux TCD. Existe t il un site qui les explique clairement avec des exemples?
Voici mon problème. J'aimerais extraire d'un TCD dans une feuille à part, les 20 premiers items d'un champs ainsi que les données associées. De plus, je souhaite que ces 20 items correspondent aux 20 premières données classées par ordre croissant.
Merci d'avance.
J'utilise beaucoup les TCD dans excel. Hors, pour obtenir des valeurs issues de ces tableaux, je voudrais créer des macros. Je m'y perds un peu dans l'utilisation des fonctions VBA liées aux TCD. Existe t il un site qui les explique clairement avec des exemples?
Voici mon problème. J'aimerais extraire d'un TCD dans une feuille à part, les 20 premiers items d'un champs ainsi que les données associées. De plus, je souhaite que ces 20 items correspondent aux 20 premières données classées par ordre croissant.
Merci d'avance.
A voir également:
- Vba tcd
- Tcd excel - Guide
- Excel compter cellule couleur sans vba - Guide
- Mkdir vba ✓ - Forum VB / VBA
- Vba actualiser tcd ✓ - Forum VB / VBA
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
4 réponses
Merci pour cette info. Je connais déjà ce site et je n'y ai malheureusement pas trouvé ma réponse.
Après quelques heures de recherche, j'ai compris les éléments suivants:
En VBA, pour définir une variable correspondant à un objet TCD, on utilise PivotTable comme ceci:
"Set tableau = Worksheets("Essai").Range("A1").PivotTable"
Pour obtenir la liste des champs de données, on utilise Datafields
"i = 0
For Each champ In tableau.DataFields
Worksheets("Essai").Cells(10 + i, 1).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des items du 1er champ de donnée on utilise PivotItems
"For Each champ In tableau.DataFields(1).PivotItems
Worksheets("Essai").Cells(10 + i, 1).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des champs de ligne, on utilise RowFields
"i = 0
For Each champ In tableau.RowFields
Worksheets("Essai").Cells(10 + i, 2).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des items du 1er champ de ligne, on utilise Pivotitems
"For Each champ In tableau.RowFields(1).PivotItems
Worksheets("Essai").Cells(10 + i, 2).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des champs de colonne, on utilise ColumnFields
"i = 0
For Each champ In tableau.ColumnFields
Worksheets("Essai").Cells(10 + i, 3).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des items du 1er champ de colonne, on utilise Pivotitems
For Each champ In tableau.ColumnFields(1).PivotItems
Worksheets("Essai").Cells(10 + i, 3).Value = champ.Name
i = i + 1
Next champ
Mais comment faire pour obtenir les données elles-mêmes correspondant à ces ligne ou ces colonnes sous forme de vecteur? Ce doit être évident pour un programmeur. En ce qui me concerne, j'y vais à taton. Je suis complètement novice en programmation. Je pense qu'un habitué du VBA doit pouvoir me répondre facilement.
Merci d'avance.
Après quelques heures de recherche, j'ai compris les éléments suivants:
En VBA, pour définir une variable correspondant à un objet TCD, on utilise PivotTable comme ceci:
"Set tableau = Worksheets("Essai").Range("A1").PivotTable"
Pour obtenir la liste des champs de données, on utilise Datafields
"i = 0
For Each champ In tableau.DataFields
Worksheets("Essai").Cells(10 + i, 1).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des items du 1er champ de donnée on utilise PivotItems
"For Each champ In tableau.DataFields(1).PivotItems
Worksheets("Essai").Cells(10 + i, 1).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des champs de ligne, on utilise RowFields
"i = 0
For Each champ In tableau.RowFields
Worksheets("Essai").Cells(10 + i, 2).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des items du 1er champ de ligne, on utilise Pivotitems
"For Each champ In tableau.RowFields(1).PivotItems
Worksheets("Essai").Cells(10 + i, 2).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des champs de colonne, on utilise ColumnFields
"i = 0
For Each champ In tableau.ColumnFields
Worksheets("Essai").Cells(10 + i, 3).Value = champ.Name
i = i + 1
Next champ"
Pour obtenir la liste des items du 1er champ de colonne, on utilise Pivotitems
For Each champ In tableau.ColumnFields(1).PivotItems
Worksheets("Essai").Cells(10 + i, 3).Value = champ.Name
i = i + 1
Next champ
Mais comment faire pour obtenir les données elles-mêmes correspondant à ces ligne ou ces colonnes sous forme de vecteur? Ce doit être évident pour un programmeur. En ce qui me concerne, j'y vais à taton. Je suis complètement novice en programmation. Je pense qu'un habitué du VBA doit pouvoir me répondre facilement.
Merci d'avance.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 717
30 mars 2005 à 22:55
30 mars 2005 à 22:55
bonjour
un site qui devrait répondre à ton attente :
http://www.excelabo.net/xl/tcd.php
un site qui devrait répondre à ton attente :
http://www.excelabo.net/xl/tcd.php
random
Messages postés
1612
Date d'inscription
vendredi 26 novembre 2004
Statut
Membre
Dernière intervention
30 mars 2006
155
31 mars 2005 à 17:51
31 mars 2005 à 17:51
ben tu enregistres une macro
qui trie tes données par ordre croissant
puis qui fait le tableau croisé dynamique en prenant 20 lignes
ton programme sera écrit
il te reste à apporter deux ou trois modifs manu
éventuelles
qui trie tes données par ordre croissant
puis qui fait le tableau croisé dynamique en prenant 20 lignes
ton programme sera écrit
il te reste à apporter deux ou trois modifs manu
éventuelles
Désolé mais je n'avance pas...
mon pb est pourtant simple:
"récupérer les calculs du TCD dans une variable vecteur (correspondant à une ligne ou une colonne du TCD)."
je n'arrive pas à croire que personne n'a imaginer de faire cela un jour.
mon pb est pourtant simple:
"récupérer les calculs du TCD dans une variable vecteur (correspondant à une ligne ou une colonne du TCD)."
je n'arrive pas à croire que personne n'a imaginer de faire cela un jour.
lilian65
Messages postés
1
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
23 mai 2005
23 mai 2005 à 18:45
23 mai 2005 à 18:45
Bonjour,
Je ne sais pas si tu as trouvé la réponse à toutes tes questions.
Je travaille aussi sur des TCD, et aujourd'hui je sais afficher les 5 premiers champs d'une ligne ou d'unne colonne par contre je galère pour récupérer les valeurs d'une intersection d'une ligne ou d'une colonne (pour récupérer les totaux d'une ligne par exemple).
Pour afficher les 5 premieres référence de mon tableau il suffit d'écrire :
With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
"Référence")
For i = 1 To 5
.PivotItems(i).Visible = True
Next
End With
et pour cacher les autres
With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
"Référence")
For i = 6 To .PivotItems.Count
.PivotItems(i).Visible = false
Next
End With
Je ne sais pas si tu as trouvé la réponse à toutes tes questions.
Je travaille aussi sur des TCD, et aujourd'hui je sais afficher les 5 premiers champs d'une ligne ou d'unne colonne par contre je galère pour récupérer les valeurs d'une intersection d'une ligne ou d'une colonne (pour récupérer les totaux d'une ligne par exemple).
Pour afficher les 5 premieres référence de mon tableau il suffit d'écrire :
With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
"Référence")
For i = 1 To 5
.PivotItems(i).Visible = True
Next
End With
et pour cacher les autres
With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
"Référence")
For i = 6 To .PivotItems.Count
.PivotItems(i).Visible = false
Next
End With
Cela fait plaisir de voir que d'autres butent sur les même problèmes.
Voilà les conclusions d'un travail de plusieurs jours avant que je me résolve à procéder différemment pour contourner le pb.
1) il est facile de récupérer dans un TCD toutes ses étiquettes grace notamment à la fonction .pivotitems (voir les messages précédents pour savoir comment faire)
2) pour obtenir une valeur calculée d'un TCD, il semble qu'il n'existe pas d'autre moyen que d'utiliser la fonction
GetPivotData([DataField], [Field1], [Item1], [Field2], [Item2], [Field3], [Item3], [Field4], [Item4], [Field5], [Item5], [Field6], [Item6], [Field7], [Item7], [Field8], [Item8], [Field9], [Item9], [Field10], [Item10], [Field11], [Item11], [Field12], [Item12], [Field13], [Item13], [Field14], [Item14]) As Range
Le pb avec cette fonction, c'est qu'il faut justement utiliser les champ et item en claire. Pour récupérer la valeur, on ne peut pas pratiquer sous forme d'index tel que tableau (i,j) ou i serait le n° de la colonne et j celui de la ligne .
Donc pour contourner le pb, j'utilise un TCD dans ma feuille et je vais chercher les données qui m'interessent en utilisant la fonction DECALER(réf;lignes;colonnes;hauteur;largeur)
Voilà les conclusions d'un travail de plusieurs jours avant que je me résolve à procéder différemment pour contourner le pb.
1) il est facile de récupérer dans un TCD toutes ses étiquettes grace notamment à la fonction .pivotitems (voir les messages précédents pour savoir comment faire)
2) pour obtenir une valeur calculée d'un TCD, il semble qu'il n'existe pas d'autre moyen que d'utiliser la fonction
GetPivotData([DataField], [Field1], [Item1], [Field2], [Item2], [Field3], [Item3], [Field4], [Item4], [Field5], [Item5], [Field6], [Item6], [Field7], [Item7], [Field8], [Item8], [Field9], [Item9], [Field10], [Item10], [Field11], [Item11], [Field12], [Item12], [Field13], [Item13], [Field14], [Item14]) As Range
Le pb avec cette fonction, c'est qu'il faut justement utiliser les champ et item en claire. Pour récupérer la valeur, on ne peut pas pratiquer sous forme d'index tel que tableau (i,j) ou i serait le n° de la colonne et j celui de la ligne .
Donc pour contourner le pb, j'utilise un TCD dans ma feuille et je vais chercher les données qui m'interessent en utilisant la fonction DECALER(réf;lignes;colonnes;hauteur;largeur)