Recherche par mot-clé

Résolu
Bonjour,

Je connais les bases d'Access mais suis coincé. J'ai la version 365.

J'ai créé une requête pour qu'un utilisateur puisse interroger une table à partir de mots-clés qu'il aurait saisis dans une requête.
Dans les critères de ma requête j'ai mis : Comme [Entrer le Mot ou une partie du mot Clé à rechercher ]+"*"
C'est pas mal mais la recherche est bonne uniquement si le mot saisi par l'utilisateur se trouve en premier dans les enregistrements de mon champ.

Par exemple :
Traçabilité du nettoyage des bureaux
Si l'utilisateur saisit "Traçabilité", la requête fonctionne et affiche tous les enregistrements qui contiennent le mot Traçabilité en début d'enregistrement.
Par contre si l'utilisateur saisit "bureaux" ça ne fonctionne pas car ce terme n'est pas en début d'enregistrement. J'espère avoir été clair.

Je pense que pour un utilisateur averti, ce doit être facile... Vous pourriez m'aider ?

Merci beaucoup d'avance.

Éric

13 réponses

Résumé de la discussion

La problématique porte sur une recherche dans Access 365 utilisant Like avec des mots-clés saisis par l'utilisateur, afin que le terme soit trouvé où qu'il apparaisse dans le champ. Des solutions proposent d'encadrer le critère avec des jokers, par exemple Like '*' & [Champ] & '*', puis d'utiliser un formulaire avec une zone de texte et un bouton pour lancer la requête. Plusieurs échanges évoquent des détails pratiques : nom exact d'une zone de texte, différence entre étiquette et nom, ou erreurs comme DoCmd.OpenQuery utilisant une variable incorrecte et entraînant l'erreur 2496. En parallèle, certains suggèrent de vérifier l'orthodoxie du nom de la requête et d'utiliser DCount pour vérifier l'existence d'enregistrements, sans conclure sur une solution définitive.

Bobot (l’IA à votre service)
  1. Contributeur Ambassadeur
    bonjour, moi j'essaierais ainsi:
    Comme "*" + [Entrer le Mot ou une partie du mot Clé à rechercher ] + "*"
    1
    1. Merci pour votre réponse yg_be ça fonctionne bien mieux comme ça, la recherche est bien effectuée dans tous les enregistrements !!!

      Savez-vous s'il existe un moyen, au cas où la recherche ne donne pas de résultats, d'afficher un texte du genre "merci de renouveler votre demande" ou "le mot-clé n'a pas été trouvé" ?

      Cordialement,

      Éric
      0
      1. Contributeur Ambassadeur
        peut-être via une seconde requête, qui utilise le nombre d'enregistrements retournés pas la première?
        0
      2. @yg_beC'est une bonne idée, mais je sais pas comment faire. Je vais chercher sur les tutos. Je pourrais éventuellement vous demander conseil si je ne trouve pas ?
        0
      3. @emarie3680Indice : regardes du côté de dcount()...

        A+
        0
      4. @RV71Merci RV71..

        J'ai commencé à regarder mais je ne sais pas comment utiliser cette fonction. Ce dois être ça qu'il me faut néanmoins.
        Je creuse !

        Éric
        0
    2. Perso, je passerais par un formulaire, contenant une zone de texte dans laquelle l'utilisateur rentre le mot clé.
      Et un bouton sur ce formulaire, avec comme code sur clic:
      Dim MaRequete As String
       
      MaRequete = "MaRequete01" 'remplace MaRequete01 par le nom de ta requête paramétrée
      If DCount("*", MaRequete) > 0 Then 'il y a au moins 1 enregistrement
         DoCmd.OpenQuery MaRequete, acNormal 'tu ouvres ta requête ou autre action
      Else
         MsgBox "Aucun enregistrement ne contient ce(s) mot(s)" 'message que tu personnalises
      End If


      A+
      1
      1. OK, RV71, je teste, merci beaucoup !
        0
    3. RV71 :

      J'ai une erreur d'exécution 2496
      L'action ou la méthode requiert un argument Nom requête

      Voilà mon code :

      Private Sub Bascule2_Click()
      Dim MaRequete As String

      MaRequete = "Requête simple" 'remplace MaRequete01 par le nom de ta requête paramétrée
      If DCount("*", MaRequete) > 0 Then 'il y a au moins 1 enregistrement
      DoCmd.OpenQuery strMaRequete, acNormal 'tu ouvres ta requête ou autre action
      Else
      MsgBox "Aucun enregistrement ne contient ce(s) mot(s)" 'message que tu personnalises
      End If
      End Sub

      Vous voyez l'erreur ?
      0
      1. Contributeur Ambassadeur
        Je pense que cela ne va pas fonctionner car la requête pose une question, et tu ne veux sans doute pas poser deux fois la question.
        0
      2. @yg_beMerci pour votre réponse yg_be mais Requête simple est différente et ne demande pas à l'utilisateur de saisir sa recherche dans une boîte de dialogue (comme vous me l'avez suggéré) ...
        0
      3.  DoCmd.OpenQuery strMaRequete, acNormal 'tu ouvres ta requête ou autre action


        J'ai fais une erreur, remplace strMaRequete par MaRequete
        0
      4. @yg_beDu coup changes ton critère dans ta requete, au lieu de :
        Comme "*"+ [Entrer le Mot ou une partie du mot Clé à rechercher ]+"*"

        mets :

        comme "*" + formulaires!TonFormulaire!TaZonedeTexte +"*"
        0
      5. Contributeur Ambassadeur
        @RV71
        option explicit
        0
    4. Tu peux donner le code sql de la requête stp ?

      A+
      0
      1. Voilà le code de la requête "Requête1"
        SELECT Feuil1.Titre, Feuil1.[Cliquez le lien correspondant]
        FROM Feuil1
        WHERE (((Feuil1.Titre) Like "*"+[formulaires]![Recherche_mots_cles_02]![Indépendant]+"*"));

        C'est dans le formulaire Recherche_mots_cles_02 que j'ai créé un bouton action sur lequel j'ai rentré la procédure événementielle :

        Private Sub Bascule2_Click()
        Dim MaRequete As String

        MaRequete = "Requête1" 'remplace MaRequete01 par le nom de ta requête paramétrée
        If DCount("*", MaRequete) > 0 Then 'il y a au moins 1 enregistrement
        DoCmd.OpenQuery MaRequete, acNormal 'tu ouvres ta requête ou autre action
        Else
        MsgBox "Aucun enregistrement ne contient ce(s) mot(s)" 'message que tu personnalises
        End If
        End Sub

        Indépendant est la zone de texte du formulaire Recherche_mots_cles_02

        Le résultat est toujours le même : "Aucun enregistrement ne contient..." même si je ne saisis rien ou n'importe quoi dans le champ texte Indépendant

        Je ne sais pas si c'est clair...
        0
      2. @emarie3680Remplace
        Like "*" + [formulaires]![Recherche_mots_cles_02]![Indépendant] + "*" 


        par

        Like "*" & [formulaires]![Recherche_mots_cles_02]![Indépendant] & "*"


        A+
        0
      3. @RV71Merci...

        Lorsque que je clique le bouton dans mon formulaire, je n'ai pas les messages et la requête ne tient pas compte de ce que j'ai saisi dans le champ "Indépendant". J'ai tous les enregistrements..
        ...
        0
    5. Tu es sur ?? si tu saisis zzzzzz dans le champ indépendant, ça retourne quoi ?
      0
      1. Désolé, j'ai la requête 1 qui m'affiche la table entière...

        Prise de tête...
        0
        1. C'est sympa de vouloir y jeter un coup d'oeil.
          Voilà un lien vers mon cloud :
          https://onedrive.live.com/redir?resid=83CBA75779CF0087!97054&authkey=!AJnYTCRcYKJH7K0&e=5Zn84p

          Le but du jeu est de pouvoir, en utilisant le formulaire Recherche_mots_cles_02 qui va chercher la requête Requête1 avoir un message indiquant s'il s'y trouvent ou pas des enregistrements qui correspondent à la saisie du champ Indépendant du formulaire Recherche_mots_clés_02. Évidemment, le résultat de la requête est selon ce que j'ai saisi dans le formulaire Recherche_mots_clés_02
          0
          1. Bon, je te laisse modifier tout seul le critère dans la requête, la zone de texte dans ton formulaire ne s'appelle pas "indépendant" mais texte0...

            A+
            1
            1. Pfff j'ai pas pris l'étiquette... tout ça pour ça ! Désolé mais un grand grand merci !
              Ca prend une bonne tournure.

              Boone soirée !!!
              0
              1. Je n'ai pas pris l'étiquette, mais bien le nom de la zone de texte (double clic dessus ou clic droit propriétés).

                Tu peux renommer l'étiquette si tu veux, ça ne changera pas le nom de la zone et vice versa.

                A+
                1
                1. RV71
                  OK, c'était énorme...
                  J'ai une autre question pour un détail. Vous avez vu que j'ai des enregistrements sous forme de liens hypertextes qui pointent vers des fichiers Word.
                  Savez-vous s'il est possible, une fois le lien cliqué que non seulement le fichier cible s'ouvre mais aussi que l'on retourne vers le formulaire ou carrément quitter Access ?
                  0
                  1. Contributeur Ambassadeur
                    peux-tu plutôt créer une nouvelle discussion pour ceci?
                    0
                  2. @yg_beOui, c'est ce que je viens de faire.

                    Bonne journée,

                    Éric
                    0