Function reduction(ByVal xquoi As String, xliste As Range) As String
Const lettres = "eaisnrtoludcmpégbvhfqyxjèàkwzêçôâîûùïáüëöíœ@žð"
Dim Liste, Letr, x, deb&, n&
If xliste.Count > 1 Then Liste = xliste.Value Else ReDim Liste(1 To 1, 1 To 1): Liste = xliste.Value
xquoi = "#" & xquoi & "#"
For Each x In Liste
deb = 1
Do
n = InStr(deb, xquoi, x, vbTextCompare)
If n = 0 Then Exit Do
If Not estlettre(Mid(xquoi, n - 1, 1)) And Not estlettre(Mid(xquoi, n + Len(x), 1)) Then
xquoi = Replace(xquoi, x, " ", , 1, vbTextCompare)
End If
deb = n + Len(x)
Loop
Next x
reduction = Application.Trim(Mid(xquoi, 2, Len(xquoi) - 2))
End Function
Function estlettre(x As String) As Boolean
Const lettres = "eaisnrtoludcmpégbvhfqyxjèàkwzêçôâîûùïáüëöíœ@žð"
estlettre = InStr(1, lettres, Left(x, 1), vbTextCompare) > 0
End Function