Bonjour,
Pas compris le problème de la même façon... !
(Mais effectivement une inadéquation d'une référence avec une chaîne source (que j'ai rectifié pour ma part au niveau de la chaîne source).
Mais comme la recherche de toutes les références du tableau, tour à tour, dans la chaîne source.
Les fonctions natives d'Excel en matière de manipulations de texte étant très limitées, j'opte pour une fonction personnalisée...
Function EXTRACMULTICRIT(txt As String, crit As Range)
Dim cr, t(1 To 2), i%, j%, h%
Application.Volatile
cr = crit.Value
For i = 1 To UBound(cr) - 1
For j = i + 1 To UBound(cr)
If Len(cr(j, 1)) > Len(cr(i, 1)) Then
For h = 1 To 2
t(h) = cr(j, h): cr(j, h) = cr(i, h): cr(i, h) = t(h)
Next h
End If
Next j
Next i
For i = 1 To UBound(cr)
h = InStr(1, txt, cr(i, 1))
If h > 0 Then
EXTRACMULTICRIT = Mid(txt, h, cr(i, 2))
Exit Function
End If
Next i
EXTRACMULTICRIT = "pas de référence"
End Function
On passe en arguments à la fonction, le texte source en premier argument, le tableau d'éléments à chercher sous forme de plage en second argument.
La fonction commence par traiter le tableau pour le trier par ordre de longueurs décroissantes des éléments à chercher (1re colonne du tableau) dans le texte source.
Elle recherche ensuite chaque élément dans l'ordre, dès qu'un élément est trouvé elle renvoie le résultat (extrait à la longueur demandée en 2e colonne du tableau). Si aucun élément du tableau n'est trouvé, elle renvoie "pas de référence".
Le code de la fonction en Module1, son utilisation en colonne G de la feuille.
Cordialement.