TCD avec source variable
Bonjour,
J'ai un probleme qui doit être tres simple a résoudre pour tes habitués a VBA mais je bloque un peu.
Je veux, en autre, créer un tableau dynamique avec comme base de donnée une zone qui va de la case A1 jusqu'a la derniere ligne et colonne 11.
J'ai donc voulu créer le TCD comme ceci (j'utilise beaucoup l'enregistreur de macro pour avancer...) mais ca ne marche pas :
Dim DerLig As Long
DerLig = Range("A" & Rows.Count).End(xlUp).Row
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
Worksheets("DonneesBrutes").Range(Cells(1, 1), Cells(DerLig, 11)), Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:="PivotTable1" _
, DefaultVersion:=xlPivotTableVersion14
Je n'ai mis que ca. Si vous avez besoin de mon fichier ou de ma macro complete, n'hésitez pas a me la demander
Bonjour,
Il suffit de nommer une plage, pas besoin de VBA.
Onglet Formules / Définir un nom:
=offset($a$1;;;counta($k:$k);11)Puis saisissez le nom choisi pour cette plage dans la source de votre tcd.
Cdlt,
Darzou
Bonjour et merci pour la réponse,
Mon probleme est que je dois utiliser cette macro tous les jours, avec donc des données différentes.
Le nom doit donc être défini au début de ma macro je pense.
Est ce possible?
Pourquoi mon code ne marche pas? La définition de la source du TCD n'est pas comme cela?
Merci d'avance
Svp, personne pour m'aider pour définir le code source de mon TCD en début de macro?
Merci d'avance
Bonjour,
L'idée d'une zone nommée dynamique, telle que proposée par Darzou, serait la meilleure solution.
Une fois créée la zone, plus besoin d'y toucher.
Maintenant, dans ton code, l'erreur (du moins, "une erreur") provient de la référence de la zone...
Comme tu ajoutes une nouvelle feuille, on est donc positionné sur cette feuille.
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
Worksheets("DonneesBrutes").Range(Cells(1, 1), Cells(DerLig, 11)), Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:="PivotTable1" _
, DefaultVersion:=xlPivotTableVersion14Donc Cells(1, 1) et Cells (Derlig, 11) font référence à des cellules de cette nouvelle feuille....
Tu dois donc faire référence à la feuille contenant les données ainsi :
With Worksheets("DonneesBrutes")
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
.Range(.Cells(1, 1), .Cells(DerLig, 11))
.....
.....Maintenant, une deuxième erreur, la destination...
Comme tu insères une nouvelle feuille, celle-ci ne se nomme pas toujours : "Sheet1!"
Peut-être que comme ceci, ça fonctionnerait, mais sans fichier, je n'ai pas testé...
With Worksheets("DonneesBrutes")
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
.Range(.Cells(1, 1), .Cells(DerLig, 11)), Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:=ActiveSheet & "!R3C1", TableName:="PivotTable1" _
, DefaultVersion:=xlPivotTableVersion14
End WithNéanmoins, je préfère la solution de la zone nommée
Bonne semaine
Bonjour,
Même avis que Cousinhub et Darzou. Toutefois attention que si tu utilises la même feuille, il faut au préalable effacer complètement le TCD avant d'en refaire un nouveau.
Sinon si tu veux faire tout cela par code avec une nouvelle feuille à chaque reprise, essaie comme ceci :
Dim plage As Range
With Worksheets("DonneesBrutes")
Set plage = .Range("A1:K" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
plage).CreatePivotTable TableDestination:=ActiveSheet.Range("A3"), TableName:="TCD"Si terminé, merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER
Amicalement
Merci beaucoup tout le monde pour vos réponses et votre aide.
Dan, c'est exactement ce que je voulais (la définition de "Plage" en début de Macro).
Je suis désolé mais je comprenais pas la solution avec Definir un nom puisque dans ce cas, il faudrait le faire en manuel avant chaque lancement de macro non?
J'espere que j'aurais la réponse a ma derniere question mais je mets bien résolu car c'est OK.
Je continue donc ma macro et je reviendrais certainement vers vous pour d'autres aides
re,
Je suis désolé mais je comprenais pas la solution avec Definir un nom puisque dans ce cas, il faudrait le faire en manuel avant chaque lancement de macro non?
Ce que Darzou te proposais était de définir un nom de ta base de données en utilisant la fonction Decaler. Une fois fait tu pouvais reprendre ce nom dans ta macro en utilisant Range(nom défini) en lieu et place du nom Plage que je t'ai donné
exemple si ta base de données va de A1 à K15
- nom défini via Insertion / Nom / définir --> tu attribues un nom à ta base de données "Toto"
Dans "ref à" tu mets cette formule = decaler($A$1;;;nbval($A:$A)-1;11)
Dans le code VBA tu supprimes l'instruction SET et tu remplaces "Plage" par RANGE("TOTO")
Amicalement