Trie de données

Bonjour

Je suis tout nouveau sur le forum. J'espère trouver des réponses à mes questions et pouvoir apporter ma contribution si possible.

Je dois faire un trie sur une colonne pour ce type de valeurs :

H1A2

H1A32

H2A2

H1A3

H12A25

H1A4

etc...

le pb est que tout commence par H et ensuite il faut trier 1A... 2A... etc dans l'ordre croissant?

Est ce faisable ?

Bonjour,

H12A... sera classé avant H1A... dans l'ordre croissant...

Cordialement.

bonjour

un essai sur le principe .......mais ;il yaura obligatoirement un"mais"

18quattro26140.xlsx (8.71 Ko)

cordialement

Merci pour les reponses

alors pour

MFerrand

la reponse est oui. Mais en fait je peu aussi faire l'inverse, pas très grave : H1A.. H2A.. etc H12A etc

tulipe_4 c'est pas mal MAIS, il faudrait par ex :

H1A1 H1A2 H1A5 H12A23 H15A123 H2A4 H2A12 H31A2 ETC....

J'essaie toujours de trouver une solution avec la formule mais en vain

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.

bonjour

salut M ferrand

un autre essai ............

13quattro261402.xlsx (8.89 Ko)

cordialement

Rechercher des sujets similaires à "trie donnees"