XL 2019 trier un tableau

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

  • anniv.xlsm
    17.3 KB · Affichages: 17
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

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • Copie de ListBoxConditionMultiColTri.xlsm
    328.7 KB · Affichages: 5
Dernière édition:

fanfan38

XLDnaute Barbatruc
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:

fanfan38

XLDnaute Barbatruc
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
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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
 

Amigo

XLDnaute Occasionnel
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
 

Amigo

XLDnaute Occasionnel
Bonsoir
@BOISGONTIER
Le voilà, ainsi si c'est possible de pouvoir choisir quelques colonnes des titres du chaque BD pour effectuer le Tri Ex : Nom, Prénom, Fonctions, CA ...
Merci par avance
Cordialement
Amigo
 

Pièces jointes

  • FormRechercheModifAjoutSupMultiBD -Forum.xlsm
    105.6 KB · Affichages: 8

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 904
Membres
101 834
dernier inscrit
Jeremy06510