voici une fonction qui fait cela, et qui peut être appelée directement dans une feuille de calcul.
Function NOMPrenom$(ByVal NP$)
'Ti
Dim Tabl
If NP = "" Then Exit Function
Tabl = Split(StrConv(NP, vbProperCase))
Tabl(0) = UCase(Tabl(0))
NOMPrenom = Join(Tabl)
End Function
Noter que j'utilise ici Split qui, pour une fois (n'est ce pas @Thierry) me permet de rendre l'écriture de ma fonction plus concise.
Attention Michel, la procédure que tu indiques dans ton lien renvoie une erreur si une des chaines "NOM Prénom" ne comporte pas d'espace (faute de frappe ou autre) ou si c'est une chaîne vide, parce que tu ne testes pas si ta valeur SP est supérieure ou non à 0
D'autre part, tu utilises le mauvais type pour déclarer ta variable SP dans la procédure : tu donnes à SP un type String, alors que Instr renvoie une valeur numérique et pas une chaîne. VB s'accommode de cette imprécision, mais il vaut mieux garder le bon type.
Sub PrenomNOM()
Dim Val As Variant
Dim SP As String
For Each Val In Range("A1:A" & Range("A65536").End(xlUp).Row)
SP = InStr(1, Val, " ")
Range(Val.Address) = UCase(Left(Val, 1)) & LCase(Mid(Val, 2, SP - 1)) & UCase(Right(Val, Len(Val) - SP))
Next
End Sub