XL 2019 Classer des chiffres dans des cellules horizontales.

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 !

album40

XLDnaute Nouveau
Bonjour,
Je souhaite classer par ordre croissant des chiffres dans des cellules horizontales.
J'ai tenté de le faire par la fonction trier par ordre croissant je n'obtient pas le résultat voulu
c'est la première ligne seule qui me donne le bon résultat. je n'arrive pas a faire tout le tableau simultanément.
Merci de me donner l'astuce
 

Pièces jointes

Solution
Bonsoir, Patricktoulon, Staple1600
il faut juste faire un Tri d’un tableau (Array) à 1 dimension
Le coeur du programme est simple pour le reste c'est le principe du tri quickSort

VB:
Sub MiseEnForme()
Dim t() As Variant, i As Integer, j As Integer
ReDim t(1)
For i = 7 To ActiveSheet.Cells(ActiveSheet.Cells(65535, 3).End(xlUp).Row, 3).Row
    t(i - 6) = Range(Cells(i, 3), Cells(i, 7))
    tri t, i - 6, LBound(t(1), 2), UBound(t(1), 2)
    ReDim Preserve t(UBound(t) + 1)
Next i
' Restitution de se tableau multidimension
ReDim Preserve t(UBound(t) - 1)
For i = LBound(t, 1) To UBound(t, 1)
Cells(i + 6, 9).Resize(UBound(t(i), 1), UBound(t(i), 2)) = t(i)
Next i
End Sub
La fonction de tri
VB:
Sub tri(a() As Variant, i, gauc...
ok mais toi tu fait pas attention a ce que je te dis

ton orientation est inutile!!!!! , caduque
la preuve teste sans
VB:
Sub tTest_Staple1600()
Application.ScreenUpdating = False
Tri_Horizontal_Staple1600 Range("c7:g32"), xlAscending
End Sub


Sub Tri_Horizontal_Staple1600(Plage As Range, Sens As XlSortOrder)
If Plage.Cells.Count = 1 Then Set Plage = Plage.CurrentRegion
For Each c In Plage.Rows
c.Sort Key1:=c.Cells(1, 1), Order1:=Sens, Header:=xlNo ', Orientation:=xlSortRows
Next c
End Sub
et c'est tout a fait normal il n'y a qu'une ligne (1 dim)
de toute façon c'est illogique d'employer cette constante dans ce contexte et j’appuie bien sur illogique

edit:
on c'est croisé laisse moi lire et analyser ta dernière démo
 
re
ben la ça l'est encore plus illogique alors
trier une plage d'une seule ligne par xlsortrows 😵 😵 😵 😵 LOL
perso je met rien et tout ira bien dans ce contexte

D'autant plus que xlLeftToRight qui serait plus logique est inutile de la même façon que xlsortcolumns

donc selon moi le par defaut de doit pas être appliqué sinon il y aurait echec de sort en toute logique avec xlsortrows ou tout au moins rien faire 😉

a mon avis je pense plutôt que le (par défaut) doit être variant en fonction du nombre de colonne et/ ou de ligne
 
Bonsoir, Patricktoulon, Staple1600
il faut juste faire un Tri d’un tableau (Array) à 1 dimension
Le coeur du programme est simple pour le reste c'est le principe du tri quickSort

VB:
Sub MiseEnForme()
Dim t() As Variant, i As Integer, j As Integer
ReDim t(1)
For i = 7 To ActiveSheet.Cells(ActiveSheet.Cells(65535, 3).End(xlUp).Row, 3).Row
    t(i - 6) = Range(Cells(i, 3), Cells(i, 7))
    tri t, i - 6, LBound(t(1), 2), UBound(t(1), 2)
    ReDim Preserve t(UBound(t) + 1)
Next i
' Restitution de se tableau multidimension
ReDim Preserve t(UBound(t) - 1)
For i = LBound(t, 1) To UBound(t, 1)
Cells(i + 6, 9).Resize(UBound(t(i), 1), UBound(t(i), 2)) = t(i)
Next i
End Sub
La fonction de tri
VB:
Sub tri(a() As Variant, i, gauc, droi) ' Quick sort
   ref = a(i)(1, (gauc + droi) \ 2)
   g = gauc: d = droi
   Do
     ' Pour un tri Croissant
      Do While a(i)(1, g) < ref: g = g + 1: Loop
      Do While ref < a(i)(1, d): d = d - 1: Loop
        If g <= d Then
           temp = a(i)(1, g): a(i)(1, g) = a(i)(1, d): a(i)(1, d) = temp
           g = g + 1: d = d - 1
        End If
    Loop While g <= d
    If g < droi Then Call tri(a, i, g, droi)
    If gauc < d Then Call tri(a, i, gauc, d)
End Sub

VB:
'Pour un tri décroissant
'Do While a(i)(g, colTri) > ref: g = g + 1: Loop
'Do While ref > a(i)(d, colTri): d = d - 1: Loop
 

Pièces jointes

Dernière édition:
Re, Bonsoir laurent950

•>patricktoulon
Moi, je ne pense rien
Je lis juste ce qu'on trouve sur docs.microsoft.com
(cf quote dans le message#18)
Et je sais que
xlLeftToRight=2 et que (tiens, tiens) xlSortRows=2

Bref, 10 posts pour confirmer que le code du message#2 fonctionnait
(en lisant comment j'avais testé)
C'est pas grave, le temps perdu pendant le confinement, ça compte pas 😉

PS: Pourquoi tu n'es pas passé à Office 2019 directement ?
(Si tu le souhaites, réponse en MP plutôt que dans ce fil où d'ailleurs le demandeur n'est pas reparu)

•>laurent950
WTF 😱 😉
Je plussoie à ce qu'a dit patricktoulon
Excel sait nativement trier horizontalement (avec Sort)
Donc utilisons-le non ? (sans sortir l'artillerie)
😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
630
  • Question Question
XL 2021 listbox
Réponses
18
Affichages
286
Retour