Création de TCD en VBA impossible
Le
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.
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.

Poser une question


remplacer
SourceData:="TCD"
par
SourceData:=Range("TCD")
--
isabelle
Le 2012-01-13 08:26, simulacre25 a écrit :
| 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.
Source = Range("TCD").Parent.Name & "!" & Range("TCD").Address
--
isabelle
Le 2012-01-13 12:48, 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.