' Module regroupant différent outils
Option Explicit
Sub FirstMaj()
Dim Str1 As String, Str2 As String, TempStr As String
Dim i As Integer, LongStr As Integer
Dim iCar As Integer, icarLeft1 As Integer, icarLeft2 As Integer
Dim Plage As Range, Cellule As Range
' Active la gestion des erreurs
''' 'On Error GoTo Erreur il ne devrait pas y avoir d'erreur à gérer
' Affiche une fenêtre pour choisir la plage ou la cellule
Set Plage = Application.InputBox("Sélectionner une plage de cellules ou une cellule", "Sélection", Type:=8)
For Each Cellule In Plage
' Sélectionne la cellule en cours
'inutile>> Range(Cellule.Address).Select
Str1 = Cellule.Text
'vidage des variables
Str2 = ""
TempStr = ""
'compte la longueur
LongStr = Len(Str1)
'Si la chaîne est vide, sortie
If LongStr = 0 Then Exit Sub
'Si chaîne de longueur 1, alors saute à la fin de procédure
If LongStr = 1 Then GoTo PremierCaractere
'passe toute la chaîne en minuscule
Str1 = LCase(Str1)
' boucle à partir de la droite jusqu'au 2ème caractère
For i = LongStr To 3 Step -1
'sort le code du car actif
iCar = Asc(Mid(Str1, i, 1))
'sort le code du car à gauche du car actif
icarLeft1 = Asc(Mid(Str1, i - 1, 1))
' sort le code du 2ème car à gauche du car actif
icarLeft2 = Asc(Mid(Str1, i - 2, 1))
'Si le car actif n'est pas un des 3,alors
If Not (iCar = 10 Or iCar = 32 Or iCar = 46) Then
'Si le car à gauche est un point, alors passe le car actif en majuscule
If icarLeft1 = 46 Then
TempStr = UCase(Chr(iCar))
'si point et espace, alors majuscule
ElseIf icarLeft1 = 32 And icarLeft2 = 46 Then
TempStr = UCase(Chr(iCar))
'si retour chariot, alors majuscule
ElseIf icarLeft1 = 10 Then
TempStr = UCase(Chr(iCar))
'sinon le laisse en minuscule
Else
TempStr = Chr(iCar)
End If
Else
'sinon le laisse en minuscule
TempStr = Chr(iCar)
End If
'ajoute le car trouvé à la chaîne
Str2 = Str2 & TempStr
Next i
'gestion du caractère 2
SecondCaractere:
iCar = Asc(Mid(Str1, 2, 1))
icarLeft1 = Asc(Mid(Str1, 1, 1))
If Not (iCar = 10 Or iCar = 32 Or iCar = 46) Then
If icarLeft1 = 10 Or icarLeft1 = 46 Then
TempStr = UCase(Chr(iCar))
Else
TempStr = Chr(iCar)
End If
Else
TempStr = Chr(iCar)
End If
Str2 = Str2 & TempStr
'gestion du premier caractère
PremierCaractere:
iCar = Asc(Mid(Str1, 1, 1))
If Not (iCar = 10 Or iCar = 32 Or iCar = 46) Then
TempStr = UCase(Chr(iCar))
Else
TempStr = Chr(iCar)
End If
Str2 = Str2 & TempStr
'inversion de la chaîne trouvée
Str2 = StrReverse(Str2)
'renvoi de la valeur dans la cellule traitée, pas la cellule active
Cellule = Str2
Next Cellule ' ta première idée était la bonne!
'''Exit Sub
'''Erreur:
''' If Err.Number = 424 Then
''' 'MsgBox ("La transformation n'a pas pu se faire")
''' End If
End Sub