Recherche par mot-clé
RésoluJe 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
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.
-
Contributeur Ambassadeurbonjour, moi j'essaierais ainsi:
Comme "*" + [Entrer le Mot ou une partie du mot Clé à rechercher ] + "*"
-
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-
-
@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 ?
-
-
@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
-
-
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+ -
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 ?-
-
@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é) ...
-
-
@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 +"*" -
Contributeur Ambassadeur@RV71
option explicit
-
-
Tu peux donner le code sql de la requête stp ?
A+-
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... -
@emarie3680Remplace
Like "*" + [formulaires]![Recherche_mots_cles_02]![Indépendant] + "*"
par
Like "*" & [formulaires]![Recherche_mots_cles_02]![Indépendant] & "*"
A+ -
@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..
...
-
-
Tu es sur ?? si tu saisis zzzzzz dans le champ indépendant, ça retourne quoi ?
-
Désolé, j'ai la requête 1 qui m'affiche la table entière...
Prise de tête... -
et il y a bien le critère dans cette requête ?
Tu peux envoyer ta base si tu veux via https://www.cjoint.com/ par exemple.
A+ -
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 -
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+ -
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 !!! -
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+ -
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 ?