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 :

creer un TCD


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut creer un TCD
    Bonjour , deouis quelques jours je m'obstine à créer un TCD mais je n'y parviens pas
    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Page = ActiveWorkbook.ActiveSheet.Name
    Sheets(Page).Range("A7").CurrentRegion.Select
    vTableau = Page + "!" + Selection.Address(ReferenceStyle:=xlR1C1)
     
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
        SourceData:=Page & "!" & vTableau).CreatePivotTable
        TableDestination:=Page & "!" & "R1C13", _
        TableName:="TCD" & Page,
    En fait, je détermine la variable "vTableau" qui correspond à ma source. J'ai créé une variable car je veux créer un TCD à chaque feuille créée.

    Et voici mon message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    erreur d'execution "5"
    Argument ou appel de procédure incorrect
    De plus pensez vous qu'il soit plus judicieux de créer un autre bouton de commande pour rafraichir mon TCD ou il vaut le faire à la suite du code de création de mon TCD

    Merci pour votre aide

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour Benwad,
    Tu as ça dans la FAQ Excel. Fais une recherche sur "Tableau croisé dynamique"
    Bonne journée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    salut ouskel'n'or,

    C'est ce que j'ai fait dans un premier temps, mais je ne trouve pas mon erreur,
    je vais essayer de nouveau, mais si tu as une idée n'hésites pas...
    Merci

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok ! Déjà, une chose m'intrigue. Tu mets
    vTableau = Page + "!" + Selection.Address(ReferenceStyle:=xlR1C1)
    et dans le code suivant, tu remets
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
    SourceData:=Page & "!" & vTableau).CreatePivotTable
    Ne faut-t-il pas simplement mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
    SourceData:=vTableau).CreatePivotTable
    Sinon tu répètes deux fois Page, non ?
    Pas testé, simplement une question de logique
    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    j'ai essayé mais j'ai toujours le même message:
    "Argument ou appel de procedure incorrect"

    Je ne comprend pas ...

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Fais du pas à pas (tu te places dans la macro et tu fais F8) et regarde ce qu'il y a dans vTableau. De mon côté, je testerais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Page = ActiveWorkbook.ActiveSheet.Name
        Sheets(Page).Range("A7").CurrentRegion.Select
        vTableau = Selection.Address(0,0)
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
            SourceData:=Page & "!" & vTableau).CreatePivotTable _
            Tabledestination... etc
    Sans avoir testé, ça me semblerait plus orthodoxe.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    bonjour, j'ai bien fait le mode pas à pas (F8) et la variable vTableau prend la valeur suivante : "Fevrier 2008!R7C1:R8C8". C'est bien la valeur de mon tableau de données.
    Et j'ai toujours le même message
    "argument ou appel de procédure incorrect"
    Avez vous une explication qui pourrait faire avancer mon schmilblic? merci

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    excuse moi, mais je ne comprend pas ce que tu veux dire

    peux tu m'apporter plus de précisions

    Merci

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Ah !! OK
    Par contre, je ne vois pas dans mon code l'endroit où mon nom de fichier comporte ":"

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    ok, d'apres toi y a t'il une solution?

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ouf ! je n'avais rien compris Quand je te demandais ce qu'il y avait dans v j'ai cru que "Fevrier 2008!R7C1:R8C8" était un nom de fichier
    J'étais dans une autre discussion. Je n'ai même pas vu que c'était une plage de cellules
    Désolé
    Je vais tester tout ça pour te donner une réponse qui ait un sens.
    Je supprime mes réponses idiotes, j'ai trop honte
    A+

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je ne connais pas le nom de ta feuille, tu adapteras. J'ai utilisé les références de cellules RC (RowColonne) plutôt que l'adresse de la plage et ainsi ça fonctionne. Tu n'as pas besoin de sélectionner la plage, il suffit d'utiliser CurrentRegion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Ligne As Long, col As Integer, adres As String
        Worksheets("feuil1").Select
        ligne = Range(Split(Range("A7").CurrentRegion.Address, ":")(1)).Row
        col = Range(Split(Range("A7").CurrentRegion.Address, ":")(1)).Column
        adres = ActiveSheet.Name & "!R" & 7 & "C1:R" & ligne & "C" & col
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
            adres).CreatePivotTable Tabledestination:="", TableName:= _
            "TCD1", DefaultVersion:=xlPivotTableVersion10
    A ce stade tu vas encore devoir désigner les champs que tu utilises et organiser tes données dans le TCD. Mais je pense que tu le sais...
    Tu testes
    Désolé pour le temps perdu.
    A+

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Toutes mes félicitations Ouskel'n'or, cela fonctionne parfaitement.
    Avant de mettre "resolu", peux tu m'apporter une explication supplémentaire sur les références de cellules comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = Range(Split(Range("A7").CurrentRegion.Address, ":")(1)).Row
    Et à ton avis est ce que je peux dupliquer ta réalisation sur 1 TCD général c'est a dire 1 TCD qui reprend toutes les données de mes différentes feuilles ("janvier 2008", "fevrier 2008","mars 2008"...)

    Au fait, il n'ya pas de mal pour tes explications du départ, mais je t'avoue que j'ai eu du mal à comprendre où tu voulais en venir (d'autant plus que je débute en VBA)

    Encore bravo et merci

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Benwad
    peux tu m'apporter une explication supplémentaire sur les références de cellules comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = Range(Split(Range("A7").CurrentRegion.Address, ":")(1)).Row
    Une explication : Split convertit une chaîne de caractères en tableau en utilisant un caractère désigné (ici les deux points ":") comme séparateur de données.
    Par exemple, si Range("A7").CurrentRegion.Address = "$A$7:$G$55", cette adresse ne contient d'une fois ":", j'obtiens donc un tableau d'indices 2 (0 et 1)
    J'aurais pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tablo = Split(Range("A7").CurrentRegion.Address, ":")
    et obtenir un tableau à une dimension de deux indices Tablo(0) = "$A$7" et tableau(1) = "$G$55"
    pour l'utiliser ensuite ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NoLigne = range(Tablo(1)).row '=> 55
    NoCol = range(Tablo(1)).column '=> 7 pour "G")
    Au lieu de passer par un tableau intermédiaire, j'ai utilisé directement Split, ce qui m'évite la variable tablo()

    Ceci dit, je n'avais jamais cherché à créer un TCD par soft et ne comprends pas pourquoi avec l'adresse directe ça ne fonctionne pas. Peut-être faut-il utiliser un range, non une adresse (?) Je n'ai pas testé.
    Bon courage pour la suite.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Par défaut
    Merci pour toutes ces infos Ouskel'n'or

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

Discussions similaires

  1. [XL-2003] Creer un second TCD a partir d'autre TCD
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/12/2010, 22h19
  2. creer un 2 ieme tcd
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/02/2009, 10h04
  3. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 12h50
  4. Réponses: 19
    Dernier message: 24/05/2002, 17h36
  5. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 17h33

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