XL 2019 trier un tableau

  • Initiateur de la discussion Initiateur de la discussion fanfan38
  • 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 !

fanfan38

XLDnaute Barbatruc
Bonjour
J'ai fini par me mettre au tableau mais...
Comment on fait pour faire un tri
Pour l'instant je copie mes données sur une feuille et je lance une macro de tri
mais je présume qu'un tableau peut être trié directement (pour mettre dans une listbox)
J'ai bien trouvé tri sur un champ mais là j'aurai souhaité trié sur le mois et ensuite sur le jour
Merci de vos conseils
A+ François
Ps ce n'est pas un tableau sur une feuille que je souhaite trier mais dans l'exemple ci joint c'est montab()
 

Pièces jointes

Solution
Bonjour,

Pour le mois 1, les jours sont bien dans l'ordre et pour le mois 2, les jours sont bien dans l'ordre.

Sans titre - Copie (7).png


La colonne de tri est obtenue par:

VB:
  For i = 1 To UBound(temp)
    temp(i, NbCol + 1) = Format(temp(i, NbCol), "00") & Format(temp(i, NbCol - 1), "00")
  Next i


Boisgontier
Bonjour,

J'ai transformé le tableau en tableau structuré (qui ont des avantages).


VB:
Option Compare Text
Dim nomtableau, Rng, TblBD(), NbCol
Private Sub UserForm_Initialize()
  nomtableau = "tableau1"
  Set Rng = Range(nomtableau)
  TblBD = Rng.Value
  Tri TblBD, LBound(TblBD), UBound(TblBD), 1
  NbCol = UBound(TblBD, 2)
  EnteteListBox
  Me.ListBox1.List = TblBD
End Sub


Sub Tri(a, gauc, droi, colTri)        ' Quick sort
colD = LBound(a, 2): colF = UBound(a, 2)
ref = a((gauc + droi) \ 2, colTri)
g = gauc: d = droi
Do
     Do While a(g, colTri) < ref: g = g + 1: Loop
     Do While ref < a(d, colTri): d = d - 1: Loop
     If g <= d Then
       For c = colD To colF
         temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
       Next
       g = g + 1: d = d - 1
     End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi, colTri)
If gauc < d Then Call Tri(a, gauc, d, colTri)
End Sub

Boisgontier
 

Pièces jointes

Dernière édition:
Bonjour BoisGontier
Merci de me donner un coup de main...
il doit y avoir un bug quand je clic sur Go
la listbox affiche en 1er
Né le 09/06/2016 alors que dans le tableau structuré la 1ere date et 08/01/2001...
Puis je avoir quelques explication sur la macro
Merci
A+ François
Ps: apparemment tu as fait un tri sur la ligne alors que je souhaite un tri sur le mois et le jour
J'ai du mal m'exprimer...
 
Dernière édition:
Apparemment il y a un problème...
la date du 12/02/2016 me donne jour 7 mois 1
Beaucoup de ligne sont passé en mois 1 alors que dans la date de naissance le mois n'est pas égale à 1...
Ne peux t'on faire un tri sur 2 colonnes?
Merci
A+ François
 
Bonjour,

Pour le mois 1, les jours sont bien dans l'ordre et pour le mois 2, les jours sont bien dans l'ordre.

Sans titre - Copie (7).png


La colonne de tri est obtenue par:

VB:
  For i = 1 To UBound(temp)
    temp(i, NbCol + 1) = Format(temp(i, NbCol), "00") & Format(temp(i, NbCol - 1), "00")
  Next i


Boisgontier
 
Bonjour BOISGONTIER, fanfan38 et le Forum

@BOISGONTIER
Permettez-moi de m'incruster à ce fil et profiter de vos lumières concernant l'ordre de tri.
J'utilise votre fichier MultiBd et je souhaite rajouter une option d'ordre de Tri Croissant /Décroissant quand je choisie dans la Combotri la colonne ci-joint votre code :
VB:
Private Sub ComboTri_click()
  Dim Tbl()
  ColTri = Me.ComboTri.ListIndex
  Tbl = Me.ListBox1.List
  TriMultiCol Tbl, ColTri, LBound(Tbl), UBound(Tbl)
  Me.ListBox1.List = Tbl
End Sub
Sub TriMultiCol(A, ColTri, gauc, droi) ' Quick sort
  ref = A((gauc + droi) \ 2, ColTri)
  g = gauc: D = droi
  Do
    Do While A(g, ColTri) < ref: g = g + 1: Loop
    Do While ref < A(D, ColTri): D = D - 1: Loop
    If g <= D Then
      For k = LBound(A, 2) To UBound(A, 2)
        temp = A(g, k): A(g, k) = A(D, k): A(D, k) = temp
      Next k
      g = g + 1: D = D - 1
    End If
  Loop While g <= D
  If g < droi Then Call TriMultiCol(A, ColTri, g, droi)
  If gauc < D Then Call TriMultiCol(A, ColTri, gauc, D)
End Sub

Mes essais ne sont que Echec.
Merci par avance
Amigo
 
- 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

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
284
Réponses
3
Affichages
130
  • Question Question
Microsoft 365 MFC dans tableau
Réponses
2
Affichages
224
Réponses
1
Affichages
220
Retour