Option Explicit
Public Function FirstLetterMaj(Nom_Prénom As Range)
Dim Morceaux() As String, np As String, s As String
Dim i As Integer, tabParticules As Variant
tabParticules = Array("de", "del", "la", "las", "los", "da", "do", "di", "van", "von", "der")
np = Application.Trim(LCase(Nom_Prénom.Value))
Morceaux = Split(np, " ")
For i = LBound(Morceaux) To UBound(Morceaux)
If Not IsError(Application.Match(Morceaux(i), tabParticules, 0)) Then
s = s & (Morceaux(i)) & " "
ElseIf Left(Morceaux(i), 2) = "d'" Then
Morceaux(i) = "d'" & UCase(Mid(Morceaux(i), 3, 1)) & Right(Morceaux(i), Len(Morceaux(i)) - 3)
s = s & (Morceaux(i)) & " "
ElseIf Left(Morceaux(i), 2) = "mc" Then
Morceaux(i) = "Mc" & UCase(Mid(Morceaux(i), 3, 1)) & Right(Morceaux(i), Len(Morceaux(i)) - 3)
s = s & (Morceaux(i)) & " "
Else
s = s & WorksheetFunction.Proper(Morceaux(i)) & " "
End If
Next
FirstLetterMaj = Trim(s)
End Function
Public Function DébutEnMajuscule(Chaîne As Range)
Dim np As String
np = Application.Trim(LCase(Chaîne.Value))
np = UCase(Left(np, 1)) & Right(np, Len(np) - 1)
DébutEnMajuscule = np
End Function