Recherche avec correspondance nom/prenom
Bonjour à tous,
Je ne savais pas comment chercher cela dans les topics existants.
Voila mon problème,
J'ai une liste de personne avec dans la colonne J le Nom des personnes et dans la colonne I leurs prenoms.
Je cherche à faire une remonté d'informations dans un userform.
Je n'ai aucun problème à remonter les infos si aucune entrée n'est en double.
Je commence par chercher les noms puis les prenoms mais quand y a un doublons c'est la marde. Il me remonte le premier seulement.
Au final je veux juste reduire mon champs de recherche au fur et a mesure mais je galere vraiment a mettre en place une boucle.
Voila a quoi ressemble pour le moment mon code.
En gros faut que je reduise mon champs de recherche jusqu'a ce qu'il trouve la bonne correspondance nom/prenom, ou rien s'il n'y a pas de correspondance.
Set Scherche = Worksheets("Liste")
If Fiche_salarié.Nom_fam.Value = "" Then
MsgBox ("Veuillez entrer le Nom de famille du salarié")
Else
Nomsal = Fiche_salarié.Nom_fam.Value
Set cherchenom = Scherche.Range("j:j").Find(what:=Nomsal, lookat:=xlWhole)
If cherchenom Is Nothing Then
MsgBox ("Salarié inconnu")
Else
prenomsal = Fiche_salarié.Prenom_sal.Value
Set chercheprenom = Scherche.Range("i:i").Find(what:=prenomsal, lookat:=xlWhole)
If chercheprenom = "" Then
MsgBox ("Prénom du salarié obligatoire")
Else
Fiche_salarié.ListeRH.Value = Scherche.Range("B" & chercheprenom.Row).Value
Fiche_salarié.ComboBox2.Value = Scherche.Range("C" & chercheprenom.Row).Value
Fiche_salarié.ComboBox1.Value = Scherche.Range("D" & chercheprenom.Row).Value
D'avance merci pour l'aide
Bonjour,
J'ai une piste à te proposer (il peut y en avoir bien plus...). En gros, le nom de famille est demandé puis la recherche s'effectue, si il y a plusieurs salariés portant le même nom, la recherche boucle et récupère les différents prénoms et le numéro de ligne où il se trouvent, ensuite, un message demande de préciser le numéro d'index du prénom voulu dans la liste proposée avec ceci, le numéro de ligne correpondant est récupéré dans le tableau et les valeurs sont ensuite rapatriées. Dans mon code, le prénom est situé en colonne K, adapte... :
Sub Recherche()
Dim Scherche As Worksheet
Dim ChercheNom As Range
Dim Adr As String
Dim TblNoms()
Dim I As Integer
Dim J As Integer
Dim Index
Dim NomSal As String
Dim Chaine As String
Set Scherche = Worksheets("Liste")
If Fiche_salarié.Nom_fam.Value = "" Then
MsgBox ("Veuillez entrer le Nom de famille du salarié !")
Exit Sub
End If
NomSal = Fiche_salarié.Nom_fam.Text
Set ChercheNom = Scherche.Range("J:J").Find(NomSal, , xlValues, xlWhole)
If Not ChercheNom Is Nothing Then
'mémorise pour la fin de la recherche
Adr = ChercheNom.Address
Do
'stocke dans le tableau le prénom et le numéro de ligne
I = I + 1
ReDim Preserve TblNoms(1 To 2, 1 To I)
TblNoms(1, I) = ChercheNom.Offset(, 1).Value 'le prénom est sensé se trouver dans la colonne K (adapter l'offset)
TblNoms(2, I) = ChercheNom.Row
'continu la recherche
Set ChercheNom = Scherche.Range("J:J").FindNext(ChercheNom)
Loop While Adr <> ChercheNom.Address
'si plus d'un prénom...
If UBound(TblNoms, 2) > 1 Then
'boucle pour concaténer les prénoms avec retour à la ligne en leur donnant un n° d'index
For I = 1 To UBound(TblNoms, 2): Chaine = Chaine & "n° " & I & " - " & TblNoms(1, I) & vbCrLf: Next I
'demande l'index à prendre en compte...
Index = InputBox("Le nom '" & NomSal & "' correspond à plusieurs salariés :" _
& vbCrLf _
& Chaine _
& vbCrLf _
& "Indiquez l'index du prénom recherché !")
'si réponse non conforme, fin !
If Index = "" Then Exit Sub
If Not IsNumeric(Index) Then Exit Sub
'récupère le numéro de la ligne conrrespondante
J = TblNoms(2, CInt(Index))
Else
'si un seul prénom
J = TblNoms(2, 1)
End If
Else
MsgBox "Le nom du salarié '" & NomSal & "' ne se trouve pas dans la base de données !"
Exit Sub
End If
Fiche_salarié.ListeRH.Value = Scherche.Range("B" & J).Value
Fiche_salarié.ComboBox2.Value = Scherche.Range("C" & J).Value
Fiche_salarié.ComboBox1.Value = Scherche.Range("D" & J).Value
End Sub