Ordonner des combobox déja remplie
Résolu
jubatail
Messages postés
39
Statut
Membre
-
jubatail Messages postés 39 Statut Membre -
jubatail Messages postés 39 Statut Membre -
Bonjour,
j'ai ce code ci-dessous qui fonctionne très bien et qui me permet d'initialiser les combobox.
Est ce que c'est possible de rajouter du code pour que la liste dans les comboboxs s'affiche dans un ordre croissant ? je voudrais ordonner la liste !!
voici le code :
merci
julie
j'ai ce code ci-dessous qui fonctionne très bien et qui me permet d'initialiser les combobox.
Est ce que c'est possible de rajouter du code pour que la liste dans les comboboxs s'affiche dans un ordre croissant ? je voudrais ordonner la liste !!
voici le code :
For inc = 1 To NbColonne 'première boucle pour traiter toutes les colonnes
Set combo = Me.Controls("Label" & inc) 'contrôle de l'objet label
combo.Caption = NomColonne(inc - 1) 'Noms des labels = Nom de la colonne
Set combo = Me.Controls("ComboBox_CAT_" & inc) 'contrôle de l'objet combobox
combo.Style = 0 'propriété style des comboboxs :(initialement =0) on peut écrire dans les comboboxs, la mettre (=2) après initialisation
DL = Sheets(NomFeuille).Cells.Find("*", , LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For i = 4 To DL 'Deuxième boucle pour traiter toutes les lignes d'une colonne
If Sheets(NomFeuille).Cells(i, inc + 3).Text <> "N/D" Then 'si la ligne contient "N/D" ne pas incorporé cette valeur
combo.Value = Sheets(NomFeuille).Cells(i, inc + 3).Text 'la valeur de la combobox est égale a la premiere cellule
'de la première colonne et de la première ligne
If combo.ListIndex = -1 Then combo.AddItem Sheets(NomFeuille).Cells(i, inc + 3).Text 'si 2 cellules sont similaires ne pas les inscrire 2 fois
End If
Next i
'Ordonner les combobox
combo.Value = "" 'on met les comboboxs à vide à l'ouverture de la fenêtre
combo.Style = 2 '(=2) on ne peut plus écrire dans les comboboxs, le client peut seulement sélectionner les valeurs proposées
Set combo = Nothing
Next
merci
julie
1 réponse
-
Bonjour,
code a mettre apres ordonner combo
Dim t As Variant t = Combo.List Call TrierPlage(t) Combo.List = t
'------------------------------------------------------
sub a ajouter
' ' Tri de Shell - Shell Sort adapté pour tri plage de cellules ' Sub TrierPlage(plage As Variant, Optional ByVal loBound As Long = -1, Optional ByVal upBound As Long = -1) Dim i As Long, j As Long, h As Long, v As Variant, t() As Variant 'mise en tableau de la plage de cellules t = Application.Transpose(plage) 'debut de tableau If loBound = -1 Then loBound = LBound(t()) End If 'fin de tableau If upBound = -1 Then upBound = UBound(t()) End If h = loBound Do h = 3 * h + 1 Loop Until h > upBound Do h = h / 3 For i = h + 1 To upBound v = t(i): j = i Do While t(j - h) > v t(j) = t(j - h): j = j - h If j <= h Then Exit Do End If Loop t(j) = v Next i Loop Until h = loBound plage = Application.Transpose(t()) End Sub-
merci au final j'ai trouvé toute seule :)
Voici le code que j'ai utilisé mais le souci cest que j'ai du le copier coller 20 fois car j'ai 20 combobox !!!
For i = 0 To Me.ComboBox_CAT_1.ListCount - 1 For j = 0 To Me.ComboBox_CAT_1.ListCount - 1 If Val(ComboBox_CAT_1.List(i)) < Val(ComboBox_CAT_1.List(j)) Then strtemp = ComboBox_CAT_1.List(CInt(i)) ComboBox_CAT_1.List(i) = ComboBox_CAT_1.List(j) ComboBox_CAT_1.List(j) = strtemp End If Next j Next i
En effet il est plus court et le votre je comprends pas trop désolé ...
Peut être une iddée pour le réaliser directement dans toutes les comboboxs ?- Re,
copier coller 20 fois
Une seule fois suffit, remplacez ComboBox_CAT_1 par combo et mettez le code juste apres
'ordonner combobox
For j = 0 To combo.ListCount - 1 If Val(combo.List(i)) < Val(combo.List(j)) Then strtemp = combo.List(CInt(i)) combo.List(i) =combo.List(j) combo.List(j) = strtemp End If Next j
le code que je vous ai mis est simpleDim t As Variant t = Combo.List 'trsf de la liste combobox dans un tableau Call TrierPlage(t) 'appel de la sub de tri avec le tableau en parametre Combo.List = t 'trsf du tableau trie dans la combobox Sub TrierPlage() tri Shell rapide , vous trouverez les explications ici [https://fr.wikipedia.org/wiki/Tri_de_Shell]
-
-
-
-