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

  • Initiateur de la discussion Initiateur de la discussion Goffy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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

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

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

Dernière édition:
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.
 
Notre forum d’entraide est 100 % gratuit et le restera.
Aucune formation payante, aucun fichier à acheter, rien à vendre. Mais comme tout site, nous devons couvrir nos frais pour continuer à vous accompagner.
Soutenez-nous en souscrivant à un compte membre : c’est rapide, vous choisissez simplement votre niveau de soutien et le tour est joué.

Je soutiens la communauté et j’accède à mon compte membre

Discussions similaires

Retour