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

combobox alphabétique

  • Initiateur de la discussion Initiateur de la discussion josothy
  • 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 !

josothy

XLDnaute Junior
bonjour,

je vais vous demander quelque chose qui a déja été demander mais j'ai un peu de mal a adapter les macro que j'ai trouver a mon prog. je voudrais que mon combobox soit trier par ordre alphabétique sans que sa change l'ordre de mes ligne dans la feuille.

Merci de votre attention
 

Pièces jointes

Re : combobox alphabétique

Bonjour,


Code:
Private Sub UserForm_Initialize()
  Dim temp()
  With Sheets("données")
    temp = Range(.[A2], .[A65000].End(xlUp))
  End With
  Call tri(temp, 1, UBound(temp, 1))
  Me.RechNom.List = temp
End Sub

Sub tri(a(), gauc, droi)          ' Quick sort
 ref = a((gauc + droi) \ 2, 1)
 g = gauc: d = droi
 Do
     Do While a(g, 1) < ref: g = g + 1: Loop
     Do While ref < a(d, 1): d = d - 1: Loop
     If g <= d Then
       temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = 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
Formation Excel VBA JB
 
Re : combobox alphabétique

Salut josothy, kjin🙂, Jacques🙂, le Forum

Une autre façon de faire

Code:
Private Sub UserForm_Initialize()
Dim X As Byte, Y As Byte
Dim temp As String
IniCombo
With RechNom
For X = 0 To .ListCount - 1
    For Y = 0 To .ListCount - 1
        If .List(X) < .List(Y) Then
            temp = .List(X)
            .List(X) = .List(Y)
            .List(Y) = temp
        End If
    Next Y
    Next X
End With
End Sub
Bonne Journée
 
Re : combobox alphabétique

Temps :10 sec pour 1000 éléments

Code:
Private Sub UserForm_Initialize()
Dim X As Byte, Y As Byte
Dim temp As String
IniCombo
With RechNom
For X = 0 To .ListCount - 1
    For Y = 0 To .ListCount - 1
        If .List(X) < .List(Y) Then
            temp = .List(X)
            .List(X) = .List(Y)
            .List(Y) = temp
        End If
    Next Y
    Next X
End With
End Sub

Temps: 0,05 s pour 5000 éléments

Code:
Private Sub UserForm_Initialize()
  Dim temp()
  With Sheets("données")
    temp = Range(.[A2], .[A65000].End(xlUp))
  End With
  Call tri(temp, 1, UBound(temp, 1))
  Me.RechNom.List = temp
End Sub

Sub tri(a(), gauc, droi)          ' Quick sort
 ref = a((gauc + droi) \ 2, 1)
 g = gauc: d = droi
 Do
     Do While a(g, 1) < ref: g = g + 1: Loop
     Do While ref < a(d, 1): d = d - 1: Loop
     If g <= d Then
       temp = a(g, 1): a(g, 1) = a(d, 1): a(d, 1) = 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
 
Re : combobox alphabétique

Hello les amis,

Bravo pour ces codes messieurs !

Perso, la seule différence entre vos deux codes que je constate, c'est que la version à Dull, n'a pas de doublons.

Mais les deux sont utiles et classes !

Cdt, Hulk.
 
Re : combobox alphabétique

Re,

Pardon me suis trompé, les deux sont identiques (point de vue résultat)

C'est que dans ma version je commence ma liste à A1, alors dans la version à Boisgontier, j'avais bien modifié Range(.[A1], .[A65000].End(xlUp))

Alors que dans la version à Dull, j'avais oublié de modifier
dans IniCombo le 1 To 1, et comme ma liste commencais à A1...

Bref, je me comprends, autant pour moi 😀

Cdt, Hulk.
 
Re : combobox alphabétique

merci a tous. je n'aurais pas réussi a faire tout ça tout seul. je vais rentrer le code dans mon prog. je vous dirais si ca marche super mais j'en doute pas.

Bonne journée
 
Re : combobox alphabétique

rebonjour,

Bon j'ai mis vos code dans mon prog et je me suis rendu compte que tout marchait bien pour le tri mais que quand apres je selectionnais un nom dans le combobox et que je voulais modifier les données ca s'enregistrait a la place d'un autre en gros sa l'écrasai et donc apres il y a deux ligne au meme nom et un nom qui a disparu.

J'espere que j'ai réussi a etre clair.

Bonne journée
 
Re : combobox alphabétique

73 sec pour 1000 éléments

Code:
Private Sub UserForm_Initialize()
t = Timer
'IniCombo
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("données").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
MsgBox Timer() - t
RechNom.List = tablo
End Sub

JB
 
- 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

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
499
Réponses
5
Affichages
312
Réponses
10
Affichages
266
Réponses
13
Affichages
610
Réponses
40
Affichages
3 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…