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 :

https://travail-emploi.gouv.fr/ministere/documentation-et-publications-officielles/codit/article/codit

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 :

https://travail-emploi.gouv.fr/ministere/documentation-et-publications-officielles/codit/article/codit

(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 c'est très bien. Par contre je l'ai testé, mais il ne fonctionne pas pour toutes les recherches mots clé.

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 !

Rechercher des sujets similaires à "reer nouveau menu recherche"