Tableau croisé et VBA

  • Initiateur de la discussion Initiateur de la discussion belette
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

belette

Guest
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...
 
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
@+
 
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
 
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+
 
Moi aussi quelquechose m'échappe. La création d'un tcd crée automatiquement une nouvelle feuille ?

Fichier trop gros pour être joint (117 Ko zippé !)

Message édité par: belette, à: 06/06/2006 10:39
 
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')


@+
 
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
 
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 !!!
 
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
 
ç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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

D
  • Question Question
Réponses
1
Affichages
761
M
Réponses
2
Affichages
3 K
C
Réponses
5
Affichages
2 K
Charles78
C
V
Réponses
69
Affichages
9 K
V
Réponses
4
Affichages
1 K
P
  • Question Question
Réponses
6
Affichages
1 K
J
Réponses
4
Affichages
2 K
jmten92
J
L
Réponses
5
Affichages
1 K
louisavice
L
Réponses
7
Affichages
1 K
Retour