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

VBA Access Discussion :

[VBA]controler un tableau croisé dynamique en vba access


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut [VBA]controler un tableau croisé dynamique en vba access
    Bonjour,

    J'ai fait un formulaire tableau croisé dynamique en passant par l'assistant.
    J'aurais besoin maintenant d'accéder aux propriétés de l'objet PivotTable qui sont parfaitement disponibles sous excel.
    J'ai activé la référence excel dans la fenêtre visualbasic, mais je ne sais pas comment lui faire comprendre que mon formulaire contient un objet excel.
    Merci d'avance pour votre aide.

    ceuce

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Je n'ai pas accès à internet ce we, mais vous me reverrez lundi! En attendant vous pouvez toujours me donner vos idées, merci

    ceuce

  3. #3
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonsoir,
    Juste un rappel: un formulaire, lorsqu'il est dépendant, est toujours basé sur une table ou une requête. Lorsque tu as utilisé l'assistant pour créer ton formulaire tableau analyse croisé [dynamique? j'en doute], Access a créé une requête analyse croisée à laquelle est basé le formulaire.
    Voici un exemple de construction d'une telle requête.
    Code Exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TRANSFORM Sum(Caisse.Débit) AS SommeDeDébit
    SELECT Caisse.Bénéficiaire
    FROM Caisse
    GROUP BY Caisse.Bénéficiaire
    PIVOT Caisse.DateMvt;
    En récap,
    • la clause TRANSFORM contient le champ calculé affiché en valeur
    • la clause SELECT contient le(s) champs(s) affiché(s) en en-tête de ligne
    • la clause PIVOT contient le champs (calculé) affiché en en-tête de colonne

    Donc, si tu veux modifier le résultat affiché dans le formulaire, il suffit soit de modifier la source du formulaire (donc la table ou la requête), soit en filtrant cette dernière.

    A ma connaissance, la seule manipulation de l'instruction SQL permet de modifier le résultat affiché. Le seul hic c'est que si le formulaire est dépendant, il faut aussi modifier de manière dynamique la source de chaque contrôle et là VBA entre en jeu.

    Je ne sais pas exactement si mes explications rejoignent tes besoins mais à toi de nous exposer au mieux ton problème.

    Alors à Lundi si tu n'es plus dans la place.

    En attendant, bon courage et @+

    PS: Et une dernière chose, tu trouves ici (Comment créer des requêtes d'analyses croisées conditionnelles, par Fabrice CONSTANS (alias loufab)) des explications formidable sur l'utilisation de requête analyse croisée paramétrée (un truc dynamique). Un très bon tuto comme je les aime. Un grand bravo à loufab d'ailleurs

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Je ne vois pas comment me servir du tuto de Fabrice CONSTANS (alias loufab) car même si le tableau croisé (effectivement pas dynamique!!) crée par l'assistant est basé sur une requête croisée, je ne crois pas avoir accés au sql de cette requête.

    Je peux effectivement mettre un critère (critère choisi dans une liste déroulante) non pas sur le tableau croisé mais sur la requête sur laquelle il est basé. Le problème c'est qu'apparemment ce n'est pas dynamique, le tableau croisé ne se met pas à jour.

    Donc je pensais à une autre solution qui pourrait être simple sachant que :
    • Le cadre indépendant dans le formulaire conçu par l'assistant représente le tableau croisé, qui est un objet excel (dans les propriétés: application OLE=Microsoft Excel 2000).

    • Sous excel, on a accés aux propriétés d'un tableau croisé par le vba. Par exemple, pour mettre à jour le tableau et changer un critère :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
       
              Range("A1:B9").Select
          Range("B9").Activate
          ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
          With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
              "NatureSol")
              .PivotItems("dalles").Visible = False
              .PivotItems("enrobé").Visible = False
              .PivotItems("stabilisé").Visible = False
          End With
          Range("D10").Select

    • Je sais que j'ai une référence excel dans visual basic (dans outils), dont je peux me servir pour accéder aux propriétés d'un objet excel sous access.

    • ma question est : comment??


    Je suis sure de pouvoir faire ça comme ça, mais je ne sais pas comment lui dire que le cadre indépendant qui se nomme PivotTable est justement un objet de la collection PivotTables pour pouvoir y appliquer ses méthodes.

    Je ne sais pas si tout ça est trés clair, mais j'attends vos remarques avec impatience. Merci à vous tous d'avance

    ceuce

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Je vais juste simplifier le problème en posant une seule question :

    Savez-vous comment changer dynamiquement le contenu d'un tableau croisé conçu avec l'assistant formulaire, en fonction d'un paramètre dont la valeur est choisie dans une liste déroulante?


    ceuce

  6. #6
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonsoir,
    Citation Envoyé par ceuce
    Je vais juste simplifier le problème en posant une seule question :

    Savez-vous comment changer dynamiquement le contenu d'un tableau croisé conçu avec l'assistant formulaire, en fonction d'un paramètre dont la valeur est choisie dans une liste déroulante?


    ceuce
    Je suis désolé d'insister mais le tuto de loufab résoud tous les problèmes concernant les tableaux croisés.
    Vraiment navré...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Bon ok, je vais regarder ça de beaucoup plus prés alors, c'est moi qui suis désolée...
    Par contre il est possible que je pose des questions si je ne comprend pas quelques trucs

    ceuce

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Bon alors cette fois j'ai bien regardé et j'ai appliqué les consignes à la lettre, mais décidement ce n'est pas ce que je veux.
    Le résultat obtenu par une requête analyse croisé n'est pas du tout le même qu'avec un tableau croisé (Assistant Requête analyse croisée et assistant tableau croisé dynamique).

    En fichier joint vous trouverez le résultat que j'obtiens avec la méthode de loufab ainsi que mon tableau croisé sur lequel je voudrais appliquer un paramètre.

    Les points d'une requête croisée qui diffèrent d'un tableau croisée:
    • pas de total en fin de colonne
    • pas de possibilité de réorganiser l'ordre des lignes, ni des colonnes
    • aucune indication sur le nom du critère
    • pas inclu dans un formulaire comme le tableau croisé


    Et c'est donc pour toutes ces raisons que je veux un critère sur un tableau croisé, et non sur une requête croisée. Or Loufab ne parle pas de tableau mais seulement de requête, ce qui n'est pas la même chose.
    On est d'accord?

    ceuce
    Fichiers attachés Fichiers attachés

  9. #9
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut,
    Bon ... que te dire ... entre tableau croisé et requête croisée, il y a une différence IMMENSE: le premier n'existe pas dans Access à ma connaissance. Je te prie de me corriger. Je veux bien t'aider mais peux-tu poster ici en attache un fichier de base de données exemple.
    La compréhension du fonctionnement d'une analyse croisée à la sauce Access te permettra d'avancer dans ta quête.
    @+ j'espère.
    Cordialement

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Alors, en fait je n'ai pas le temps de faire une BD exemple, mais je sais bien ce qu'est une requête croisée.
    Il n'empêche que dans Access tu peux insérer un tableau croisé, qui je te l'accorde, est un objet d'excel. Dans le menu insertion, tu clique sur formulaire , puis sur Assistant tableau croisé dynamique. Tu peux essayer avec n'importe quelle BD, ça va au final te faire un formulaire qui contient ton tableau croisé (qui est objet OLE, car il provient d'excel).

    J'avais l'impression que tu ne connaissais pas ça mais peut être que je me trompe, alors dis moi ce que tu penses de tout ça, ce serait cool.

    ceuce

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Je ne sais vraiment plus comment faire avec mon problème. Mahefasoa, tu n'aurais pas une petite idée par hasard, meme pas aboutie? Une piste à explorer? Les autres aussi hein, n'hésitez pas!

    ceuce

  12. #12
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut,

    Je me suis focalisé sur l'analyse croisée d'Access et jamais sur le fait de la présence d'un TABLEAU croisé dynamique. Pour ma part, lorsque j'aurai besoin d'un tel outil, je me fie à Excel.
    Bref, désolé encore de t'avoir engouffré dans un abîme...
    J'ai suivi ton conseil et ô surprise, un tableau croisé dynamique dans mon Access! Et pour accéder à l'objet PivotTable (oui car c'est un objet), il suffit d'écrire
    J'ai ensuite consulté l'aide sur cet objet dans Access, il voici ce que j'ai trouvé.
    ----------------AIDE ACCESS-------------------------
    PivotTable, objet

    PivotTable
    +
    |__Plusieurs objets


    Représente le conteneur d'une liste de tableau croisé dynamique.

    Utilisation de l'objet PivotTable
    Vous avez le choix entre la méthode CreateObject et le mot clé New pour créer un objet PivotTable.
    ---------------FIN AIDE ACCESS---------------------

    Ensuite comme c'est un conteneur, j'ai constaté qu'il contient entre autres les objets PivotData et PivotView.

    En résumé, tu n'as pas besoin d'utiliser une référence à la bibliothèque d'Excel.

    Bon courage et @+

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 126
    Points : 53
    Points
    53
    Par défaut
    Génial, j'ai réussi à faire ce que je voulais!

    Merci à toi Mahefasoa, ta dernière intervention m'a encouragée et m'a guidée. Seulement je précise que l'objet qui porte le nom de PivotTable dans le formulaire n'est pas un objet de la classe PivotTable comme on pourrait le croire, mais un objet de la classe Excel.Sheet.

    Donc j'explique ce que j'ai fait et comment je l'ai fait :

    Ce que je voulais c'était filtrer les données du tableau par rapport à un paramètre (contenu dans une variable pour ma part mais ça ne change rien).

    Donc, sur l'événement à l'ouverture du formulaire contenant le tableau croisé, il faut mettre le code :


    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
    29
    30
    31
    32
    Private Sub Form_Open(Cancel As Integer)
     
    Dim XL As Excel.Application
    Dim classeur As Excel.Workbook
    Dim feuille As Excel.Worksheet
     
    'ouvre une occurence d'excel
    Set XL = CreateObject("Excel.Application")
     
    'ouvre l'objet OLE pivotTable dans son application (excel)
    Me!PivotTable.Action = acOLEActivate
     
    'nomme le classeur et la feuille ouverts précemment
    Set classeur = Excel.ActiveWorkbook
    Set feuille = classeur.Worksheets(1)
     
    'nomme l'objet PivotTable contenu dans le classeur ouvert
    Dim tcd As PivotTable
    Set tcd = feuille.PivotTables("Tableau croisé dynamique1")
    'rafraichit la table par rapport aux données sources
    tcd.RefreshTable
     
    'nomme le champ à filtrer du tableau croisé
    Dim champ As PivotField
    Set champ = tcd.PivotFields("ville")
    'choisi le critère de filtrage
    champ.CurrentPage = "paris"
     
    'ferme excel
    classeur.Close False
     
    End Sub
    Voilà, encore merci, et surtout ne jamais se décourager!

    ceuce

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

Discussions similaires

  1. [XL-2007] Utilisation d'une fonction VBA dans un tableau croisé dynamique?
    Par Keketo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/01/2011, 11h36
  2. [XL-2007] Tableau croisé dynamique en VBA
    Par Loki83 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/07/2010, 16h07
  3. [XL-97] Tableau croisé dynamique excel vba
    Par DOMCEL dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/02/2010, 12h20
  4. Masquer des items pour une variable d'un tableau croisé dynamique en VBA
    Par Pietro_L dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/10/2007, 17h35
  5. 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, 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