Signaler

Ordonner des combobox déja remplie [Résolu]

Posez votre question jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - Dernière réponse le 14 sept. 2017 à 13:06 par jubatail
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 :

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
Utile
+0
plus moins
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
jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - 13 sept. 2017 à 14:22
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 ?
Répondre
f894009 12141Messages postés dimanche 25 novembre 2007Date d'inscription 24 septembre 2017 Dernière intervention - 13 sept. 2017 à 15:41
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 simple
Dim 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]
Répondre
jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - 14 sept. 2017 à 11:52
merci
Répondre
jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - 14 sept. 2017 à 11:58
il trouve pas ma variable combo
Répondre
jubatail 37Messages postés lundi 31 juillet 2017Date d'inscription 14 septembre 2017 Dernière intervention - 14 sept. 2017 à 13:06
it is good
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !