Recherche par mots clés multiples

Bonjour à tous,

J'ai réaliser un code VBA pour la recherche d'articles d'une base de donnée par mot clé

Cela fonctionne très bien pour un seul mot de recherche.

j'aimerai peaufiner ce code VBA afin de faire une recherche sur plusieurs mots

Je m'explique :

je peux rechercher dans une liste d'article le mot "alimentation", j'ai donc en retour toute les lignes comprenant le mot "alimentation"

Mais comment faire pour rechercher "alimentation 12V" alors que le mot "12V" serait ailleurs dans la cellule de recherche

La cellule dans laquelle je recherche "alimentation 12V" serait "boitier d'alimentation de secours 12V"

Je vous remercie d'avance

bonjour,

j'aimerai peaufiner ce code VBA afin de faire une recherche sur plusieurs mots

tu isoles chacun des mots de ta phrase de recherche.

tu recherches si le premier mot est présent, si oui

tu vérifies que chacun des autres mots est également présent, tu arrêtes la vérification sur la cellule dès que tu as un mot qui n'est plus présent, tu passes à la cellule suivante qui contient le premier mot.

Après on peut envisager des optimisations comme par exemple supprimer les mots non significatifs pour la recherche (les articles, les prépositions, etc ...), faire un tableau des fréquences, faire un index ...

tu peux également t'inspirer des filtres.

Bonjour h2so4,

Merci pour cette réponse

Je ne vois pas comment pouvoir décomposer la clé de recherche

Auriez vous un petit exemple à me donner

voici ma méthode de recherche

If UCase(Feuil1.Cells(ligne, 20)) Like "*" & UCase(Me.txtmot_cle) & "*" Then
If (InStr(1, chaine_categ, Cells(ligne, 14).Value, 1) = 0) Then
chaine_categ = chaine_categ & "-" & Cells(ligne, 14).Value
Sheets("Construction").Cells(ligne_construct, 2).Value = Cells(ligne, 14).Value
ligne_construct = ligne_construct + 1


End If

Merci d'avance

bonjour,

un exemple d'algorithme possible.

Option Compare Text
Sub aargh()
    Dim articles() 'tableau qui contiendra la liste des articles correspondant aux mots clés
    motsclés = Split(Sheets("accueil").Range("B1"), " ") 'on isole les mots (un mot est une suite de caractères séparée par un espace)
    With Sheets("liste")
        dl = .Cells(Rows.Count, 20).End(xlUp).Row 'nombre d'articles dans l'inventaire
        ReDim articles(1 To dl, 1 To 2) 'redimensionner le tableau résultats au maximum possible
        tabliste = .Range("T1").Resize(dl, 1) ' charger l'inventaire dans un tableau VBA (performances !)
        For i = 1 To dl 'on parcourt l'inventaire
            ok = True 'par défaut l'article en cours correspond aux critères
            For j = LBound(motsclés) To UBound(motsclés) 'on vérifie chaque mots clés
                If InStr(tabliste(i, 1), motsclés(j)) = 0 Then ok = False: Exit For 'si pas trouvé, l'article en cours ne satisfait pas aux mots clés, on arrête la vérification des mots clés pour cet article
            Next j
            If ok Then 'l'article satisfait à tous les mots clés
                ctr = ctr + 1 'on l'ajoute à la liste d'articles correspondant aux mots clés
                articles(ctr, 1) = i 'n° de ligne de l'article dans l'inventaire
                articles(ctr, 2) = tabliste(i, 1) ' libellé de l'article
            End If
        Next i
        ' on a parcouru tout l'inventaire
        'on affiche le résultat
        Sheets("accueil").Range("A2").Resize(dl, 2).ClearContents 'efface résultat précédent
        If ctr > 0 Then
            Sheets("accueil").Range("A2").Resize(ctr, 2) = articles 'on affiche le résultat si au moins un article
        Else
            Sheets("accueil").Range("b2") = "pas d'article correspondant aux mots clés"
        End If
    End With
End Sub

Bonjour h2so4,

Un tout grand merci pour cet exemple qui fonctionne parfaitement

J'ai quand même un soucis pour modifier mon Tool :

J'utilise un Useform qui me permet d'afficher les résultats de la recherche par mot clé dans une ListBox

Lorsque l'on Click sur l'un des résultat, d'autres TextBox sont alimentées par d'autres information du tableau source ( se fait dans une autre fonction Private Sub Txtselect_Change() )

Je n'arrive pas à transcrire votre solution vers la ListBox ainsi que de faire en sorte que la recherche puisse se faire sans devoir faire attention aux majuscules minuscules et accents

bonjour,

pour une recherche sans accent indépendante de la casse, le plus performant est d'ajouter une colonne dans laquelle tu mets ton libellé sans accent et en majuscule ou en minuscule. et tu fais tes recherches avec tes mots clés (sans accent dans la casse qui convient) sur cette colonne.

je t'ai mis une fonction qui convertit un texte en minuscule sans accent, avec exemple d'utilisation. Pour la mise du résultat dans la listbox, cela doit se faire à la place de l'affichage des résultats.

Rechercher des sujets similaires à "recherche mots cles multiples"