XLS07 : Tableau Croisé Dynamique

Résolu
Vampirelo Messages postés 10 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 13 janvier 2009 - 13 janv. 2009 à 10:26
Mxwell Messages postés 3 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 janvier 2009 - 19 janv. 2009 à 09:23
Bonjour à tous,

Je me prends la tête depuis un moment sur mon problème, et je ne vois pas du tout d'où ça peut venir.

Je m'explique :
Je veux créer une macro créant un tableau croisé dynamique (TCD).
Jusque là, rien d'extraordinaire, et pourtant ça ne marche pas, même avec l'enregistreur de macro !!! O_o

Exemple :
J'ai ma base de données sur un onglet "BDD"
Et je veux créer mon TCD sur l'onglet "TCD"

Avec l'enregistreur, je récupère ce code :

Sub TCD()
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "BDD!L1C1:L42C88", Version:=xlPivotTableVersion12). _
        CreatePivotTable TableDestination:="TCD!L1C1", TableName:= _
        "Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion12
    Sheets("TCD").Select
    Cells(1, 1).Select
End Sub

Et quand je réexécute ce code enregistré, j'ai toujours la même erreur :
Erreur d'exécution '5' :
Argument ou appel de procédure incorrect

J'espère que vous pourrez m'aider ...

3 réponses

Mxwell Messages postés 3 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 janvier 2009
19 janv. 2009 à 09:23
Bonjour Vampirelo,

j'ai pu regardé la façon dont j'ai procédé.
Je commence en début de marco par effacer le contenu de la feuille où est crée le TCD.

If ActiveSheet.PivotTables.Count = 1 Then
        ActiveSheet.PivotTables(1).PivotSelect "", _
            xlDataAndLabel
        Selection.Delete Shift:=xlUp
End If

Ensuite dans la source et la destination, essaie d'utiliser R(row) à la place de L(ligne), cela peut changer d'une version à l'autre.
En ce qui concerne le nom de ton tableau, il est généré automatiquement, ce qui peut créer des erreurs lors d'exécutions répétées de la macro, donne lui un nom fixe. Ce qui donnerait au final ça :

Sub TCD()
ActiveWorkbook.PivotTableWizard SourceType:=xlDatabase, SourceData:= _
        "BDD!R1C1:R42C88",  TableDestination:="TCD!R1C1", TableName:= _


"TCD"
    Sheets("TCD").Select

    Cells(1, 1).Select

End Sub

Je ne procède pas comme toi, pour créer mon TCD j'utilise un
"CurrentRegion", permettant de choisir une plage variable de cellule à
partir d'une cellule cible dans une feuille ciblée. Dans ton cas cela donnerait :

ActiveWorkbook.PivotTableWizard SourceType:=xlDatabase, SourceData:= _

Sheets("BDD").Range("A1").CurrentRegion, TableDestination:="TCD!R1C1", TableName:= _

"TCD"

Et mon code pour le remplissage du tableau à adapter à ta sauce et en changeant le nom du tableau et des champs, si cela peut t'aider :


  ActiveSheet.PivotTables("TCD_Périodique").AddFields

    With ActiveSheet.PivotTables("TCD_Périodique").PivotFields("ETABLISSEMENTS")

        .Orientation = xlPageField

        .Position = 1

    End With

    With ActiveSheet.PivotTables("TCD_Périodique").PivotFields("CAISSES")

        .Orientation = xlColumnField

        .Position = 1

    End With

    With ActiveSheet.PivotTables("TCD_Périodique").PivotFields("PROFIT_CENTERS")

        .Orientation = xlColumnField

        .Position = 2

    End With

    With ActiveSheet.PivotTables("TCD_Périodique").PivotFields("OPERATEURS")

        .Orientation = xlRowField

        .Position = 1

    End With

    ActiveSheet.PivotTables("TCD_Périodique").AddDataField ActiveSheet.PivotTables("TCD_Périodique"). _

        PivotFields("SOMME_TOTALE"), "Somme de SOMME_TOTALE", xlSum

    ActiveSheet.PivotTables("TCD_Périodique").PivotFields("CAISSES").ShowDetail = False

    ActiveWorkbook.ShowPivotTableFieldList = False

    ActiveSheet.PivotTables("TCD_Périodique").TableStyle2 = "PivotStyleLight16"
End Sub

Voila, en espérant t'avoir aidé, je te souahite bon courage pour la suite.

Bye,
Maxwell.
3
Belag55 Messages postés 20 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 13 février 2009
16 janv. 2009 à 15:16
Si j'ai bien compris, tu utilises l'enregistreur pour avoir le code qui te permet de faire ton tableau. Attention, l'enregistreur ne prend pas en compte certaines actions menées directement à la souris. Exemple : si tu effectues un cliquer/glisser d'un champ vers le tableau, l'enregistreur ne le prend pas. Il existe une autre méthode pour mettre les champs dans le tableau il me semble, mais je ne suis pas spécialiste en la matière. Si l'erreur viend bien de ce problème, ça t'aidera déja à orienter tes recherches.
0
Mxwell Messages postés 3 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 19 janvier 2009
18 janv. 2009 à 18:12
Bonjour à vous,

j'ai trouvé une alternative à mon problème évoqué sur le topic où tu es intervenu, Vampirelo (http://www.vbfrance.com/forum/sujet-TABLEAU-CROISE-DYNAMIQUE-MACRO-ERREUR_1249679.aspx#1). Je voulais aller chercher les données directement sur mes tables dans une base Oracle puis j'ai fini par changer de méthode.

Je copie mes tables dans un onglet Excel, et je remplis mon tableau croisé dynamique (sur un autre onglet) à partir des données importées, et ca fonctionne nickel (le problème venant apparement du nom du tableau généré automatiquement). Donc je dois être en mesure de t'aider.

Je n'ai pas le code sous les yeux, je pourrais t'en redire plus demain quand je serai au taf. Je me suis juste permis un petit Up pour que tu te tiennes au courant demain, j'aurai sans aucun doute posté.

Bye.
0
Rejoignez-nous