Bonjour tout le monde.
Voici une fonction personnalisée se rapprochant du résultat souhaité :
'Fonction du site http://boisgontierjacques.free.fr/pages_site/fonctionsperso.htm
'Supprime les accents et les cédilles.
Function sansAccent(chaine)
codeA = "ÂÄÀÉÈÊËÏÎÔÙéèêëàçùôûïî"
codeB = "AAAEEEEIIOUeeeeacuouii"
temp = chaine
For i = 1 To Len(temp)
p = InStr(codeA, Mid(temp, i, 1))
If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
Next
sansAccent = temp
End Function
'***' Fonction personnalisée réalisée par thebenoit59, pour le forum Excel-Pratique.
'***' https://forum.excel-pratique.com/viewtopic.php?f=2&t=102857&e=1&view=unread#unread
'***' texte = valeur de la recherche.
'***' zone = zone de la recherche, peut contenir plusieurs colonne
'***' res = n° du résultat, si nous souhaitons obtenir la 1ère, 2nd valeur d'une liste par exemple.
Function recherche_texte(texte$, zone As Range, res As Byte) As String
Dim tZone(), temp, t$, t2$, i%, j As Byte, n As Byte, ok As Byte, nRes As Byte
'Nous passons le texte de recherche en majuscule et sans accents.
t = UCase(Replace(sansAccent(texte), "-", " "))
'Enregistrement de la zone dans un tableau virtuel.
tZone = zone
'Décompose le texte de recherche.
temp = Split(t, " ")
'Nous allons boucler les différentes parties du mot et chercher si elles sont présentes dans chacune des lignes.
For j = LBound(tZone, 2) To UBound(tZone, 2)
For i = LBound(tZone) To UBound(tZone)
t2 = UCase(Replace(sansAccent(tZone(i, j)), "-", " "))
ok = 0
For n = LBound(temp) To UBound(temp)
If Not t2 Like "*" & temp(n) & "*" Then Exit For
ok = ok + 1
If ok = UBound(temp) + 1 Then nRes = nRes + 1
If nRes = res Then recherche_texte = tZone(i, j): Exit Function
Next n
Next i, j
End Function
Il existe certaines recherches infructueuses, pour Saint Denis par exemple, dans la liste de recherche Saint est remplacé par St.