Bonjour, Salut à tous !
Une solution macro :
Sub TriH0B0()
Dim hb(), hh, i%, j%, k%, bb$
With Selection
ReDim hb(1 To .Rows.Count, 1)
For i = 1 To .Rows.Count
hb(i, 0) = .Cells(i, 1)
hh = Split(Replace(hb(i, 0), "H", ""), "B")
hb(i, 1) = CInt(hh(0)) * 1000 + CInt(hh(1))
Next i
For i = 1 To UBound(hb) - 1
For j = i + 1 To UBound(hb)
If hb(j, 1) < hb(i, 1) Then
bb = hb(j, 0): k = hb(j, 1)
hb(j, 0) = hb(i, 0): hb(j, 1) = hb(i, 1)
hb(i, 0) = bb: hb(i, 1) = k
End If
Next j
Next i
ReDim Preserve hb(1 To .Rows.Count, 0)
.Value = hb
End With
End Sub
Tu places la macro dans un module standard.
Pour trier ta plage de valeurs H0B0, tu sélectionnes la plage-colonne à trier, tu lances la macro, et elle te restitue la colonne triée.
Cela implique que toutes tes valeurs soient de même type : H suivi d'un nombre suivi de B suivi d'un nombre, que tu n'aies qu'une colonne à trier, et que tu n'aies pas des milliers de lignes...
Sur les deux derniers points, il faudrait repenser la procédure si on veut trier une plage de plusieurs colonnes sur la colonne contenant les valeurs H0B0, ou si le nombre de lignes devient important (ça cela se verrait au ralentissement de l'exécution).
Et si le premier point n'est pas garantit, il faut écrire autre chose .
Cordialement.
edit : je vois que ma proposition est déjà caduque ! Tant pis. Je crois que dans ce cas, tu devrais aligner les nombres de chiffres, comme proposé par Xmenpl et faire un tri normal.