Moteur de recherche avec userform
Bonjour à tous,
Je suis débutant en VBA et je souhaiterai une aide car je n'est pas trouvé ou pas su utilisé les divers solutions trouvé sur ce sujet.
J'aimerai inclure dans un classeur excel qui contient plusieurs onglets, un moteur de recherche qui effectue la recherche sur tout les onglets en placent un bouton sur le 1er onglet qui ouvrir une boite de recherche userform,
dans cette boite il y a une case type menu déroulant ou on tape le mot recherché et une autre case en dessous ou s'affiche tout les mots trouvés et le nom de l'onglet ou ils se trouvent, il ne reste alors plus qu'à sélectionner le mot à la page qui m’intéresse, cliquer sur un bouton OK pour qu'il ouvre l'onglet et mette en surbrillance la ligne du mot trouvé.
Est ce possible ?
Userfrom est créé mais impossible pour moi de faire les codes VBA
Merci à vous pour votre aide.
Cordialement.
Mat
Bonjour,
j'ai trouvé un code de recherche que j'ai réussi non sans mal à l'adapter à mon userform et qui me conviens bien mais je n'arrive pas à l'adapté à l'ensemble du classeur, il est seulement fait pour une recherche dans une liste A2:A24 et je ne sais pas comment faire pour qu'il recherche dans tout les onglets.
ensuite il manque aussi le faite de cliquer sur le mot qu'il trouve et qu'il ouvre directement la feuille ou il est situé.
Voici le code trouvé qui est d'origine:
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
Range("A2:A24").Interior.ColorIndex = 2
ListBox1.Clear
If TextBox1 <> "" Then
For ligne = 2 To 24
If Cells(ligne, 1) Like "*" & TextBox1 & "*" Then
Cells(ligne, 1).Interior.ColorIndex = 43
ListBox1.AddItem Cells(ligne, 1)
End If
Next
End If
End Sub
et le même que j'ai adapté a mon userform
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Range("A2:A24").Interior.ColorIndex = 2
ListView1.Clear
If ComboBox1 <> "" Then
For ligne = 2 To 24
If Cells(ligne, 1) Like "*" & ComboBox1 & "*" Then
Cells(ligne, 1).Interior.ColorIndex = 43
ListView1.AddItem Cells(ligne, 1)
End If
Next
End If
End Sub
Merci pour vos aides.
bonjour
je fais Ctrl+F, puis <Rechercher tout>. cliquer sur le lien pour accéder
le seul inconvénient, c'est qu'il faut à chaque fois cliquer l'option "classeur" et redimensionner la fenêtre des résultats
Bonjour,
Merci pour la réponse...
Oui c'est ce que je faisais au début, et c'est pour ça que je veux créer une boite de recherche "plus simplifier" et comme plusieurs personne utiliser se fichier ça simplifierai les choses pour tout le monde (sauf pour moi qui cherche désespérément à taton pour y arriver avec set userform
Mais merci quand même pour votre intervention
Bonjour Guignol81, jmd
Proposition à voir si cela convient
Double clic sur listview pour voir la selection
Bonjour BOB71AU
Merci beaucoup pour l'avancé extraordinaire du moins de mon point de vue, c'est bien cette fonction que je recherche sans y parvenir.
Mais j'ai encore un probleme, il trouve bien tout les mot mais seulement à partir de la colonne F jusqu'à J, et j'ai besoin qu'il cherche sur les pages entières ou au moins de A1 à Z2000 de chaque page.
Encore merci beaucoup pour cette grande avancée !!!!
Re
dans le code du bouton recherche
remplacer
For Each Cel In Sheets(i).Range("F2:J" & Sheets(i).Range("F" & Application.Rows.Count).End(xlUp).Row)
par
For Each Cel In Sheets(i).Range("A1:Z" & Sheets(i).Range("F" & Application.Rows.Count).End(xlUp).Row)
Mais dans le fichier fourni, il n'y a pas de données dans la colonne A
donc dans cette ligne de code cela signifie
A1:Z de la cellule a1 à z en utilisant la colonne de référence F pour le nombre de lignes
sinon pour plage fixe
For Each Cel In Sheets(i).Range("A1:Z2000")
Merci ça fonctionne très bien.
Il me reste une question, est il possible de supprimer le bouton validé et de le remplacer par une écriture intuitive dans la case recherche et quand le mot recherché s'affiche on clique dessus et il vient s'afficher dans la liste comme il le fait quand on clique sur validé, ensuite comme il fait maintenant, on double clique et il nous amène à la page du mot.
Un grand merci pour votre aide.
Re
Pour cela, il faudrait que le combobox soit alimenté
mais si je mets la macro sur combo change, la macro va se déclenché à chaque caractère saisi
sinon le déclenché sur combox exit
exemple sur exit du combo
saisir la recherche + enter par exemple
Merci beaucoup.
Je pense surement revenir pour peaufiner l'userform, mais grâce à vous le travail est sacrément avancé pour pas dire fini... ça faisait une semaine que j’étais en galère
Je vous souhaite une bonne soirée.
PS: Je met le sujet résolu ? Ou je continue à poster ici si j'ai encore besoin ?
Bonsoir
Mieux vaut cloturer le post et en ouvrir un nouveau pour un autre sujet
Pas sur d'être encore présent pour vous aider
A+
Bonjour,
Je réouvre se topic car j'ai un petit soucis. Le moteur fonctionne toujours bien, le hic, j'ai rajouté des feuilles et le moteur de recherche ne prend pas en compte les nouvelles feuilles insérées.
Voici le code de l'userform:
Option Compare Text
Sub EnTête()
Dim i%, lbvis As Boolean
If lbxPrest.RowSource <> "" Then
lbvis = True
Else
lbvis = False
End If
For i = 1 To 3
Controls("lbPr" & i).Visible = lbvis
Next i
End Sub
Private Sub cbQuit_Click()
Unload Me
End Sub
Private Sub cbValid_Click()
Dim Cel As Range
Application.ScreenUpdating = False
'Range("A2:A24").Interior.ColorIndex = 2
Me.ListView1.ListItems.Clear
If ComboBox1 <> "" Then
' For i = Sheets.Count To 1 Step -1 'en mode de la dernière feuille à la première
For i = 1 To Sheets.Count 'en mode de la première feuille à la dernière
If Sheets(i).Name <> "Recherche" Then
For Each Cel In Sheets(i).Range("A1:Z" & Sheets(i).Range("F" & Application.Rows.Count).End(xlUp).Row)
' For Each Cel In Sheets(i).Range("A1:Z2000")
If Cel.Row > 3 And Cel <> "" Then
If Cel Like "*" & ComboBox1 & "*" Then
' Cel.Interior.ColorIndex = 43
UserForm1.ListView1.ListItems.Add , , Cel
UserForm1.ListView1.ListItems(UserForm1.ListView1.ListItems.Count).ListSubItems.Add , , Sheets(i).Name
UserForm1.ListView1.ListItems(UserForm1.ListView1.ListItems.Count).ListSubItems.Add , , Cel.Address
End If
End If
Next Cel
End If
Next i
End If
Application.ScreenUpdating = True
End Sub
Private Sub ListView1_DblClick()
Dim Feuille As String, Cellule As String
Feuille = UserForm1.ListView1.SelectedItem.ListSubItems(1)
Cellule = UserForm1.ListView1.SelectedItem.ListSubItems(2)
If Me.ListView1.ListItems.Count <> 0 Then
Sheets(Feuille).Activate
Sheets(Feuille).Range(Cellule).Activate
ActiveCell.EntireRow.Activate
End If
End Sub
Private Sub UserForm_Initialize()
With Me.ListView1
With .ColumnHeaders
'Titres des colonnes
.Clear
'Ajout des colonnes
.Add , , "Liste", 300, lvwColumnLeft
.Add , , "Onglet", 116, lvwColumnLeft
.Add , , "Cellule", 90, lvwColumnLeft
End With
.View = lvwReport 'affichage en mode Rapport
.Gridlines = True 'affichage d'un quadrillage
.FullRowSelect = True 'Sélection des lignes comlètes
.LabelEdit = lvwManual
.HideSelection = False
.HotTracking = False
End With
End Sub
Il y a 41 feuilles au total sur le classeur.
En vous remerciant.
Bonjour,
J'ai toujours pas solutionné le problème des nouvelles feuilles ajoutées dans le classeur que le moteur de recherche ne prend pas en compte.
Quelqu'un pour m'aider ?
Merci.
re
ctrl+F
tellement efficace et simple
amitiés
Oui j'utilisais ça au départ.
Mais on est nombreux a utiliser le fichier et ça permet d'avoir une liste des éléments recherchés.
Il fonctionne bien sauf que je n'arrive pas à inclure les nouvelles feuilles.
Je viens de faire un teste avec l'option dupliquer une feuille qui elle est prise en compte par le moteur de recherche et ça fonctionne.
Donc je pense que je vais effacer toutes les feuilles qui ne sont pas prisent en compte et les recopier en dupliquant.
Va y avoir du taf...
Merci quand même.