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
Re

@Dudu2
Les Experts, j'ai une proposition à vous faire et vous me dites...
  1. Créer un classeur vierge
  2. Copier la source des données sur la 1ère feuille du classeur vierge quitte à l'échantillonner à 25 lignes pour pas avoir trop de données à trimballer
  3. Copier le TCD.TableRange2 sur la 2ème feuille du classeur vierge
  4. Changer la source de données du TCD copié sur la tableau de la 1ère feuille du classeur vierge.
Et faire la manip inverse lors de l'application du "modèle" à une nouvelle source de données.
M'est avis qu'à défaut d'un fichier exemple, le code VBA suffira à éclairer ma lanterne.
;)
Ma contribution (pour gagner du temps)
Code:
Sub Creer_Exemple()
With Cells(1)
.Value = "ITEM_1"
.AutoFill Destination:=.Resize(, 8), Type:=xlFillDefault
.Offset(1).Resize(20, 8).Formula = "=ROW()+INT((ROW()*COLUMN())*RAND())"
Sheets(.Parent.Name).ListObjects.Add(xlSrcRange, .Resize(21, 8), , xlYes).Name = "Tableau" & Application.RandBetween(1, 100)
End With
End Sub
 

Dudu2

XLDnaute Barbatruc
Pour l'instant je me bats avec le retour d'un UserForm (niveau 2) pour afficher un message, appelé par un UserForm vbModeless (niveau 1).
Jusque maintenant je n'avais pas de problème, au retour du UserForm niveau 2, le Userform vbModeless niveau 1 était bien ré-activé. Ça me semblait normal considérant la pile des appels.
Maintenant au retour du UserForm niveau 2, c'est la feuille qui devient active ! Le UserForm vbModeless niveau 1 ne reprend pas la main sauf évidemment à cliquer dedans.

Je vais encore me faire suer à trouver le parent, à le ré-activer, ... bref la galère !
 

dysorthographie

XLDnaute Accro
Bonjour,
perso je ne m'intéresse qu'au tableau croisé dynamique!
VB:
Sub a()
With Workbooks.Add
    Application.DisplayAlerts = False
    For I = .Sheets.Count To 2 Step -1
        .Sheets(I).Delete
    Next
    Application.DisplayAlerts = True
    .Sheets(1).Name = "TDC"
    TdcExistant(ThisWorkbook.Sheets("Tdc"), "TDC").TableRange2.Copy .Sheets("TDC").Range("A1")
    With .Sheets("TDC").PivotTables(.Sheets("TDC").PivotTables.Count)
        .Name = "TDC"
        .ClearAllFilters
        .ColumnGrand = True
        .RowGrand = True
        With .TableRange1
            .Cells(.Rows.Count, .Columns.Count).ShowDetail = True
        End With
    End With
    .Sheets(1).Name = "DATA"
    .Sheets("TDC").PivotTables("TDC").PivotCache.SourceData = "DATA!" & .Sheets("DATA").Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1)
End With
End Sub

Public Function TdcExistant(Sh As Worksheet, Tdc As String) As PivotTable
For Each td In Sh.PivotTables
   If UCase(td.Name) = UCase(Tdc) Then
         Set TdcExistant = td
         Exit For
   End If
Next
End Function
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 094
Membres
112 658
dernier inscrit
doro 76