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 :

Recherche Multi critère (besoin ENCORE d'enrichir le code)


Sujet :

Access

  1. #1
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Recherche Multi critère (besoin ENCORE d'enrichir le code)
    Voilà, j'ai fait un formulaire de recherche avancé qu marche très bien, et proposé par Loufab. :

    Voici pour mémoire le début du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub cbo_table_BeforeUpdate(Cancel As Integer)
     
    Me.cbo_champ.RowSource = Me.cbo_table.Value
    Me.cbo_champ.Requery
     
    End Sub
    La suite du code permet de récupérer le nom de la table et du champ servant de base à la recherche:

    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
     
    Private Sub cmd_recherche_Click()
    On Error GoTo Err_cmd_recherche_Click
     
     Dim strTable As String, strField As String, strCriteria As String, strSql As String
     
        Dim Criter As Variant
        strTable = Me.cbo_table         ' recupère le nom de la table sans espace dans le nom
        strField = Me.cbo_champ         ' recupère le nom du champ sans espace dans le nom
     
     
        ' construit la requête sql
        strSql = "SELECT DISTINCTROW " & strTable & ".*"
        strSql = strSql & " FROM " & strTable
        strSql = strSql & " WHERE ((" & strCriteria & "));"
     
     
        Me.lst_Resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_Resultat.Requery             ' recalcule la liste
     
     
    ' fin du code d'erreur*************
    Exit_cmd_recherche_Click:
        Exit Sub
     
    Err_cmd_recherche_Click:
        MsgBox Err.Description
        Resume Exit_cmd_recherche_Click
    '**************************************
     
     
    End Sub

    Donc jusque là, c'est super.

    Mais il s'avère que cet autre frm de recherche que je fais en ce moment, n'a pas besoin de partir sur une liste de choix des tables et des champs.

    Je voudrais écrire le code de 2 façons ( la 1ère simplement pour savoir comment appeler une table et un champ, mais la 2ème c'est mon besoin) :

    1°) Cibler une table unique "tblUnique" et un champ unique "MonChampUnique".

    Sachant que cette 2ème façon sembe être la plus importante.
    2°) Cibler une requête unique "qryUnique" et un champ unique "MonChampUnique".

    Comme je suis un débutant, après avoir cherché, j'en appel à votre bon coeur.

    Merci par avance à tous.
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir SROD,
    Copie ta forme actuelle et sauve la sous un autre nom. Supprime les deux liste (tables,champs) et dans le code entre le nom de la table (ou requête) et le nom du champ.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub cmd_recherche_Click() 
    ...
        strTable = "[tblUnique]"         ' nom de la table ou de la requête    
        strField = "[MonChampUnique]"    ' nom du champ
    ....
    End Sub
    Si j'ai tout compris ça doit faire ce que tu recherche.

  3. #3
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Besoin info en plus
    Merci à toi LedZeppII

    Ca marche super bien, et ceal me permet de pouvoir soit faire une selection sur liste, ou de cibler directement parmi des tbl ou des qry ce que je veux.


    Maintenant, je souhaiterais pouvoir choisir non pas 1 champ de ma tbl ou de ma qry, mais plusieurs champs.

    Ex : La table "tblLivre" contient

    1) le nom du livre "MonChampLivre"
    2) le chapitre "MonChampChapitre"
    3) le paragraphe "MonChampParagraphe"

    et bien sur ensuite le texte à retrouver grâce aux paramètres précédents.

    Je voudrais pouvoir selectionner cette table par un "Combobox : Liste modifiable", ca ok c'est dans le code.

    Ensuite pouvoir selectionner ces 3 champs par 3 "Listbox : Zone de Liste"
    Ainsi je pourrai trouver par exemple dans "Guerre et paix" de Tolstoï une pensée précise.

    Avis aux âmes généreuses, j'ai soif de bon conseils et de savoir ce que vous en pensez.
    Alors comment peut-on modifier le code d'origine ??
    A++++
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Je ne suis pas sûr d'avoir bien bien compris.
    En tout cas voici comment tu pourrai modifier le code pour une recherche à plusieurs critères
    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
    Dim strTable As String
    Dim strCriteria1 As String, strCriteria2 As String, strCriteria3 As String
    Dim strSql As String, strSqlWhere, sqlAND As Boolean
     
        Dim Criter As Variant
        strTable = Me.cbo_table         ' recupère le nom de la table sans espace dans le nom
        strField = Me.cbo_champ         ' recupère le nom du champ sans espace dans le nom
     
     
        ' construit partie SELECT ... FROM ... de la requête sql
        strSql = "SELECT DISTINCTROW " & strTable & ".*"
        strSql = strSql & " FROM " & strTable & vbCrLf
     
        ' construit la partie WHERE de la requête
        sqlAND = False
        strSqlWhere = "WHERE ("
        ' Critère 1
        If strCriteria1 <> "" Then
           If sqlAND Then strSqlWhere = strSqlWhere & " AND "
           sqlAND = True
           strSqlWhere = strSqlWhere & "(" & strCriteria1 & ")"
        End If
        ' Critère 2
        If strCriteria2 <> "" Then
           If sqlAND Then strSqlWhere = strSqlWhere & " AND "
           sqlAND = True
           strSqlWhere = strSqlWhere & "(" & strCriteria2 & ")"
        End If
        ' Critère 3
        If strCriteria3 <> "" Then
           If sqlAND Then strSqlWhere = strSqlWhere & " AND "
           sqlAND = True
           strSqlWhere = strSqlWhere & "(" & strCriteria3 & ")"
        End If
     
        strSqlWhere = strSqlWhere & ")"    ' Ferme parenthese WHERE
     
        ' N'ajoute le WHERE que si il y a des critères
        If strSqlWhere <> "WHERE ()" Then
           strSql = strSql & strSqlWhere
        End If
     
        ' Termine la requête
        strSql = strSql & ";"
     
        Me.lst_Resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_Resultat.Requery             ' recalcule la liste
     
    ' fin du code d'erreur*************
    Exit_cmd_recherche_Click:
        Exit Sub
     
    Err_cmd_recherche_Click:
        MsgBox Err.Description
        Resume Exit_cmd_recherche_Click
    '**************************************
    J'ai supposé que strCriteria1, strCriteria2, strCriteria3 sont soit vides soit de la forme "(table.champ)='quelquechose'" ou "(table.champ)Like '*quelquechose*'". champ est le nom d'un champ sélectionné dans une des listes.
    Pour le reste de la contruction du formulaire, tu reparts du premier formulaire auquel tu ajoute deux autres listes comboBox et des zones de textes pour les critères.
    En gros pour construire strCriterian il te faut une liste comboBox pour choisir le champn et une zone de texte pour la valeur dur critère.

    Bon courage

  5. #5
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Je patauge un peu !!!!
    Bonjour à toi !!

    Cela m'a pris un peu de temps pour tester. Mais ça ne marche pas, car ou j'ai mal expliqué mon besoin ou j'adapte mal le code.

    Précisions: je te donne les vrais noms pour ne pas me tromper et simplifie ma demande.

    Cibler ma table "tblCitations" ou ma requête "qryCitations", OK


    La suite du code permet de récupérer le nom de la table et du champ servant de base à la recherche sans utiliser les "Combobox : Liste modifiable"
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub cmd_recherche_Click()
    On Error GoTo Err_cmd_recherche_Click
     
     ' Déclaraton des variables
     
    ' Dim strTable As String, strField As String, strCriteria As String, strSql As String
     
       ' Dim Criter As Variant
       strTable = "[tblCitations]"         ' recupère le nom de la table sans espace dans le nom
    PAR CONTRE pour les champs ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strField = ????         ' recupère le nom du champ sans espace dans le nom

    Ainsi après avoir analysé ton code je patine car dans ce cas mes champs sont au nombre de 3.

    Mais comme ce champ n'est pas unique, mais il y en a trois dont voici les noms. ( qui seront en "Listbox : Zone de Liste" )

    1°) "lst_Livre"
    2°) "lst_Chapitre"
    3°) "lst_Paragraphe"

    Ce n'est pas toujours facile d'expliquer exactement nos besoins, j'espère avoir été beaucoup plus précis, afn de pouvoir untiliser ce code qui me serait super bien utile !!!

    Ensuite comme prévu par ton code, faire en sorte que le resultat s'affiche dans "Listbox : Zone de Liste" .

    Ouf! j'espère avoir été clair.

    Merci, par avance.
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut autre code
    Bonjour SROD,
    Voila un code plus simple et moins général :
    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 strTable As String, strCriteria As String, strSql As String
    Dim strField1 As String, strField2 As String, strField3 As String
     
    strTable = Me.cbo_table       ' recupère le nom de la table
    strField1 = Me.lst_Livre      ' recupère le nom du Livre
    strField2 = Me.lst_Chapitre   ' recupère le Chapître
    strField3 = Me.lst_Paragraphe ' recupère le Paragraphe
     
    strCriteria = "(" & strTable & ".MonChampLivre=""" & strField1 & """)" & _
             " AND (" & strTable & ".MonChampChapitre=""" & strField2 & """)" & _
             " AND (" & strTable & ".MonChampParagraphe=""" & strField3 & """)"
     
    ' construit la requête sql
    strSql = "SELECT DISTINCTROW " & strTable & ".*"
    strSql = strSql & " FROM " & strTable
    strSql = strSql & " WHERE ((" & strCriteria & "));"
    A+

  7. #7
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut Remerciements.
    Merci pour tout, il m'a fallu un peu de temps, car j'ai été très pris.

    Cela marche super bien, et cela correspond tout à fait à mes besoins.

    Car il s'agit d'une application concernant des citations d'auteur intégral ou en partie.

    Maintenant que cela va bien, me vient une autre idée.

    Ma "list" "Livre" est alimenté par une "qryCitation" basée sur la "tblCitation" mais pas mes "list_Chapitre" & "list_Paragraphe".(mais par une tblNumerique".

    Pourquoi ?

    Parcequ'avec une requête quand je tri le Livre, puis le Chapitre la Ok, mais si je mets un tri encore à la suite sur le pargraphe.. Et ben rien ni fait, cela ne veux pas être trié.

    Pourquoi ????

    Donc je l'ai construit comme cela en attendant mieux.

    Mais le problème, c'est que quand je choisis un Livre pour lequel je n'ai saisie dans le chapitre 1 que 30 paragraphe, et dans le chapitre 2 que 6 paragraphe. Ma "list_Numerique" elle en a 200 par défaut.

    Donc en recherche je ne sais pas combien, il existe de chapitre ou de paragraphe consultable .....

    Si tu as une idée, de mon coté je cherche à adapter le code d'origine.

    Ah, Jimmy Page - y-a-t'il un rapport avec la Pseudo ???

    A+++
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour et merci pour l'intérêt que vous portez à ce tuto.

    Mais le problème, c'est que quand je choisis un Livre pour lequel je n'ai saisie dans le chapitre 1 que 30 paragraphe, et dans le chapitre 2 que 6 paragraphe. Ma "list_Numerique" elle en a 200 par défaut.
    Normalement pour ce genre de cas tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Livre A - Chapitre 1 - Paragraphe 1
    ...
    Livre A - Chapitre 1 - Paragraphe 30
    soit 30 lignes et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Livre A - Chapitre 2 - Paragraphe 1
    ...
    Livre A - Chapitre 2 - Paragraphe 6
    6 lignes soit au total 36 lignes et non 200...

    C'est ici que quelque chose m'échappe. Peux-tu envoyé le résultat de la requète générée...

    (Cachemir l'un des meilleurs album de ledzep...)
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Absolument SROD,
    Mon pseudo fait référence au deuxième album de Led Zep.
    Pour y voir plus clair, tu pourrai donner la structure de tes tables et de ta query ?
    Juste les champs principaux.
    A+

  10. #10
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    SROD,
    1.
    Pour le tri, je pense que ça vient du fait que les chapîtres et les paragraphes sont des champs textes. Fait un tri sur CLng([Chapitre]), CLng([Paragraphe]).

    2.
    En supposant que ta table est MaTable avec les champs Livre, Chapitre, Paragraphe, ...
    Quand tu a choisi ton livre, modifie le contenu de la liste chapitre comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub cmbLivre_Change()
    Me.cmbParagraphe.Rowsource="SELECT DISTINCT Chapitre FROM MaTable WHERE ([Livre]=""" & Me.cmbLivre & """)"
    Me.cmbParagraphe.Requery
    End Sub
    Même principe quand tu choisi un chapître.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub cmbChapitre_Change()
    Me.cmbChapitre.Rowsource="SELECT DISTINCT Paragraphe FROM MaTable WHERE ([Chapitre]=""" & Me.cmbParagraphe & """)"
    Me.cmbChapitre.Requery
    End Sub
    A+

Discussions similaires

  1. [MySQL] Recherche multi-critères ou un seul
    Par jack1234 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/12/2005, 08h56
  2. Recherche multi-critères
    Par PAUL87 dans le forum Access
    Réponses: 66
    Dernier message: 13/12/2005, 12h12
  3. 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, 19h33
  4. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 11h00
  5. Procédure stockée: recherche multi-critères
    Par biroule dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 01/09/2004, 16h02

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