1. #1
    Membre du Club
    Inscrit en
    juin 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 89
    Points : 46
    Points
    46

    Par défaut Recherche par mots-clés

    Bonjour à tous
    J'ai à ma disposition deux tables; la première avec trois champs qui contient dans les champs 2 et 3 ma zone de recherche et une seconde table avec un seul champ qui contient mes mots-clés.
    comment puis-je faire pour que j'obtienne à la fin pour chaque mot-clé, le nombre d'occurrences trouvées.
    Merci pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    11 649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 11 649
    Points : 17 625
    Points
    17 625

    Par défaut

    Bonjour.

    Une requête rapide mais imprecise :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select [tblMotClef].[Mot], DCount("Clef", "tblRecherche", "[Champ2] like ""*" & [tblMotClef].[Mot] & "*""") + DCount("Clef", "tblRecherche", "[Champ3] like ""*" & [tblMotClef].[Mot] & "*""")
    form [tblMotClef]

    Va te compter tous les enregistrements qui contiennent au moins une fois le la chaîne de caractères du mot clef recherché dans un des 2 champs.
    Donc si tu as plusieurs fois le mot clef, il ne sera compté qu'une fois.
    Et si un enregistrement a le mot clef dans les 2 champs, il va être compter 2 fois.
    Dans mon exemple, les enregistrements sont suposés avoir un champ [Clef] qui les distingue les un des autres.

    Est-ce cela que tu avais en tête ?

    Si non, donne un exemple de ce que tu as comme données en entrée et de ce que tu attends en sortie.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre du Club
    Inscrit en
    juin 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 89
    Points : 46
    Points
    46

    Par défaut Recherche par mots-clés

    Rebonjour
    La table des mots clés s'appelle Mots-clés.
    n enregistrements comportant 1 seule rubrique MC dans laquelle je mets les mots clés

    La table dans laquelle je vais effectuer les recherches s'appelle Produits
    n enregistrements comportant la rubrique sur laquelle je vais faire la recherche, la rubrique s'appelle Résumé

    Exemple :
    Table Mots-clés Rubrique MC
    STYLO
    TABLE
    CASQUE

    Table Produits Rubrique Résumé
    ccccccccccccccccccccccccccccccc STYLO xxxxxxxxxxxxxxxxxxxxxxxxxxx
    ccccccccccccccccccccc TABLE xxxxxxxxxxxxxxxxxxxxxxxxxxx
    ccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxx
    cccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxSTYLO xxxxxxxxxx
    cccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxx

    A la sortie, je souhaiterai avoir :
    STYLO 2
    TABLE 1
    CASQUE 0

    J'espère avoir été plus clair
    Merci

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    11 649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 11 649
    Points : 17 625
    Points
    17 625

    Par défaut

    Bonjour.

    Ma solution s'applique mais correspond-t'elle à tes besoins compte tenus des limitations que j'ai mentionnées ?

    • Si le mot apparaît plusieurs fois dans [Rubrique] ou [Resume] doit-il être comptés plusieurs fois ?
    • Si le mot apparaît [Rubrique] et dans [Resume], doit-il être compté deux fois ?
    • Si le mot apparaît au mileiu d'un autre mot doit-il être compté. (ex : Cola est dans "Cola", "Chocolat" et "Colagène") ?


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre actif
    Femme Profil pro
    Développeur informatique
    Inscrit en
    août 2017
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : août 2017
    Messages : 117
    Points : 270
    Points
    270

    Par défaut Bonsoir Stoupi,

    Si j'ai bien saisi tes explications, le code de Marot_r adapté à tes données devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select [Mots-clés].[MC], DCount("IdentifiantProduit", "PRODUIT", "[Résumé] like ""*" & [Mots-clés].[MC] & "*""") )
    from [Mots-clés]
    "rubrique" a d'autres connotations, il faut plutôt parler de "colonne", tu seras mieux compris.

    Quelques précisions à apporter :
    • Porte attention à la façon de coder le DCount; cf. la remarque de Marot_R, tel que c'est ci-dessus, tu comptes aussi les produits dont le résumé contient "RETABLE" quand ton mot clé est "TABLE". Ce n'est pas vraiment le même champ lexical, tu vas sur-compter. Et si tu ajoutes des blancs après le premier * et avant le dernier *, tu sous-compteras car tu ignoreras les mots au pluriel ou suivis d'une ponctuation (mais ce sera plus fiable).
    • Comme le demande Marot_r : si pour un même produit le résumé contient 36 fois "STYLO", tu as besoin d'en compter 36 ? Ou bien ce qui t'intéresse est le nombre de produits dont le résumé contient au moins 1 fois "STYLO", ce que la requête de Marot_r fait très bien ?
    • J'imagine que ta recherche ne doit pas être sensible à la casse : il faudrait donc rajouter une fonction pour tout comparer en majuscules (je vais vérifier la syntaxe et reviens)


    @Marot_r, mes principes (orthographiques) s'insurgent contre ce Cola dans le collagène

    Cordialement
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

    "à tort", c'est toujours avec un "t". C'est tordu d'écrire "à tord".
    "hors" (en dehors), ce n'est pas "or" (pourtant). Là nous réfléchissons hors contexte, or le contexte est primordial.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    11 649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 11 649
    Points : 17 625
    Points
    17 625

    Par défaut

    Bonjour Paraffine,

    J'imagine que ta recherche ne doit pas être sensible à la casse : il faudrait donc rajouter une fonction pour tout comparer en majuscules (je vais vérifier la syntaxe et reviens)
    Access par défaut n'est pas sensible à la casse.
    Pour lui "A" et "a" c'est la même chose.
    Il est toute fois sensible aux accents et aux cédilles donc "à" est différent de "a" mais pas différent de "À".
    C'est quand on veut le rendre sensible et insensible aux accent que c'est un problème.

    Citation Envoyé par Paraffine
    @Marot_r, mes principes (orthographiques) s'insurgent contre ce Cola dans le collagène
    Désolé encore. Hélas ma meilleure moyenne en orthographe a été de 0.5/20 dans toute ma scolarité. Et cela ne s'est produit qu'un seul trimestre. ... et le mot pourrait être mal orthographié dans les données donc mon exemple tient la route :-).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre actif
    Femme Profil pro
    Développeur informatique
    Inscrit en
    août 2017
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : août 2017
    Messages : 117
    Points : 270
    Points
    270

    Par défaut

    Citation Envoyé par marot_r Voir le message
    Access par défaut n'est pas sensible à la casse.
    Pour lui "A" et "a" c'est la même chose.
    Il est toutefois sensible aux accents et aux cédilles donc "à" est différent de "a" mais pas différent de "À".
    C'est quand on veut le rendre sensible et insensible aux accents que c'est un problème.
    Au temps pour moi , merci pour la mise au point.

    Citation Envoyé par marot_r Voir le message
    le mot pourrait être mal orthographié dans les données donc mon exemple tient la route :-)
    C'est sûr ! Les fameux dommages "Cola"téraux...

    Cordialement.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

    "à tort", c'est toujours avec un "t". C'est tordu d'écrire "à tord".
    "hors" (en dehors), ce n'est pas "or" (pourtant). Là nous réfléchissons hors contexte, or le contexte est primordial.

  8. #8
    Membre du Club
    Inscrit en
    juin 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 89
    Points : 46
    Points
    46

    Par défaut recherche d'occurrences

    Bonjour à tous et encore merci de votre retour très rapide.
    En fait je souhaiterai compter pour un mot-clé donné; le nombre d'enregistrements qui possèdent au moins une fois ce mot-clé et uniquement ce mot-clé isolé à savoir PRO ne doit pas sortir dans PROCURATION.
    J'ai bien essayé de mettre dans ma tables des mots-clés le mot PRO avec un blanc avant et après mai ce n'est pas top.
    Merci d'avance.

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    11 649
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 11 649
    Points : 17 625
    Points
    17 625

    Par défaut

    Bonjour.

    Ça c'est plus complexe. Ici du code pour faire cela (à mettre dans un module) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Compare Database
    Option Explicit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Test_EstMotDansTexte()
        'Fonction pour tester "localement" le code avant de s'en servir ailleur
        Debug.Print EstMotDansTexte("Test", "Test")
        Debug.Print EstMotDansTexte("T3", "T1, T2")
        Debug.Print EstMotDansTexte("T3", "T1, T3, T4 T3")
        Debug.Print EstMotDansTexte("T", "T1, T3")
    End Sub
    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
    Public Function EstMotDansTexte(prmMot As String, prmTexte As String) As Boolean
        'Teste si le mot est au moins une fois dans le texte
        Dim result As Boolean: result = False
     
        Dim listeMot() As String: listeMot = Decouper(prmTexte)
     
        Dim mot As Variant: For Each mot In listeMot
     
            If mot = prmMot Then
                result = True
                Exit For
            End If
     
        Next mot
     
        EstMotDansTexte = result
    End Function
    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 Function Decouper(prmTexte As String) As String()
        Dim result() As String
     
        Dim t As String: t = prmTexte
        t = Trim(t) 'Supprime les espaces avant et après
     
        '=== Remplace la ponctuation par des espaces, évite d'avoir à gérer la ponctuation
        Const LISTE_PONCTUATION As String = ".;,:'"""
     
        Dim i As Long: For i = 1 To Len(LISTE_PONCTUATION)
            t = Replace(t, Mid(LISTE_PONCTUATION, i, 1), " ")
        Next i
        '--- Remplace la ponctuation par des espaces, évite d'avoir à gérer la ponctuation
     
        '=== Supprime les espaces en double
        Dim t1 As String
     
        Do
            t1 = Replace(t, "  ", " ")
     
            If t = t1 Then
                Exit Do
            End If
     
            t = t1
        Loop
        '--- Supprime les espaces en double
     
        result = Split(t, " ") 'Découpe le texte sur les espaces. Un mot est une suite de lettres comprises entre 2 espaces.
     
        Decouper = result
    End Function
    et à utiliser dans une requête comme par exemple.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select [Mots-clés].[MC], DCount("Clef", "Table1", "EstMotDansTexte(""" & [Mots-clés].[MC] & """, [Résumé])") as NbEnr
    from [Mots-clés]

    Note que la fonction de recherche et DCount() ne sont pas très performantes donc si tu as beaucoup de données le calcul pourrait être un peu lent.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    novembre 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : novembre 2007
    Messages : 902
    Points : 1 268
    Points
    1 268

    Par défaut

    Bonsoir à tous

    Pour information, je vous signale une autre méthode pour rechercher un mot à l'intérieur d'une chaîne de texte. Elle utilise les "expressions régulières".
    Les délimiteurs choisis permettent de retenir les mots non accolés aux caractères a-z, A-Z, 0-9.

    Il faut d'abord inscrire la bibliothèque Microsoft VBScript Regular Expressions 5.5 et mettre cette fonction dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function RechercheMot(ByVal strChaine As String, ByVal strMot As String) As Boolean
        Dim re As VBScript_RegExp_55.RegExp
        Set re = New RegExp
        re.Pattern = "(\W|^)(" & strMot & ")(\W|$)"    '"b" & strMot & "b" ne fonctionne pas (?)
        re.IgnoreCase = True
     
        ' La fonction renvoie True si le mot a été trouvé
        RechercheMot = re.Test(strChaine)
        Set re = Nothing
    End Function
    On peut ensuite, bien entendu, utiliser la fonction RechercheMot("NomChaine","Mot") dans une requête.

    Titi95
    Un problème bien posé est à moitié résolu

Discussions similaires

  1. Recherche par mot clés - Php -Mysql
    Par pod1978 dans le forum Requêtes
    Réponses: 8
    Dernier message: 22/09/2006, 13h01
  2. recherche par mots-clés dans base access
    Par syber72 dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2006, 13h53
  3. recherche par mots clés
    Par spartan dans le forum PHP & MySQL
    Réponses: 4
    Dernier message: 16/02/2006, 16h11
  4. [Tableaux] Moteur de recherche par mot clés
    Par Nee dans le forum Fonctions
    Réponses: 4
    Dernier message: 20/01/2006, 11h30
  5. Recherche par mots clés
    Par legillou dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2005, 10h56

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