Code VBA pour trier Une Combobox

  • Initiateur de la discussion Initiateur de la discussion salhi_haithem
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

salhi_haithem

Guest
Bonjour tout le monde,

J'ai trouvé ce petit Code qu'est simple et qui me va bien
Ce Code peut remplir la combobox1 avec les données de la colonne A de la feuille "Base" sans Doublons.
j'aimerai ajouter un petit Tri du Grand vers le Petit
et j'aimerai bien qu'il ne m'affiche pas du blanc dans ma combobox
et ca serait parfait

Code:
Private Sub UserForm_Initialize()

Dim i As Integer

For i = 1 To Sheets("Base").Range("A65536").End(xlUp).Row
  ComboBox1 = Sheets("Base").Range("A" & i)
  If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Base").Range("A" & i)
Next i

End Sub

et des petits commentaires dans le code ca m'aide beaucoup a comprendre
Et merci bien pour votre aide
 
Dernière modification par un modérateur:
Re : Code VBA pour trier Une Combobox

Merci pour Ta réponse j'ai vue le lien aujourd'hui avant de posté la discussion et j'ai n'ai pas su comment mettre LBound, UBound pour le trie pour le code de dessus
 
Re : Code VBA pour trier Une Combobox

Bonsoir,

Le code du post #1 est l'exemple de ce qu'il ne faut pas faire pour éliminer les doublons(lent).
Il faut e.g.
-utiliser un dictionnaire,
-transférer le dictionnaire dans un tableau
-trier le tableau
-transférer le tableau dans le combobox

Code:
Private Sub UserForm_Initialize()
  Set f = Sheets("Base")
  Set mondico = CreateObject("Scripting.Dictionary")
  a = f.Range("A1:A" & f.[A65000].End(xlUp).Row)   ' tableau a(n,1) pour rapidité
  For i = LBound(a) To UBound(a)
    If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
  Next i
  '--avec tri
  temp = mondico.keys
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
End Sub

Sub Tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call Tri(a, g, droi)
   If gauc < d Then Call Tri(a, gauc, d)
End Sub

jb
 
Dernière édition:
Re : Code VBA pour trier Une Combobox

Merci Mr BOISGONTIER pour votre aide c'est ce que je veux juste une petite chose
la combobox est chargé par des semaines c-a-dire (Semaine 39, Semaine 40, Semaine 41, Semaine 42 ... )

je veux le tri de plus grand vers le plus petit c-a-dire (Semaine 42 en premier ,puis Semaine 41, et Semaine 40, Semaine 39 ... )
j'ai ce code ci-dessous qui fonctionne bien mais il a des inconvénients
- il affiche les blancs
- il prend 3 seconde pour charger le userform car elle va charger la combobox


ton code il est hyper léger merci une autre fois, autre chose si il y a plus de commentaire dans le code ça m'aide a mieux comprendre et d’apprendre


Code:
' -------------- Charger la Combobox Semaine -----------------
Dim i As Integer, j As Integer
Dim strTemp As String

For i = 2 To Sheets("Base").Range("A65536").End(xlUp).Row
  ComboBox1 = Sheets("Base").Range("A" & i)
  If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Base").Range("A" & i)
Next i

' ------------ tri ------------
With Me.ComboBox1
        For j = 0 To .ListCount - 1
            For i = 0 To .ListCount - 1
               If .List(i) < .List(j) Then
                    strTemp = .List(i)
                    .List(i) = .List(j)
                    .List(j) = strTemp
                End If
            Next i
        Next j
End With
 
Dernière modification par un modérateur:
Re : Code VBA pour trier Une Combobox

bonjour tous 🙂🙂
en l'asbence de JB🙂

tu inverse le signe >

Code:
Sub Tri(a, ColTri, gauc, droi)
  ref = a((gauc + droi) \ 2, ColTri)
  g = gauc: d = droi
  Do
  Do While a(g, ColTri) > ref: g = g + 1: Loop
  Do While ref > a(d, ColTri): d = d - 1: Loop
  If g <= d Then
   For k = LBound(a, 2) To UBound(a, 2)
   temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
    Next k
   g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call Tri(a, ColTri, g, droi)
  If gauc < d Then Call Tri(a, ColTri, gauc, d)
End Sub
 
Re : Code VBA pour trier Une Combobox

Je reviens vers vous les amis pour un peut d'aide
je cherche a utiliser le même code pour alimenter une deuxième Combobox sans doublons qui dépend de la première Combobox
C'est a dire J'ai la Combobox3 qui fonctionne avec le code de Mr BOISGONTIER bien et qui est alimenté par la colonne AI sans doublons qui charge les semaines.

J'aimerai alimenté la Combobox5 par la colonne J sans doublon sans Blanc mais qui dépend de la valeur sélectionné dans la Combobox3 c'est a dire Remplir combobox selon la valeur d'une l'autre combobox



Et Merci d'avance


Code:
Private Sub UserForm_Initialize()

  Set F = Sheets("Base")
  Set mondico = CreateObject("Scripting.Dictionary")
  a = F.Range("AI2:AI" & F.[AI65000].End(xlUp).Row)   ' tableau a(n,1) pour rapidité
  For i = LBound(a) To UBound(a)
    If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
  Next i
  '--avec tri
  temp = mondico.keys
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox3.List = temp

End Sub

Sub Tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call Tri(a, g, droi)
   If gauc < d Then Call Tri(a, gauc, d)
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
310
Réponses
10
Affichages
631
Réponses
5
Affichages
391
Réponses
15
Affichages
642
Retour