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 :

Problèmes pour créer un TCD via VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    logisticien
    Inscrit en
    Août 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : logisticien

    Informations forums :
    Inscription : Août 2014
    Messages : 28
    Par défaut Problèmes pour créer un TCD via VBA
    Bonjour,

    Je débute avec VBA et je souhaite créer un TCD (Excel 2007) dont la plage source a un nombre de lignes variable.
    Je voudrais placer mon TCD dans une feuille nommée TCD (peu importe son nom mais je ne veux pas du nom par défaut). Le problème c’est qu’avec la macro enregistrée une nouvelle feuille s’ouvre à chaque fois or j’ai besoin d’avoir mon TCD et d’utiliser différents filtres afin renseigner un autre tableau avec les résultats obtenus.
    J’ai donc enregistré une macro pour m’inspirer du code. En fait, j’ai juste substitué les adresses des tables source et de destination mais cela ne fonctionne pas (la naïveté du débutant me direz vous ?). Aucune de mes tentatives, pas plus que les solutions trouvées sur différents forums (dont Developpez.net) ne fonctionne. Je ne comprends pas où sont les problèmes.
    Je précise qu’à chaque fois qu’une feuille est mentionnée dans le code je me suis assuré qu’elle existe bien et qu’il n’y a pas d’erreur de saisie dans les noms.

    J’ai réduit le code au minimum pour créer le TCD et à chaque exemple ci-dessous (c'est-à-dire que c’est tout ce qu’il y a entre Sub Code() et End sub) j’ai placé le curseur dans le tableau de la feuille « Données » et j’ai obtenu le message d’erreur reporté en caractère gras.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim NbLigne As Long, NbColonne As Long, i As Long, j As Long
    NbLigne = Range("A" & Rows.Count).End(xlUp).Row
    NbColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    i = NbLigne
    j = NbColonne
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Données!L& i & C & j:L1C1", Version:=xlPivotTableVersion12).CreatePivotTable _
            TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
            DefaultVersion:=xlPivotTableVersion12
    Erreur d’exécution 5, argument où appel de procédure incorrect et quand je remplace L par R j’ai le message : Erreur d’exécution 1004, Référence non valide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
           "Données!L1C1:L89C20", Version:=xlPivotTableVersion12).CreatePivotTable _
            TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
            DefaultVersion:=xlPivotTableVersion12
    Erreur d’exécution 5, argument où appel de procédure incorrect (ici la plage est figée mais c’était pour voir si le problème venait du changement de l’exemple précédent)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ThisWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        [Données!A1].CurrentRegion.Address(, , xlR1C1, True)).CreatePivotTable _
        TableDestination:="Feuil3!R3C1", _
        TableName:="Mon TCD"
    Erreur d’exécution 5, argument où appel de procédure incorrect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            ThisWorkbook.Worksheets("Données").UsedRange, _
            Version:=xlPivotTableVersion12).CreatePivotTable _
            TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
            DefaultVersion:=xlPivotTableVersion12
    Erreur d’exécution 9, l’indice n’appartient pas à la sélection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            ThisWorkbook.Worksheets("Données").Range("A1").CurrentRegion, _
            Version:=xlPivotTableVersion12).CreatePivotTable _
            TableDestination:="TCD!L3C1", TableName:="Tableau croisé dynamique1", _
            DefaultVersion:=xlPivotTableVersion12
    Erreur d’exécution 9, l’indice n’appartient pas à la sélection

    Par ailleurs, je ne sais pas la différence entre « PivotCaches.Create » et « PivotCaches.Add ».

    Ensuite, je souhaite simplement filtrer comme ceci :
    Etiquette de colonne : Moiséchéance
    Etiquette de ligne : Secteur
    Valeur : Valeurcouverte, Somme de

    puis,
    Etiquette de ligne : Secteur
    Valeur : Codecontrat, Nombre de

    Malgré des heures de recherche dans les forums et les tutoriels je n'ai pas trouvé de solution. La plupart des cas identiques que j’ai rencontré n’ont soit pas eu de solution soit celles proposées n’ont pas fonctionné pour moi (par exemple le changement de langue avec R à la place du L pour les lignes).

    Bref, pétrin appel au secours !
    Je remercie d’avance celles et/où ceux qui voudront bien me proposer une solutions.

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 562
    Par défaut
    Bonjour

    Bon déjà tu as 2007 : peux-tu mettre la source sous forme de tableau (au sens 2007-2013) : ainsi la variabilité du nombre de lignes sera automatiquement gérée.

    Quand on crée un 1er TCD cela crée un cube de données appelé cache. D'où create pour le cache

    Chaque TCD utilisant la même source utilise par défaut le même cache : on ajoute donc un lien entre le nouveau TCD et le cache existant (qui peut s’enrichir si le TCD utilise de nouveaux champs), d'où add pour un autre TCD.

    Quand tu réalises une concaténation il faut découper chaîne et variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Données!L& i & C & j:L1C1"
    devrait être syntaxiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Données!L" & i & "C" & j & ":L1C1"
    mais autant déclarer la plage dans le bons sens.

    Si tu n'a pas renommé le TCD, la macro ne peut s'exécuter 2 fois car le nom existe. (Le cache aussi).

    Edit : bonjour rdurupt, je n'avais pas rafraichi...

  4. #4
    Membre averti
    Homme Profil pro
    logisticien
    Inscrit en
    Août 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : logisticien

    Informations forums :
    Inscription : Août 2014
    Messages : 28
    Par défaut
    Merci beaucoup pour tes liens rdurupt. Cela répond à mon besoin immédiat (et pas seulement au problème d'erreur) et même futur car j'avais envisagé l'usage de boutons mais c'était prévu pour dans un futur indéterminé .

    Un grand merci à 78chris également. Je n'arrivais pas à trouver la règle.

    Entre temps j'ai trouvé une solution en m'inspirant de différents codes trouvés mais ça reste quand même du tâtonnement alors votre aide est bienvenue.

    Cordialement

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

Discussions similaires

  1. [XL-2007] erreur 1004 pour la création d'un tcd via vba
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/10/2012, 20h23
  2. VBA pour créer un TCD sur powerpivot
    Par jpclabaux dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/09/2012, 16h17
  3. Problème pour créer la relation
    Par LeNeutrino dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/02/2006, 13h24
  4. [XML word] problème pour créer des puces
    Par ratapapa dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/07/2005, 13h52
  5. Doc pour créer requetes SQL via ODBC sous EXCEL
    Par satanas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/01/2005, 08h33

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