[VB] Trier Vart2 et Var 10 en ordre logique

Quand vous faites un tri sur une feuille ou par VBA sur des variables contenant du texte et se terminant par un nombre le tri n'est pas logique, Excel considère, par exemple Code3 est plus grand que Code22 ?

Exemple avec l'image ci-dessous

1

La colonne B étant la colonne à trier.

La colonne D triée avec Excel ou VBA ou WorkSheetFunction.

La colonne F triée avec la fonction Cmp().

Public Function Cmp(a, b) As Boolean
Dim i As Integer, e As Integer
   If Len(a) = Len(b) Then
        If a > b Then Cmp = True
        Exit Function
    End If
    i = Len(a): e = Len(b)
    Do While IsNumeric(Mid(a, i)) And Mid(a, i) <> " ": i = i - 1: Loop
    Do While IsNumeric(Mid(b, e)) And Mid(b, i) <> " ": e = e - 1: Loop
    If Left(a, i) > Left(b, e) Then Cmp = True: Exit Function
    If Left(a, i) < Left(b, e) Then Exit Function
    If Len(a) - i > Len(b) - e Then Cmp = True: Exit Function
    If Len(b) - i > Len(a) - e Then Exit Function
    If Mid(a, i) > Mid(b, e) Then Cmp = True
End Function

Cette fonction n'est intéressante que dans les conditions décrites ci-dessus, elle est bien évidemment un peu plus lente que la fonction de comparaison directe.

Exemple d'utilisation :

Normalement un test de comparaison se fait par

    If a > b Then ...

Avec la fonction Cmp()

    If Cmp(a , b) Then

Je n'ai pas prévu de fonction inverse (plus petit) pour y remédier suffit de mettre

    If Not Cmp(a , b) Then

Je l'ai testée et retestée mais une erreur est toujours possible, dans ce cas veuillez m'en informé.

Rechercher des sujets similaires à "trier vart2 var ordre logique"