Bonjour,
Dois-je te faire remarquer que tu n'as pas fourni de fichier comportant un échantillon à trier...
Voilà une fonction personnalisée pour opérer ton tri :
Function TRIERHA(plg As Range)
Dim Tha(), ha, n%, i%, j%
n = plg.Rows.Count
ReDim Tha(1 To n, 1 To 1)
Tha = plg.Value
ReDim Preserve Tha(1 To n, 1 To 2)
For i = 1 To n
ha = Val(Replace(Tha(i, 1), "H", "")) * 1000
ha = ha + Val(Mid(Tha(i, 1), InStr(Tha(i, 1), "A") + 1, 5))
Tha(i, 2) = ha
Next i
For i = 1 To n - 1
For j = i + 1 To n
If Tha(j, 2) < Tha(i, 2) Then
ha = Array(Tha(j, 1), Tha(j, 2))
Tha(j, 1) = Tha(i, 1): Tha(j, 2) = Tha(i, 2)
Tha(i, 1) = ha(0): Tha(i, 2) = ha(1)
End If
Next j
Next i
ReDim Preserve Tha(1 To n, 1 To 1)
TRIERHA = Tha
End Function
La fonction est matricielle. Tu sélectionnes une plage colonne de même taille que la plage à trier. Tu tapes la formule, par exemple :
=TRIERHA(A1:A10)
Tu valides par Ctrl+Maj+Entrée, et la plage triée s'affiche...
La même en version macro pour trier la plage à trier sur place :
Tu sélectionnes la plage à trier, tu lances la macro, et la plage est triée !
Sub Trier_HA()
Dim Tha(), ha, n%, i%, j%
n = Selection.Rows.Count
ReDim Tha(1 To n, 1 To 1)
Tha = Selection.Value
ReDim Preserve Tha(1 To n, 1 To 2)
For i = 1 To n
ha = Val(Replace(Tha(i, 1), "H", "")) * 1000
ha = ha + Val(Mid(Tha(i, 1), InStr(Tha(i, 1), "A") + 1, 5))
Tha(i, 2) = ha
Next i
For i = 1 To n - 1
For j = i + 1 To n
If Tha(j, 2) < Tha(i, 2) Then
ha = Array(Tha(j, 1), Tha(j, 2))
Tha(j, 1) = Tha(i, 1): Tha(j, 2) = Tha(i, 2)
Tha(i, 1) = ha(0): Tha(i, 2) = ha(1)
End If
Next j
Next i
ReDim Preserve Tha(1 To n, 1 To 1)
Selection.Value = Tha
End Sub
Cordialement.