Bonjour Hervé, Pilou, Didier, le Forum
Attention Hervé, on ne sait pas comment Pilou alimente sa ListBox, si c'est par la propriété 'RowSource', inutile d'aller plus en avant sans qu'il change de méthode, car l'accès sera refusé !
Ensuite il parle de sa 2ème colonne qui doit être le critère de tri.
J'ai fait un essai tout simple :
1 UserForm contenant
1 ListBox
1 CommandButton
Et donc ce Code :
Option Explicit
Private Sub UserForm_Initialize()
Dim i As Byte
With Me.ListBox1
For i = 0 To 100
Randomize
.AddItem 'Toto ' & i
.Column(1, i) = Chr(Int((127 * Rnd) + 1))
Next
.ColumnCount = 2
End With
End Sub
Private Sub CommandButton1_Click()
Dim i, j, k As Byte
Dim temp As String
With ListBox1
For i = 0 To .ListCount
For j = i + 1 To .ListCount - 1
If .List(i, 1) > .List(j, 1) Then
For k = 0 To .ColumnCount - 1
temp = .List(j, k)
.List(j, k) = .List(i, k)
.List(i, k) = temp
Next k
End If
Next j
Next i
End With
End Sub
Par contre je trouve une certaine lenteur lorsque l'on procède de la sorte... Par conséquent, toujours sur le même UserForm, j'ajoute :
1 CommandButton (CommandButton2) et lui attribue cet algo :
Private Sub CommandButton2_Click()
Dim i, j, k As Byte
Dim temp As String
Dim TabListBox As Variant
TabListBox = ListBox1.List
For i = 0 To UBound(TabListBox)
For j = i + 1 To UBound(TabListBox)
If TabListBox(i, 1) > TabListBox(j, 1) Then
For k = 0 To Me.ListBox1.ColumnCount - 1 '**** voir remarque !
temp = TabListBox(j, k)
TabListBox(j, k) = TabListBox(i, k)
TabListBox(i, k) = temp
Next k
End If
Next j
Next i
With Me.ListBox1
.Clear
.List() = TabListBox
End With
End Sub
'**** remarque !
Ma première réaction était bien logiquement d'écrire :
For k = 0 To UBound(TabListBox, 2)
Et là, et bien
Niet Niet, mon Tableau est construit sur 10 Colonnes de 0 à 9 (valeur Max de Colonnes d'une ListBox sans passer par RowSource) et bien logiquement, l'algo de tri suivant déteste les valeur Null qui s'y trouvent...
Fin Remarque !
Enfin sinon il n'y a pas photo sur la rapidité d'exécution entre le fait de remplacer par un tableau que de travailler sur la ListBox elle-même, on en revient un peu comme au principe du Travail sur les Cellules des Feuilles...
Si notre ami Pilou, veut une 'Maxi Démo Compile' sur l'incrémentation de donnée dans une ListBox, et les autres aussi qui ne la connaissent pas, je vous invite à voir cette démo :
Lien supprimé
Fil de discussion :
Lien supprimé
Voilà un Fil bien ficelé je pense
😉
Bon Dimanche à vous tous et toutes
@+Thierry