Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
re
je suis allé un peu plus loins
2000 lignes avec chacunes une chaine de 50 parties(1 ou 2 caractères)
et là encore il n'y a pas photo

fait moi plaisir rempli et clique "test"
 

Pièces jointes

  • exemple pour job75.xlsm
    24.1 KB · Affichages: 1

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

 

Discussions similaires

Réponses
7
Affichages
336
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…