XL 2019 Trier par ordre alphabétique de gauche à droite

Goffy

XLDnaute Nouveau
Bonsoir à toutes et tous,

Je souhaite effectuer un tri par ordre alphabétique de gauche à droite des 3 colonnes du classeur en pièce jointe. En prenant comme exemple la ligne 4, il faudrait que
« ARTS PLASTIQUES » soit dans la colonne A, « HUMANITES, LITTÉRATURE ET PHILOSOPHIE » dans la colonne B et « LLCER ANGLAIS » dans la colonne C.

Il existe bien le tri manuel en passant par Données > Trier > etc. mais il semblerait qu'on ne puisse pas répéter automatiquement le tri sur les autres colonnes... En fouillant sur internet, je suis tombé sur des fonctions mais celles-ci sont indisponibles sur la version que j'aie du logiciel (datant de 2019).

Auriez-vous une quelconque solution à me proposer svp ?

Vous remerciant par avance pour votre aide.

Bien à vous,
Goffy
 

Pièces jointes

  • Classeur1.xlsx
    41.6 KB · Affichages: 7
Solution
Bonjour Goffy, mapomme, CISCO, le forum,

Si des cellules sont vides ni mapomme ni CISCO ne donnent les bons résultats.

Utilisez tranquillement la macro Quick sort :
VB:
Sub Trier()
Dim tablo, ncol%, a(), i&, j%
With [A1].CurrentRegion
    If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
    tablo = .Value
    If Not IsArray(tablo) Then tablo = .Cells(1).Resize(2)
    ncol = UBound(tablo, 2)
    ReDim a(1 To ncol)
    For i = 1 To Ubound(tablo)
        For j = 1 To ncol
            If tablo(i, j) = "" Then a(j) = "zzz" Else a(j) = tablo(i, j)
        Next j
        tri a, 1, ncol
        For j = 1 To ncol
            If a(j) = "zzz" Then tablo(i, j) = "" Else tablo(i, j) = a(j)
        Next j
    Next...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Goffy :),

Avec une macro dans module1 :
VB:
Sub trier()
Dim t, i&, j&, ech As Boolean, aux
   With ActiveSheet
      If .FilterMode Then .ShowAllData
      t = .Range("a1").CurrentRegion.Resize(, 3)
      For i = 2 To UBound(t)
         Do
            ech = False
            For j = 1 To 2
               If t(i, j) > t(i, j + 1) Then ech = True: aux = t(i, j): t(i, j) = t(i, j + 1): t(i, j + 1) = aux
            Next j
         Loop Until Not ech
      Next i
      .Range("a1").CurrentRegion.Resize(, 3) = t
   End With

 

Pièces jointes

  • Goffy- trier chaque ligne- v1.xlsm
    84.6 KB · Affichages: 7

CISCO

XLDnaute Barbatruc
Bonsoir à tous, bonne année 2024

Une solution en pièce jointe, avec une formule matricielle à valider avec Ctrl+maj+entrer, à tirer vers la droite et vers le bas.

@ plus

P.S : Bonsoir mapomme
 

Pièces jointes

  • Classeur1.xlsx
    67.1 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bonjour Goffy, mapomme, CISCO, le forum,

Si des cellules sont vides ni mapomme ni CISCO ne donnent les bons résultats.

Utilisez tranquillement la macro Quick sort :
VB:
Sub Trier()
Dim tablo, ncol%, a(), i&, j%
With [A1].CurrentRegion
    If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
    tablo = .Value
    If Not IsArray(tablo) Then tablo = .Cells(1).Resize(2)
    ncol = UBound(tablo, 2)
    ReDim a(1 To ncol)
    For i = 1 To Ubound(tablo)
        For j = 1 To ncol
            If tablo(i, j) = "" Then a(j) = "zzz" Else a(j) = tablo(i, j)
        Next j
        tri a, 1, ncol
        For j = 1 To ncol
            If a(j) = "zzz" Then tablo(i, j) = "" Else tablo(i, j) = a(j)
        Next j
    Next i
    .Value = tablo
End With
End Sub

Sub tri(a, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
A+
 

Pièces jointes

  • Tri horizontal.xlsm
    51.6 KB · Affichages: 8

CISCO

XLDnaute Barbatruc
Bonjour à tous

S'il ni a que 3 colonnes, on peut faire assez simplement avec des SI, sans formule matricielle.

@ plus

P.S : Bonjour job75. Effectivement, avec des cellules vides, cela ne fonctionne pas nickel...
 

Pièces jointes

  • Classeur1.xlsx
    55 KB · Affichages: 2
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Si des cellules sont vides ni mapomme ni CISCO ne donnent les bons résultats.
Bonjour @job75 :), @CISCO :),

Le tri de @mapomme fonctionne étant donné qu'un cellule vide est inférieure à toutes les autres (là je pousse un peu 🤪)!

Mais dans ce cas, traitons aussi les valeurs d'erreur 😅.

Plus sérieusement, je n'avais pas envisagé (même pas en rêve) le cas des cellules vides :(...
C'est vrai que ça allonge le code.
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 228
Membres
103 160
dernier inscrit
Torto