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

Access Discussion :

Liste déroulante filtrée par 2 Clés primaires sélectionnées avant [AC-2016]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Agronome
    Inscrit en
    Mars 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 31
    Points : 15
    Points
    15
    Par défaut Liste déroulante filtrée par 2 Clés primaires sélectionnées avant
    Bonjour,

    Dans un formulaire j'essaie de filtrer une sélection de liste déroulante sur la base de deux autres contrôles listes qui se trouvent tous dans le même formulaire.

    J'ai attribué à chacun de mes contrôles de sélection, le choix respectifs des clés primaires ID_Produit et ID_Segment. Ils font apparaitre chacun une liste de plusieurs colonnes; la clé primaire que je veux récupérer se trouve dans la première colonne.

    Je voudrais donc que dans ma troisième liste seules les valeurs qui possèdent ces deux ID apparaissent. Pour créer cette liste je lui attribue les valeurs de la requête suivante dans le générateur de requête qui apparait lorsque je sélectionne "contenu" dans la feuille de propriétés de mon contrôle:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT [4R_Demande_Segm_Mois].ID_Produit, [4R_Demande_Segm_Mois].ID_Segment_Client, [4R_Demande_Segm_Mois].SommeDeTotal_conv_mensuel, [4R_Demande_Segm_Mois].SommeDeTotal_Bio_mensuel, [4R_Demande_Segm_Mois].Unité
    FROM 4R_Demande_Segm_Mois
    WHERE
    ((([4R_Demande_Segm_Mois].ID_Produit)=[Forms]![F_Select_Leg_Prod_Seg]![ID_Produit].Column(0))
    AND (([4R_Demande_Segm_Mois].ID_Segment_Client)=[Forms]![F_Select_Leg_Prod_Seg].[ID_Segment].column(0))
    AND (([4R_Demande_Segm_Mois].SommeDeTotal_Bio_mensuel) Is Not Null)
    AND (([4R_Demande_Segm_Mois].Unité)<>""));

    Par contre aucune valeur n'apparait dans ma troisième liste... lorsque je fais mes sélections des deux premières listes et que je clique pour faire défiler la troisième liste...

    Quelqu'un sait pourquoi?
    Bien cordialement.
    julien

  2. #2
    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
    Bonjour.

    Essaye cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT [4R_Demande_Segm_Mois].ID_Produit, [4R_Demande_Segm_Mois].ID_Segment_Client, [4R_Demande_Segm_Mois].SommeDeTotal_conv_mensuel, [4R_Demande_Segm_Mois].SommeDeTotal_Bio_mensuel, [4R_Demande_Segm_Mois].Unité & ""
    FROM 4R_Demande_Segm_Mois
    WHERE
    ((([4R_Demande_Segm_Mois].ID_Produit)=[Forms]![F_Select_Leg_Prod_Seg]![ID_Produit])
    AND (([4R_Demande_Segm_Mois].ID_Segment_Client)=[Forms]![F_Select_Leg_Prod_Seg].[ID_Segment])
    AND (([4R_Demande_Segm_Mois].SommeDeTotal_Bio_mensuel) Is Not Null)
    AND (([4R_Demande_Segm_Mois].Unité & "")<>""));
    Le column(0) ne sert a rien.
    Et [Unité] est peut-etre Null ce qui peut pertuber les tests.
    [4R_Demande_Segm_Mois].Unité & "" est un astruce pour ne pas avoir a gerer les nulls specifiquement. Null & "" te donne "", ca evite d'avoir a faire iif(isnull([TonChamp]); ""; [TonChamp]).
    Note qu'on peut aussi utiliser NZ([TonChamp];"") mais depuis que NZ() m'a fait sauter mes decimales, je le boude franchement.

    Pour mettre au point ta requete je te recommande de proceder comme suit :

    1. Ouvrir ton formulaire et selectionner les 2 valeurs qui t'interessent.
    2. Ouvrir l'editeur de requetes en mode SQL et y coller ton SQL.
    3. Voir le resultat dans l'editeur et ajuster ta requete en fonction des ce que tu vois.


    Perso, j'enregsitre toujours mes requetes utilisees dans mes listes deroulantes sous un nom du genre ReqChoixXYZ ou reqFrmMonForm_ChoixABC, ce qui me permet de :
    1. Les voirs
    2. Les manipuler meme si mon formulaire est en utilisation.
    3. Ne pas etre bloque tant que je ne suis pas sorti de l'editeur appele par le formulaire.


    A+

  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
    Autre astuce pour voir ce que Access voit dans une requete avec parametres :

    creer un champ calculer qui affiche le parametre.

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    P1 : [Forms]![F_Select_Leg_Prod_Seg]![ID_Produit]
    Tu auras une colonne P1 qui te montrera ce que Access a lu dans le champ ID_Produit de ton formulaire.
    Des fois ce n'est pas ce qu'on attend.

    A+

  4. #4
    Membre à l'essai
    Homme Profil pro
    Agronome
    Inscrit en
    Mars 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Bonjour Marot,

    Je te remercie pour ta réponse et la méthodologie de test des possibles erreurs, cela m'aidera beaucoup à l'avenir.

    J'ai testé ta méthode et il semble que le problème vienne du fait que mon [Forms]![F_Select_Leg_Prod_Seg]![ID_Produit] m'affiche la valeur correspondant à la deuxième colonne soit le nom du produit en champs texte et non pas au IDProduit; clé primaire numérique.

    J'ai regardé la valeur de [Forms]![F_Select_Leg_Prod_Seg]![ID_Produit].Column(0) et il me fait bien apparaitre la clé primaire que je souhaite. Par contre en SQL quand je teste ma requête avec les [Forms]![D_Select_Leg_Prod_Seg]![ID_Produit].Column(0). Il me dit :
    Fontion "[Forms]![D_Select_Leg_Prod_Seg]![ID_Produit].Column non définie dans l'expression.
    Sais-tu pourquoi?
    Bien cordialement
    Julien

  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
    Bonjour.

    Non pas precisement, et la recuperation de valeur depuis un formulaire est un "bricolage" bien pratique mais un bricolage quand meme. Il est tres possible que tu n'ai pas acces a toutes les proprieties du champ.

    Tu as selon moi 2 possibliltes :
    1. Creer un champ texte dans ton formulaire avec une formule ou s'allimentant un champ calculer dans ta source qui te donne l'info voulue et recuperer cette valeur.
      Tu peux cacher le champ en le rendant invisible.
    2. Changer les proprietes de la liste deroulante pour que ce soit la clef qui soitr recuperee. C'est la propriete "colone liee".
      A priori c'est ce qui aurait du etre mais comme ce n'est pas le cas, il est probable que cela ait des consequences sur ton appli.
      A testter avec precaution.


    A+

  6. #6
    Membre à l'essai
    Homme Profil pro
    Agronome
    Inscrit en
    Mars 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Bonjour Marot,

    Je te remercie pour ton aide au final je suis passé par du VBA pour faire marcher ma liste:

    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
     
    Dim VarIDProd As Variant
    VarIDProd = Forms![F_Select_Leg_Prod_Seg]![ID_Produit].Column(0)
    Dim VarIDSeg As Variant
    VarIDSeg = Forms![F_Select_Leg_Prod_Seg]![ID_Segment].Column(0)
     
    Dim SQL As String
    SQL = "SELECT [4R_Demande_Segm_Mois].[ID_Produit], [4R_Demande_Segm_Mois].[ID_Segment_Client], " _
    & "[4R_Demande_Segm_Mois].[SommeDeTotal_conv_mensuel], [4R_Demande_Segm_Mois].[SommeDeTotal_Bio_mensuel], " _
    & "[4R_Demande_Segm_Mois].[Unité] " _
    & "FROM [4R_Demande_Segm_Mois] " _
    & "WHERE (([4R_Demande_Segm_Mois].[ID_Produit]= " & VarIDProd & ") AND ([4R_Demande_Segm_Mois].[ID_Segment_Client]= " & VarIDSeg & " )" _
    & " AND ([4R_Demande_Segm_Mois].[SommeDeTotal_Bio_mensuel] Is Not Null) AND ([4R_Demande_Segm_Mois].[Unité] is not null));"
     
    Debug.Print SQL
    ID_Demande_Seg.RowSource = SQL
    Je te remercie pour ta réponse et tes conseils! L'option colonne liée étant super utile mais je ne l'ai vu que trop tard... et je prendrai en compte le nz qui supprime les décimales pour la suite de mon travail.
    Bien cordialement.
    Julien

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 842
    Points : 14 946
    Points
    14 946
    Par défaut
    bonsoir,
    et je prendrai en compte le nz qui supprime les décimales pour la suite de mon travail.

    je ne crois pas cela possible si NZ() est correctement utilisé

  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
    Bonjour.

    je ne crois pas cela possible si NZ() est correctement utilisé
    Je l'ai vecu. Je suis dans un milieu multilinge (Anglais, francais) ou les conventions pour le separateur decimal ne sont pas les memes.
    Nz() a coupe les decimales de mes nombres reels ... je n'ai vraiment pas aimer la plaisanterie.
    Je souspconne qu'en interne Access utilise la meme routine que Val qui prend le point mais Access lui passe une virgule car il converti le nombre en texte.
    C'est une vraie plaie et je ne prend plus de chance. Je gere mes Null numeriques moi-meme.

    Accessoirement NZ() te fait perdre le type de ta donnees qui devient un Variant ce qui est aussi un peu penible.

    A+

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 842
    Points : 14 946
    Points
    14 946
    Par défaut
    bonsoir marot_r
    Je l'ai vecu. Je suis dans un milieu multilinge (Anglais, francais) ou les conventions pour le separateur decimal ne sont pas les memes.
    oui, mais tu conviendras que ce n'est pas la fonction qui est en cause mais uniquement une suite de circonstances dans un environnement bien particulier : dans ton cas, le séparateur de décimales est un paramètre perturbateur dans l'utilisation de la fonction.
    Je suis intervenu sur un post concernant un problème de séparateur, donc je suis au courant que dans certains cas il faut biaiser pour contourner le problème.

    Le problème de formatage des dates US dans VBA est aussi un cas bien connu et il faut savoir s'adapter aux contraintes de VBA versus les paramètres locaux.

    L'informatique est toujours une science exacte mais uniquement pour les cas prévus, sinon à quoi servirions nous ?

  10. #10
    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
    Je suis d'accord c'est pour cela que j'ai mentionne NZ ... bon j'aurai pu mettre en contexte mais je suis assez "one size fit all" si une solution marche tout le temps, je n'ai pas trop envie d'en utiliser une autre qui depend du contexte.

    A+

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

Discussions similaires

  1. [AC-2003] Listes déroulantes filtrées par formulaire
    Par Piou2fois dans le forum IHM
    Réponses: 12
    Dernier message: 18/07/2012, 15h57
  2. Réponses: 1
    Dernier message: 29/11/2010, 03h49
  3. Réponses: 0
    Dernier message: 03/03/2008, 12h02
  4. Réponses: 7
    Dernier message: 24/01/2007, 22h54
  5. Avoir un contenu de liste déroulante différent par rapprot à une liste déroulante
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 19/10/2006, 08h07

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