Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim li As Integer 'déclare la variable li (LIgne)
dl = Range("A65536").End(xlUp).Row 'définit la variable dl
Set pl = Range("A2:A" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
'si la cellule commnence par "S" (ou "s") écrit 0 en colonne B, sinon, écrit 1 en colonne B
cel.Offset(0, 1).Value = IIf(UCase(Left(cel.Value, 1)) = "S", 0, 1)
Next cel 'prochaine cellule cel de la boucle
Set pl = pl.Resize(, pl.Columns.Count + 1) 'redéfinit la plage pl (ajoute la colonne B)
'tri de la plage pl en fonction de la colonne B
pl.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
li = Columns(2).Find(1, Range("B1"), xlValues, xlWhole).Row 'définit le numéro de la ligne du premier 1 trouvé
'tri les cellules commençant par "S"
Range("A2:A" & li - 1).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'tri les autres cellules
Range("A" & li & ":A" & dl).Sort Key1:=Range("A" & dl), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns(2).Clear 'efface la colonne B
End Sub