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

  1. #1
    Membre à l'essai
    Inscrit en
    mai 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 32
    Points : 13
    Points
    13
    Par défaut problème avec résultat de recherche multi-critères
    bonjour tout le monde!!

    alors je vous explique mon problème :

    j'ai un formulaire avec trois critères possibles : le nom, le prénom et la machine.

    ce que je voudrai, c'est qu'à partir du moment où une machine n'est pas séclectionné, je ne vois rien d'afficher dans ma zone de liste qui contient les résultats (donc si je choisis seulement un nom de famille, je ne veux rien voir apparaitre). voici le code qui correspond :

    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
    If (Me.chkMachine And Me.chkNom) Or (Me.chkMachine And Me.chkPrenom) Then
     
        ' on récupère en premier lieu toutes les lignes de la table
        SQL = "SELECT Opérateur.matricule, Evaluer.nom_machine, Evaluer.date, Domaine.libelle_domaine, Designation.libelle_designation, Evaluer.code_notation FROM Opérateur INNER JOIN (Sous_Domaine RIGHT JOIN ((Domaine INNER JOIN Designation ON Domaine.numero_domaine = Designation.numero_domaine) INNER JOIN Evaluer ON Designation.numero_designation = Evaluer.numero_designation) ON Sous_Domaine.numero_sous_domaine = Designation.numero_sous_domaine) ON Opérateur.matricule = Evaluer.matricule "
        SQL2 = "SELECT Synthèse_Intermediaire.matricule, Synthèse_Intermediaire.nom_machine, Synthèse_Intermediaire.date_synthèse_intermediaire, Domaine.libelle_domaine, Synthèse_Intermediaire.commentaire_intermediaire FROM Opérateur INNER JOIN (Domaine INNER JOIN Synthèse_Intermediaire ON Domaine.numero_domaine = Synthèse_Intermediaire.numero_domaine) ON Opérateur.matricule = Synthèse_Intermediaire.matricule "
        SQL3 = "SELECT Synthèse_Globale.matricule, Synthèse_Globale.nom_machine, Synthèse_Globale.date_synthèse, Opérateur.nom, Opérateur.prenom, Synthèse_Globale.nom_machine, Synthèse_Globale.code_notation, Synthèse_Globale.commentaire FROM Opérateur INNER JOIN Synthèse_Globale ON Opérateur.matricule = Synthèse_Globale.matricule "
        connecteur = " WHERE "
     
     
        ' si la case Nom est cochée, on sélectionne seulement les lignes dont le nom est celui donné en entrée
        If Me.chkNom Then
            SQL = SQL & connecteur & "(Opérateur!nom = '" & Me.txtNom.Value & "')"
            SQL2 = SQL2 & connecteur & "(Opérateur!nom = '" & Me.txtNom.Value & "')"
            SQL3 = SQL3 & connecteur & "(Opérateur!nom = '" & Me.txtNom.Value & "')"
            connecteur = " AND "
        End If
     
     
        ' si la case prenom est cochée, on sélectionne seulement les lignes dont le prénom est celui donné en entrée.
        If Me.chkPrenom Then
            SQL = SQL & connecteur & "(Opérateur!prenom = '" & Me.cmbprenom.Value & "')"
            SQL2 = SQL2 & connecteur & "(Opérateur!prenom = '" & Me.cmbprenom.Value & "')"
            SQL3 = SQL3 & connecteur & "(Opérateur!prenom = '" & Me.cmbprenom.Value & "')"
            connecteur = " AND "
        End If
     
        'si la case machine est cochée, on sélectionne seulement les lignes dont le nom de la machine est celle donnée en entrée.
        If Me.chkMachine Then
            SQL = SQL & connecteur & "(Evaluer!nom_machine = '" & Me.cmbMachine.Value & "')"
            SQL2 = SQL2 & connecteur & "(Synthèse_Intermediaire!nom_machine = '" & Me.cmbMachine.Value & "')"
            SQL3 = SQL3 & connecteur & "(Synthèse_Globale!nom_machine = '" & Me.cmbMachine.Value & "')"
        End If
     
     
        'on ajoute un point virgule à la fin de la requête (nécessaire pour signaler qu'une requête est finie
        'et on classe les résultats par ordre alphabétique
        SQL = SQL & " ORDER BY Evaluer.matricule, Evaluer.date, Evaluer.nom_machine, Domaine.apparition_domaine, Sous_Domaine.apparition_sous_domaine, Designation.apparition_designation;"
        SQL2 = SQL2 & " ORDER BY Synthèse_Intermediaire.matricule, Synthèse_Intermediaire.date_synthèse_intermediaire, Synthèse_Intermediaire.nom_machine, Domaine.apparition_domaine; "
        SQL3 = SQL3 & " ORDER BY Synthèse_Globale.matricule, Synthèse_Globale.date_synthèse; "
     
     
        'on affecte à la liste de résultats la requête SQL
        Me.lstResultsEvaluation.RowSource = SQL
        Me.lstResultsSynthese.RowSource = SQL2
        Me.lstResults.RowSource = SQL3
     
     
        'cette commande permet enfin d'exécuter la requête et d'afficher les réponses
        Me.lstResultsEvaluation.Requery
        Me.lstResultsSynthese.Requery
        Me.lstResults.Requery

    ça marche très bien. quand j'ouvre mon formulaire, rien n'est affiché dans ma zone de liste. et il m'affiche quelque chose uniquement si je choisis une machine et un nom ou une machine et un prénom.

    le problème c'est après, parce que moi je voudrai que si je décoche la chkbox machine il ne m'affiche plus rien, or les résultats d'avant restent dans la zone de liste et moi je ne voudrai qu'il n'y ait plus rien..

    j'ai réussi à résoudre ce problème en mettant une requete bidon (je sais qu'elle ne m'affichera jamais rien.) dans le cas où seule la machine ou seul le nom ou seul le prénom ou seul le nom et le prénom ont été cochés.

    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
    Else
     
        SQL = "SELECT Opérateur.matricule, Evaluer.date, Domaine.libelle_domaine, Designation.libelle_designation, Evaluer.code_notation FROM Opérateur INNER JOIN (Sous_Domaine RIGHT JOIN ((Domaine INNER JOIN Designation ON Domaine.numero_domaine = Designation.numero_domaine) INNER JOIN Evaluer ON Designation.numero_designation = Evaluer.numero_designation) ON Sous_Domaine.numero_sous_domaine = Designation.numero_sous_domaine) ON Opérateur.matricule = Evaluer.matricule WHERE Opérateur.matricule = 0 ;"
        SQL2 = "SELECT Synthèse_Intermediaire.matricule, Synthèse_Intermediaire.date_synthèse_intermediaire, Opérateur.nom, Opérateur.prenom, Synthèse_Intermediaire.nom_machine, Domaine.libelle_domaine, Synthèse_Intermediaire.commentaire_intermediaire FROM Opérateur INNER JOIN (Domaine INNER JOIN Synthèse_Intermediaire ON Domaine.numero_domaine = Synthèse_Intermediaire.numero_domaine) ON Opérateur.matricule = Synthèse_Intermediaire.matricule WHERE Opérateur!matricule = 0 ;"
        SQL3 = "SELECT Synthèse_Globale.matricule, Synthèse_Globale.date_synthèse, Opérateur.nom, Opérateur.prenom, Synthèse_Globale.nom_machine, Synthèse_Globale.code_notation, Synthèse_Globale.commentaire FROM Opérateur INNER JOIN Synthèse_Globale ON Opérateur.matricule = Synthèse_Globale.matricule WHERE Opérateur!matricule = 0;"
     
        Me.lstResultsEvaluation.RowSource = SQL
        Me.lstResultsSynthese.RowSource = SQL2
        Me.lstResults.RowSource = SQL3
     
        Me.lstResultsEvaluation.Requery
        Me.lstResultsSynthese.Requery
        Me.lstResults.Requery
     
    End If
    masi c'est pas très propre comme code donc je voulais savoir si quelqu'un savait comment faire.
    (j'espère que je me suis expliquée assez clairement...)

    audrey

  2. #2
    Membre régulier
    Inscrit en
    mars 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : mars 2004
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    non l'idée est bonne en tout cas je fais comme ca mais

    ne mettre une chaine vide ne marche pas histoire d'alleger ton code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Me.lstResultsEvaluation.RowSource = "" 
    Me.lstResultsSynthese.RowSource = ""    
    Me.lstResults.RowSource = ""
    désolé si tu as déjà éssayé

  3. #3
    Membre à l'essai
    Inscrit en
    mai 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    je viens d'essayer de mettre la chaine vide et ça marche merci!!

    je n'avais pas pensé à ça...

    merci beaucoup

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

Discussions similaires

  1. problème avec recherche multi-critères
    Par yannick63 dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/01/2010, 16h48
  2. Problème avec le tutoriel Recherche Multi-critère
    Par Darki dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/08/2007, 18h50
  3. exporter le résultat d'une recherche multi-critère ?
    Par Tetsuotil dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 18/07/2006, 18h39
  4. problème recherche multi critère
    Par jeck dans le forum Access
    Réponses: 3
    Dernier message: 16/05/2006, 11h42
  5. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 20h33

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