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

Requêtes et SQL. Discussion :

Requête croisée dynamique


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Requête croisée dynamique
    Bonjour à tous,
    voila mon problème. J'ai réalisé un tableau croisé dynamique avec access en se basant sur une table :
    achats:

    client ville produit chiffreaffaires
    c1 v1 p1 80
    c1 v1 p2 30
    c1 v2 p1 60
    c1 v2 p2 5
    c2 v1 p1 10
    c2 v1 p2 55
    c2 v2 p1 8
    c2 v2 p2 6

    le formulaire tableau croisé dynamique qui se base sur cette table marche très bien et me donne bien

    client ville Agregationchiffaffaire
    c1 v1 110
    c1 v2 65
    c2 v1 65
    c2 v2 14
    .
    Cependant à l'inverse d'excel lorsque je clique sur le chiffre agrégé des chiffres d'affaires , access ne me permet pas d'avoir le détail sous forme de tableau initial à tire d'exemple je veux une fois je clique sur le chiffre 110 qu'il me donne les lignes :
    client ville produit chiffreaffaires
    c1 v1 p1 80
    c1 v1 p2 30.

    En cherchant de la doc sur le composant pivot table j'ai trouvé cet article de microsoft qui me permet d'avoir les dimenssins (variables) mise dans l'analyse du tableau croisé dynamique (ligne et colones pour le champs d'aggrégations désiréée)
    l'article se trouve dans cette adresse:
    http://office.microsoft.com/fr-fr/ac...345791036.aspx

    et la partie qui m'intéresse dans cette article c'est:Tableau croisé dynamique – Exemples -->Obtenir la valeur d'une cellule

    le code est le suivant et la partie qui bloque lorsque je compile est la suivante:

    Obtenir la valeur d'une cellule

    Le code suivant détermine l'endroit sur lequel un utilisateur a double-cliqué dans une vue Tableau croisé dynamique. Il renvoie ensuite la valeur et le type de l'élément sélectionné.

    Pour voir ce code en action, ajoutez le code suivant à la procédure de l'événement Form_DblClick (Cancel As Integer) d'un formulaire dont la vue par défaut est Tableau croisé dynamique.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    If Me.CurrentView = acCurViewPivotTable Then
     
     ' Create some variables.
     Dim sel As Object
     Dim pivotagg As PivotAggregate
     Dim sTotal As String
     Dim sColMems As String
     Dim sRowMems As String
     Dim sFilters As String
     Dim sMsg As String
     
     ' Get the selection.
     Set sel = Me.PivotTable.Selection
     
     ' User could have clicked one of the following types of objects:
     ' PivotAggregates, PivotTotals, PivotMembers, PivotFields, etc.
     ' Use the TypeName() function to determine the object type.
     
     MsgBox "The Selection property returned a '" & TypeName(sel) & "' object.", _
     vbInformation, "Type of Selection Prop"
     ' If the type is PivotAggregates, show how to get the row
     ' and column member(s) that define that aggregate.
     
     If TypeName(sel) = "PivotAggregates" Then
     ' PivotAggregates could contain many items, but because user could have
     ' double-clicked only a single item, it will contain just one item now,
     ' which will be item(0).
     Set pivotagg = sel.Item(0) 
     ' Show the value.
     MsgBox "The cell you double-clicked has a value of '" & pivotagg.Value & _
     "'.", vbInformation, "Value of Cell"
     
     ' Get the total name, row and column members, and the current filters.
     sTotal = pivotagg.Total.Caption
     
     sColMems = BuildFullName(pivotagg.Cell.ColumnMember)
     sRowMems = BuildFullName(pivotagg.Cell.RowMember)
     
     ' Build the message and show it.
     sMsg = "The value is " & sTotal & " by " & sRowMems & " by " & sColMems
     
     If Len(sFilters) > 0 Then
     sMsg = sMsg & " for " & Left(sFilters, Len(sFilters) - 2)
     End If
     
     MsgBox sMsg, vbInformation, "Value Info"
     
     End If ' typename(sel) = "PivotAggregates"
     
    End If ' Me.CurrentView = acCurViewPivotTable
    Ajoutez ensuite la fonction suivante au module du formulaire.
     
    Function BuildFullName(PivotMem)
     
     Dim pmTemp As PivotMember ' Temporary PivotMember reference
     Dim sFullName As String
     
     ' Start by getting the current member's name.
     sFullName = PivotMem.Caption
     
     ' Set the temp variable to the current member.
     Set pmTemp = PivotMem
     
     ' Navigate up the parent hierarchy until you hit nothing.
     While Not (pmTemp.ParentMember Is Nothing)
     Set pmTemp = pmTemp.ParentMember
     sFullName = pmTemp.Caption & "-" & sFullName
     Wend
     
     ' Return sFullName.
     BuildFullName = sFullName
    End Function
    erreur sur cette ligne (incompatibilité de type) => Set pivotagg = sel.Item(0)

    Remarque Les exemples suivants proviennent de l'exemple de base de données Les Comptoirs inclus dans Access.

    Inclusion d'une référence à la bibliothèque des composants Web Office

    Pour que les exemples de code suivants fonctionnent, votre base de données doit contenir une référence au fichier Owc11.dll (Access 2003) ou Owc10.dll (Access 2002). Les bases de données créées à l'aide d'Access 2000 ou version antérieure, ou les bases de données créées à l'aide d'Access 2002 ou version ultérieure mais enregistrées au format Access 2000, n'incluent pas cette référence.

    Pour ajouter dans une base de données Access une référence à Owc11.dll ou Owc10.dll

    Ouvrez la base de données à laquelle vous souhaitez ajouter la référence.
    Cliquez sur Code dans la barre d'outils pour ouvrir l'éditeur Microsoft Visual Basic®.
    Dans le menu Outils, cliquez sur Références.
    Cliquez sur Parcourir, puis naviguez jusqu'à l'emplacement du fichier Owc11.dll ou Owc10.dll.
    Pour Access 2003, l'emplacement par défaut est C:/Program Files/Common Files/Microsoft Shared/Web Components/11 — pour Access 2002, C:/Program Files/Common Files/Microsoft Shared/Web Components/10.

    Sélectionnez le fichier, cliquez sur Ouvrir, puis sur OK.


    Notez bien j'utilise access 2003

    merci pour votre aide

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    J'ai vraiment pas regardé le code en entier. Mais pour avoir ce que tu veux pourquoi après dblclic tu ne fait pas une requête du genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * From TaTable Where (c1=" & me.c1 &") and (v1='" & me.V1 & "')
    Amicalement

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par DMboup
    J'ai vraiment pas regardé le code en entier. Mais pour avoir ce que tu veux pourquoi après dblclic tu ne fait pas une requête du genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * From TaTable Where (c1=" & me.c1 &") and (v1='" & me.V1 & "')
    Merci pour ta réponse. Le problème c'est que dans ma table l'utilisateur peut faire plusieures dimension y'a pas que le cleint ou la ville y a d'autre champs qu'il peut choisir et moi je veux faire un truc dynamique donc pour une mesure donnée cliqué par l'utilisateur je veux récupérer les valeurs des variables lignes et colonnes mise dans l'analyse ainsi que les noms des variables

    (client="a", ville="paris", produit="ssss",...)=(chiffre affaire =110Mille euro).
    On voit bien que suivant ce que l'utilisateur va mettre comme variables je veux comme tu vient de l'expliquer faire uine reqête dynamique

    select var1, var2, varn where
    var1=valeur1 and var2=valeur2 , var3=valeur3... et ainsi de suite.
    Cet outil existe sur excel mais sur access il faut peut-être le programmer si tu as une autre solution je suis preneur mais tu comprends bien que c'est un truc événementiel.
    tu peut teste sur excel si tu veux. sous acces je sais comment je peux faire.
    Si tu sais pas stp regarde le code qu'ils ont mis sur leur site j'ai cité le lien et je pense qu'il y a une erreur dans leur code. moi je suis pas fort en VBa

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    tu a compris ce que je veux faire: marequête n'est pas statique elle depnd du nombre de variables que l'utilisateur met dans le TCD(tableau croisé dynamique) et de la position ou il clique

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    J'ai trés bien compris.
    Je me suis basé sur ton exemple
    c1 v1 110
    c1 v2 65
    c2 v1 65
    c2 v2 14
    .
    .
    client ville produit chiffreaffaires
    c1 v1 p1 80
    c1 v1 p2 30.
    Ta requête analyse croisée te donne un cumul en fonction du client et de la ville. Pour avoir le détail de ce cumul (qui intégre les produits) le Select que j'ai donné permet de le faire.

    Exemple
    client="a", ville="paris", produit="ssss", CA=10...
    client="a", ville="paris", produit="ssss1",CA=20...
    client="a", ville="paris", produit="ssss2",CA=30...
    client="a", ville="londre", produit="ssss2",CA=30...

    La requête analyse croisé te donne
    ligne 1 => client="a", ville="paris", Agregat=60
    ligne 2 => client="a", ville="londre", Agregat=30

    en utilisant mon select sur la ligne 1 tu obtient
    client="a", ville="paris", produit="ssss", CA=10...
    client="a", ville="paris", produit="ssss1",CA=20...
    client="a", ville="paris", produit="ssss2",CA=30...


    Maintenant tu crois qu'il te faut une requête avec des champs dynamique, tu peut aussi trés bien la construire avec les variables que tu veux.
    Amicalement

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    oui je sais mais toi tu oublie que lorsque l'utilisateur change les variable qu'il met dans son analyse devient juste le produit avec client ta requête ne fonctionne plus
    c'est la partii dans ton select (liste des variable dynamique) et aussi le where va changer c'est plus client avec ville mais peut-être ca devinedra produit avec ville tu vois ou pas?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par totocasagrandi
    merci ,oui je sais mais toi tu oublies que lorsque l'utilisateur change les variables qu'il met dans son analyse par exemple il veut voir le produit avec client ou bien client, produit et autre chose ta requête ne fonctionnera plus n'est ce pas!!
    c'est la partie dans ton select (liste des variable dynamique) et aussi le critère where va changer aussi c'est plus le client avec ville mais peut-être ca devinedra produit avec ville tu vois ou pas?
    .

    il ya deux partie dans le TCD:variables d'analyses(partie dynamique et partie mesures (pour cette dernière on peut pas anticiper ou le gars va cliqué?
    je sais pas si je suis clair ou pas.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Je ne sais pas si j'ai bien compris. Corrige au besoin.

    Tu veux que lorsqu'on clic sur le total du CA qu'on ai toutes les opérations concernant le client et la ville choisi.

    Si c'est sur le produit qu'on clic, que cela donne toutes les opérations du client sur le produit choisi.

    Ainsi de suite.

    ou alors le détail soit porté sur le champs sur lequel on dbl_clic?
    Amicalement

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    je veux que si l'utilisateur à choisi comme axes d'analyses le produit et le client eh bien lorsque 'il clique sur l'aggregation C1 p1 ca me donne tous les détailles
    par exemple :c1 p1 v1 chiffre111 et c1 p1 v2 chiffre112
    s'il clique sur le chiffre d'aggérgation pour c1 p2 que ca me restitue les lignes c1 p2 v1 chiffre121 et la ligne c1 p2 v2 chiffre122

    mais y ' a pas que ca l'utilisateur peutr chosir de ne mettre que le produit et la ville par exemple dans ses axes d'analyses ou bien chosir de ne mettre que le produit et la ville donc la reqête que tu as proposer va changer. Moi je veux un truc générique donc il faut programmer comme sur l'article que j'ai proposé. maintenant ce qui cloche c'est que ca bug et je suis sûr que c'est à cause du code origine de microsoft tu peux le tester sur ta machine si tu veux. Et comme je suis null en vb je peux pas le corriger.
    Bref je veux que si l'utilisateur clique sur une donnée agrééger que je puisse récupérer les ligne sde la table qui ont participé à cette agrégation.
    il est clair que ca sera une requête dynamique.
    merci pour ton aide

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    le détail doit être affiché suivant le champs d'aggérgation cliqué

    ainsi si ce champs se trouve dans l'intersection produit1 ville1 ca doit m'afficher toutes les lignes qui ont produit 1 et vile1 par exemple

Discussions similaires

  1. [AC-2007] Création d'une requête croisée dynamique
    Par ibrahimandir dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/07/2009, 10h41
  2. [AC-2003] Requête croisée dynamique et valeur nulle
    Par domcoool dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/06/2009, 23h00
  3. Requête croisée dynamique dans un état
    Par skeut dans le forum IHM
    Réponses: 2
    Dernier message: 03/12/2008, 09h03
  4. [ODBC] Afficher une requête croisée dynamique dans une page PHP
    Par resterzen dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/08/2006, 16h24
  5. requête croisée dynamique
    Par gregius dans le forum Access
    Réponses: 8
    Dernier message: 17/03/2006, 11h24

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