Bonjour,
Pour les besoins de mon boulot, je suis en train de répertorier des notions grammaticales (je recopie les tables des matières de bouquins, en gros). J'aurai maintenant besoin de faire un formulaire de recherche : l'utilisateur entre la notion qu'il recherche dans une boîte de dialogue, et toutes les lignes qui contiennent ce mot apparaissent.
Description du classeur :
- une feuille "IndexEssai" où sont entrées mes données (les notions grammaticales / le nom du bouquin où on peut les trouver / lien hypertexte vers un PDF (le bouquin))
- une feuille "boutons" qui comporte mon bouton pour lancer la recherche
J'ai plusieurs contraintes :
- je ne veux pas que les utilisateurs aient directement accès à la page où sont entrées les données (donc pas de liens hypertextes qui renvoient sur cette page)
- il faudrait que la ligne entière qui contient le mot recherché s'affiche (pas uniquement la cellule)
J'ai cherché un peu partout et je suis arrivée à un code qui me semble correct et qui pourtant ne marche pas (aucune donnée ne s'affiche ; pourtant je peux entrer le mot recherché dans la boîte de dialogue et j'ai le message que j'ai choisi lorsque j'entre une donnée non-répertoriée).
Voici mon code :
Pour le bouton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Option Explicit Public Sub CommandButton1_Click() Dim mot As String mot = InputBox("Tapez la notion que vous recherchez - N'oubliez pas les accents !") Range("B12:B" & Range("B65536").End(xlUp).Row).ClearContents Call recherche(mot) End Sub
Pour la recherche :
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 Sub recherche(mot) Dim Feuille As Worksheet Dim Ligne As Integer Dim firstAddress Dim trouve As Boolean Dim c As Range On Error GoTo fin Ligne = 12 For Each Feuille In Sheets If Feuille.Name = "IndexEssai" Then With Feuille.Rows Set c = .Find(mot, LookIn:=xlValues, LookAt:=xlPart) If Not c Is Nothing Then firstAddress = c.Address Do c.EntireRow.Copy Worksheets("Boutons").Range(Ligne, 2).Paste Set c = .FindNext(c) Ligne = Ligne + 1 Loop While Not c Is Nothing And c.Address <> firstAddress trouve = True End If End With End If Next Feuille If Not trouve Then MsgBox ("Aucune réponse n'a pu être trouvée") fin: End Sub
Voilà, j'espère avoir été assez claire ! Sinon, je peux toujours joindre un exemple de mon fichier...
Si jamais vous avez des idées sur pourquoi ça ne marche pas et qu'est-ce que je pourrai modifier, ça me tirerait une sacrée épine du pied !
Mille mercis d'avance !
Pauline
Partager