1 pièce(s) jointe(s)
Problèmes pour créer un TCD via VBA
Bonjour,
Je débute avec VBA et je souhaite créer un TCD (Excel 2007) dont la plage source a un nombre de lignes variable.
Je voudrais placer mon TCD dans une feuille nommée TCD (peu importe son nom mais je ne veux pas du nom par défaut). Le problème c’est qu’avec la macro enregistrée une nouvelle feuille s’ouvre à chaque fois or j’ai besoin d’avoir mon TCD et d’utiliser différents filtres afin renseigner un autre tableau avec les résultats obtenus.
J’ai donc enregistré une macro pour m’inspirer du code. En fait, j’ai juste substitué les adresses des tables source et de destination mais cela ne fonctionne pas (la naïveté du débutant me direz vous ?). Aucune de mes tentatives, pas plus que les solutions trouvées sur différents forums (dont Developpez.net) ne fonctionne. Je ne comprends pas où sont les problèmes.
Je précise qu’à chaque fois qu’une feuille est mentionnée dans le code je me suis assuré qu’elle existe bien et qu’il n’y a pas d’erreur de saisie dans les noms.
J’ai réduit le code au minimum pour créer le TCD et à chaque exemple ci-dessous (c'est-à-dire que c’est tout ce qu’il y a entre Sub Code() et End sub) j’ai placé le curseur dans le tableau de la feuille « Données » et j’ai obtenu le message d’erreur reporté en caractère gras.
Code:
1 2 3 4 5 6 7 8 9
| Dim NbLigne As Long, NbColonne As Long, i As Long, j As Long
NbLigne = Range("A" & Rows.Count).End(xlUp).Row
NbColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
i = NbLigne
j = NbColonne
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Données!L& i & C & j:L1C1", Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion12 |
Erreur d’exécution 5, argument où appel de procédure incorrect et quand je remplace L par R j’ai le message : Erreur d’exécution 1004, Référence non valide
Code:
1 2 3 4
| ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Données!L1C1:L89C20", Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion12 |
Erreur d’exécution 5, argument où appel de procédure incorrect (ici la plage est figée mais c’était pour voir si le problème venait du changement de l’exemple précédent)
Code:
1 2 3 4
| ThisWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
[Données!A1].CurrentRegion.Address(, , xlR1C1, True)).CreatePivotTable _
TableDestination:="Feuil3!R3C1", _
TableName:="Mon TCD" |
Erreur d’exécution 5, argument où appel de procédure incorrect
Code:
1 2 3 4 5
| ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
ThisWorkbook.Worksheets("Données").UsedRange, _
Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion12 |
Erreur d’exécution 9, l’indice n’appartient pas à la sélection
Code:
1 2 3 4 5
| ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
ThisWorkbook.Worksheets("Données").Range("A1").CurrentRegion, _
Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion12 |
Erreur d’exécution 9, l’indice n’appartient pas à la sélection
Par ailleurs, je ne sais pas la différence entre « PivotCaches.Create » et « PivotCaches.Add ».
Ensuite, je souhaite simplement filtrer comme ceci :
Etiquette de colonne : Moiséchéance
Etiquette de ligne : Secteur
Valeur : Valeurcouverte, Somme de
puis,
Etiquette de ligne : Secteur
Valeur : Codecontrat, Nombre de
Malgré des heures de recherche dans les forums et les tutoriels je n'ai pas trouvé de solution. La plupart des cas identiques que j’ai rencontré n’ont soit pas eu de solution soit celles proposées n’ont pas fonctionné pour moi (par exemple le changement de langue avec R à la place du L pour les lignes).
Bref, pétrin appel au secours !
Je remercie d’avance celles et/où ceux qui voudront bien me proposer une solutions.
Cordialement