XL 2016 Trier chaine de caractères dans une cellule

Marek83

XLDnaute Nouveau
Bonjour,

dans la cellule A1 j'ai la chaine suivante P Q R S K L H F I M E G N O J W Y X Z AA AB AC AD AE AO AN AP AQ AR AS BI

J'aimerai classer cette chaine dans l'ordre du type
E F H G K L N O P Q R S ...puis AA AB AC.

Bon, si le classement commence par AA jusqu'à ZZ c'est pas grave.
De même s'il fait : A AA AB AC....B E F G H....ca me va aussi.

Merci pour votre aide.
 

patricktoulon

XLDnaute Barbatruc
regarde je ne te racconte pas d'histoire
demo.gif
 

patricktoulon

XLDnaute Barbatruc
et je gane encore 0.030 avec le tri a insertion
VB:
Function StringSort(chain)
    Dim T, i&, a&, q&, z&, mem, B&
    T = Split(chain, " ")

    'premier tri par la longueur de chaine
    ReDim tx(UBound(T))
    B = 1
    For i = LBound(T) To UBound(T)
        If Len(T(i)) = 1 Then q = q + 1: a = a + 1: tx(a - 1) = T(i) Else B = B - 1: tx(UBound(T) + B) = T(i)
    Next
    q = q - 1

    '2d tri uniquement les chaines de 1 caractères(tri en insertion on insert un item de plus a chaque tour de boucle 1
    For i = LBound(tx) + 1 To q - 1
        For z = LBound(tx) To i
            If tx(i) > tx(z) Then mem = tx(i): tx(i) = tx(z): tx(z) = mem
        Next
    Next

    '3eme tri les chaines de deux caractères(idem tri à insertion)
    For i = q + 2 To UBound(tx) - 1
        For z = q + 1 + 1 To i
            If tx(i) > tx(z) Then mem = tx(i): tx(i) = tx(z): tx(z) = mem
        Next
    Next

    StringSort = Join(tx, " ")
End Function

1705590520281.png
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 094
Membres
112 658
dernier inscrit
doro 76