Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:

maval

XLDnaute Barbatruc
Re : Combobox

Bonjour Bruno

Je te remercie mais j'ai du faire une boulette, sa ne fonctionne pas?

@+
 

Pièces jointes

  • Combobox.xlsm
    40.4 KB · Affichages: 45
  • Combobox.xlsm
    40.4 KB · Affichages: 46
  • Combobox.xlsm
    40.4 KB · Affichages: 46

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,


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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…