Tableau croisé dynamique

[Résolu/Fermé]
Signaler
Messages postés
40
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
23 juillet 2013
-
 WeaponEDGE -
Bonjour à tous,

J'ai un petit soucis avec la création d'un Tableau croisé dynamique en macro.


'Je compte le nombre de ligne de ma feuille (car le nombre de ligne est dynamique)

Sheets("Synthèse-AA").Select
nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row
MsgBox (nbl2)


Range("B1:E543").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"'Synthèse-AA'!R10C2:R" & nbl12 & "C4", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="% Client CA!R1C1", TableName:="TCD", _
DefaultVersion:=xlPivotTableVersion14

L'erreur concerne tout le 2eme bloc.

Il y aurait-il un problème avec la syntaxe suivante ?
"'Synthèse-AA'!R10C2:R" & nbl12 & "C4"

Merci d'avance pour votre aide, Cdlt

5 réponses

Bonjour,

Je pense que le problème vient du fait que tu jongles avec 2 format différent :

nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row

Ta formule ci dessus te permet de déterminer la dernière ligne de ton tableau par rapport à la colonne "A".

SourceData:= "'Synthèse-AA'!R10C2:R" & nbl12 & "C4",

Le Source Data ci dessus permet de déterminé les limites de ton tableau mais il est au format R1C1. Les réfenres au Format R1C1 dépendent de la cellule active au moment ou la macro est lancé.

Prenons un exemple : Supposons que ton tableau fasse 100 Lignes et 3 colonnes :
Si la cellule active est A1 et que tu fais ta sélection celà donnera :
Sheet1'!RC:R100C3
Si la cellule active est A2 et que tu fais ta sélection celà donnera :
Sheet1'!R-1C:R99C3
Si la cellule active est B1 et que tu fais ta sélection celà donnera :
Sheet1'!RC-1:R100C2

Conclusion, tu ne peux pas utiliser ta variale nbl2 avec le Format R1C1.

Pour résoudre ton problème il faut traduire la sélection avec le même format :
par exemple : SourceData:= "'Synthèse-AA'!A1:G" & nbl12, si ton tableau va de la colonne "A" à "G".

WepaonEDGE
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
40
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
23 juillet 2013

Je vais m'expliquer car ce que je demande n'est pas très clair toute reflexion faite.
J'ai une variable nbl2 qui compte le nombre de ligne.

Jaimerai, a partir d'un onglet, faire un tableau croisé dynamique. Le hic, c'est que le nombre de ligne varie. J'aimerai savoir comment ca séecrit dans le source data?

SourceData:= _
"'Synthèse-AA'!R10C2:R" & nbl12 & "C4"

? car cette écriture ne fonctionne pas ..

Merci
Messages postés
40
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
23 juillet 2013

Ah oui, je comprend. Je me suis un peu mélangé entre le web et l'enregistreur de macro

Sheets("Synthèse-AA").Select
nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row - 1

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Synthèse-AA!B1:E" & nbl12).CreatePivotTable _
TableDestination:="Client!A1:E" & nbl2, TableName:="TCD", _
DefaultVersion:=xlPivotTableVersion10

J'ai toujours un problème, Run time error'5'. Ca me met dans l'onglet ou je veux faire mon TCD, mais il reste vierge...
T'es sur quelle version d'Excel ?
Messages postés
40
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
23 juillet 2013

C'est bon, j'ai réussi.
POur ceux que ca intéresse, voici mon code

Sheets("Synthèse-AA").Select
nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row - 1

Range("B1:E" & nbl2).Select

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Synthèse-AA!R1C2:R" & nbl2 & "C5", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Client!R1C1", TableName:="PivotTable1", DefaultVersion _
:=xlPivotTableVersion14
Sheets("Client").Select
Cells(1, 1).Select

Merci WeaponEDGE de m'avoir aidé !! c'est grace à toi que j'ai trouvé !
Bonne fin de journée !
De rien on est là pour ça.

En relisant ton code tu peux même optimiser ta variable. voici le code

nbl2 = Range("A65536").End(xlUp).Row

Pour ma part je préfère utiliser le code ci dessous :

Variable = Sheets("Sheet1").cells(65536,1).end(xlup).row

Avec ce code quand tu relis ta macro tu sais de quelle feuille il s'agit.

Quant au terme Cells, la position de la cellule est uniquement numérique et donc tu peux jouer plus facilement avec les variables pour déterminer la position.

Range("B1") = [B1] = Cells(1,2)