Magic_Doctor
XLDnaute Barbatruc
J'avais concocté cette fonction (m'inspirant d'autres...). Autant que ceux intéressés en profitent...
Tapez tout en minuscule. S'il y a des espaces excédentaires, pas de broblème. Plus de problèmes non plus avec les noms avec particules (de Machin) et autres McZinzin... Tout se corrige automatiquement ! Vraiment pratique si vous devez taper quantité d'identités.
Code :
Public Function FirstLetterMaj(Nom_Prénom As Range)
Dim Morceaux() As String, temp As String, EspacesDoubles As String
Dim i As Integer, np As String, s As String
np = LCase(Nom_Prénom.Value)
EspacesDoubles = Chr(32) & Chr(32)
temp = Trim(np)
Do Until InStr(temp, EspacesDoubles) = 0
temp = Replace(temp, EspacesDoubles, Chr(32))
Loop
np = temp
Morceaux = Split(np, " ")
For i = LBound(Morceaux) To UBound(Morceaux)
If Morceaux(i) = "de" Or Morceaux(i) = "del" Or Morceaux(i) = "la" Or Morceaux(i) = "las" Or Morceaux(i) = "los" Or Morceaux(i) = "da" Or Morceaux(i) = "do" Or Morceaux(i) = "di" Or Morceaux(i) = "van" Or Morceaux(i) = "von" Or Morceaux(i) = "der" Then
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
Tapez tout en minuscule. S'il y a des espaces excédentaires, pas de broblème. Plus de problèmes non plus avec les noms avec particules (de Machin) et autres McZinzin... Tout se corrige automatiquement ! Vraiment pratique si vous devez taper quantité d'identités.
Code :
Public Function FirstLetterMaj(Nom_Prénom As Range)
Dim Morceaux() As String, temp As String, EspacesDoubles As String
Dim i As Integer, np As String, s As String
np = LCase(Nom_Prénom.Value)
EspacesDoubles = Chr(32) & Chr(32)
temp = Trim(np)
Do Until InStr(temp, EspacesDoubles) = 0
temp = Replace(temp, EspacesDoubles, Chr(32))
Loop
np = temp
Morceaux = Split(np, " ")
For i = LBound(Morceaux) To UBound(Morceaux)
If Morceaux(i) = "de" Or Morceaux(i) = "del" Or Morceaux(i) = "la" Or Morceaux(i) = "las" Or Morceaux(i) = "los" Or Morceaux(i) = "da" Or Morceaux(i) = "do" Or Morceaux(i) = "di" Or Morceaux(i) = "van" Or Morceaux(i) = "von" Or Morceaux(i) = "der" Then
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