Bonjour à tous,
Je suis en train de réaliser une base de donnée référençant diverses documentations techniques à l'occasion d'un petit travail. J'ai besoin de votre aide pour réaliser un moteur de recherche.
Je les ai triées Lot par Lot, un lot correspondant à une feuille.
Mon moteur de recherche fonctionne sur un système de mots clés séparés par des espaces ou bien des virgules s'il le faut. Et, les recherches sont ciblées sur une colonne (A) d'une seule feuille du classeur, déterminées avant la saisie de mot clés par l'utilisateur.
Actuellement le travail que j'ai réalisé me permet d'effectuer une recherche dans un Userform, en fonction de la feuille (lot) choisit, mais cette recherche ne filtre pas toute le contenu des cellules.
Par exemple, j'entre dans la colonne mots clés pour une documentation technique les mots : isolation;béton;celullaire
Si je veux retrouver cette documentation technique, je dois réinscrire les mots dans le même ordre, or j'aimerais que cette documentation apparaissent en ne saisissant par exemple que "béton" ou encore "cellulaire;béton".
Voici mon code
Je vous joints également un extrait de la base de donnée.
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
33
34
35
36
37
38 Private Sub TextBox1_Change() Dim Lot As String Dim Plage As Range, cell As Range Dim Recherche As String, Adresse As String Dim Ligne As Integer, n As Integer Dim C As Range ListBox1.Clear Lot = Range("O19") n = 0 Recherche = TextBox1.Value Range("A1").Select Ligne = Sheets(Lot).Range("A" & "65536").End(xlUp).Row Set Plage = Sheets(Lot).Range("a" & "1:" & "a" & Ligne) With Plage Set C = .Find(Recherche, , xlValues) If Not C Is Nothing Then Adresse = C.Address Do If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then ListBox1.AddItem C.Offset(0, 0), n ListBox1.List(n, 0) = C.Offset(0, 1) ListBox1.List(n, 1) = C.Offset(0, 2) ListBox1.List(n, 2) = C.Offset(0, 3) ListBox1.List(n, 3) = C.Offset(0, 4) ListBox1.List(n, 4) = C.Offset(0, 5) ListBox1.List(n, 5) = C.Offset(0, 6) ListBox1.List(n, 6) = C.Offset(0, 7) n = n + 1 End If Set C = .FindNext(C) Loop While Not C Is Nothing And C.Address <> Adresse End If End With End Sub Private Sub UserForm_Initialize() ListBox1.ColumnCount = 9 ListBox1.ColumnWidths = "110;300;150;40;80;120" End Sub
J'espère que vous pourrez m'aider, je suis débutant, j'ai réalisé ce code VBA en compilant diverses lignes de codes de différents classeurs que j'ai trouvés et en l'adaptant à ma base de donnée.
Partager