Trier alphabet

Bonjour,

J'ai un problème qui doit être simple à résoudre mais je ne trouve pas comment faire alors vous pouvez peut-être m'aider.

J'explique, j'ai besoin de trier une colonne de A à Z mais à partir du 3ème caractère.

Voici un exemple :

trier

J'aimerai bien trier cette colonne avec les A en premier et ainsi de suite..

Merci à vous et bonne après-midi

Lolobvt

Bonjour,

si on ne veut pas faire de macros, le mieux serait de créer une colonne dans laquelle le 3ème caractère serait extrait

tu peux ensuite trier sur cette colonne puis la colonne des références

Ok thanks Steelson je vais essayer ca !

Bonjour le fil, bonjour le forum,

Beaucoup de variables à adapter dans le code ci-dessous car tu n'as pas daigné préciser où se trouvait la plage des données...

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim T As String 'déclare la variable O (variable Temporaire)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter a ton cas)
COL = 1 'définit la colonne où se trouvent les données (à adapter à ton cas)
PL = 1 'définit la première ligne où commencent les données (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
TV = O.Range(O.Cells(PL, COL), O.Cells(DL, COL)) 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV
    For J = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
        'condition : si le troisième caractère de TV(I, 1) est supérieur au troisième caractère de TV(J, 1) que I est différent de J
        If Mid(TV(I, 1), 3, 1) < Mid(TV(J, 1), 3, 1) And I <> J Then
            T = TV(I, 1): TV(I, 1) = TV(J, 1): TV(J, 1) = T 'inverse les données en utilisant la variable T
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
'renvoie dans la cellule redimensionnée ligne PL colonne COL de l'onglet O le tableau TV (trié)
O.Cells(PL, COL).Resize(UBound(TV, 1), 1).Value = TV
End Sub

la prochaine fois le fichier nous sera bien plus utile qu'une capture d'écran !...

Bravo ThauThème

On aurait même pu programmer un quicksort, tout dépend de la taille de la plage de données.

Re,

Arf, Steelson ! Le fameux Quick Sort de Jacques que je n'utilise qu'en faisant un copier/coller car je b'ai toujours pas compris comment l'adapter...

voici un code

Public Sub QuickSort(vArray As Variant, _
  Optional ByVal inLow As Long = -1, _
  Optional ByVal inHi As Long = -1)
  Dim pivot   As Variant
  Dim tmpSwap As Variant
  Dim tmpLow  As Long
  Dim tmpHi   As Long
  inLow = IIf(inLow = -1, LBound(vArray), inLow)
  inHi = IIf(inHi = -1, UBound(vArray), inHi)
  tmpLow = inLow
  tmpHi = inHi
  pivot = vArray((inLow + inHi) \ 2)
  While (tmpLow <= tmpHi)
     While (vArray(tmpLow) < pivot And tmpLow < inHi)
        tmpLow = tmpLow + 1
     Wend
     While (pivot < vArray(tmpHi) And tmpHi > inLow)
        tmpHi = tmpHi - 1
     Wend
     If (tmpLow <= tmpHi) Then
        tmpSwap = vArray(tmpLow)
        vArray(tmpLow) = vArray(tmpHi)
        vArray(tmpHi) = tmpSwap
        tmpLow = tmpLow + 1
        tmpHi = tmpHi - 1
     End If
  Wend
  If (inLow < tmpHi) Then QuickSort vArray, inLow, tmpHi
  If (tmpLow < inHi) Then QuickSort vArray, tmpLow, inHi
End Sub

et la façon dont je l'utilise

    Dim tmpRange() As Variant
    Dim varRange() As Variant
    Dim i

    Dim dico As Object
    Set dico = CreateObject("Scripting.Dictionary")

    tmpRange = [donnees].Value
    For i = 1 To UBound(tmpRange)
        If CB1.Value = CStr(tmpRange(i, 1)) Then
            dico((tmpRange(i, 2))) = ""
        End If
    Next i
    varRange = dico.keys
    QuickSort varRange
    Me.ComboBoxN.List = varRange
    ReDim tmpRange(0)

Re,

Alors ça !... C'est super sympa. Je vais bien le décortiquer. Je te remercie beaucoup...

Rechercher des sujets similaires à "trier alphabet"