Tableau croisé et VBA

belette

XLDnaute Junior
Bonjour,

J'ai crée une macro VBA afin de créer un tableau croisé dynamique.

J'utilise l'instruction suivante:

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=''FeuilleOrigine'!R' & lignedeb & 'C' & coldeb & ':R' & lignefin & 'C' & colfin).CreatePivotTable TableDestination:=FeuilleDestination, TableName:=TableName

La page étant de taille variable et la macro servant pour différentes feuilles, j'utiliser les variables lignedeb et coldeb pour la taille de la plage ainsi que feuilleOrigine pour la feuille où se trouve les données et feuilleDestination pour la feuille où créer le tcd. tablename est une variable contenant le nom du tableau.

Cette instruction fonctionnait avec des données fixes, maintenant que j'utilises des variables ça ne fonctionne plus...
 
P

Pierrot93

Guest
Bonjour Belette

peut eêtre qu en definissant au préalable la source de tes données par un objet range ca marcherait mieux, enfin peut être !!!

Du style set MaSource = selection

et ensuite dans ton tableau SourceData:=MaSource

je le fait comme ca et a priori ca marche

Bonne journée
@+
 

belette

XLDnaute Junior
En fait la macro complète est :

Private Sub OK_Click()

Dim FeuilleOrigine, FeuilleDestination, NomTable
Dim lignefin, colfin, lignedeb, coldeb

'lecture userform
FeuilleOrigine = ComboBoxType.Value
FeuilleDestination = 'TCD_' & ComboBoxType.Value
NomTable = 'Table_' & ComboBoxType.Value

Sheets(FeuilleOrigine).Select
'comptage du nomdre de lignes et de colonnes du tableau
lignefin = Cells(3, 2).CurrentRegion.Rows.Count
colfin = Cells(3, 2).CurrentRegion.Columns.Count
'valeurs des variables de début de lignes et de colonnes
lignedeb = 3
coldeb = 2

On Error GoTo création
'Mise à jour
ActiveSheet.PivotTables(NomTable).PivotCache.Refresh
Sheets(FeuilleDestination).Select
Exit Sub

création:

Sheets.Add.Select
ActiveSheet.Name = FeuilleDestination

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:='FeuilleDestination!R' & lignedeb & 'C' & coldeb & ':R' & lignefin & 'C' & colfin).CreatePivotTable TableDestination:=Sheets(FeuilleDestination).Range('B4'), TableName:=NomTable
 
P

Pierrot93

Guest
Re Belette

d après ce que j ai compris, ton problème se situe lorsque tu crées un nouveau TCD parce que tu as un message d erreur a ce niveau

On Error GoTo création
'Mise à jour
ActiveSheet.PivotTables(NomTable).PivotCache.Refresh
Sheets(FeuilleDestination).Select
Exit Sub

mais dans ce cas tu rajoutes une feuille 'destination', qui est vierge mais dans ton code la source est cette même feuille de destination

SourceData:='FeuilleDestination!R' & lignedeb & 'C' & coldeb & ':R' & lignefin & 'C' & colfin).CreatePivotTable TableDestination:=Sheets(FeuilleDestination).Range('B4')

il y a quelque chose qui doit m'échapper!!!

essaies de mettre un fichier exemple sans données confidentielles si tu veux j y jetterais un coup d oeil

0+
 
P

Pierrot93

Guest
Re Re Belette

Non la création d un TCD ne crée pas sytèmatiquement une nouvelle feuille, par contre au niveau de 'sourcedata' et 'tabledestination' il faut utiliser des variables déclarées de type range et ca devrait mieux marcher. Ci dessous exemple de déclaration à adapter

Dim MaSource As Range

Set MaSource = ActiveSheet.Range('A1:A25')


@+
 

belette

XLDnaute Junior
Ok il a avait effectivement une erreur !

SourceDate prend FeuilleOrigine évidemment et non FeuilleDestination. J'ai essayé de définir une variable ZoneOrigine (sheet.range) mais elle n'est toujours pas accepté par sourceData
 
P

Pierrot93

Guest
tu as défini ta variable 'zoneorigine' comme dans l exemple que je t aie donné, si tu veux utiliser une autre feuille que la feuille active, il faut la définir comme suit :

Set MaSource = Worksheets('Feuil1').Range('g1:g25')

bon courage !!!
 

belette

XLDnaute Junior
Marche toujours pas :

Set ZoneOrigine = Worksheets(FeuilleOrigine).Range('B3:U' & lignefin)
'car nombre de lignes variable !

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=ZoneOrigine).CreatePivotTable TableDestination:=Sheets(FeuilleDestination).Range('B4'), TableName:=NomTable
 

belette

XLDnaute Junior
ça marche mais je comprend pas pourquoi !

Set ZoneOrigine = Worksheets(FeuilleOrigine).Range('B3:U' & lignefin)

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=ZoneOrigine).CreatePivotTable TableDestination:=Sheets(FeuilleDestination).Range('B4'), TableName:=NomTable

Maintenant je vais ma battre avec les pivotfields !

Message édité par: belette, à: 06/06/2006 11:52
 

Dan

XLDnaute Barbatruc
Bonjour,

Une autre solution est celle-ci :

Après Sourcedata, tu mets ceci -->
Code:
Range('A1').CurrentRegion

Avec Range A1, la première cellule en haut à gauche de ta base de données.

ou ceci :

Code:
Set plage = ThisWorkbook.ActiveSheet.Range('A1').CurrentRegion
puis après sourcedata, tu mets 'plage'

La feuille Base de données doit être sélectionnée.

;)

Message édité par: Dan, à: 06/06/2006 15:46
 

Discussions similaires

Réponses
1
Affichages
535

Statistiques des forums

Discussions
312 492
Messages
2 088 914
Membres
103 983
dernier inscrit
AlbertCouillard