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
Re

@Dudu2
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

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