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 :

Changer la requête qui alimente un tableau croisé ?


Sujet :

Macros et VBA Excel

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut Changer la requête qui alimente un tableau croisé ?
    Bonjour à tous, bonne et heureuse année et merci de votre aide.

    J'ai un tableau croisé qui présente les données en provenance d'une base de données. Dans ces données il y a un période de douze mois (Novembre à Octobre) qui change chaque année. Pour chaque période j'ai un champ dans ma requête. Par exemple, cette année j'ai les champs [2010-11] à [2011-10] et l'année prochaine j'aurai les champs [2011-11] à [2012-10].

    Actuellement je fais les modifications à la main. C'est un peu pénible et source d'erreur.

    En fouillant sur Internet j'ai trouvé qu'apparemment je devrais utiliser la méthode PivotTableWizard de l'objet PivotTable mais aucun exemple prenant une requête comme source du tableau et mes essais ne se sont révélés concluants.

    J'aimerais, par code, remplacer la requête actuelle (ex : Select [Table1].[Champ01], [Table1].[Champ02], [Table1].[Champ02], [Table1].[2010-11], ..., [Table1].[2011-10] form [Table1] par la nouvelle (ex : Select [Table1].[Champ01], [Table1].[Champ02], [Table1].[Champ02], [Table1].[2011-11], ..., [Table1].[2012-10] form [Table1]

    A+

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    S'il s'agit de changer des noms de champs, c'est assez simple en VBA.
    Il faut commencer pas ajouter les nouveaux noms dans la ligne d'en-tête des données. Si les nouveaux noms remplacent les anciens, au premier Refresh, les anciens champs ont disparus et les nouveaux sont dans la liste. Il suffit alors de les placer dans la zone de données du TCD, de ligne, de colonne ou de page et dans l'ordre que tu souhaites, ce qui se fait en renseignant la propriété Orientation de chaque nouveau champ.

    Cordialement,

    PGZ

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Merci pgz, comment dois-je procéder pour faire cela.

    As-tu un exemple de code ?

    Juste pour être certain, les champs de l'année précédente vont disparaitre de la source de données et être remplacés par ceux de l'année en cours. Au total j'ai toujours autant de champs.

    A+

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Les champs en question ont quelle orientation : ligne, colonne, page, données?

    Il faut aussi que la base de données soit à jour (plus de champs anciens mais tous les nouveaux). En supposant que ce sont des champs de colonne
    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 subMarot()
    Dim pvt As Excel.PivotTable
    Dim dte As Date, iMois As Integer
     
    Const dDebut As Date = #11/1/2010#
     
    Set pvt = ThisWorkbook.Worksheets("NomFeuille").PivotTables("NomTCD")
    pvt.PivotCache.Refresh
     
    For iMois = 0 To 11
        dte = DateAdd("m", iMois, dDebut)
        pvt.PivotFields(Format(dte, "yyyy - mm")).Orientation = xlColumnField
    Next i
     
    Set pvt = Nothing
     
    End Sub
    Bien cordialement,

    PGZ

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Pgz, je viens d'essayer ton code en changeant ma source de données dans ma base Access et lors du pivottable.refresh j'ai le message suivant :

    erreur 1004, Trop peux de paramêtres, 12 attendus.
    Cela correspond aux nombres des nouveaux champs de l'année en cours.

    À mon humble avis cela vient du fait que la DatSource n'a pas été mis à jour et qu'elle cherche toujours les champs de 2009.

    A+

    Au fait mes champs sont de type xlPageField.

    À part pour pvt.PivotFields(Format(dte, "yyyy - mm")).Orientation = cela change-til le code ?

    A+

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Si les champs sont toujours là, il faut les descendre
    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
    Sub subMarot()
    Dim pvt As Excel.PivotTable
    Dim dte As Date, iMois As Integer
     
    Const dDebut As Date = #11/1/2009#
     
    Set pvt = ThisWorkbook.Worksheets("NomFeuille").PivotTables("NomTCD")
     
    For iMois = 0 To 11
        dte = DateAdd("m", iMois, dDebut)
        pvt.PivotFields(Format(dte, "yyyy - mm")).Orientation = xlHidden
    Next i
     
    pvt.PivotCache.Refresh
     
    For iMois = 12 To 23    dte = DateAdd("m", iMois, dDebut)
        pvt.PivotFields(Format(dte, "yyyy - mm")).Orientation = xlPageField
    Next i
     
    Set pvt = Nothing
     
    End Sub
    Cordialement,

    PGZ

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Désolé même résultat.

    Le masquage des champs de 2009 se fait bien mais dès que je demande le refresh j'ai le message d'erreur 'Trop peu de paramêtres. 12 attendus'.

    A+

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Bon j'ai perdu suffisement de temps là dessus. Je vais écrire une procédure manuelle pour faire cela.

    Merci de votre aide.

    A+

Discussions similaires

  1. obtenir un résultat qui est un tableau croisé dynamique
    Par Ekimasu dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/08/2009, 11h26
  2. [Joomla!] A la recherche d'une requête qui alimente View.feed.php
    Par Potus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 07/07/2009, 08h59
  3. Réponses: 2
    Dernier message: 26/09/2008, 22h32
  4. Récupérer la requéte sql d'un tableau croisé en vba
    Par snipeurcoq dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/07/2008, 14h14
  5. Requête tableau croisé dynamique + état
    Par willytito dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2006, 15h23

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