• Initiateur de la discussion Initiateur de la discussion DCHICHE
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

DCHICHE

Guest
Bonjour,

J'ai besoin de récupérer des calculs issus d'un TCD (par exemple les 20 premiers clients qui réalisent 80% du CA).

Je me débrouille bien dans excel mais dès qu'il s'agit de faire un tour dans le VBA, cela se complique. 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.

Pour bien comprendre ma question, je joins le fichier exemple avec la macro que j'ai faite. [file name=Etude TCD_20050331151743.zip size=11941]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Etude TCD_20050331151743.zip[/file]
 

Pièces jointes

Bonsoir Dchiche,

J'ai malheureusement peu de temps à passer sur le forum ce soir, mais je tiens à te souhaiter bienvenue sur ce forum si c'est une de tes premières visites !

Ton message respire l'esprit de ce forum : tu a passé du temps à chercher par toi même, tu transmets ce que tu sais, tu exprimes clairement ce qui pourrait t'aider et tu n'oublies pas de dire bonjour et merci !

Je vais commencer par faire une copie de ton message pour le citer en exemple et pour récupérer tes bouts de codes !

Ceci-dit, je vais tout de même essayer de t'aider :
d'abord, hors vba, il y a la fonction LIREDONNEESTABCROISDYNAMIQUE qui pourrait répondre à une partie de tes besoins. Je te mets un exemple que j'ai sous la main :
=LIREDONNEESTABCROISDYNAMIQUE('[activités 2004.xls]TCD'!$A$4;'Somme '&$A5&' '&C$4)/1000000
Cet exemple montre que tu peux rendre variable la définition des critères.
Autre conseil précieux pour débuter en vba, l'enregistreur macro qui génère le code correspondant à tes enchaînements.
En combinant les deux, tu peux par exemple générer ton tcd et trier les données clients en ordre décroissant et récupérer en formule les informations qui en résulte.

Désolé, mais le temps qui m'était imparti est maintenant terminé !

En espérant t'avoir aidé.

Sinon, au plaisir de te revoir sur le forum.
 
Merci pour vos encouragements mais je reste toujours bloqué.


Je connais bien la fonction LIREDONNEESTABCROISDYNAMIQUE et je m'en serts beaucoup dans excel.

D'ailleurs j'ai remarqué qu'elle correspondait à Getpivotdata en VBA.

Mais elle ne répond pas vraiment à ma problèmatique. En effet , cette fonction renvoie une seul valeur. Moi, j'imagine une fonction qui me renverrais un vecteur correspondant aux calculs d'un champ. Cela me permettrait d'accéder aux valeurs par index (et donc d'afficher les n premiers par exemple).

Si cela n'existe pas, cela veut dire qu'il faut créer une macro qui récupère toutes les données du TCD dans une matrice puis piocher les éléments dans la matrice. Si c'est la seule solution, je laisse tomber.
 
Bonsoir,

Là c'est pas évident du tout. je vais donc essayer de te trouver une réponse. Il existe une instruction qui permet de récupérer une valeur dans un TCD par macro. Il s'agit de GETDATA(NAME).

Il va falloir introduire cette instruction dans ta macro et là cela ne me semble pas évident. Mais on va chercher.

Une autre solution serait de faire un deuxième TCD sur base du premier avec en champ de ligne 'CLIENT' et en champ de données 'QTE'. Là le résultat est exactement ce que tu montres dans ton exemple à l'endroit 'je cherche à obtenir en VBA'.

fais savoir où tu en es de ton coté.

🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
240
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
503
Réponses
3
Affichages
599
Retour