Combobox

maval

XLDnaute Barbatruc
Bonjour

J'ai sur un formulaire une combobox avec une liste de 1 à 10 mon problème est que la liste est suivante 1, 10, 2, 3 ect.... Est-il possible de mettre l'ordre de 1, 2, 3, ect....

Je vous remercie de votre aide

Bon WE à tous
 

Pièces jointes

  • Combobox.xlsm
    39.7 KB · Affichages: 78
  • Combobox.xlsm
    39.7 KB · Affichages: 87
  • Combobox.xlsm
    39.7 KB · Affichages: 82

Staple1600

XLDnaute Barbatruc
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Combobox

Bonjour à tous :)

Un essai en modifiant un petit peu votre code:
VB:
Sub Unique_Sorted_ComboList(CbList As msforms.ComboBox, rg As Range)
    Dim Dict
    Dim c As Range
    Dim i As Long, j As Long
    Dim arrList As Variant, vTemp As Variant
    Dim mots, s As String
    
    'Créer une liste des valeurs unique avec un dictionnaire
    Set Dict = CreateObject("Scripting.Dictionary")
    Dict.CompareMode = vbTextCompare
    For Each c In rg
        If Not IsEmpty(c.Value) And Not Dict.exists(c.Value) Then
            mots = Split(c.Value): s = mots(UBound(mots))
            ReDim Preserve mots(UBound(mots) - 1)
            s = Join(mots) & String(10 - Len(s), "0") & s
            Dict.Add s, c.Value
        End If
    Next c
    
    'Trier la liste
    arrList = Dict.keys
    For i = LBound(arrList) To UBound(arrList) - 1
        For j = i + 1 To UBound(arrList, 1)
            If arrList(i) > arrList(j) Then
                vTemp = arrList(i)
                arrList(i) = arrList(j)
                arrList(j) = vTemp
            End If
        Next j
    Next i
    
    'Remplir la combobox avec des valeurs unique triées
    CbList.Clear
    For i = 0 To Dict.Count - 1
       CbList.AddItem Dict(arrList(i))
    Next i
End Sub
 

Pièces jointes

  • Tri Combobox v1.xlsm
    43 KB · Affichages: 69

maval

XLDnaute Barbatruc
Re : Combobox

Bonjour JM

Le problème est que moi j'ai déjà un code dans Userform_Initialize et je n'arrive a combiné les deux

Code:
 Dim c As Range  et  Dim rg As Range

Code:
Private Sub UserForm_Initialize()

Dim c As Range
Dim tablo()
Dim i As Integer, j As Integer
Dim temp As String
Dim present As Boolean

ReDim tablo(1 To 1)
tablo(1) = Cells(1, 1)
For Each c In Sheets("Feuil1").Range("A1:A" & Range("a65536").End(xlUp).Row)
    present = False
    For i = 1 To UBound(tablo)
        If tablo(i) = c Then present = True
    Next i
    If Not present Then
        ReDim Preserve tablo(1 To UBound(tablo) + 1)
        tablo(UBound(tablo)) = c
    End If
    For i = 1 To UBound(tablo)
        For j = 1 To UBound(tablo)
            If tablo(i) < tablo(j) Then
                temp = tablo(i)
                tablo(i) = tablo(j)
                tablo(j) = temp
            End If
        Next j
    Next i
Next c

ListBox1.List = tablo


    Dim rg As Range
 

    Set rg = Feuil2.Range("C3:C" & Feuil2.Range("C" & Rows.Count).End(xlUp).Row)
    Unique_Sorted_ComboList Me.ComboBox1, rg

End Sub

@+
 

maval

XLDnaute Barbatruc
Re : Combobox

Re, Mapomme

Je viens de constater un petit au niveau du nombre de combobox.
Je m'explique sur le fichier définitif j'ai 4 Combobox et la sa coince c'est vrai que j'aurais peut le dire avant mais je ne penser pas qu'il y aurais un problème Excuse moi....
@+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Combobox

re maval,

Re, Mapomme
Je viens de constater un petit au niveau du nombre de combobox.
Je m'explique sur le fichier définitif j'ai 4 Combobox et la sa coince c'est vrai que j'aurais peut le dire avant mais je ne penser pas qu'il y aurais un problème Excuse moi....
@+

Un essai avec une fonction TrierComboBox(ctrlComboBox As Control) qui prend une combobox comme paramètre et trie ses éléments selon la valeur numérique située à la fin de chaque élément. Pour le tri, je ne me suis pas cassé la nenette :( , j'ai fait un tri par échange (on peut le remplacer par un quick sort si on veut)

VB:
Sub TrierComboBox(ctrlComboBox As Control)
Dim dico As New Scripting.Dictionary, tablo, mots
Dim ech As Boolean, aux, i As Long, s

  For i = 0 To ctrlComboBox.ListCount - 1
    mots = Split(ctrlComboBox.List(i)): s = String(10 - Len(mots(UBound(mots))), "0") & mots(UBound(mots))
    If Not dico.Exists(s) Then dico.Add s, ctrlComboBox.List(i)
  Next i
  
  tablo = dico.Keys
  Do
    ech = False
    For i = 0 To dico.Count - 2
      If tablo(i) > tablo(i + 1) Then
        aux = tablo(i): tablo(i) = tablo(i + 1): tablo(i + 1) = aux
        ech = True
      End If
    Next i
  Loop Until Not ech
  
  ctrlComboBox.Clear
  For i = 0 To dico.Count - 1
    ctrlComboBox.AddItem dico(tablo(i))
  Next i
End Sub
 

Pièces jointes

  • Tri Combobox v2.xlsm
    21.8 KB · Affichages: 73

Dranreb

XLDnaute Barbatruc
Re : Combobox

Bonsoir.
Ça sent les ComboBox liés ça…
Si c'est le cas, bon, mon module de classe ComboBoxLiés ne gère pas des contenus textes à classer selon un nombre qui les termine. Mais il y aurait quand même moyen de les lui faire avaler.
Si ça vous intéresse…
 

Discussions similaires

Statistiques des forums

Discussions
312 230
Messages
2 086 427
Membres
103 207
dernier inscrit
Michel67