Macro Tableau dynamique croisé

Fermé
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010 - 7 mars 2009 à 09:29
m@rina Messages postés 20061 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 22 avril 2024 - 8 mars 2009 à 20:21
Bonjour,

Je tente de faire une macro pour un TDC, malheurusement dès la commande "actriveworkbook" un message d'erreur apparaît....
Visiblement l'insertion d'un TDC n'est pas accepté...

Si vous avez des tuyaux à ce propos, merci de votre attention

'
Sheets("Année").Select
Derlig = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(Derlig, 11)).Select
'
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Année!L1C1:L34C11", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Graph1!L4C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion10
Sheets("Graph1").Select
Cells(4, 1).Select

End Sub

5 réponses

m@rina Messages postés 20061 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 22 avril 2024 11 269
7 mars 2009 à 10:11
Bonjour,

A priori, je dirais que le problème se situe au niveau de TableDestination. Commence par retirer ce que tu as mis : TableDestination = ""

Ta feuille Graph1, c'est une feuille graphique ??? Si oui, ce n'est pas possible de mettre un TCD sur une feuille graphique.
Essaie de mettre plutôt une référence de type :
TableDestination:=Sheets("Feuil3").Range("C10")

De plus, je ne vois pas bien l'intérêt de tes trois premières lignes, d'autant plus que tu utilises une plage fixe pour ton TCD.
Le mieux est de donner un nom à la plage de données. Si la plage risque d'être modifier, donne le nom via le code. Par exemple le plus simple est d'utiliser la zone en cours (CurrentRegion).
Une solution encore plus simple consiste à créer une Liste (Données, Liste, Créer une liste) puis de nommer la plage correspondant à la liste. Le nom évoluera en même temps que la liste.

m@rina
0
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
7 mars 2009 à 13:28
Bonjour,

Merci pour ton attention.

Tes idées n'apportent rien.

Les trois premières lignes me servent à sélectionner une plage de données qui évoluera au fil du temps.
Elles sont donc légitimes.

Ce que je ne comprends pas, c'est que même quand j'utilise l'engeristrement de macro, le problème apparaît tout de même, alors que je n'ai tapé aucune commande!

........

A+
0
m@rina Messages postés 20061 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 22 avril 2024 11 269
7 mars 2009 à 13:44
J'ai testé chez moi et ça fonctionne parfaitement.
Je réitère ce que j'ai dit : tes premières lignes ne sont d'aucun intérêt. En VBA, on évite de faire des SELECT qui alourdissent et ne servent à rien. Les références aux plages sont utilisées dans le code. On n'a pas besoin de sélectionner une plage pour y appliquer une fonction, un format ou tout ce que tu veux.
J'ai bien vu que tu donnes un nom (Derlig) mais d'une part il n'y a pas besoin de faire une sélection pour donner unn nom et d'autre part tu n'utilises pas ce nom...

Voici un exemple qui fonctionne parfaitement :
https://www.cjoint.com/?djnOkUEqSd

Tu verras que j'ai utilisé le nom "Base", et que tu peux ajouter autant de lignes que tu veux, le nom "Base" s'agrandira avec la plage.

Et puis je suis en train de voir que tu as mis des références L et C alors qu'on programme en anglais, il faut donc remplacer L par R (comme Row). Donc, c'est sûrement ça qui ta macro en erreur.

m@rina
0
fabnad Messages postés 28 Date d'inscription dimanche 21 janvier 2007 Statut Membre Dernière intervention 16 mars 2010
8 mars 2009 à 18:11
M@rina,

merci de ton attention.

les trois lignes me permettent de sélectionner une plage sur une page, les données de cette page vont augmenter ou diminuer en nombre de lignes suivants les mois.
de plus je n'aurai pas qu'un seul type de données, il y a 2 types de données totalement différents.....
si je comprend bien ta commande elle va rechercher une base où figure des données, moi j'aurai pluseiurs base.......

deplus comme je te le dis, mis à part les 3 premières lignes...que j'ai ecrit moi même, le reste s'est l'enregistreur de macro .... donc s'est lui qui programme des conneries?

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
m@rina Messages postés 20061 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 22 avril 2024 11 269
8 mars 2009 à 20:21
L'enregistreur de macros est ton ami, mais il faut lui donner une confiance toute relative. On peut enregistrer pour trouver le code, mais ensuite il y a du ménage à faire, et surtout dans les références, il prend la sélection ce qui n'est pas terrible. Il répète tout ce que tu fais... Alors tu sélectionnes, il enregistre la sélection, etc. Si par exemple tu donnes un feuille de destination correcte mais qu'ensuite la cellule indiquée est occupée, le code ne marchera plus, et pourtant on se dit qu'on n'a fait qu'enregistrer !
les anglophones l'utilisent peu, en tous les cas beaucoup moins que nous, pour la simple raison qu'ils programment dans leur langue. Ceci pour dire que l'enregistreur est vraiment une aide à la traduction, mais il faut quand même mettre les mains dans le moteur !

En tous les cas, j'espère qu'on va pas nous le supprimer dans les prochaines versions... Il y a eu toute une discussion à ce sujet avec Microsoft. Déjà il n'existe plus dans PowerPoint 2007... :(

m@rina
0