Trier une listBox contenant 7 col sur la col2 dans un ordre personnalisée
Bonjour à tous,
J'ai créer une base de données pour mes élèves de logistique. Dans celle-ci, j'ai un formulaire Bon de Commande. Sur ce bon de commande je récupéré des données de ma base dans une liste box qui viennent s'ajouter au fur et à mesure. Dans ma listBox je récupère les données de 7 colonnes. Avant d'appuyer sur le bouton commander qui me génère un Bon de commande, je voudrais qu'il me trie les résultats de ma liste box sur ma deuxième colonne ave un ordre de tri personnalisé.
J'ai essayé le code ci-dessous mais lorsque je clique le bouton si par exemple j'ai 3 lignes, seul la première ligne est trié. Pourriez vous m'aider? Merci
Dim i As Long, j As Long, k As Long
Dim tempArray() As Variant
Dim rowCount As Long
Dim colCount As Long
Dim sorted As Boolean
Dim temp As Variant
' Définir l'ordre de tri
Dim customOrder As String
customOrder = ("A1/01,A2/01,A3/01,A4/01,A1/02,A2/02,A3/02,A4/02,A1/03,A2/03,A3/03,A4/03,A1/04,A2/04,A3/04,A4/04,A1/05,A2/05,A3/05,A4/05,A1/06,A2/06,A3/06,A4/06,A1/07,A2/07,A3/07,A4/07,A1/08,A2/08,A3/08,A4/08,A1/09,A2/09,A3/09,A4/09,B1/09,B2/09,B3/09,B4/09,C1/09,C2/09,C3/09,C4/09,B1/08,B2/08,B3/08,B4/08,C1/08,C2/08,C3/08,C4/08,B1/07,B2/07,B3/07,B4/07,C1/07,C2/07,C3/07,C4/07,B1/06,B2" & _
"/06,B3/06,B4/06,C1/06,C2/06,C3/06,C4/06,B1/05,B2/05,B3/05,B4/05,C1/05,C2/05,C3/05,C4/05,B1/04,B2/04,B3/04,B4/04,C1/04,C2/04,C3/04,C4/04,B1/03,B2/03,B3/03,B4/03,C1/03,C2/03,C3/03,C4/03,B1/02,B2/02,B3/02,B4/02,C1/02,C2/02,C3/02,C4/02,B1/01,B2/01,B3/01,B4/01,C1/01,C2/01,C3/01,C4/01,D1/01,D2/01,D3/01,D4/01,E1/01,E2/01,E3/01,E4/01,D1/02,D2/02,D3/02,D4/02,E1/02,E2/02,E3/0" & _
"2,E4/02,D1/03,D2/03,D3/03,D4/03,E1/03,E2/03,E3/03,E4/03,D1/04,D2/04,D3/04,D4/04,E1/04,E2/04,E3/04,E4/04,D1/05,D2/05,D3/05,D4/05,E1/05,E2/05,E3/05,E4/05,D1/06,D2/06,D3/06,D4/06,E1/06,E2/06,E3/06,E4/06,D1/07,D2/07,D3/07,D4/07,E1/07,E2/07,E3/07,E4/07,D1/08,D2/08,D3/08,D4/08,E1/08,E2/08,E3/08,E4/08,D1/09,D2/09,D3/09,D4/09,E1/09,E2/09,E3/09,E4/09,F1/09,F2/09,F3/09,F4/09," & _
"G1/09,G2/09,G3/09,G4/09,F1/08,F2/08,F3/08,F4/08,G1/08,G2/08,G3/08,G4/08,F1/07,F2/07,F3/07,F4/07,G1/07,G2/07,G3/07,G4/07,F1/06,F2/06,F3/06,F4/06,G1/06,G2/06,G3/06,G4/06,F1/05,F2/05,F3/05,F4/05,G1/05,G2/05,G3/05,g4/05,F1/04,F2/04,F3/04,F4/04,G1/04,G2/04,G3/04,G4/04,F1/03,F2/03,F3/03,F4/04,G1/04,G2/04,G3/04,g4/04,F1/03,F2/03,F3/03,F4/03,G1/03,G2/03,g3/03,G4/03,F1/02,F2" & _
"/02,F3/02,F4/02,G1/02,G2/02,G3/02,G4/02,F1/01,F2/01,F3/01,F4/01,G1/01,G2/01,G3/01,G4/01,H1/01,H2/01,H3/01,h4/01,H1/02,H2/02,H3/02,H4/02,H1/03,H2/03,H3/03,H4/03,H1/04,h2/04,H3/04,H4/04,H1/05,H2/05,H3/05,H4/05,H1/06,H2/06,H3/06,H4/06,H1/07,H2/07,H3/07,H4/07,H1/08,H2/08,H3/08,H4/08,H1/09,H2/09,H3/09,H4/09" & _
"")
' Obtenir le nombre de lignes et de colonnes dans la ListBox
rowCount = ListBonCommande.ListCount
colCount = ListBonCommande.ColumnCount
' Redimensionner le tableau pour stocker les données
ReDim tempArray(1 To rowCount, 1 To colCount)
' Transférer les données de la ListBox dans le tableau
For i = 0 To rowCount - 1
For j = 0 To colCount - 1
tempArray(i + 1, j + 1) = ListBonCommande.List(i, j)
Next j
Next i
' Trier le tableau selon l'ordre personnalisé
Dim orderArray() As String
orderArray = Split(customOrder, ",")
Dim sortedData() As Variant
ReDim sortedData(1 To rowCount)
' Remplir sortedData avec les valeurs de la colonne 2
For i = 1 To rowCount
sortedData(i) = tempArray(i, 2)
Next i
' Trier selon l'ordre personnalisé
Dim sortedIndex As Long
sortedIndex = 1 'initialiser sortedIndex à 1
For i = LBound(orderArray) To UBound(orderArray)
For j = 1 To rowCount
If sortedData(j) = orderArray(i) Then
For k = 1 To colCount
tempArray(sortedIndex, k) = tempArray(j, k) 'écrire l'index trié
Next k
sortedIndex = sortedIndex + 1 'Incrémenter sortedIndex après avoir écrit
Exit For 'sortie de la boucle une fois que l'on a trouvé l'élément
End If
Next j
Next i
' Effacer la ListBox
ListBonCommande.Clear
' Remplir la ListBox avec les données triées
For i = 1 To sortedIndex - 1 ' Utiliser sortedIndex - 1 pour ne pas inclure les vides
ListBonCommande.AddItem
For j = 1 To colCount
ListBonCommande.List(i - 1, j - 1) = tempArray(i, j)
Next j
Next i
Bonjour,
Quand vous arrivez sur un forum, c'est comme lorsque vous allez chez des gens la 1ère fois
La politesse est de comprendre les us et coutumes du lieu..
Alors commencez par lire (si vous savez) la charte du forum
https://forum.excel-pratique.com/excel/a-lire-avant-de-poster-charte-du-forum-et-informations-utiles...
et notamment
Merci de votre compréhension
ReBonjour,
J'avais lu, la charte mais peut-être trop rapidement, désolée.
Je renvoie donc mon message en utilisant le bon bouton. Et je vous ai mis mon fichier en PJ.
Merci de votre aide.
Dim i As Long, j As Long, k As Long
Dim tempArray() As Variant
Dim rowCount As Long
Dim colCount As Long
Dim sorted As Boolean
Dim temp As Variant
' Définir l'ordre de tri
Dim customOrder As String
customOrder = ("A1/01,A2/01,A3/01,A4/01,A1/02,A2/02,A3/02,A4/02,A1/03,A2/03,A3/03,A4/03,A1/04,A2/04,A3/04,A4/04,A1/05,A2/05,A3/05,A4/05,A1/06,A2/06,A3/06,A4/06,A1/07,A2/07,A3/07,A4/07,A1/08,A2/08,A3/08,A4/08,A1/09,A2/09,A3/09,A4/09,B1/09,B2/09,B3/09,B4/09,C1/09,C2/09,C3/09,C4/09,B1/08,B2/08,B3/08,B4/08,C1/08,C2/08,C3/08,C4/08,B1/07,B2/07,B3/07,B4/07,C1/07,C2/07,C3/07,C4/07,B1/06,B2" & _
"/06,B3/06,B4/06,C1/06,C2/06,C3/06,C4/06,B1/05,B2/05,B3/05,B4/05,C1/05,C2/05,C3/05,C4/05,B1/04,B2/04,B3/04,B4/04,C1/04,C2/04,C3/04,C4/04,B1/03,B2/03,B3/03,B4/03,C1/03,C2/03,C3/03,C4/03,B1/02,B2/02,B3/02,B4/02,C1/02,C2/02,C3/02,C4/02,B1/01,B2/01,B3/01,B4/01,C1/01,C2/01,C3/01,C4/01,D1/01,D2/01,D3/01,D4/01,E1/01,E2/01,E3/01,E4/01,D1/02,D2/02,D3/02,D4/02,E1/02,E2/02,E3/0" & _
"2,E4/02,D1/03,D2/03,D3/03,D4/03,E1/03,E2/03,E3/03,E4/03,D1/04,D2/04,D3/04,D4/04,E1/04,E2/04,E3/04,E4/04,D1/05,D2/05,D3/05,D4/05,E1/05,E2/05,E3/05,E4/05,D1/06,D2/06,D3/06,D4/06,E1/06,E2/06,E3/06,E4/06,D1/07,D2/07,D3/07,D4/07,E1/07,E2/07,E3/07,E4/07,D1/08,D2/08,D3/08,D4/08,E1/08,E2/08,E3/08,E4/08,D1/09,D2/09,D3/09,D4/09,E1/09,E2/09,E3/09,E4/09,F1/09,F2/09,F3/09,F4/09," & _
"G1/09,G2/09,G3/09,G4/09,F1/08,F2/08,F3/08,F4/08,G1/08,G2/08,G3/08,G4/08,F1/07,F2/07,F3/07,F4/07,G1/07,G2/07,G3/07,G4/07,F1/06,F2/06,F3/06,F4/06,G1/06,G2/06,G3/06,G4/06,F1/05,F2/05,F3/05,F4/05,G1/05,G2/05,G3/05,g4/05,F1/04,F2/04,F3/04,F4/04,G1/04,G2/04,G3/04,G4/04,F1/03,F2/03,F3/03,F4/04,G1/04,G2/04,G3/04,g4/04,F1/03,F2/03,F3/03,F4/03,G1/03,G2/03,g3/03,G4/03,F1/02,F2" & _
"/02,F3/02,F4/02,G1/02,G2/02,G3/02,G4/02,F1/01,F2/01,F3/01,F4/01,G1/01,G2/01,G3/01,G4/01,H1/01,H2/01,H3/01,h4/01,H1/02,H2/02,H3/02,H4/02,H1/03,H2/03,H3/03,H4/03,H1/04,h2/04,H3/04,H4/04,H1/05,H2/05,H3/05,H4/05,H1/06,H2/06,H3/06,H4/06,H1/07,H2/07,H3/07,H4/07,H1/08,H2/08,H3/08,H4/08,H1/09,H2/09,H3/09,H4/09" & _
"")
' Obtenir le nombre de lignes et de colonnes dans la ListBox
rowCount = ListBonCommande.ListCount
colCount = ListBonCommande.ColumnCount
' Redimensionner le tableau pour stocker les données
ReDim tempArray(1 To rowCount, 1 To colCount)
' Transférer les données de la ListBox dans le tableau
For i = 0 To rowCount - 1
For j = 0 To colCount - 1
tempArray(i + 1, j + 1) = ListBonCommande.List(i, j)
Next j
Next i
' Trier le tableau selon l'ordre personnalisé
Dim orderArray() As String
orderArray = Split(customOrder, ",")
Dim sortedData() As Variant
ReDim sortedData(1 To rowCount)
' Remplir sortedData avec les valeurs de la colonne 2
For i = 1 To rowCount
sortedData(i) = tempArray(i, 2)
Next i
' Trier selon l'ordre personnalisé
Dim sortedIndex As Long
sortedIndex = 1 'initialiser sortedIndex à 1
For i = LBound(orderArray) To UBound(orderArray)
For j = 1 To rowCount
If sortedData(j) = orderArray(i) Then
For k = 1 To colCount
tempArray(sortedIndex, k) = tempArray(j, k) 'écrire l'index trié
Next k
sortedIndex = sortedIndex + 1 'Incrémenter sortedIndex après avoir écrit
Exit For 'sortie de la boucle une fois que l'on a trouvé l'élément
End If
Next j
Next i
' Effacer la ListBox
ListBonCommande.Clear
' Remplir la ListBox avec les données triées
For i = 1 To sortedIndex - 1 ' Utiliser sortedIndex - 1 pour ne pas inclure les vides
ListBonCommande.AddItem
For j = 1 To colCount
ListBonCommande.List(i - 1, j - 1) = tempArray(i, j)
Next j
Next iBonjour BsAlv,
Super, ça fonctionne.
Merci
Beaucoup
