Réer dans excel, un nouveau menu recherche
Bonjour à tous,
Je cherche à créer dans excel, un nouveau menu "recherche" qui apparaîtrait à côté du menu développeur ou complément tout en haut.
Ce menu doit me permettre de cliquer dans une case et de rechercher un mot clé dans tout mon classeur.
Je sais que la fonction "recherche et sélectionner " existe dans le menu accueil (ou ctrl F), mais il faut faire 2 manip pour chercher dans tout le classeur cliquer sur option etc.
Je trouve ça plus efficace de cliquer directement dans le menu le mot clé qui m'affiche directement dans quelle feuille de mon classeur se trouve ce mot.
Je sais que cela est possible car ça a été fait dans le cod-it mais je ne sais pas comment m'y prendre.
Merci par avance pour vos conseils.
bonne journée
Bonjour,
A mettre dans le module du classeur (ThisWorkbook) pour la création de la barre et du bouton à l'ouverture du classeur et de la destruction de cette dernière à la fermeture :
Private Sub Workbook_Open()
Dim Barre As CommandBar
Dim Btn As CommandBarButton
Set Barre = Application.CommandBars.Add
Barre.Name = "MaBarre"
Barre.Visible = True
Set Btn = Barre.Controls.Add(msoControlButton)
Btn.OnAction = "Rechercher"
Btn.FaceId = 46
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("MaBarre").Delete
End Sub
A mettre dans un module standard. Procédure appelée pour la recherche du mot de la cellule sélectionnée dans la feuille active dans toutes les feuilles du classeur :
Sub Rechercher()
Dim Fe As Worksheet
Dim Cel As Range
Dim Tbl() As String
Dim I As Integer
Dim Adr As String
Dim Valeur
Dim Origine As String
Dim Texte As String
'récup de la valeur à chercher
Valeur = ActiveCell.Value
'mémorise la cellule où se trouve la valeur afin de ne pas la mettre dans le tableau
Origine = ActiveCell.Address
'boucle sur toutes les feuilles
For Each Fe In Worksheets
'effectue la recherche
Set Cel = Fe.Cells.Find(Valeur, , xlValues, xlWhole)
'si trouvée
If Not Cel Is Nothing Then
'mémorise l'adresse
Adr = Cel.Address
Do
'évite la cellule d'origine
If Cel.Address <> Origine Then
'stocke le nom de la feuille et l'adresse de la cellule dans le tableau
I = I + 1: ReDim Preserve Tbl(1 To 2, 1 To I)
Tbl(1, I) = Fe.Name
Tbl(2, I) = Cel.Address(0, 0)
End If
Set Cel = Fe.Cells.FindNext(Cel)
Loop While Cel.Address <> Adr
End If
Next Fe
If Not Not Tbl Then
'construit le message...
For I = 1 To UBound(Tbl, 2)
Texte = Texte & Tbl(1, I) & "--" & Tbl(2, I) & vbCrLf
Next I
'et l'affiche
MsgBox Texte: Exit Sub
End If
MsgBox "La valeur n'a pas été trouvée dans le classeur !"
End Sub
Bonjour Theze,
Merci beaucoup pour ton retour, toutefois cela ne semble pas fonctionner dans mon fichier.
J'ai inséré le premier code dans le module "thisworkbook" et le second code dans un module standard "module 13 comme tu l'as bien indiqué.
Lorsque je clique sur exécuter : il y a écrit erreur d'exécution 13 : incompatibilité de type :/
apparemment il y aurait un souci dans le module standard avec la formule :
'effectue la recherche
Set Cel = Fe.Cells.Find(Valeur, , xlValues, xlWhole)
Bonjour,
Je te poste un classeur exemple avec une base de données fictive sur trois feuille avec le mot "Test" disséminé dans ces trois feuilles. Pour le test, la recherche est faite depuis la feuille "Mot recherché" en sélectionnant la cellule contenant le mot "Test", une fois la recherche terminée, un message affiche le nom de la feuille avec l'adresse de la cellule où se trouve le mot.
Attention, à l'ouverture du classeur une barre d'outils avec un bouton est créé dans l'onglet "Complément" donc, ne soit pas surpris, cette barre est supprimée à la fermeture du classeur :
Bonjour Theze,
Encore merci pour ton retour. Mais malheureusement quand j'ouvre ton tableau il ne se passe rien je clique sur la cellule mais c'est comme si il n'y avait pas de macro.:/ Je suis sur une version 2010.
Je me permets de te donner le lien internet du tableau modèle (trop lourd en PJ) dont je parlais, afin de clarifier ma demande. C'est toujours mieux avec une illustration :
Dans le tableau, le créateur a rajouter un menu recherche dans Excel tout en haut à côté du menu "complément " ce menu s'appelle " cod-IT" et à l'intérieur de ce super menu il y a une case avec "mot ou expression" c'est exactement ce que je recherche à faire.
Sauf que a la place de cod-it mon menu s'appellerait "Recherche" et je souhaite seulement la case avec "mot ou expression" à l'intérieur qui permet de rechercher dans toutes les feuilles du classeur.
Je n'ai pas besoin de la case article, mode d'emploi etc....
Merci de ton aide et bonne journée
Bonjour,
Ta demande :
Je cherche à créer dans excel, un nouveau menu "recherche" qui apparaîtrait à côté du menu développeur ou complément tout en haut
Ce menu doit me permettre de cliquer dans une case et de rechercher un mot clé dans tout mon classeur.
Quand tu ouvres mon classeur, tu as un onglet "Complément" et dans cet onglet, il y a une barre d'outils ("Barre d'outils personnalisée") avec un bouton qui possède une icône "Jumelle", une fois que la cellule est sélectionnée, il te faut cliquer sur le bouton avec les jumelles, ce n'est pas la sélection de la cellule qui déclenche la macro mais le clic sur le bouton !
Bonjour Theze,
Merci pour ton éclairage j'ai fait le test et ça fonctionne.
Toutefois , je trouve que cette technique n'est pas suffisamment intuitive et amène à faire 2 manip :
"Cliquer sur la cellule" puis "cliquer sur complément"
et il y a un onglet supplémentaire "mot recherché"
Ce que j'imaginais :
C'est un menu intitulé "recherche" à côté du menu complément ou peu importe à côté de révision, mais ça doit être un menu et d dans ce menu il doit y avoir une case intitulé "mot clé ou expression" . Dans cette case on inscrit un mot puis ça recherche ce mot ou expression dans toutes les feuilles du classeur automatiquement, et ça affiche une fenêtre où on voit a quel endroit est contenu notre mot clé, puis on a juste à cliquer dans le fenêtre et ça nous amène à la bonne feuille du classeur où se trouve notre mot clé.
J’espère être un peu plus claire. Je sais pas si tu as pu regarder le lien que je t'ai passé car çà correspond à ce que je souhaite faire.
Merci à toi,
Belle journée
bonjour
salut Theze au passage
Microsoft y a pensé : ctl+F, choisir "dans tout le classeur", valider
amitiés
Bonjour Jmd,
Merci pour ce retour.
Je connais la fonction recherche de excel ctrl F mais je ne la trouve pas assez rapide.
Il faut faire 3 manip :
ctr F + mettre le mot recherché + cliquer recherche par feuille cellule.
Or ce que je souhaite arriver à réaliser serait plus rapide, comme dans le fichier sur le lien ci-dessous :
(ils ont ajouté un menu "codit")
en allant sur un menu recherche tu écris ton mot et il te cherche direct dans tout le classeur. Donc en 2 clic c'est fait et en plus le menu recherche est bien identifié.
Bonne journée
re
le CODIT est un fichier figé, donc les macros sont stables
il est rédigé par un staff nombreux et qui dispose de temps pour "peaufiner"
tu te compliques la vie pour gratter un ou 2 clics
tu ne disposes pas d'une équipe entière pour ça
à toi de voir
pour ma part, le choix est vite fait
note que je n'aurais pas fait le CODIT sous Excel, c'est une idée étrange !
soutenue par Microsoft ?
amitiés excelliennes
Je répond exactement à ta demande !
maintenant, si tu veux pas de clic sur des menus et boutons, tu sélectionnes ta cellule et une combinaison de touche comme Ctrl+f (f en minuscule) et la macro est exécutée sinon, encore plus court, tu utilises une procédure événementielle "SelectionChange()", quand tu sélectionnes la cellule C6, la macro est exécutée. Voici le classeur avec ces modifs :
Oui, et merci pour ton retour.
Mais je pense que ma demande est mal formulée ou trop compliquée à réaliser.
J'ai réussi à rajouter le menu recherche que je voulais mais je souhaiterais intégrer la recherche par mot clé dans l'onglet recherche et pas dans complément.
enfait la fameuse cellule que tu as mis dans la feuille excel pour rechercher par mot clé je souhaite l'intégrer dans mon menu recherche.
Tu trouveras ci-joint un imprim pdf avec le menu recherche :
avec ce que je souhaite réaliser la case "mot ou expression" directement dans le menu tout en haut.
mais dis moi si c'est trop compliqué.
Bonjour,
Si tu veux le même fonctionnement que le classeur que tu cites en exemple, il te suffit de l'éplucher pour en comprendre le fonctionnement et récupérer ce qui t'intéresse.
Comme je n'ai pas spécialement le temps de ma lancer dans la conception et gestion d'une barre d'outils dans le ruban, je te donne juste le code pour avoir une zone de texte dans l'onglet "Complément" où la recherche sera faite avec appui sur le bouton ou la touche Entrée une fois le texte recherché saisi.
La barre d'outils avec la création de la zone de texte :
Private Sub Workbook_Open()
Dim Barre As CommandBar
Dim Btn As CommandBarButton
Dim Txt As CommandBarControl
Set Barre = Application.CommandBars.Add
Barre.Name = "MaBarre"
Barre.Visible = True
Set Btn = Barre.Controls.Add(msoControlButton)
Btn.OnAction = "Rechercher"
Btn.FaceId = 46
Set Txt = Barre.Controls.Add(msoControlEdit)
Txt.Caption = "Rechercher :"
Txt.Tag = "ZoneRecherche"
Txt.OnAction = "Rechercher"
Txt.Style = msoComboLabel
End Sub
La procédure de recherche modifiée. Pour une recherche exacte utiliser "xlWhole" (c'est le cas ici) sinon, remplacer par "xlPart" :
Sub Rechercher()
Dim Fe As Worksheet
Dim Cel As Range
Dim Tbl() As String
Dim I As Integer
Dim Adr As String
Dim Valeur
Dim Texte As String
'récup de la valeur à chercher
Valeur = CommandBars("MaBarre").FindControl(, , "ZoneRecherche").Text
If Valeur = "" Then Exit Sub
'boucle sur toutes les feuilles
For Each Fe In Worksheets
'effectue la recherche
Set Cel = Fe.Cells.Find(Valeur, , xlValues, xlWhole)
'si trouvée
If Not Cel Is Nothing Then
'mémorise l'adresse
Adr = Cel.Address
Do
'stocke le nom de la feuille et l'adresse de la cellule dans le tableau
I = I + 1: ReDim Preserve Tbl(1 To 2, 1 To I)
Tbl(1, I) = Fe.Name
Tbl(2, I) = Cel.Address(0, 0)
Set Cel = Fe.Cells.FindNext(Cel)
Loop While Cel.Address <> Adr
End If
Next Fe
If Not Not Tbl Then
'construit le message...
For I = 1 To UBound(Tbl, 2)
Texte = Texte & Tbl(1, I) & "--" & Tbl(2, I) & vbCrLf
Next I
'et l'affiche
MsgBox Texte: Exit Sub
End If
MsgBox "La valeur n'a pas été trouvée dans le classeur !"
End Sub
Bonjour Theze,
J'ai essayé d'éplucher mais c'est vraiment compliqué il fait appel à des champs très techniques.
Du coup je vais rester sur le tableau que tu m'as envoyé avec la recherche clic cellule
J'ai tenté de chercher wheels qui est en feuille 1 D19 et dans ta cellule il ne le trouve pas... Pourrais-tu m'aider à comprendre ?
Je te remercie par avance
Bonjour,
Il faut savoir si tu veux faire une recherche exacte ou partielle !
Remplaces "xlWhole" par "xlPart" dans cette ligne de code et tu auras une recherche partielle dans les feuilles :
Set Cel = Fe.Cells.Find(Valeur, , xlValues, xlPart) 'xlWhole <--- remplacement ici !
Merci Theze,
Ca fonctionne un peu mieux mais, il y a certains mots qu'il ne trouve pas alors qu'ils sont bien dans mon classeur...
Lors d'une recherche j'ai eu une erreur d'exécution 91 "variable objet ou variable bloc With non définie"
Ca te parle ?
En te souhaitant une bonne soirée
Bonjour,
Lors d'une recherche j'ai eu une erreur d'exécution 91 "variable objet ou variable bloc With non définie"
ajoutes "Application." devant la ligne de code comme ci-dessous, j'ai eu cette erreur mais je ne comprend pas vraiment pourquoi !
Valeur = Application.CommandBars("MaBarre").FindControl(, , "ZoneRecherche").Text
Ca fonctionne un peu mieux mais, il y a certains mots qu'il ne trouve pas alors qu'ils sont bien dans mon classeur...
Je viens de faire plusieurs tests en cherchant des parties de texte à l'intérieur même de mots et ça fonctionne très bien, si le compilateur trouve certains mots, il se peut que les mots non trouvés soient orthographiés légèrement différemment comme par exemple, absence d'accent ou le contraire !