Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

TCD Excel et VBA

Ordilibre, le mercredi 30 mars 2005 à 09:52:07
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.
Configuration: PC
WXP
Répondre à Ordilibre  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
gbinforme, le mercredi 30 mars 2005 à 22:55:08
bonjour

un site qui devrait répondre à ton attente :

http://www.excelabo.net/xl/tcd.php

toujours zen
Répondre à gbinforme

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Ordilibre, le jeudi 31 mars 2005 à 14:45:59
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.
Répondre à Ordilibre

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
random, le jeudi 31 mars 2005 à 17:51:31
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
elle est pas belle, la vie ?
Répondre à random

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ordilibre, le vendredi 1 avril 2005 à 10:26:02
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.
Répondre à ordilibre

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lilian65, le lundi 23 mai 2005 à 18:45:09
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
Répondre à lilian65

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Ordilibre, le mardi 24 mai 2005 à 09:44:20
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)
Répondre à Ordilibre

Résultats pour TCD Excel et VBA

Excel VBA - Textbox à saisie conditionnée (Résolu) Bonjour, Après avoir longtemps suivi en visiteur, j'ai décidé de m'inscrire, pour faciliter les échanges. Une fois n'est pas coutume, je suis sur une petite programmation Excel VBA pour laquelle je rencontre quelques difficultés. Je... www.commentcamarche.net/forum/affich-3696419-excel-vba-textbox-a-saisie-conditionnee
[VBA] mise à jour liste déroulante combobox (Résolu) Bonjour, Sur Excel (VBA) j'ai une combobox où j'ai ajouter des item Seulement je voudrais à présent que lorsque l'utilisateur entre une entrée qui n'est pas dans la liste de la combobox cette entrée soit automatiquement rajouter à... www.commentcamarche.net/forum/affich-6505404-vba-mise-a-jour-liste-deroulante-combobox
VBA recherche du max et du min (Résolu) Bonjour, Je travaille sur Excel/VBA. Sur Excel je sais que les fonction min et max existe. Mais sur VBA, Est ce qu'il y a une fonction qui trouve le minimum et une fonction qui trouve le maximum, ou bien c'est à moi de créer ces fonctions? Merci www.commentcamarche.net/forum/affich-7540296-vba-recherche-du-max-et-du-min

Résultats pour TCD Excel et VBA

[ORACLE] Intérogation SQL via VBA/ADODB (Résolu)Bonjour, Voici mon problème: Nous avons une BD Oracle sur notre réseau et j'y accède via Excel/VBA ADODB. Ma requête SQL recherche des données selon une certaine période de temps. Sur mon PC je formate les dates selon "d/m/yyyy" et cela... www.commentcamarche.net/forum/affich-3021525-oracle-interogation-sql-via-vba-adodb
VBA lance un .bat qui lance un .init (Résolu)Bonjour, Je trafficote pour lancer un script shell unix depuis Excel. Pour l'instant, j'ai deux choses : - un .bat qui lance un .init qui lance mon .sh - un macro excel vba qui lance mon .bat Si je lance mon .bat à la main, ça marche MAIS...... www.commentcamarche.net/forum/affich-3907285-vba-lance-un-bat-qui-lance-un-init