Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - TCD - Questions diverses

Dudu2

XLDnaute Barbatruc
Bonjour le Forum,

Je m'adresse aux spécialistes des TCD et de leur manipulation en VBA.
Je suis très peu versé dans ce domaine et pour un utilisateur intensif de TCDs je dois réaliser certaines tâches en VBA.

La première est de reconstituer un TCD en VBA en partant d'un modèle de TCD existant (et évidemment d'une source de même modèle).
Je suppose qu'il y a plusieurs étapes: les champs, les filtres, les tris, les groupes...

Merci pour toute indication de méthode, code etc...
Désolé pour cette question très ouverte. Peut-être n'est-elle pas judicieuse dans le cadre du forum.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, @Dudu2

Toujours étonné que les vieux de la vieille ne mettent pas le nez dans la poussière du forum
(C'est pas faute pourtant de le conseiller aux tits nouveaux (cf la charte)
(Un paradoxe de plus made in XLD )

Nous étions en 2018
 

Dudu2

XLDnaute Barbatruc
Salut @Staple1600,
Merci de te manifester, j'avais grand peur de rester un peu seul sur cette question.
Je suis allé un peu partout en français et en anglais mais en effet je n'ai pas été sur le lien que tu indiques.

Cependant je ne suis pas sûr d'y trouver la réponse au problème consistant à "décoder" les éléments constitutifs d'un TCD existant (au moins les plus communs) pour générer un code capable de le reconstituer par macro sur la base d'une nouvelle source de données.

Le Post sur lequel tu pointes indique comment créer un TCD. Mais ce n'est pas suffisant. A moins que plus loin dans le sujet il y ait d'autres infos ?
 

Staple1600

XLDnaute Barbatruc
@Dudu2

Dans un premier temps, je suis arrêté à
"Merci pour toute indication de méthode, code etc..."

Personnellement, je créé pas mal de TCD en VBA
(juste pour un gain de temps)
(Et il y a quels fils sur XLD, où j'ai posté quelques VBA, d'où mon lien)

Pour le reste, je trouve plus ergonomique et (une fois le TCD créé) de le manipuler à la souris.
Un autre bout de code (que j'affectionne )

Pour aller plus loin, comme pour les newbies :
"Un fichier exemple blah blah ..."
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
D'ailleurs je me demande si l'objectif que je me suis assigné n'est pas totalement irréaliste.
"Créer une macro qui analyse un TCD existant et est capable d'en re-créer un équivalent" !

Peut-être devrais-je dire à mon utilisateur:
- créé ton TCD
- j'enregistre tes manips,
- je les stocke dans un .bas
- au besoin je ré-incorpore le .bas et l'exécute
 

Dudu2

XLDnaute Barbatruc
Il y a peut-être une solution à creuser qui est le copy du TCD.TableRange2 vers une feuille de sauvegarde. Puis repartir de ça pour lier avec la source de données.
En fait je suis un peu comme un missile qui cherche sa cible... avant d'exploser en vol
 

Dudu2

XLDnaute Barbatruc
@Staple1600, je viens de revoir ton lien du message #4.
Mais je ne comprends pas en quoi cette création de TCD est la copie d'un autre TCD dont a priori je ne sais rien.

Imagine... il y a un TCD quelconque dans une feuille. Je (ou quelqu'un peu importe) veux en sauvegarder la structure pour pouvoir l'appliquer à un nouveau TCD que je vais créer dans 1 heure.
Que dois-je faire en VBA pour faire ça ?

Et bien sûr cette manip n'est pas exclusive d'un seul TCD.
Il faut une banque de modèles de TCD à laquelle je puisse accéder pour choisir celui que je veux appliquer au TCD que je veux créer.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Bah cette fonction permet de crééer N TCD
Code:
Private Function Creation_TCD(ByRef srcData As Range, Bazinga As XlPivotTableSourceType) As PivotTable
Dim ptCache As PivotCache, TCD As PivotTable, F As Worksheet
Set ptCache = ThisWorkbook.PivotCaches.Create(SourceType:=Bazinga, SourceData:=srcData)
Set F = ThisWorkbook.Sheets.Add
Set TCD = ptCache.CreatePivotTable(TableDestination:=F.Cells(3, 1))
Set Creation_TCD = TCD
End Function
Elle est paramétrable
On spécifie la place de cellules source
Donc en partant sur cette base, on pourrait améliorer la chose, non ?
 

Dudu2

XLDnaute Barbatruc
Donc en partant sur cette base, on pourrait améliorer la chose, non ?
Le problème n'est pas de créer le TCD. J'ai déjà une macro qui créé un TCD vierge. C'est hype simple.
Le problème est de lui appliquer le modèle d'un autre TCD existant stocké quelque part.

A la réflexion, je ne crois pas/plus qu'il faille décortiquer toutes les propriétés du TCD à copier pour en re-créer un à l'identique. Ce serait très complexe en terme de code.
Il faut pouvoir exporter quelque chose et le TCD.TableRange2 semble un bon candidat. Enfin j'espère.
 

dysorthographie

XLDnaute Accro
VB:
Private Sub test()
CopyTdc Sheets("TDC"), "TDC", Sheets("Feuil1"), "toto", "Data!R1C5:R5C7"
End Sub

Public Sub CopyTdc(ShSource As Worksheet, Tdc As String, Cible As Worksheet, TdcCible As String, Plage As String)
For Each td In ShSource.PivotTables
    If UCase(td.Name) = UCase(Tdc) Then
        td.TableRange2.Copy Cible.Range("A1")
        With Cible
            .PivotTables(.PivotTables.Count).ChangePivotCache Cible.Parent.PivotCaches.PivotCaches. _
            Create(SourceType:=xlDatabase, SourceData:=Plage, Version:=xlPivotTableVersion12)
          
            .PivotTables(.PivotTables.Count).Name = TdcCible
        End With
        Exit For
    End If
Next
End Sub
 

Pièces jointes

  • clsTdcRD.zip
    1.9 KB · Affichages: 2
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…