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

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…