Microsoft 365 Fonction de Recherche de différents tableaux avec plusieurs résultats ?

donatello2

XLDnaute Nouveau
Bonjour,

Le titre est peu explicite et je m'en excuse mais voici ma problématique :

Je souhaiterais utiliser un tableau Excel faisant office d'outil de recherche qui lorsque l'on enterrerait un nom de famille, aille chercher par exemple les prénoms correspondant au nom de famille entré et cela dans 3 tableaux différents.

De plus, il faudrait que le résultat de ma recherche donne chacune des occurrences par exemple :

J'entre le nom "Dupont" dans la cellule dédié de mon tableau qui sert à la recherche et celui-ci me donne tout les prénoms des différents dupont de mes tableaux de donnée.

J'ai déjà tenté de faire fonctionner cela via des formules de Recherche (RechercheX) et en les rendant matricielle mais rien n'y fait je n'arrive pas à obtenir mes différents résultats escomptés.

Je vous remercie d'avance pour votre aide précieuse !

Cela peut être sous forme de formule ou VBA si cela est plus pratique à votre sens.
 

donatello2

XLDnaute Nouveau
Bonjour Sylvanu,

Je viens de rapidement de créer un exemple de ce que je recherche.

Dans la première feuille, on retrouve la case dans lequel je souhaiterais que l'on rentre le nom d'un client dont on souhaite faire la recherche, et les champs à côtés ou les données des différentes bases apparaitraient.

A savoir que ma problématique réside que j'ai des homonymes et que je souhaite obtenir tout les résultats pour le même nom.

Disclaimer, dans un soucis de confidentialité, les données utilisées sont générées aléatoirement.

Merci d'avance !
 

Pièces jointes

  • Classeur1.xlsm
    37.5 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [D6]) Is Nothing Then
         Bases = Array("Base de données client 1", "Base de données client 2", "Base de données client 3")
         Range("G6:G14,I6:I14,L6:L14").ClearContents
         If Target = "" Then Exit Sub Else Nom = Target
         Application.ScreenUpdating = False
         N = 0 ' Nombre de noms trouvés
         For B = 0 To 2
            T = Sheets(Bases(B)).[A1].CurrentRegion
            For L = 2 To UBound(T)
                If T(L, 1) = Nom Then
                    N = N + 1: Ligne = 2 * N + 4
                    Cells(Ligne, "G") = T(L, 2)
                    Cells(Ligne, "I") = T(L, 3)
                    Cells(Ligne, "L") = T(L, 4)
                End If
            Next L
         Next B
    End If
Fin:
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    46.7 KB · Affichages: 9

donatello2

XLDnaute Nouveau
Bonjour CousinHub,
Effectivement c’est bien cela.
Les 3 bases sont dans 3 fichiers Excel distincts se nommant : Toad 20-21, Toad 22-23 et Toad 24-25 dans des feuilles « sheet 1 ».
Les bases seraient toutes dans le même répertoire que le tableau.
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Un essai avec Power Query (nativement installé dans ta version d'Excel)
Je suis donc parti du principe : 3 fichiers commençant par Toad (tu pourras en rajouter, pas de soucis), dont l'onglet contenant la base de données se nomme "sheet 1" (attention à la casse), et dont les titres sont identiques.
Dans le fichier joint, dans l'onglet "Paramètre", tu entres le chemin entier du répertoire contenant ces fichiers.
Puis, dans l'onglet "Recherche client", dans la cellule D6, tu entres le nom du client.
Un clic sur le bouton "Actualiser tout" du ruban "Données" te donnera la liste des clients ayant le même patronyme. (la 1ère recherche peut prendre 2 à 3 secondes, le temps d'établir les connexions avec les fichiers de données, ensuite c'est quasi-immédiat)
Si ça te convient.
 

Pièces jointes

  • PQ_RecupNom.xlsx
    21 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous les deux,
Un essai en PJ en VBA avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [D6]) Is Nothing Then
         Bases = Array("Toad 20-21", "Toad 22-23", "Toad 24-25")
         Range("G6:G14,I6:I14,L6:L14").ClearContents
         If Target = "" Then Exit Sub Else Nom = LCase(Target)
         Application.ScreenUpdating = False
         N = 0 ' Nombre de noms trouvés
         Chemin = ThisWorkbook.Path & "\"
         For B = 0 To 2
            Fichier = Chemin & Bases(B) & ".xlsx"
            If Dir(Fichier) = "" Then MsgBox "Le fichier " & Bases(B) & " n'existe pas.": Exit Sub
            Workbooks.Open Fichier
            T = Sheets(1).[A1].CurrentRegion
            ActiveWorkbook.Close
            For L = 2 To UBound(T)
                If LCase(T(L, 1)) = Nom Then
                    N = N + 1: Ligne = 2 * N + 4
                    Cells(Ligne, "G") = T(L, 2)
                    Cells(Ligne, "I") = T(L, 3)
                    Cells(Ligne, "L") = T(L, 4)
                End If
            Next L
         Next B
    End If
Fin:
End Sub
Cela suppose que les trois bases sont des fichiers xlsx et rangés dans le même répertoire que ce fichier.
 

Pièces jointes

  • Classeur1 (2).xlsm
    19.9 KB · Affichages: 4

donatello2

XLDnaute Nouveau
Bonjour Sylvanu,

Je te remercie de ta réponse !

J'ai essayé ton code VBA avec mes trois bases dans le même répertoire, cela n'affiche plus les résultats dans le tableau mais ouvre à la place le tableau ou le premier résultat concordant est trouvé.

Est-ce normal ? Qu'en penses-tu ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous les deux,,
Cela m'étonnes. Je ne vois que le format des fichiers analysés qui pourraient poser problème, et le "On error goto" arrêterait la macro.
En PJ 4 fichier.
Poser les sur le bureau et lancer Classeur1(2). Chez moi j'obtiens ça :
Test4.gif

Dans la macro j'ai supprimé ce "on error goto", peut être cela nous aiguillera.
( en particulier je vais en Feuil(1), existe t elle dans vos fichiers ? )
 

Pièces jointes

  • Toad 24-25.xlsx
    17.7 KB · Affichages: 1
  • Toad 22-23.xlsx
    14.8 KB · Affichages: 1
  • Toad 20-21.xlsx
    17.2 KB · Affichages: 1
  • Classeur1 (2).xlsm
    19.8 KB · Affichages: 1

donatello2

XLDnaute Nouveau
Impeccable, cela fonctionne effectivement à merveille dorénavant!

Simple remarque, lorsque l'un des fichiers base de donnée est ouvert en arrière plan et que nous utilisons cette macro, cela est-il normal que la base de donnée se ferme aussitôt ?

En tout cas chapeau Sylvanu, grand merci !
 

Discussions similaires

Réponses
20
Affichages
1 K

Statistiques des forums

Discussions
312 243
Messages
2 086 539
Membres
103 244
dernier inscrit
lavitzdecreu