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

Création de TCD en VBA impossible

8 réponses
Avatar
simulacre25
Bonjour,

Après avoir écumé les précédents messages, j'ai appliqué les conseils de MichDenis pour créer un TCD en VBA, la macro dirigée enregistrant un code qui ne fonctionne pas lorsque je le relance.

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 :

With ActiveWorkbook
ActiveWorkbook.Names.Add Name:="TCD", RefersToR1C1:= _
"=OFFSET(Données!R1C1,,,COUNTA(Données!C1),COUNTA(Données!R1))"

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
End With

Je suis depuis peu sous Excel 2007.

Merci pour vos réponses.

8 réponses

Avatar
isabelle
bonjour,

remplacer
SourceData:="TCD"
par
SourceData:=Range("TCD")

--
isabelle



Le 2012-01-13 08:26, simulacre25 a écrit :
Bonjour,

Après avoir écumé les précédents messages, j'ai appliqué les conseils de
MichDenis pour créer un TCD en VBA, la macro dirigée enregistrant un code qui ne
fonctionne pas lorsque je le relance.

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 :

With ActiveWorkbook
ActiveWorkbook.Names.Add Name:="TCD", RefersToR1C1:= _
"=OFFSET(Données!R1C1,,,COUNTA(Données!C1),COUNTA(Données!R1))"

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
End With

Je suis depuis peu sous Excel 2007.

Merci pour vos réponses.
Avatar
MichD
| la macro dirigée enregistrant un code qui ne
| fonctionne pas lorsque je le relance.

***Si tu essaies de créer un TDC là où un TDC existe déjà, cela ne peut pas fonctionner.
Tu dois d'abord effacer le TDC existant avant de recréer un TDC à la même place !
De mémoire, dans la procédure originale, il y avait une ligne de code à cet égard.

*** Attention, comme ton code est écrit, tu essaies de créer ton TDC dans la même feuille
où sont tes données, à la place de tes données.
Dans le bout de code soumis, remplace "NomDeLaFeuilleDeDestination" par le nom de
la feuille où tu veux créer ton TDC. Si tu veux le créer dans la même feuille, attention à
l'adresse suivante : Range("A2"). Choisis un autre emplacement libre!

*** Les noms de tes TDC devaient avoir un autre nom. TDC représente une colonne dans la
feuille de calcul et TDC1 est l'adresse d'une cellule. Tout cela afin d'éviter une méprise
possible...


ActiveWorkbook.Names.Add Name:="TCD", RefersToR1C1:= _
"=OFFSET(Données!R1C1,,,COUNTA(Données!C1),COUNTA(Données!R1))"

Dim Adr As String
With .Worksheets("TCDTemp") 'La feuille source de tes données
Adr = .Name & "!" & .Range("TDC").Address
'Création du PivotCache
Set Pc = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:­r)
'création du PivotTable
End With

With Worksheets("NomDeLaFeuilleDeDestination")
Set Pt = Pc.CreatePivotTable(TableDestination:=.Range("A2"), _
TableName:="TCD1", DefaultVersion:=xlPivotTableVersion10)
End With

P.S. Prière de demeurer sur le même fil, cela facilite la tâche pour tout le monde.


MichD
------------------------------------------
Avatar
simulacre25
MichD a écrit le 13/01/2012 à 17h16 :
| la macro dirigée enregistrant un code qui ne
| fonctionne pas lorsque je le relance.

***Si tu essaies de créer un TDC là où un TDC existe
déjà, cela ne peut pas fonctionner.
Tu dois d'abord effacer le TDC existant avant de recréer un TDC à
la même place !
De mémoire, dans la procédure originale, il y avait une ligne de
code à cet égard.

*** Attention, comme ton code est écrit, tu essaies de créer ton
TDC dans la même feuille
où sont tes données, à la place de tes données.
Dans le bout de code soumis, remplace "NomDeLaFeuilleDeDestination"
par le nom de
la feuille où tu veux créer ton TDC. Si tu veux le créer
dans la même feuille, attention à
l'adresse suivante : Range("A2"). Choisis un autre emplacement
libre!

*** Les noms de tes TDC devaient avoir un autre nom. TDC représente une
colonne dans la
feuille de calcul et TDC1 est l'adresse d'une cellule. Tout cela afin
d'éviter une méprise
possible...


ActiveWorkbook.Names.Add Name:="TCD", RefersToR1C1:= _
"=OFFSET(Données!R1C1,,,COUNTA(Données!C1),COUNTA(Données!R1))"

Dim Adr As String
With .Worksheets("TCDTemp") 'La feuille source de tes données
Adr = .Name & "!" & .Range("TDC").Address
'Création du PivotCache
Set Pc = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:­r)
'création du PivotTable
End With

With Worksheets("NomDeLaFeuilleDeDestination")
Set Pt = Pc.CreatePivotTable(TableDestination:=.Range("A2"), _
TableName:="TCD1", DefaultVersion:=xlPivotTableVersion10)
End With

P.S. Prière de demeurer sur le même fil, cela facilite la
tâche pour tout le monde.


MichD
------------------------------------------


Pour Isabelle, le Range("TCD") ne marche pas (j'avais déjà tenté le coup).

Pour Denis :

En fait la procédure complète ouvre un nouveau classeur, crée le nom dynamique dans la feuille active à l'ouverture (Données) dans laquelle se trouvent mes données source.

Ensuite, la procédure crée une nouvelle feuille et la renomme TCDTemp (pas utile mais cela me permet de m'y retrouver plus facilement). La feuille TCDTemp est vierge et est active et j'applique le code devant créer le TCD dans cette feuille. J'avais noté le fait d'effacer un précédent tableau mais ce n'était pas le cas ici. Donc le range ("A2") est bien dans la feuille active TCDTemp vierge.

Voici le début du code avec les modifications apportées :

Dim MonChemin As String
MonChemin = ActiveWorkbook.Path
ChDir MonChemin
Workbooks.Open Filename:= _
MonChemin & "Groupes de validation.xls"

'récupération des infos du paramétrage du dernier trimestre connu
'via un TCD et copie dans XL ORI centralisation
With ActiveWorkbook 'Feuille "Données" active à l'ouverture du classeur
ActiveWorkbook.Names.Add Name:="TCD", RefersToR1C1:= _
"=OFFSET(Données!R1C1,,,COUNTA(Données!C1),COUNTA(Données!R1))"

Dim Pc As PivotCaches
Dim Pt As PivotTable
Dim Adr As String

Sheets.Add
ActiveSheet.Name = "TCDTemp"

Sheets("Données").Select

With .Worksheets("Données") 'La feuille source de tes données
Adr = .Name & "!" & .Range("TCD").Address 'OK
'Création du PivotCache
Set Pc = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:­r) 'Blocage ici
'création du PivotTable
End With

With Worksheets("TCDTemp")
Set Pt = Pc.CreatePivotTable(TableDestination:=.Range("A2"), _
TableName:="TaCrD1", DefaultVersion:=xlPivotTableVersion10)
End With

Le code bloque toujours sur :

Set Pc = .PivotCaches.Add(SourceType:=xlDatabase, SourceData:­r) avec une erreur 438, propriété ou méthode non gérée par cet objet.
Avatar
isabelle
oui c'est vrai il faut mettre une adresse type "string"

Source = Range("TCD").Parent.Name & "!" & Range("TCD").Address


--
isabelle



Le 2012-01-13 12:48, simulacre25 a écrit :

------------------------------------------


Pour Isabelle, le Range("TCD") ne marche pas (j'avais déjà tenté le coup).
Avatar
simulacre25
isabelle a écrit le 13/01/2012 à 18h59 :
oui c'est vrai il faut mettre une adresse type "string"

Source = Range("TCD").Parent.Name & "!" &
Range("TCD").Address


--
isabelle



Le 2012-01-13 12:48, simulacre25 a écrit :

------------------------------------------



Pour Isabelle, le Range("TCD") ne marche pas (j'avais
déjà tenté le coup).




Marche toujours pas. Le code génère la même valeur que celui de Denis avec un type String (espion positionné) et le code s'arrête toujours à cet endroit.
Avatar
isabelle
Source = Range("TCD").Parent.Name & "!" & Range("TCD").Address
Set Pc = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Source)

PivotCaches s'applique a Workbook et non à WorkSheet


--
isabelle


Le 2012-01-13 13:28, simulacre25 a écrit :

Marche toujours pas. Le code génère la même valeur que celui de Denis avec un
type String (espion positionné) et le code s'arrête toujours à cet endroit.
Avatar
MichD
Devant PivotCache, tu ajoutes : .Parent


Set Pc = .Parent.PivotCaches.Add(SourceType:=xlDatabase, SourceData:­r) avec une


MichD
------------------------------------------
Avatar
simulacre25
MichD a écrit le 13/01/2012 à 20h53 :
Devant PivotCache, tu ajoutes : .Parent


Set Pc = .Parent.PivotCaches.Add(SourceType:=xlDatabase, SourceData:­r)
avec une


MichD
------------------------------------------


Je reviens après quelques jours d'absence.

Les deux méthodes fonctionnent désormais et mon tcd se crée correctement.

Merci pour tout.