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

IHM Discussion :

Aide pour la Recherche multicritères


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut Aide pour la Recherche multicritères
    Bonjour,

    Je cherche à effectuer une recherche multicritère basée sur le modèle donnée dans le tutoriel: http://cafeine.developpez.com/access...echerchemulti/

    En guise de test, je rentre la code suivant afin de filtrer ma liste sur le champ "Auteur":

    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
    Private Sub RefreshQuery()
    Dim SQL As String
     
    SQL = "SELECT Table_voie.Titre, Table_voie.Auteur FROM Table_voie"
     
    SQL = SQL & "And Table_voie!Auteur like '*" & Me.txt_Auteur & "*' "
     
    SQL = SQL & ";"
     
    Me.liste_resultat.RowSource = SQL
    Me.liste_resultat.Requery
     
    End Sub
     
    Private Sub txt_Auteur_BeforeUpdate(Cancel As Integer)
     
    RefreshQuery
     
    End Sub
    Mais lorsque je rentre une partie d'un nom contenu dans ma table et que je valide, tous mes champs s'effacent.

    Auriez-vous une idée?

    En guise d'exemple, je vous met ma base de donnée en pièce jointe, ce sera peut être plus clair si vous le faites vous-même...

    Merci!

    Julien
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    Salut,

    je n'ai que la version 97 d'access ici, donc pas de test possible

    par contre, le pb vient certainement de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub txt_Auteur_BeforeUpdate(Cancel As Integer)
    lance plutôt le code AfterUpdate ou sur le click d'un bouton...
    6ril25



    "Par trois méthodes nous pouvons apprendre la sagesse : d'abord, par la réflexion qui est la plus noble; en second lieu, par l'imitation, qui est la plus facile; et troisième, par l'expérience, qui est la plus amère." Confucius

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé le AfterUpdate, ça produit le même effet...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    et en cliquant sur un bouton?
    6ril25



    "Par trois méthodes nous pouvons apprendre la sagesse : d'abord, par la réflexion qui est la plus noble; en second lieu, par l'imitation, qui est la plus facile; et troisième, par l'expérience, qui est la plus amère." Confucius

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé le clic sur un bouton et aussi un chagement dans le champ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub txt_Auteur_Change()
     
    RefreshQuery
     
    End Sub
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub txt_Auteurbouton_Click()
     
    RefreshQuery
     
    End Sub
    Ca ne marche pas... Dès que je tape une lettre ça m'efface ma list...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    que ça efface, c'est normal si tu as laisser le afterupdate d'activer. C'est justement lui qui relance le recherche.
    6ril25



    "Par trois méthodes nous pouvons apprendre la sagesse : d'abord, par la réflexion qui est la plus noble; en second lieu, par l'imitation, qui est la plus facile; et troisième, par l'expérience, qui est la plus amère." Confucius

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    Justement, je n'ai plus de AferUpdate, je l'ai enlevé pour le remplacer par Change ou par Click...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    A première vue, le problème ne viendrait-il pas de ta requête SQL ?
    Ne serait-ce pas WHERE au lieu de AND ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL = "SELECT Table_voie.Titre, Table_voie.Auteur FROM Table_voie"
    SQL = SQL & " WHERE Table_voie!Auteur like '*" & Me.txt_Auteur & "*' "
    SQL = SQL & ";"
    Me.liste_resultat.RowSource = SQL
    Me.liste_resultat.Requery
    Naïs.

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    J'avais pris exemple sur le tuto donc visiblement le AND est bon. Afin de quand même vérifier j'ai remplacé le AND par WHERE et j'obtiens le même résultat... ce qui semble étrange...???

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    Autant pour moi dans ce cas.
    jusqu'ici, j'ai toujours utilisé le WHERE, et jamais le AND. C'est donc possible.
    Par contre, ton code semble bizarre :

    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678910111213
    Private Sub RefreshQuery()
    Dim SQL As String
     
    SQL = "SELECT Table_voie.Titre, Table_voie.[Type de document], Table_voie.[Niveau de prestation], Table_voie.[Nature des travaux], Table_voie.[Mode de transport], Table_voie.Date, Table_voie.Lieux, Table_voie.Langue, Table_voie.Auteur, Table_voie.Contenu, Table_voie.[Côte de classement], Table_voie.[Qualité du document] FROM Table_voie"
     
    SQL = SQL & "And Table_voie!Auteur like '*" & Me.txt_Auteur & "*' "
     
    SQL = SQL & ";"
     
    Me.liste_resultat.RowSource = SQL
    Me.liste_resultat.Requery
     
    End Sub
    Tu es sûr que tu appliquer SQL comme source à ton form liste_résultat ? Normalement, RowSource fit appel à une table ou à une requête, non?
    Dans ce cas, il te faut créer une requête sur la base de ton SQL, et la lier à Me.liste_résultat.RowSource.Essaie :

    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
    Private Sub RefreshQuery()
    Dim db As DAO.Database
    Dim qdf As QueryDef
    Set db = CurrentDb
    Dim SQL As String
     
    SQL = "SELECT Table_voie.Titre, Table_voie.[Type de document], Table_voie.[Niveau de prestation], Table_voie.[Nature des travaux], Table_voie.[Mode de transport], Table_voie.Date, Table_voie.Lieux, Table_voie.Langue, Table_voie.Auteur, Table_voie.Contenu, Table_voie.[Côte de classement], Table_voie.[Qualité du document] FROM Table_voie"
     
    SQL = SQL & "And Table_voie!Auteur like '*" & Me.txt_Auteur & "*' "
     
    SQL = SQL & ";"
    Set qdf = db.CreateQueryDef("Résultats", SQL)
    Me.liste_resultat.RowSource = "Résultats"
    Me.liste_resultat.Requery
     
    End Sub
    De plus, que signifie Me.liste_résultat.Requery ??

    Naïs.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 30
    Points : 31
    Points
    31
    Par défaut Euh...
    Ton SQL fait appel à l'ensemble des enregistrements de ta table, sans pour autant afficher tous les champs. C'est bien ça ?

    Je pensais que tu voulais, à chaque fois que tu introduis une valeur dans un combobox ou une zone de texte, que ta table soient filtrée selon ces critères et que les résultats de ce filtre s'affichent dans ton form liste_résultats. C'est pas plutôt ça que tu cherches à faire ? parce que, dans ce cas, ton SQL est erroné, et il te faut utiliser WHERE...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT [Champ1] And [Champ2] FROM [Table_voie] WHERE ([Type de document] = '" & Me.cmb_Type de Document & "') And ([Niveau de prestation] = '" & Me.cmbNiveau_de_Prestation & "');"

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé votre code, celui-ci ne marche pas et je suis trop novice en VB pour le corriger.

    Pour vos questions:





    Ce que je ne comprend pas c'est que le code que j'ai mis marche dans l'exemple du tuto...???

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    OK.
    j'ai repris le code pour ton form "Recherche".Tu définis un critère, n'importe lequel, et les résultats s'affichent dans liste_résultats. Tu définis un autre critère, et les résultats affichés sont filtrés avec ce nouveau critère, et ainsi de suite.

    Pour le critère Langue (cmb_Langue), j'ai mis les commentaires, pour que tu puisses suivre la procédure que j'ai utilisée.

    Par contre (!), si tu décides de supprimer un critère, ca va poser problème!!
    Par exemple, si tu avais filtré par Langue, puis tu filtres par Mode de transport, puis tu décide de supprimer ton critère Langue, alors tu ne pourras "défiltrer" ton critère Langue. Tu vois ce que je veux dire ?

    Deux solutions : soit tu bloques les critères définis (après modification, ta cmb_? ou ton txt_? sont vérouillés, l'utilisateur ne peux plus changer ces critères, et il est obligé de recommencer une nouvelle recherche),
    soit tu décides qu'il peux changer ces critères, et alors il faut encore retravailler ton code de manière à pouvoir annuler ces filtres... Mais là, il me faudra plus qu'une soirée si tu veux que je t'aide... (toutefois, c'est, je crois, possible!)

    Enfin, je n'ai pas repris la possibilité de trier les résultats par Type de document, ou autre critère.
    Pour cela, il faut utiliser le After Update de ta cmb "Tri par : ", et reprendre la requête résultats en triant les enregistrements.
    (SELECT * FROM [Résultats] ORDER BY Me.cmb_Tri
    Je te laisse bidouiller ca... si tu as un problème, dis moi.

    Bon courage, amuse toi bien!

    Naïs.
    Pièce jointe 38405

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    Bonsoir,

    Merci bcp pour votre aide. Je pense que ça peut être intéressant que l'on puisse modifier les critères selon convenance. Je vais essayer de m'en sortir avec vos commentaires et en cas de besoin je solliciterais un peu d'aide... ;-)

  15. #15
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Tout d'abord, merci encore pour ton aide pour la recherche multicritères.
    J'ai cependant encore un problème; je comprend bien la "philosophie" de ce que tu as fais (en plus tu l'as bien commenté). Par contre, si je test en remplissant par exemple le champ nom par "TOTO" et en validant, toute la liste s'efface...
    Je ne comprend pas d'où ça vient...

    Aurais-tu une idée???

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Points : 16
    Points
    16
    Par défaut
    Si vous rencontrez le même problème, j'ai trouvé la solution.
    Dans le SELECT * FROM Table je pensais que le WHERE était facultatif mais en réalité il faut le mettre pour que ça marche... quitte à metttre un critère tjr vrai tel que WHERE N°Autogen<>0...
    Merci à ceux qui m'ont aidé pour la recherche multicritère...!!!

    Julien

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

Discussions similaires

  1. aide pour fonction recherche
    Par king2070 dans le forum VB.NET
    Réponses: 1
    Dernier message: 21/04/2013, 22h55
  2. Procedure stockée pour une recherche multicritère
    Par souma21 dans le forum Développement
    Réponses: 5
    Dernier message: 14/05/2012, 16h28
  3. aide pour la recherche de stages en bts IG
    Par devdevig dans le forum Stages
    Réponses: 4
    Dernier message: 04/01/2011, 20h38
  4. [MySQL] Construction de la condition pour une recherche multicritères
    Par jmtrivia dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/05/2009, 11h30
  5. Aide pour une recherche
    Par bremer dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/03/2008, 10h02

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