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

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

  • Initiateur de la discussion Initiateur de la discussion Phillip
  • 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 !

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

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

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...
 
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
 
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
 
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 !
 
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
 
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...
 
- 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

Discussions similaires

Réponses
1
Affichages
662
Réponses
1
Affichages
1 K
Réponses
1
Affichages
2 K
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…