Tableau dynamique croisé dans une macro
Bonsoir,
Je m’initie actuellement au macro.
J’ai un souci de référence.
Je cherche à créer un tableau dynamique croisé après avoir employé la fonction Ctrl * afin que le tableau de données initiale s’ajuste au nombre de ligne occupé dans la page initiale.
(En prenant les colonne complète la fonction regroupement que j’utilise après BUG. Certainement à cause des ligne vide au delà des donnée)
Ctrl * se traduit dans la macro => Selection.CurrentRegion.Select
Mais en suite le tableau dynamique croisé ce créer avec des référence fixe =>ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Page1!R1C1:R110C7")
Quelqu’un connaît il la façon dont je doit opérer pour que le tableau soit créé avec la sélection et non la définition de la zone telle qu’elle était au moment de l’enregistrement de ma macro ?
Par avance merci de vos lumières.
Cordialement,
Damien
Salut Damien et bienvenue comme nouveau membre.
Essaye de joindre un bout de fichier, afin de pouvoir t'aider, sinon
il faut tout recréer le tableau et ta macro.
Pour Joindre un fichier en haut de la ficelle.
Tu recopies, sur le forum l'Url de ton fichier.
A te relire
Mytå
Bonjour,
Ce n’est pas évident de mettre un morceau de fichier !
Ce fichier contient des données perso!
Tout le reste de mon enchaînement marche nickel J'ai juste ces ligne qui me casse les pied :
Selection.CurrentRegion.Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Page1!R1C1:R110C7").CreatePivotTable TableDestination:="", TableName:= _
"TC Page1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
Tel qu'elles sont écrites au lieu de sélectionner le tableau présent en Page1 et d'en faire le tableau dynamique croisé. La sélection du tableau se fait bien quelque soit l'étendu des données mais le traitement en tableau dynamique croisé (TDC) ne ce fait qu'avec les données de la case A1 à G110.
Je cherche donc à savoir s'il y a un moyen de définir la source de données du TDC autrement que par "Nom de page !coordonné haut gauche:coordonnée bas droit".
J'espérais que l'on puisse par exemple :
* nommer la sélection (sans figer de coordonnées dans la macro) et employer ce nom dans l'appel du TDC.
* Ou remplacer les coordonnés figé du TDC par les cellule sélectionné dans la Page 1.
Je ne sais si c'est possible dans ce sens et je manque encore de connaissance sur la syntaxe VBA pour traduire ces actions.
J'espère que ces quelques données supplémentaires vous permettront de m'éclairer sur cette élément de syntaxe VBA.
Merci,
Cordialement,
Damien
PS : je continu à chercher dans un gros bouquin de plus de 500 pages pas bien digeste.
Bonjour,
Pas facile de faire des macros TCD sans un fichier d'autant qu'il y a pas mal de possibilité.
Essaye en remplaçant ton code par celui ci-après :
Set PlageTCD = Range("A1").CurrentRegion
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"PlageTCD").CreatePivotTable TableDestination:="", TableName:= _
"TC Page1", DefaultVersion:=xlPivotTableVersion10
With ActiveSheet
.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
.Cells(3, 1).Select
End WithA te lire
Dan
Bonsoir,
Merci j'ai suivi un peu la piste donné (quii malheureusement ne marchais pas dans mon cas) et j'ai finalement résolut mon problème ainsi :
Selection.CurrentRegion.Select
ActiveWorkbook.Names.Add Name:="Damien", RefersToR1C1:=Selection.CurrentRegion
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Damien" _
).CreatePivotTable TableDestination:="", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Selectainsi j'utilise la fonction d'insertion d'un nom de zone atribué à une cellule (ici A1)avec comme définition de zone Selection.CurrentRegion.
en fait dans ce cas source data doit ce nomer SourceData:="nom"_) et non SourceData:=_"nom")
dans le deuxième syntaxe la macro attend des coordonnées de début et fin de tableau type page!R1C1;R4C10.
encore merci de cette orientation.
J'espère que mon extrait de code pourra en aider d'autre.
Cordialement,
Damien
Bonjour,
Le pb est de savoir où la première cellule en haut à gauche commence dans ta base de données.
Le RAnge("A1") sert à cela dans le code que je t'ai proposé.
Pour ce qui est du tien tu peux enlever le CURRENREGION dans cette ligne --> ActiveWorkbook.Names.Add Name:="Damien", RefersToR1C1:=Selection.CurrentRegion
Amicalement
Dan
Bonsoir,
Effectivement la première ligne de code de mon message précédent, ne me paraissait pas nécessaire.
Mais j’avais en fait continué à chercher sur la piste indiquée lors de mon 2eme message.
A savoir nommer une zone et m’en servir pour la définition du TDC
En fait au début de ma macro, je renomme ma page Excel, et sélectionne la cellule A1 avant d’utilisé la traduction de la fonction [Ctrl*].
J’avais bien essayé le morceau de code que tu m’avais donné mais la syntaxe bloquait sur SourceData:= _ "PlageTCD")
Tant et ci bien que je ne savais pas si le début de ta syntaxe permettait de bien définir la zone qui m’intéressais.
J'ai finalement utilisé la fonction enregistrement macro, réalisé la dénomination de la zone et la transformation en TDC et analysé le code dans lequel VBA avais traduit. C'est là que je me suis rendu compte que la syntaxe lié au TDC changeais légèrement quand on emploie un nom de zone au lieu de coordonnées (ce que je te précisais dans mon message précédent).
Je n’ai pas réessayé en employant : Set PlageTCD = Range("A1").CurrentRegion
Ce qui semble avoir une fonction similaire à : ActiveWorkbook.Names.Add Name:="Damien", RefersToR1C1:=Selection.CurrentRegion
Si je comprends bien ?!
Set permet de donner le « nom » PlageTDC à ce qui est défini après = (qui peux être une zone de cellule, des colonnes, ligne ..) et Range("A1").CurrentRegion permet de définir la zone de cases occupé en partant de A1.
J’essaierais lors d’un prochain développement.
Merci,
Damien
re,
Tu as compris.
Sache que Set PlageTCD ne donne pas un nom (comme dans insertion nom défnir) mais renvoie une plage (de type Range)
Eviter de mettre les guillemets avant et après plagetcd. raison du blocage.
Dans source data tu peux aussi reprendre --> Range("A1").CurrentRegion
Le seul conseil que je te donne avec CURRENT REGION c'est de ne pas avoir de lignes ou colonnes vides car cette instruction ne prend en compte qu'une plage de cellules continues.
Amicalement
Dan