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 :

Requête conditionnelle avec liste déroulante en cascade.


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Requête conditionnelle avec liste déroulante en cascade.
    Bonjour,

    j'ai un formulaire de recherche avec 7 listes déroulantes en cascade et un sous formulaire pour les résultats.

    pour info: mes 7 listes déroulantes renvoie vers 4 tables différentes (mais je n'en suis pas encore à ce problème là), mes 3 premières listes sont sur la même table.

    le problème que je rencontre est que je souhaite que si ma liste déroulante est vide, la recherche me sorte toutes les valeurs, actuellement elle me sort juste les valeurs = Tous.


    Nom : access.PNG
Affichages : 188
Taille : 6,7 Ko


    bonne journée

    krunt

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Points : 2 491
    Points
    2 491
    Par défaut
    Si la liste déroulante est vide, il faudra jouer avec la fonction "IIF":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIF(IsNull(NomDeVotreListeBox);Like "*";(l'autre almternative))
    Ce serait probablement plus simple de mettre tous vos critères dans une fonction VBA qui pourrait facilement décortiquer toutes les possibilités et fournir le résultat plus rapidement. Un peu difficile à construire, mais ce serait fait une bonne fois pour toutes.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour cette réponse,

    je vais tester.

    en parallèle je regarde comment faire pour le passer en VBA mais je ne maitrise pas vraiment la création de requête en VBA et encore moins la librairie DAO.
    j'épluche le tuto de cette librairie, de christophe WARIN, présent sur votre site.
    mais je commence à vraiment douté de me capacité a arriver à le faire.

    je n'abandonnerai pas ^^

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    je vais devoir passer par du VBA T_T

    Nom : access1.PNG
Affichages : 231
Taille : 6,4 Ko

    la question est : Cela résoudra bien mon problème ?

    Merci d'avance.

  5. #5
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Points : 2 491
    Points
    2 491
    Par défaut
    à essayer; vous avez écrit "je n'abandonnerai pas ^^", faut tenir parole

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    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 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Citation Envoyé par krunt Voir le message
    je vais devoir passer par du VBA T_T

    Nom : access1.PNG
Affichages : 231
Taille : 6,4 Ko

    la question est : Cela résoudra bien mon problème ?

    Merci d'avance.
    plutôt que d'afficher le message d'erreur que personne ne pourra corriger, pourquoi ne pas afficher le SQL de la requête ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour tee_grandbois,

    Voici la requête :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [NGP-Produits].NGP, [NGP-Produits].FAMILLE, [NGP-Produits].GAMME, [NGP-Produits].TYPES_PRODUITS
    FROM [NGP-Produits]
    WHERE ((([NGP-Produits].FAMILLE)=Formulaires![F_ Recherche]!FAMILLE Or ([NGP-Produits].FAMILLE) Like "Tous") 
    And (([NGP-Produits].GAMME)=IIf(IsNull(Formulaires![F_ Recherche]!GAMME),([NGP-Produits].GAMME) Like "*",([NGP-Produits].GAMME)=Formulaires![F_ Recherche]!GAMME Or ([NGP-Produits].GAMME) Like "Tous")) 
    And (([NGP-Produits].TYPES_PRODUITS)=IIf(IsNull(Formulaires![F_ Recherche]!Categorie_Prod),([NGP-Produits].TYPES_PRODUITS) Like "*",([NGP-Produits].TYPES_PRODUITS)=Formulaires![F_ Recherche]!Categorie_Prod Or ([NGP-Produits].TYPES_PRODUITS) Like "Tous")));

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    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 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonjour,
    si on considère que Like "*" donne le même résultat que Like "Tous", la syntaxe s'en trouve simplifiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [NGP-Produits].NGP, [NGP-Produits].FAMILLE, [NGP-Produits].GAMME, [NGP-Produits].TYPES_PRODUITS
    FROM [NGP-Produits]
    WHERE [NGP-Produits].FAMILLE Like Nz(Formulaires![F_ Recherche]!FAMILLE, "*") 
    And [NGP-Produits].GAMME Like Nz(Formulaires![F_ Recherche]!GAMME, "*") 
    And [NGP-Produits].TYPES_PRODUITS Like NZ(Formulaires![F_ Recherche]!Categorie_Prod,"*")
    mais il faut le tester, ne connaissant pas le contenu des listes déroulantes

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour la bonne syntaxe, mais la requête ne renvoie toujours pas les bon résultats.

    je vais passer par VBA pour générer les requêtes à la volé.

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    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 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Merci pour la bonne syntaxe, mais la requête ne renvoie toujours pas les bon résultats.
    on ne peut pas deviner quelles doivent être les bons résultats avec la seule indication donnée:
    le problème que je rencontre est que je souhaite que si ma liste déroulante est vide, la recherche me sorte toutes les valeurs, actuellement elle me sort juste les valeurs = Tous.
    un exemple concret ne serait pas de trop

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    en faisant les requêtes en VBA, j'ai réussi à faire ma requête

    Merci les tutos du site ^^

    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
     
    Private Sub RefreshProduit()
    ' definition des variable
    Dim SQLProduit As String
    Dim SQLWhereProduit As String
    ' debut de la requete sql, le select et from sont défini. Le where est générique juste pour l'inclure.
    SQLProduit = "SELECT DISTINCT [NGP-Produits].[NGP], [NGP-Produits].[FAMILLE], [NGP-Produits].[GAMME], [NGP-Produits].[TYPES_PRODUITS] FROM [NGP-Produits] Where [NGP-Produits].[N°] <> 0 "
    ' en fonction des conditions on complète la requête sql
    ' Si la case à coché Famille est coché alors on complète la condition where de la requête
    If Me.ChkFamille Then
        SQLProduit = SQLProduit & "And [NGP-Produits].[FAMILLE] like '" & Me.FAMILLE & "' "
    End If
    ' idem pour Gamme mais on rajout que la valeur chercher est la valeur de la liste gamme ou "Tous"
    If Me.ChkGamme Then
        SQLProduit = SQLProduit & "And (([NGP-Produits].[GAMME] like '" & Me.GAMME & "') OR ([NGP-Produits].[GAMME] like '" & Me.Tous & "'))"
    End If
    ' idem pour Produit
    If Me.ChkProduit Then
        SQLProduit = SQLProduit & "And (([NGP-Produits].[TYPES_PRODUITS] like '" & Me.Categorie_Prod & "') OR ([NGP-Produits].[TYPES_PRODUITS] like '" & Me.Tous & "'))"
    End If
    ' la variable SQLWhere correspond à la condition where de la requête
    ' ici on isole le where de la requête SQL.
    SQLWhereProduit = Trim(Right(SQLProduit, Len(SQLProduit) - InStr(SQLProduit, "Where ") - Len("Where ") + 1))
    ' on cloture la requête par un ";"
    SQLProduit = SQLProduit & ";"
    ' on utilise les variable SQL et SQLWhere:
    ' SQLWhere est utilisé pour faire le décompte des résultats de la liste.
    Me.LblStats.Caption = DCount("*", "[NGP-Produits]", SQLWhereProduit) & " / " & DCount("*", "[NGP-Produits]")
    ' SQL deveint la source de la liste de réponce
    Me.LstResultats.RowSource = SQLProduit
    ' on actualise la liste de réponce
    Me.LstResultats.Requery
    End Sub
    Mon inconnue pour le moment est la réalisation en VBA d'une requête UNION pour pouvoir chercher dans les 4 tables.

Discussions similaires

  1. Formulaire Excel avec Liste déroulante en cascade
    Par carmelina37 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/05/2020, 15h11
  2. Réponses: 1
    Dernier message: 07/06/2016, 19h38
  3. [MySQL] Requête Sql avec liste déroulante
    Par SnOt02 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 13/06/2014, 09h45
  4. Réponses: 4
    Dernier message: 09/02/2012, 15h56
  5. Requête paramétrée avec liste déroulante
    Par rimrim dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2006, 09h05

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