IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

excel 2003 tableau croisé dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut excel 2003 tableau croisé dynamique
    Bonjour,
    J'ai un petit souci, je souhaiterai pouvoir automatisé la création d'un tableau croisé dynamique avec VB, j'ai enregistré une macro qui crée ce fameux tableau, et j'ai modifié les variable de cette macro afin de pouvoir l'utiliser dans plusieurs cas différents. Le code modifié donne ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
        i = 6
        While Not IsEmpty(Cells(i, 1))
        i = i + 1
        Wend
     
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="'" & Sheets(ComboPièce).Activate & "'!" & Range(Cells(6, 1), Cells(i - 1, 13))).CreatePivotTable TableDestination:="'[Chiffrage.xls]" & Sheets(ComboPièce).Activate & "'!" & Cells(6, 16), TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
        ActiveWindow.ScrollColumn = 2
        ActiveWindow.ScrollColumn = 3
        ActiveWindow.ScrollColumn = 4
        ActiveWindow.ScrollColumn = 5
        ActiveWindow.ScrollColumn = 6
        ActiveWindow.SmallScroll Down:=-9
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Code")
            .Orientation = xlPageField
            .Position = 1
        End With
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Marge T."), "Nombre de Marge T.", xlSum
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Prix net HT"), "Nombre de Prix net HT", xlSum
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("PTHT"), "Nombre de PTHT", xlSum
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").DataPivotField
            .Orientation = xlColumnField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Type")
            .Orientation = xlRowField
            .Position = 1
        End With
        ActiveWorkbook.ShowPivotTableFieldList = False
    Lorsque je lance le programme, une erreur surgit de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="'" & Sheets(ComboPièce).Activate & "'!" & Range(Cells(6, 1), Cells(i - 1, 13))).CreatePivotTable TableDestination:="'[Chiffrage.xls]" & Sheets(ComboPièce).Activate & "'!" & Cells(6, 16), TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
    je gratte depuis hier dessus, et j'ai toujours pas compris l'erreur, si quelqu'un pouvait m'aider ça serait sympa, merci.

  2. #2
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    que vaut "ComboPièce"
    que vaut au moment de l'exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "'" & Sheets(ComboPièce).Activate & "'!" & Range(Cells(6, 1), Cells(i - 1, 13))
    (je parle de la chaine de caractère)

    décompose ta ligne dans la fenêtre de débbugage pour voir se qu'il ne comprend pas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Bonjour Bhaal76,
    "combopièce" est le nom d'une de mes combobox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "'" & Sheets(ComboPièce).Activate & "'!" & Range(Cells(6, 1), Cells(i - 1, 13))
    pour les signes ' et '! qui sont entre "" , je ne sais pas trop pourquoi, car comme je l'expliquai au départ j'ai enregistrer une macro pour créer un TCD et j'ai remplacé les variable qui peuvent changer comme la sélection de mes donnés pour le TCB, la case qui va accueillir le TCB et le nom de la feuille sur laquelle est pris cette sélection.

    Si tu as une meilleur idée que moi est quelle réponde a ma demande je suis preneur car je galère pas mal dessus

  4. #4
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    ton erreur n'est pas une incompatibilité de type ?

    parce qu'en simulant, je tombe sur cette erreur si je laisse un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Feuil1!" & Range(Cells(5, 3), Cells(18, 5)))....
    erreur qui disparait si je ne laisse que le range dans la formule, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Range(Cells(5, 3), Cells(18, 5)))....
    Pour moi, ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(ComboPièce).Activate
    devrai être avant ...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    je ne sais pas, voila le code créé par l'enregistreur de macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="'Transfert 4 brins 8m'!R6C1:R500C13").CreatePivotTable TableDestination:="'[Chiffrage.xls]Transfert 4 brins 8m'!R6C16", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
        ActiveWindow.ScrollColumn = 2
        ActiveWindow.ScrollColumn = 3
        ActiveWindow.ScrollColumn = 4
        ActiveWindow.ScrollColumn = 5
        ActiveWindow.ScrollColumn = 6
        ActiveWindow.SmallScroll Down:=-9
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Code")
            .Orientation = xlPageField
            .Position = 1
        End With
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Marge T."), "Nombre de Marge T.", xlSum
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Prix net HT"), "Nombre de Prix net HT", xlSum
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("PTHT"), "Nombre de PTHT", xlSum
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").DataPivotField
            .Orientation = xlColumnField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Type")
            .Orientation = xlRowField
            .Position = 1
        End With
        ActiveWorkbook.ShowPivotTableFieldList = False
    la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="'Transfert 4 brins 8m'!R6C1:R500C13").CreatePivotTable TableDestination:="'[Chiffrage.xls]Transfert 4 brins 8m'!R6C16", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
    je l'ai remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="'" & Sheets(ComboPièce) & "'!" & Range(Cells(6, 1), Cells(i - 1, 13))).CreatePivotTable TableDestination:="'[Chiffrage.xls]" & Sheets(ComboPièce).Select & "'!" & Cells(6, 16), TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
    je te met en couleur les variable que j'ai modifié

  6. #6
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    je pense que tu mélange les méthode de déclaration de plage de donné
    je m'explique,
    pour utilisé une plage de donnée, tu peux la déclarer comme ceci
    "Feuil1!R5C3:R18C5"

    ou comme ceci
    sheets(numéro de page).Range(Cells(5, 3), Cells(18, 5))

    (attention, le numéro de la première feuille est 1, pas 0)

    mais pas un mix des deux ...

    idem pour la partie destination, avec en plus le workbooks(num du classeur) devant
    style
    workbooks(num du classeur).sheets(numéro de page).Range(Cells(5, 3), Cells(18, 5))
    toute la question étant de savoir quel numéro de classeur est "Chiffrage.xls"



    essai çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Sheets(ComboPièce).Range(Cells(6, 1), Cells(i - 1, 13))).CreatePivotTable TableDestination:=workbooks(x).Sheets(ComboPièce).Cells(6, 16), TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
    corrige s'il manque des paranthèses

    un petit oubli (après un café, çà va mieux)
    pas besoin de connaitre le numéro du classeur dans la collection de classeur ouvert,
    Workbooks("Chiffrage.xls").sheets(numéro de page ou "nom de page").Range(Cells(5, 3), Cells(18, 5)) devrai faire l'affaire

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Je vient d'essayer et ça ne marche pas, toujours la même ligne qui pose problème, VB m'indique comme les fois d'avant:

    erreur d'exécution 13
    incompatibilité de type

  8. #8
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub Macro8()
        Workbooks("Classeur2.xls").PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Workbooks("Classeur1.xls").Sheets("Feuil1").Range(Cells(5, 3), Cells(18, 5))).CreatePivotTable Workbooks("Classeur2.xls").Sheets("Feuil1").Range("A3"), TableName:= _
            "Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
     
        Workbooks("Classeur2.xls").Sheets("Feuil1").Activate
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Jour")
            .Orientation = xlRowField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Semaine")
            .Orientation = xlColumnField
            .Position = 1
        End With
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("vente"), "Somme de vente", xlSum
        ActiveWorkbook.ShowPivotTableFieldList = False
        Application.CommandBars("PivotTable").Visible = False
    End Sub
    ceci fonctionne entre 2 classeur.

    Les soucis que j'ai rencontré :
    apparement, l'objet PivotCaches doit être dans le classeur de la feuille de destination, ensuite, il faut changer la feuille active afin qu'elle corresponde a la feuille de destination, enfin, selon si tu utilise des classeur enregistrer ou non, le nom des classeur change (exemple, si classeur2 n'est pas enregistré, tu peux y accéder par Workbooks("Classeur2")..., mais s'il est enregistrer, tu dois utilisé Workbooks("Classeur2.xls")...)

    Je ne connaissais pas les tableau croisé dynamique, çà m'a l'air sympa, mais j'ai du mal a y trouvé des application concrête (mis a par de la compta)

    voila, en espérant que tu puisse y arriver

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Bonjour Bhaal76,
    j'ai gratté un peu plus ce matin et j'ai trouvé mon erreur dui était pourtant évidente, j'écrivais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="'Transfert 4 brins 8m'!R6C1:R500C13").CreatePivotTable TableDestination:="'[Chiffrage.xls]Transfert 4 brins 8m'!R6C16", TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
    alors qu'il fallait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
            SourceData:="'" & ComboPièce & "'!R6C1:R65536C13").CreatePivotTable _
            TableDestination:="'[Chiffrage.xls]" & ComboPièce & "'!RC16", _
            TableName:="Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
    le problème était qu'il ne faut pas écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sheets(combopièce).select
    mais
    tout simplement

    Voila, c'était ça mon erreur, je te remercie de ton aide, et a une prochaine fois peut-être.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/05/2008, 09h30
  2. Excel 2007, Tableau Croisé Dynamique
    Par phenixnerull dans le forum Excel
    Réponses: 5
    Dernier message: 22/06/2007, 16h22
  3. Pb de chemin en VBA excel sur tableau croisé dynamique
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2007, 14h23
  4. [Jexcel] fichier Excel avec tableau croisé dynamique
    Par jeanmarc67 dans le forum Documents
    Réponses: 2
    Dernier message: 16/02/2007, 16h51
  5. Problème avec Excel et tableau croisé dynamique
    Par françois62 dans le forum VBScript
    Réponses: 9
    Dernier message: 19/11/2006, 22h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo