Trier Listbox plusieurs colonnes

SAMWRC

XLDnaute Occasionnel
Bonjour a tous,

Voici mon problème:

Comme vous pouvez le constater dans ma pièce jointe, j'ai une base de donnée avec des catégories qui, elles-mêmes, peuvent contenir plusieurs sous-catégories.
Un ordre (position) est alloué a certaines catégories. J'affiche donc dans mon userform, a l'aide du bouton afficher listbox, toutes les catégories, et leurs sous-catégories, qui ont une position.
J'ai réussi, non sans encombre, a passer ce premier obstacle.

La 2e étape est de trier les données de la listbox dans l'ordre des positions. Je veux en 1er la catégorie qui a la position 1 avec toutes ses sous-catégories, puis en 2nd la catégorie qui a la position 2 avec toutes ses sous-catégories, ...

Le problème c'est que je n'arrive pas a gérer les différentes colonnes de ma listbox. Lorsque je copie/colle une ligne pour la glisser au bon endroit, je n'arrive pas a déplacer toute la ligne, mais seulement la première colonne.

Le problème vient des lignes suivantes :
Code:
Value = UserForm_Checklist_display.ListBox_Checklist.List(Checks_db_row)
UserForm_Checklist_display.ListBox_Checklist.RemoveItem Checks_db_row
UserForm_Checklist_display.ListBox_Checklist.AddItem Value, 1

Quelqu'un aurait-il une idée pour me débloquer??
Merci d'avance pour votre aide :)

Sam
 

Pièces jointes

  • Problemes_de_Listbox - SAM v1.xls
    43 KB · Affichages: 80

SAMWRC

XLDnaute Occasionnel
Re : Trier Listbox plusieurs colonnes

Re-bonjour,

J'ai finalement réussi a trouver la solution a mon probleme que je vous fait partager en piece-jointe.

Merci a ceux qui ont cherché

PS: voici la partie du code modifiée:

Code:
UserForm1.ListBox1.AddItem UserForm1.ListBox1.List(i), destination_row
UserForm1.ListBox1.List(destination_row, 1) = UserForm1.ListBox1.List(i + 1, 1)
UserForm1.ListBox1.List(destination_row, 2) = UserForm1.ListBox1.List(i + 1, 2)
UserForm1.ListBox1.List(destination_row, 3) = UserForm1.ListBox1.List(i + 1, 3)
UserForm1.ListBox1.List(destination_row, 4) = UserForm1.ListBox1.List(i + 1, 4)
UserForm1.ListBox1.RemoveItem i + 1
 

Pièces jointes

  • Problemes_de_Listbox - SAM v2.xls
    46 KB · Affichages: 111

pierrejean

XLDnaute Barbatruc
Re : Trier Listbox plusieurs colonnes

Bonjour SAMWRC

Voici ce que j'avais reussi a pondre (dans la difficulté)

A noter que mon tri porte aussi sur la colonne D (mais ce n'est peut-etre pas necessaire)
 

Pièces jointes

  • Problemes_de_Listbox - SAM v1.zip
    26.5 KB · Affichages: 116
Dernière édition:

SAMWRC

XLDnaute Occasionnel
Re : Trier Listbox plusieurs colonnes

Bonjour Pierrejean,

Je suis admiratif, tres belle formule ! Peut etre un peu trop pour moi d'ailleurs, puisque j'ai du mal a tout comprendre.

La mienne a l'air de marcher, mais je garde la tienne sous le coude !

Merci beaucoup

Sam
 

pierrejean

XLDnaute Barbatruc
Re : Trier Listbox plusieurs colonnes

Re

Voila la macro commentée

Code:
Private Sub CommandButton2_Click()
  'mettre la List sous forme de tableau
  tableau = ListBox1.List
  'Repeter dans le tableau la position
  For n = LBound(tableau, 1) To UBound(tableau, 1)
  'si la position n'est pas vide noter le numero
   If tableau(n, 2) <> "" Then
     num = tableau(n, 2)
  'si la position est vide lui affecter le numero
   Else
     tableau(n, 2) = num
   End If
  Next n
  'classer le tableau en fonction de position et reference
  For n = LBound(tableau, 1) To UBound(tableau, 1)
   For m = LBound(tableau, 1) To UBound(tableau, 1)
    If tableau(n, 2) & tableau(n, 3) < tableau(m, 2) & tableau(m, 3) Then
      temp0 = tableau(n, 0)
      temp1 = tableau(n, 1)
      temp2 = tableau(n, 2)
      temp3 = tableau(n, 3)
      temp4 = tableau(n, 4)
      tableau(n, 0) = tableau(m, 0)
      tableau(n, 1) = tableau(m, 1)
      tableau(n, 2) = tableau(m, 2)
      tableau(n, 3) = tableau(m, 3)
      tableau(n, 4) = tableau(m, 4)
      tableau(m, 0) = temp0
      tableau(m, 1) = temp1
      tableau(m, 2) = temp2
      tableau(m, 3) = temp3
      tableau(m, 4) = temp4
    End If
    Next m
  Next n
 ' Oter les positions ajoutées pour faire le tri
 num = tableau(0, 2)
 For n = 1 To UBound(tableau, 1)
   If tableau(n, 2) = num Then
     tableau(n, 2) = ""
   Else
     num = tableau(n, 2)
   End If
 Next n
 'Affecter le tableau a la List
 ListBox1.RowSource = ""
 ListBox1.List = tableau
 
End Sub
 

Discussions similaires

Réponses
0
Affichages
938

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib