XL 2016 VBA : création TCD à partir de feuilles variables - nommées

Phillip

XLDnaute Occasionnel
Bonjour,

Je cherche à automatiser la création d'un TCD (et le mettre en forme, mais là n'est pas le sujet)

J'ai un classeur avec des feuilles nommées

Je veux :

Que la sélection se fasse sur cet onglet
Créer un onglet destination du TCD
Créer le TCD

J'ai donc nommé ma région origine
VB:
TableauEntier = Worksheets(NomOngletactif).Range("D9").CurrentRegion.Select

Crée un onglet destination
VB:
Sheets.Add After:=Worksheets(Worksheets.Count())
    ActiveSheet.Name = "TCD - " & aujourdhui

Donné la zone où je vais coller le TCD
Code:
CibleTCD = Worksheets(TCDencours).Range("A1")

MAIS, quand je crée le TCD avec
Code:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        TableauEntier, Version:=7).CreatePivotTable TableDestination:= _
        CibleTCD, TableName:="Tableau croisé dynamique2", _
        DefaultVersion:=7
    Sheets(TCDencours).Select
    Cells(1, 1).Select

ça ne marche pas...Problème de variable, mais je ne m'en sors pas....

Je vous joins un fichier exemple avec le code entier...

Merci de votre aide

Cordialement
 

Pièces jointes

  • MacroTCD.xlsm
    18.6 KB · Affichages: 7

Efgé

XLDnaute Barbatruc
Bonjour @Phillip

Il est assez déconseillé de créer des TCD par VBA, mais bon...
Quelques petites choses à revoir.

Il faut déclarer tes variables CibleTCD et TableauEntier as Range (avec un Set car ce sont des objets)
Ensuite j'ai modifié
VB:
Worksheets(NomOngletactif).Range("D9").CurrentRegion
Par
Code:
Worksheets(NomOngletactif).Range("A1").CurrentRegion
Pour que ça corresponde à l'exemple.
J'ai renommer les colonnes pour que les champs existent.

Un conseil, tu devrais vérifier que la feuille du jour n'existe pas déjà avant de la créer

Cordialement
 

Pièces jointes

  • MacroTCD.xlsm
    22.2 KB · Affichages: 12

chris

XLDnaute Barbatruc
Bonjour à tous

Je confirme que tous le spécialistes des TCD déconseillent la création de TCD par VBA

On crée et peaufine son TCD (basé sur un tableau structuré et non une plage) manuellement et on peut utiliser VBA pour en modifier la source...
 

Phillip

XLDnaute Occasionnel
Bon...OK...Mais je suis dans le 0,05% des cas ? Il faut faire à la main toute la mise en forme, les styles, les polices ? Ou alors on crée manuellement le TCD, et après on fait une macro pour la mise en forme ? C'est crétin !

Bref, maintenant, j'ai un problème avec "tablename" lors de la création. Lorsque'on crée un TCD, il donne un nom (aléatoire ?) "tableau croisé dynamique et un numéro". Je ne peux pas fixer ce nom dans ma macro ?

VB:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        TableauEntier, Version:=7).CreatePivotTable TableDestination:= _
        CibleTCD, TableName:="TCD", _
        DefaultVersion:=7

Merci !

Cordialement
 

Efgé

XLDnaute Barbatruc
Re
après on fait une macro pour la mise en forme
Non, tu fait tout à la main et tu utilise une macro uniquement pour changer la source de données au cas où celle-ci est amenée à changer.

Pour ton problème, je pense que les TCD ne peuvent pas avoir le même nom qu'un autre.
Je ne vois, comme ça, sur le coup, qu'une seule solution.
Utilise le nombre de feuilles du classeur pour incrémenter tes noms.
Quelque chose comme :
VB:
 Dim NomTCD As String
   NomTCD = "TCD_" & ThisWorkbook.Sheets.Count
  
  
   ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        TableauEntier, Version:=7).CreatePivotTable TableDestination:= _
        CibleTCD, TableName:=NomTCD, _
        DefaultVersion:=7
Et tu utilise NomTCD quand tu manipule ton TCD.

Cordialement
 

Phillip

XLDnaute Occasionnel
Bonne idée, mais ça ne marche pas...Je me demande si ça n'a pas un rapport avec ta première réponse "J'ai renommer les colonnes pour que les champs existent", car, quelque soit le nom du TCD, dans le fichier livré par toi, ça marche !
 

Phillip

XLDnaute Occasionnel
Ouf, ça y est, je crois que j'ai trouvé !

Quand je fais mon TCD "à la main", il sélectionne ma zone de tableau à partir de B1, car ma cellule A1 est VIDE !
Dans ma macro, je lui dis de sélectionner à partir de A1, et comme elle est vide, il plante !

J'ai mis "toto" dans A1, et là, ça marche ! Et quelque soit le nom du TCD...
Je vais essayer de lui donner un nom pour faire joli comme proposé dans le code du post #8, si ça ne marche pas, je laisserai comme ça !

Merci de votre aide !!

Cordialement

Phillip
 

chris

XLDnaute Barbatruc
RE

Règle n°1 de sources de TCD : une et une seule ligne de titre donc une cellule vide ne peut fonctionner.

Règle N°2 : utiliser un tableau structuré et non une plage comme source sinon le TCD ne peut évoluer naturellement.
Il va falloir lui fournir des hormones de croissances par VBA ou autre...
 

Discussions similaires

Réponses
1
Affichages
624

Statistiques des forums

Discussions
314 708
Messages
2 112 097
Membres
111 416
dernier inscrit
philipperoy83