VBA Erreur 1004

Fermé
srouches - 13 janv. 2011 à 10:04
cousinhub29 Messages postés 953 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 10 novembre 2024 - 13 janv. 2011 à 11:21
Bonjour,

Je suis débutant en VBA, en clair pour l'instant je ne créé du code que via l'enregistreur de macro.

A partir d'un tableau (nb de colonnes fixe, nb de lignes variable), je dois réaliser un tableau croisé dynamique.

J'enregistre la création du tableau et je termine l'enregistrement dès qu'il est affiché.

En lançant la macro : "Erreur 1004, la méthode addfields de la classe tablepivot a échouée"
J'ai lu que l'erreur 1004 est assez générique, mais si vous pouviez m'aider... voici mon code :

Sub DMS()
'
' DMS Macro
' test
'

'
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"insert!C1:C10").CreatePivotTable TableDestination:= _
"'[modèle fichier global.xls]total'!R5C1", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:= _
Array("NOM AGENT", "Données"), ColumnFields:="NOM CLIENT FACTURE"
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("CA")
.Orientation = xlDataField
.Caption = "Somme de CA"
.Position = 1
.Function = xlSum
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"QUANTITE")
.Orientation = xlDataField
.Caption = "Somme de QUANTITE"
.Function = xlSum
End With
End Sub

NOM AGENTS / NON CLIENT FACTURE / CA / QUANTITE sont des titres de colonnes du tableau source.
Pour définir la source du tableau croisé dynamique, je sélectionne les colonnes complètes car le nb de lignes du tableau peut varier dans le temps (j'ai également essayer en prenant une zone source plus délimitée mais l'erreur persiste).

Merci par avance.

1 réponse

cousinhub29 Messages postés 953 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 10 novembre 2024 344
13 janv. 2011 à 11:21
Bonjour,

Petite précision, tout d'abord...

Lorsque l'on veut faire un TCD, il vaut mieux éviter de prendre des colonnes entières en référence, la taille du fichier s'en ressentira....

Ensuite, dans un code, même enregistré par l'enregistreur de macro, tu obtiendras cette erreur "1004", sans doute un signe que même Excel n'en veut pas, des colonnes entières...

Tu peux créer ta base de référence de façon dynamique (via une formule du style "DECALER"), ou la définir en tout début de code

Ensuite, tu prends en référence cette "base"

De plus, dans ton code initial, tu parles toujours "d'ActiveSheet"...
Or, tu insères le TCD dans une autre feuille, donc le TCD n'est pas dans la feuille active...

Essaie avec ce code :

Sub DMS()
Range("A1:D" & [A65000].End(xlUp).Row).Name = "base"
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    "base").CreatePivotTable TableDestination:= _
    "'[modèle fichier global.xls]total'!R5C1", TableName:= _
    "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
With Sheets("total")
    .PivotTables("Tableau croisé dynamique1").AddFields RowFields:= _
        Array("NOM AGENT", "Données"), ColumnFields:="NOM CLIENT FACTURE"
    With .PivotTables("Tableau croisé dynamique1").PivotFields("CA")
        .Orientation = xlDataField
        .Caption = "Somme de CA"
        .Position = 1
        .Function = xlSum
    End With
    With .PivotTables("Tableau croisé dynamique1").PivotFields("QUANTITE")
        .Orientation = xlDataField
        .Caption = "Somme de QUANTITE"
        .Function = xlSum
    End With
End With
End Sub


Bon courage
0