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

VBA Access Discussion :

Rechercher plusieurs mots dans un champ


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 252
    Points : 74
    Points
    74
    Par défaut Rechercher plusieurs mots dans un champ
    Bonjour,

    Je n'arrive pas à résoudre le problème suivant :

    J'ai une table avec un champ [Caracteristiques].
    Ce champ contient plusieurs mots, phrases...

    Ex: "Le système hydraulique est insuffisant. il faudrait une extension"

    Je voudrais que l'utilisateur puisse extraire les enregistrements suivant une recherche de mots.

    Admettons que l'utilisateur recherche "extension" dans le champ [Caractéristiques] :

    Si je fais ça :

    "SELECT * FROM T_MACHINE WHERE [Caracteristiques] LIKE '* & me.txtrechercher & *';"

    ça fonctionne.

    Par contre, si l'utilisateur recherche "extension hydraulique" ça ne fonctionne pas.

    Comment faire pour que la recherche ne se base pas sur la chaine de caractère continue mais sur chaque mot de la chaine de caractère de recherche ?


    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM T_MACHINE WHERE [Caracteristiques] LIKE '* & me.txtrechercher & *';"
    Plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSql = "SELECT * FROM T_MACHINE WHERE [Caracteristiques] LIKE ""* " & Me.txtRechercher & "* ""; """

    Comment faire pour que la recherche ne se base pas sur la chaine de caractère continue mais sur chaque mot de la chaine de caractère de recherche ?
    En créant une fonction qui
    - décompose le texte recherché en mots
    - éliminer les mots considérés comme non représentatifs en tablant par ex. sur la longueur
    - lancer une boucle qui recherche chaque mot "significatif"
    - créer une table avec les enregistrements trouvés
    - afficher cette table

    Es-tu à l'aise en VBA ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Voici un exemple.

    La table T_MACHINE


    Une table tResultats, pour recueillir le résultat de la recherche


    tResultats est la source du formulaire


    Une requête paramétrée


    Quand le champ « Texte recherché » est mis à jour, ce code se déclenche :

    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
    Option Compare Database
    Option Explicit
     
    Private Sub txtRecherche_AfterUpdate()
      Dim tableau() As String
      Dim i As Integer
      Dim oQry As DAO.QueryDef
     
      'Vidange de la table tResultats
      DoCmd.SetWarnings False
      DoCmd.RunSQL "Delete * From tResultats;"
      DoCmd.SetWarnings True
      'Création du tableau
      tableau = Split(Me.txtRecherche, " ")
      'Recherche
      Set oQry = CurrentDb.QueryDefs("rRechercheMot")
      For i = 0 To UBound(tableau)
       If Len(tableau(i)) > 4 Then
           oQry.Parameters("LeMot") = tableau(i)
           oQry.Execute
       End If
      Next i
      'Assigner tResultats comme source du formulaire
      Me.RecordSource = "tResultats"
      'Montrer résultat
      Me.Section("Détail").Visible = True
      'sortir
      Set oQry = Nothing
    End Sub
    Quelques exemples

    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 252
    Points : 74
    Points
    74
    Par défaut
    Merci pour tes réponses !

    En attendant, j'ai continué à fouiller sur le net et je me suis fait mon petit code maison en testant une une autre bdd :

    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
    Dim sql As String
    Dim rs As DAO.Recordset
    Dim str As String
    Dim Tableau() As String
    Dim i As Integer
    Dim Resultat As String
     
        sql = "SELECT Mot_cle FROM T_MOT_CLE WHERE Mot_cle Like '*" & Left(Me.txtMot_cle, InStr(Me.txtMot_cle, " ") - 1) & "*';"
     
        Tableau = Split(Me.txtMot_cle, " ")
     
        For i = 1 To UBound(Tableau)
            str = str & " or Mot_cle like '*" & Tableau(i) & "*'"
        Next i
     
        sql = Replace(sql, ";", "") & str & ";"
     
        Set rs = CurrentDb.OpenRecordset(sql)
        While Not rs.EOF
            Resultat = Resultat & vbCrLf & rs.Fields("Mot_cle")
            rs.MoveNext
        Wend
        rs.Close
        Set rs = Nothing
     
        MsgBox Resultat
    Qu'en penses-tu ?
    Quelles sont les limites de mon code par rapport à ce que tu proposes ?

    Merci

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut

    Sauf que je ne retiens que les mots d'au moins 5 lettres (ce que tu pourrais aussi facilement faire dans ton code), le résultat sera identique.
    L'idée de présenter le résultat dans une boîte me plait bien : c'est plus simple à mettre en place !
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/04/2011, 17h13
  2. Rechercher plusieurs mots dans un champ
    Par olivier_tp dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/05/2009, 18h49
  3. [MySQL] Recherche plusieurs mots dans un champ
    Par raptor2003 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/04/2009, 20h47
  4. Requête recherche de mots dans un champs texte
    Par fusex132 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/04/2009, 11h09
  5. Recherche de mots dans un champ
    Par dechampfleury dans le forum Access
    Réponses: 3
    Dernier message: 23/01/2007, 10h37

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