Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Difficulté pour créer un TCD en VBA

3 réponses
Avatar
Jacques Gronier
Bonjour à toutes et à tous,
Dans un projet VBA , j'ai créé, grâce à l'enregisteur, un Tableau Croisé
Dynamique.
Le fichier source n'ayant jamais le même nom, le projet était écrit dans
perso.xls
Il m'a été impossible de faire fonctionner la macro qui bloque toujours au
même endroit

ActiveWorkbook.Names.Add Name:="base_donnees", RefersToR1C1:= _
"=OFFSET(Sheet1!R1C1,0,0,COUNTA(Sheet1!C1),14)"

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"base_donnees", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Feuil1!L3C1", TableName:="Tableau croisé
dynamique1", _
DefaultVersion:=xlPivotTableVersion10

J'ai trouvé une solution peu satisfaisante de récupérer les données de mon
fichier source dans un autre fichier dans lequel de TCD est déjà en place et
je passe donc par la commande

Sheets("TCD").Select
Range("A3").Select
ActiveSheet.PivotTables("TCD_BRUT").PivotCache.Refresh

Existe-t-il une autre méthode pour générer ce TCD ?
Merci d'avance


--
Bien Cordialement

Jacques Gronier

3 réponses

Avatar
michdenis
Bonjour Jacques,

Voici comment créer un TDC avec une plage dynamique
utilisant la fonction "Decaler" pour définir la plage

les données sont sur la feuil1. Dans mon cas, je n'ai que 2 champs
Colonne A = Étudiant (étiquette de la colonne)
Colonne B = Note (étiquette de la colonne)

Le TDC est créé dans la "Feuil2")

'----------------------------------------
Sub CreerTCD_Plage_Dynamique()
'Déclaration des variables
Dim Adr As String, Dest As String
Dim Pc As PivotCache
Dim Pt As PivotTable

'Si le TDC existe déjà il faut le supprimer
'avant de relancer la procédure sinon une
'erreur est générée c'est ce pourquoi j'ajoute
'la ligne de code suivante :
'On Error Resume Next
'Feuil1.PivotTables("Denis").TableRange2.Clear

On Error Resume Next
With ActiveWorkbook
'Avec la feuille source des données
'(adapter le nom de la feuille + plage de cellules)
With .Worksheets("feuil1")
'Création du nom pour une plage dynamique
'qui deviendra la plage source du TDC
Workbooks(.Parent.Name).Names.Add "Denis", _
"=OFFSET(" & .Name & "!$A$1,,,COUNTA(" & _
.Name & "!$A:$A),COUNTA(" & .Name & "!$1:$1))"
End With
'Avec la feuille où le TDC sera crée :
'adapter le nom de la feuille et la plage de cellule
With .Worksheets("Feuil2")
'Effacer le tdc si il existe
.PivotTables("Denis").TableRange2.Clear
'Définir la cellule où sera créé le TDC
Dest = .Name & "!" & .Range("A4").Address
End With
'Création du PivotCache
Set Pc = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Denis")
'création du PivotTable
Set Pt = Pc.CreatePivotTable(TableDestination:=Range(Dest), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)
End With

With Pt
'Ajout d'un champ en ligne
.AddFields RowFields:="Étudiant"
'Ajout d'un champ "Data" dans le TDC
.PivotFields("Note").Orientation = xlDataField
End With
End Sub
'----------------------------------------



"Jacques Gronier" a écrit dans le message de groupe de discussion :
4ac4cf5b$0$927$
Bonjour à toutes et à tous,
Dans un projet VBA , j'ai créé, grâce à l'enregisteur, un Tableau Croisé
Dynamique.
Le fichier source n'ayant jamais le même nom, le projet était écrit dans
perso.xls
Il m'a été impossible de faire fonctionner la macro qui bloque toujours au
même endroit

ActiveWorkbook.Names.Add Name:="base_donnees", RefersToR1C1:= _
"=OFFSET(Sheet1!R1C1,0,0,COUNTA(Sheet1!C1),14)"

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"base_donnees", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Feuil1!L3C1", TableName:="Tableau croisé
dynamique1", _
DefaultVersion:=xlPivotTableVersion10

J'ai trouvé une solution peu satisfaisante de récupérer les données de mon
fichier source dans un autre fichier dans lequel de TCD est déjà en place et
je passe donc par la commande

Sheets("TCD").Select
Range("A3").Select
ActiveSheet.PivotTables("TCD_BRUT").PivotCache.Refresh

Existe-t-il une autre méthode pour générer ce TCD ?
Merci d'avance


--
Bien Cordialement

Jacques Gronier
Avatar
Jacques Gronier
Merci beaucoup,
Je vais tester cela et essayant de compléter les zones supplémentaires comme
les champs en colonnes ( entrée sortie)

Merci d'avoir pris le temps de regarder ma demande

--
Bien Cordialement

Jacques Gronier



"michdenis" a écrit dans le message de news:

Bonjour Jacques,

Voici comment créer un TDC avec une plage dynamique
utilisant la fonction "Decaler" pour définir la plage

les données sont sur la feuil1. Dans mon cas, je n'ai que 2 champs
Colonne A = Étudiant (étiquette de la colonne)
Colonne B = Note (étiquette de la colonne)

Le TDC est créé dans la "Feuil2")

'----------------------------------------
Sub CreerTCD_Plage_Dynamique()
'Déclaration des variables
Dim Adr As String, Dest As String
Dim Pc As PivotCache
Dim Pt As PivotTable

'Si le TDC existe déjà il faut le supprimer
'avant de relancer la procédure sinon une
'erreur est générée c'est ce pourquoi j'ajoute
'la ligne de code suivante :
'On Error Resume Next
'Feuil1.PivotTables("Denis").TableRange2.Clear

On Error Resume Next
With ActiveWorkbook
'Avec la feuille source des données
'(adapter le nom de la feuille + plage de cellules)
With .Worksheets("feuil1")
'Création du nom pour une plage dynamique
'qui deviendra la plage source du TDC
Workbooks(.Parent.Name).Names.Add "Denis", _
"=OFFSET(" & .Name & "!$A$1,,,COUNTA(" & _
.Name & "!$A:$A),COUNTA(" & .Name & "!$1:$1))"
End With
'Avec la feuille où le TDC sera crée :
'adapter le nom de la feuille et la plage de cellule
With .Worksheets("Feuil2")
'Effacer le tdc si il existe
.PivotTables("Denis").TableRange2.Clear
'Définir la cellule où sera créé le TDC
Dest = .Name & "!" & .Range("A4").Address
End With
'Création du PivotCache
Set Pc = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Denis")
'création du PivotTable
Set Pt = Pc.CreatePivotTable(TableDestination:=Range(Dest), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)
End With

With Pt
'Ajout d'un champ en ligne
.AddFields RowFields:="Étudiant"
'Ajout d'un champ "Data" dans le TDC
.PivotFields("Note").Orientation = xlDataField
End With
End Sub
'----------------------------------------



"Jacques Gronier" a écrit dans le message de groupe
de discussion :
4ac4cf5b$0$927$
Bonjour à toutes et à tous,
Dans un projet VBA , j'ai créé, grâce à l'enregisteur, un Tableau Croisé
Dynamique.
Le fichier source n'ayant jamais le même nom, le projet était écrit dans
perso.xls
Il m'a été impossible de faire fonctionner la macro qui bloque toujours au
même endroit

ActiveWorkbook.Names.Add Name:="base_donnees", RefersToR1C1:= _
"=OFFSET(Sheet1!R1C1,0,0,COUNTA(Sheet1!C1),14)"

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=
_
"base_donnees", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Feuil1!L3C1", TableName:="Tableau croisé
dynamique1", _
DefaultVersion:=xlPivotTableVersion10

J'ai trouvé une solution peu satisfaisante de récupérer les données de mon
fichier source dans un autre fichier dans lequel de TCD est déjà en place
et
je passe donc par la commande

Sheets("TCD").Select
Range("A3").Select
ActiveSheet.PivotTables("TCD_BRUT").PivotCache.Refresh

Existe-t-il une autre méthode pour générer ce TCD ?
Merci d'avance


--
Bien Cordialement

Jacques Gronier



Avatar
simulacre25
Jacques Gronier a écrit le 02/10/2009 à 08h37 :
Merci beaucoup,
Je vais tester cela et essayant de compléter les zones
supplémentaires comme
les champs en colonnes ( entrée sortie)

Merci d'avoir pris le temps de regarder ma demande

--
Bien Cordialement

Jacques Gronier



"michdenis" a écrit dans le
message de news:

Bonjour Jacques,

Voici comment créer un TDC avec une plage dynamique
utilisant la fonction "Decaler" pour définir la plage

les données sont sur la feuil1. Dans mon cas, je n'ai que 2 champs
Colonne A = Étudiant (étiquette de la colonne)
Colonne B = Note (étiquette de la colonne)

Le TDC est créé dans la "Feuil2")

'----------------------------------------
Sub CreerTCD_Plage_Dynamique()
'Déclaration des variables
Dim Adr As String, Dest As String
Dim Pc As PivotCache
Dim Pt As PivotTable

'Si le TDC existe déjà il faut le supprimer
'avant de relancer la procédure sinon une
'erreur est générée c'est ce pourquoi j'ajoute
'la ligne de code suivante :
'On Error Resume Next
'Feuil1.PivotTables("Denis").TableRange2.Clear

On Error Resume Next
With ActiveWorkbook
'Avec la feuille source des données
'(adapter le nom de la feuille + plage de cellules)
With .Worksheets("feuil1")
'Création du nom pour une plage dynamique
'qui deviendra la plage source du TDC
Workbooks(.Parent.Name).Names.Add "Denis", _
"=OFFSET(" & .Name & "!$A$1,,,COUNTA(" & _
.Name & "!$A:$A),COUNTA(" & .Name & "!$1:$1))"
End With
'Avec la feuille où le TDC sera crée :
'adapter le nom de la feuille et la plage de cellule
With .Worksheets("Feuil2")
'Effacer le tdc si il existe
.PivotTables("Denis").TableRange2.Clear
'Définir la cellule où sera créé le TDC
Dest = .Name & "!" & .Range("A4").Address
End With
'Création du PivotCache
Set Pc = .PivotCaches.Add(SourceType:=xlDatabase,
SourceData:="Denis")
'création du PivotTable
Set Pt = Pc.CreatePivotTable(TableDestination:=Range(Dest), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)
End With

With Pt
'Ajout d'un champ en ligne
.AddFields RowFields:="Étudiant"
'Ajout d'un champ "Data" dans le TDC
.PivotFields("Note").Orientation = xlDataField
End With
End Sub
'----------------------------------------



"Jacques Gronier" a écrit dans le
message de groupe
de discussion :
4ac4cf5b$0$927$
Bonjour à toutes et à tous,
Dans un projet VBA , j'ai créé, grâce à
l'enregisteur, un Tableau Croisé
Dynamique.
Le fichier source n'ayant jamais le même nom, le projet était
écrit dans
perso.xls
Il m'a été impossible de faire fonctionner la macro qui bloque
toujours au
même endroit

ActiveWorkbook.Names.Add Name:="base_donnees", RefersToR1C1:= _
"=OFFSET(Sheet1!R1C1,0,0,COUNTA(Sheet1!C1),14)"

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=
_
"base_donnees", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Feuil1!L3C1", TableName:="Tableau
croisé
dynamique1", _
DefaultVersion:=xlPivotTableVersion10

J'ai trouvé une solution peu satisfaisante de récupérer
les données de mon
fichier source dans un autre fichier dans lequel de TCD est déjà
en place
et
je passe donc par la commande

Sheets("TCD").Select
Range("A3").Select
ActiveSheet.PivotTables("TCD_BRUT").PivotCache.Refresh

Existe-t-il une autre méthode pour générer ce TCD ?
Merci d'avance


--
Bien Cordialement

Jacques Gronier






Bonjour,

Après avoir défini un nom dynamique, le code bloque sur le Set Pc avec une propriété non gérée erreur 438 :

Dim Pc As PivotCache
Dim Pt As PivotTable

Sheets.Add
ActiveSheet.Name = "TCDTemp"

With .Worksheets("TCDTemp")
'Création du PivotCache
Set Pc = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:="TCD")
'création du PivotTable
Set Pt = Pc.CreatePivotTable(TableDestination:=Range("A2"), _
TableName:="TCD1", DefaultVersion:=xlPivotTableVersion10)
End With

J'ai aussi essayé avec une macro dirigée mais arrivé au code permettant la création du TCD, cela bloque aussi lorsque je la relance.

Je suis depuis peu sous Excel 2007.

Merci pour vos réponses.