XL 2013 Créer un moteur de recherche sur un fichier

Edmond_Dantes

XLDnaute Nouveau
Bonjour à tous,

Je sais que le sujet est souvent évoqué et j'ai passé une bonne dizaines d'heures de recherche sur la toile mais toujours sans succès.

Contexte:
Je travaille dans la ressource humaine dans l'armée.
On utilise beaucoup de tableaux Excel dans tous les sens et sans aucune connaissances je me suis lancé dans la création d'un Dashboard pour simplifier mon travail et celui de mes collègues.
Je suis assez satisfait du résultat mais je bute sur un problème majeur:

Dans le fichier en pj (Exemple EPH) je souhaiterai pouvoir créer, dans un autre onglet, un formulaire de recherche.
Le but est de pouvoir faire une recherche sur la colonne QUALIF (AQ), mais idéalement le top serait qu'on taperai une suite de caractères, par exemple le nom d'un marin, et sa ligne apparaitrait (en simplifié on ne mettrait pas toutes les colonnes dans les résultats de la recherche.
Idem si je tape en recherche par exemple: RECOM (colonne AK: spécialité), le résultat m'afficherai tous les marins de cette spécialité. Etc.
Je ne sais pas si mon explication est assez claire mais n'hésitez pas à me demander des précisions, je reste disponible pour les bonnes âmes qui voudraient bien m'aider.

Nota:
- Pour des raisons évidentes j'ai dû rendre les informations anonymes
- Le tableau en PJ est un fichier à part normalement. Mon Dashboard est dans un fichier séparé avec des TCD pointant vers le fichier EPH (qui est hébergé sur le réseau informatique de la marine)
- Je souhaiterai pouvoir intégrer le champ de recherche sur le Dashboard à terme (je devrais pouvoir me dépatouiller tout seul pour l'intégration une fois que le moteur de recherche est fonctionnel)

En vous remerciant d'avance pour votre aide !
 

Pièces jointes

  • Exemple EPH.xlsx
    13.2 KB · Affichages: 22
Solution
Bonjour,

Voici une version commentée (requêtes, étapes).
La validation des données sur le champ "Valeur" du tableau de critères n'est pas restrictive, elle n'est là que pour permettre la saisie d'une valeur de la liste, mais n'empêche pas de mettre ce qu'on veut.

Sur l'image ci-dessous, le triangle vous signale que "C" n'est pas dans la liste de validation, mais cela n'a aucune incidence sur la recherche.
1682865932838.png

Usine à gaz

XLDnaute Barbatruc
Bjr à tous,

Suite à sa demande, j'ai donné à Edmond_Dantes un fichier qui fonctionne chez moi et pas chez lui.

Voici le code :
VB:
Sub Recherche()
Sheets("Feuil1").Select
        nom = Application.InputBox("Saisir texte/chiffre(s) à trouver :", "Rechercher")
            If VarType(nom) = vbBoolean Then 'Touche Annuler
                nom = CStr(nom)
                [A1].Select
                Exit Sub
            End If

        If nom = "" Then
            Application.EnableEvents = False
            MsgBox ("Faudrait p'être saisir le(s) texte/chiffre(s) à trouver !")
            [A1].Select
            Application.EnableEvents = True
            Exit Sub
        End If
       
    Application.EnableEvents = False
    q = ActiveSheet.Index
 
    For q = q To ActiveSheet.Index + Sheets.Count - 1
    K = (q - 1) Mod (Sheets.Count) + 1
        With Intersect(Sheets(K).UsedRange, Sheets(K).Rows("2:" & Rows.Count)) '1ère ligne de recherche
        'With Sheets(K).UsedRange
        On Error Resume Next
            Application.ScreenUpdating = False
            Set C = .Find(nom, LookAt:=xlPart)   'LookAt:=xlpart dans cellule - LookAt:=xlWhole) 'cellule entière
       
            If Not C Is Nothing Then
                firstAddress = C.Address
                Do
                On Error Resume Next
 
                Sheets(K).Select
                C.Activate
                'ActiveCell.Activate
                Application.ScreenUpdating = True
                ActiveWindow.ScrollRow = Selection.Row
               
                Sheets("REcherche").Select
                [a9].Select '1ère ligne à effacer
                ActiveCell.Offset(0, 0).Resize(100, 100).Delete
               
                Sheets(K).Select
                Rows(ActiveCell.Row).Select
                Selection.Copy
                Sheets("REcherche").Select
                ActiveSheet.Cells(Rows.Count, "a").End(xlUp)(2).Select
                ActiveSheet.Paste
                Sheets(K).Select
                Application.CutCopyMode = False
                ActiveCell.Select
                   
            Rep = MsgBox("A trouver : " & nom & Chr(10) & Chr(10) & "- OK dans  " & ActiveSheet.Name & Chr(10) _
            & "- Colonne " & Split(C.Address, "$")(1) & Chr(10) & "- ligne       " & C.Row & Chr(10) & Chr(10) _
            & "Continuer la recherche ?", 4 + 32, "Résultat")
           
'            MsgBox ("A trouver : " & nom & Chr(10) & Chr(10) & "- OK dans  " & ActiveSheet.Name & Chr(10) _
'            & "- Colonne " & Split(C.Address, "$")(1) & Chr(10) & "- ligne       " & C.Row & Chr(10) & Chr(10))
            Cells(ActiveCell.Row, 1).Select
                   
                If Rep = vbNo Then
                    Application.EnableEvents = True
                    Exit Sub
                End If
   
        Application.ScreenUpdating = True
        Set C = .FindNext(C)
            Loop While Not C Is Nothing And C.Address <> firstAddress
        End If
        End With
    Next q
 
            MsgBox "Ben NON : y'a pas ou y'a plus !"
                Application.EnableEvents = False
                [A1].Select
                Application.EnableEvents = True
End Sub
Son ordi est un MAC et peut-être que le code n'est pas compatible.
Sauriez-vous le modifier ?
Je joins le fichier...
Un grand merci à tous
:)
 

Pièces jointes

  • 2023 04 16 recherche.xlsm
    32.3 KB · Affichages: 2

Edmond_Dantes

XLDnaute Nouveau
ça fonctionne cette fois =). Merci !
Vu le nombre de recherche qu'on va faire je pense que c'est quand même mieux si on supprime les résultats précédents lors d'une nouvelle recherche.
Et manque plus qu'à faire que la recherche ne demande pas confirmation à chaque étape ^^

Encore une fois merci pour ton temps, c'est vraiment sympa !
 

Usine à gaz

XLDnaute Barbatruc
Bsr :)
Tant mieux si déjà ça fonctionne sur ton mac.
"Vu le nombre de recherche qu'on va faire je pense que c'est quand même mieux si on supprime les résultats précédents lors d'une nouvelle recherche."
Dans ce fichier qui fonctionne, j'ai pensé que ce serait bien de garder les recherche la journée. le lendemain, dès la 1ère recherche, il supprime les recherches de la veille.
Qu'en penses-tu ?

"Et manque plus qu'à faire que la recherche ne demande pas confirmation à chaque étape"
C'est plus compliqué, j'ai tenté de le faire et c'est peut-être pour ça que ça ne fonctionnait plus.
Mais ce n'est qu'un clic lol.
Je tenterai quand même de voir quand j'aurait du temps, certainement ce WE
:)
 

Edmond_Dantes

XLDnaute Nouveau
Je vois ce que tu veux dire pour garder les résultats de la journée mais ce n'est pas ce qu'on recherche. C'est pour du consultatif surtout donc il faut mieux que ça se vide à chaque recherche.

Oui ce n'est qu'un clic, mais sur plus de 1000 lignes dans le tableau original on risque d'avoir à cliquer un gros paquet de fois avant de voir le résultats 😅


Je tente ma chance pour une autre question des fois que tu aies la réponse à portée de main:
J'ai fait une macro qui m'affiche le résultat d'un double clic sur une ligne de TCD, tu sais la nouvelle feuille qui s'ouvre avec les détails de la ligne du TCD.
La macro fonctionne nickel:

VB:
Sub test_recheche()
'
' test_recheche Macro
'
    Sheets("Analysis2").Select
    Range("B5").Select
    Selection.ShowDetail = True
End Sub

Tu connaitrais un bout de code à ajouter pour qu'au lieu que le résultat s'ouvre dans une autre feuille, il s'ouvre dans un pop up ?
Si tu n'as pas la solution ce n'est pas grave j'ouvrirai un nouveau topic.

En te remerciant encore !
 

Usine à gaz

XLDnaute Barbatruc
Bsr :)
Voici un nouveau fichier (ça se vide à chaque recherche).

"Tu connaitrais un bout de code à ajouter pour qu'au lieu que le résultat s'ouvre dans une autre feuille, il s'ouvre dans un pop up ?"
+
Je vais voir tout ça dès que j'ai un moment.
:)
 

Pièces jointes

  • 2023 04 16 recherche2.xlsm
    33.9 KB · Affichages: 3

Usine à gaz

XLDnaute Barbatruc
Bjr Edmond_Dantes :), le Forum :)

Je suis désolé que ça ne fonctionne pas chez toi.
Voici comment ça fonctionne chez moi SUR PC, voir les animations.
Avant d'aller plus loi, dis-moi quelle version te conviendrait :
Recherche ou filtre ?
C'est selon l'utilisation que tu veux en faire.
A partir de là, nous pourrons demander à nos ténors de nous aider pour modifier le code afin qu'il fonctionne sur ton Mac.
Bonne journée
:)
 

Pièces jointes

  • Recherche.gif
    Recherche.gif
    318.7 KB · Affichages: 19
  • filtre.gif
    filtre.gif
    247.7 KB · Affichages: 18
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour,
Une alternative, utilisant Power Query (en natif depuis Excel 2016) - établie en partenariat avec un ami (merci à lui pour le code de recherche et de restitution des critères)
La plage de la base de données a été transformée en Tableau Structuré.
Dans l'onglet "Travail", j'ai pour le moment extrait les différentes années de DFA, les différentes Qualifs, les spés (de la personne, et non spés nominales) et les noms (ainsi que les colonnes sur lesquelles seront effectuées les recherches)
Ces données seront bien sûr adaptables à tes besoins.
Dans l'onglet "Extract", tu as un tableau de recherche en haut (pour le moment limité à 2 critères), tu sélectionnes la colonne de recherche en D, le genre de recherche en E, la valeur en F et le critère "et/ou" en G.
Tu cliques sur le bouton "Cherche", et tu obtiens l'extraction de tes filtres.
J'ai sélectionné quelques colonnes "intéressantes" à obtenir dans cette extraction, mais on peut bien évidemment modifié cette sélection (ajout, suppression...)
Le bouton "Raz" sert à ...(devine...)
Tu me dis si c'est la bonne voie, auquel cas, quelles adaptations tu voudrais.
Bonne apm, et bon W-E
 

Pièces jointes

  • PQ_Recherche_EPH_V0.xlsm
    52.8 KB · Affichages: 6

Membres actuellement en ligne

Statistiques des forums

Discussions
313 309
Messages
2 097 033
Membres
106 812
dernier inscrit
Excellou74