Ordre alphabétique dans combobox

Mapat

XLDnaute Occasionnel
Bonjour le forum

Dans un userform, un combobox renvoyant les données d'une colonne, les présente à la suite, dans l'ordre d'inscription de cette même colonne.
Est-il possible que les données soient affichées dans l'ordre alphabétique.
Tri automatique des données avant affichage de l'userform à exclure.

Merci
 

excalibur

XLDnaute Impliqué
Re : Ordre alphabétique dans combobox

bonjour Mapat le forum ma combobox s appel cbx1

Sub test6()
Dim C As Range, i As Long, j As Long, temp As String
For Each C In Range("A2:a" & Range("A65536").End(xlUp).Row)
cbx1 = C
If cbx1.ListIndex = -1 And cbx1 <> "" Then cbx1.AddItem C
Next C
For i = 0 To cbx1.ListCount - 1
For j = 0 To cbx1.ListCount - 1
If cbx1.List(i) < cbx1.List(j) Then
temp = cbx1.List(i)
cbx1.List(i) = cbx1.List(j)
cbx1.List(j) = temp
End If: Next j: Next i
End Sub
 

Mapat

XLDnaute Occasionnel
Re : Ordre alphabétique dans combobox

Bonjour Excalibur

Merci de ta réponse
J'ai placé le code dans mon userform qui est Initialize
Ca fonctionne presque sauf que maintenant j'ai deux listes
Une triée et à la suite, après la dernière lettre alphabétique la liste non triée
Je te joint mon code
Private Sub ComboBox1_CLick()
Dim Tablo, k As Long

ComboBox2.Clear
Couleur = ""
ComboBox3.ListIndex = -1
ComboBox3.BackColor = &HFFFFFF
ComboBox4.ListIndex = -1
ComboBox4.BackColor = &HFFFFFF
TextBox1 = ""
Image1.Picture = LoadPicture()
With Sheets("Feuil1")
Tablo = .Range("A2:C" & .Range("A65536").End(xlUp).Row)
For k = 1 To UBound(Tablo)
If ComboBox1 = Tablo(k, 1) Then
ComboBox2.AddItem Tablo(k, 2)
ComboBox2.List(ComboBox2.ListCount - 1, 1) = k + 1
End If
Next
End With

End Sub


Private Sub ComboBox2_Click()

With Feuil1

ComboBox3 = .Range("H" & ComboBox2.Column(1, ComboBox2.ListIndex))
ComboBox4 = .Range("J" & ComboBox2.Column(1, ComboBox2.ListIndex))
Numero = .Range("C" & ComboBox2.Column(1, ComboBox2.ListIndex))
Couleur = .Range("D" & ComboBox2.Column(1, ComboBox2.ListIndex))
Description = .Range("E" & ComboBox2.Column(1, ComboBox2.ListIndex))
Cote = .Range("F" & ComboBox2.Column(1, ComboBox2.ListIndex))
DetailSup = .Range("M" & ComboBox2.Column(1, ComboBox2.ListIndex))
End With

With Image1
.Picture = LoadPicture(ThisWorkbook.Path & "\" & ComboBox2 & ".jpg") 'nom de l'image
.PictureAlignment = fmPictureAlignmentCenter ' centrage de l'image dans le contrôle
.PictureSizeMode = fmPictureSizeModeZoom ' mise à l'echelle de l'image dans le contrôle
End With

End Sub

Private Sub ComboBox3_Change()
If ComboBox3.ListIndex <> -1 Then
If ComboBox3.ListIndex = 0 Then
ComboBox3.BackColor = &HFFFF&
Sheets("Feuil1").Range("G" & ComboBox2.Column(1, ComboBox2.ListIndex)) = 1
Else
ComboBox3.BackColor = &HFFFFFF
Sheets("Feuil1").Range("G" & ComboBox2.Column(1, ComboBox2.ListIndex)) = ""
ComboBox4.ListIndex = 1
End If
End If
End Sub

Private Sub ComboBox4_Change()
If ComboBox4.ListIndex <> -1 Then
If ComboBox4.ListIndex = 0 And Sheets("Feuil1").Range("G" & ComboBox2.Column(1, ComboBox2.ListIndex)) = 1 Then
ComboBox4.BackColor = &HFFFF&
Sheets("Feuil1").Range("I" & ComboBox2.Column(1, ComboBox2.ListIndex)) = 1
Else
ComboBox4.BackColor = &HFFFFFF
Sheets("Feuil1").Range("I" & ComboBox2.Column(1, ComboBox2.ListIndex)) = ""
ComboBox4.ListIndex = 1
End If
End If
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub Cote_Change()
If Not IsNumeric(Cote.Value) Then Cote.Value = ""
Cote.Value = VBA.Format(Cote.Value, "0.00 €")
End Sub

Private Sub Couleur_Change()

End Sub

Private Sub Description_Change()

End Sub

Private Sub DetailSup_Change()

End Sub

Private Sub Frame2_Click()

End Sub

Private Sub Image1_Click()

End Sub

Private Sub Label7_Click()

End Sub




Private Sub TextBox2_Change()
If Not IsNumeric(Cote.Value) Then Cote.Value = ""
Cote.Value = VBA.Format(Cote.Value, "0.00 €")
End Sub



Private Sub Nombre_Change()

End Sub



Private Sub UserForm_Initialize()

Dim C As Range, i As Long, j As Long, temp As String
For Each C In Range("A2:a" & Range("A65536").End(xlUp).Row)
ComboBox1 = C
If ComboBox1.ListIndex = -1 And ComboBox1 <> "" Then ComboBox1.AddItem C
Next C
For i = 0 To ComboBox1.ListCount - 1
For j = 0 To ComboBox1.ListCount - 1
If ComboBox1.List(i) < ComboBox1.List(j) Then
temp = ComboBox1.List(i)
ComboBox1.List(i) = ComboBox1.List(j)
ComboBox1.List(j) = temp
End If: Next j: Next i

Dim Collec As New Collection
Dim Cell As Range, Itm As Long

ValeurCol.Value = [Feuil1!N1].Value
Nombre.Value = [Feuil1!O1].Value

With Sheets("Feuil1")

For Each Cell In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
On Error Resume Next
Collec.Add Cell, CStr(Cell)
On Error GoTo 0
Next

For Itm = 1 To Collec.Count
ComboBox1.AddItem Collec.Item(Itm)
Next

End With

With ComboBox2
.ColumnCount = 2
.ColumnWidths = "100;0"
End With

With ComboBox3
.AddItem "OUI"
.AddItem "NON"
End With

With ComboBox4
.AddItem "OUI"
.AddItem "NON"
End With

End Sub
 

excalibur

XLDnaute Impliqué
Re : Ordre alphabétique dans combobox

re cette sequence de code est cense faire quoi!! une liste sans doublons ??
With Sheets("Feuil1")

For Each Cell In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
On Error Resume Next
Collec.Add Cell, CStr(Cell)
On Error GoTo 0
Next

For Itm = 1 To Collec.Count
ComboBox1.AddItem Collec.Item(Itm)
Next

End With
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Ordre alphabétique dans combobox

Bonjour,


Code:
Private Sub UserForm_Initialize()
  Dim temp()
  temp = Range("liste3")   ' liste tableau temp (1 To n,1 To 1) ou temp = Range([B2], [B2].End(xlDown)) 
  Call tri(temp, 1, UBound(temp, 1))
  Me.ListBox1.List = temp
End Sub

Sub tri(a(), gauc, droi)          ' Tri rapide (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

Listes Triées

JB
Formation Excel VBA JB
 

excalibur

XLDnaute Impliqué
Re : Ordre alphabétique dans combobox

re bonjour le fil desole que tu sois decu. a mon avis tu arrives a cree ta liste dans l ordre & sans doublons. mais derriere cela tu arrives pas a l exploiter pour arriver au resultat excompte. mais nous avec le peu d infos que tu nous donnes il est tres tres tres difficile de resoudre ton probleme en esperant de te revoir passe une bonne soiree a+
 

Lii

XLDnaute Impliqué
Re : Ordre alphabétique dans combobox

Bonsoir Tous,

as-tu bien écrit le code fourni par excalibur ?
Code:
Private Sub UserForm_Initialize()
  For Each C In Range("A2:A" & Range("A65536").End(xlUp).Row)
    ComboBox1 = C
    If ComboBox1.ListIndex = -1 And ComboBox1 <> "" Then ComboBox1.AddItem C
  Next C
  With ComboBox1
    For i = 0 To .ListCount - 1
      For k = 0 To .ListCount - 1
        If .List(i) < .List(k) Then
          temp = .List(i)
          .List(i) = .List(k)
          .List(k) = temp
        End If
      Next k
    Next i
    .ListIndex = -1
End With
...
Il y a bien tri de la liste !
 

excalibur

XLDnaute Impliqué
Re : Ordre alphabétique dans combobox

je viens de tester dans ton fichier avec un minimum de code ca marche desole

Private Sub UserForm_Initialize()
Dim T, z As Variant, l As Collection, X As Long, i As Long, j As Long, temp As String
On Error Resume Next
Set l = New Collection
T = Range("A2:a" & Range("A65536").End(xlUp).Row)
For i = LBound(T) To UBound(T)
l.Add T(i, 1), T(i, 1): Next
For Each z In l
ComboBox1.AddItem z: Next
For i = 0 To ComboBox1.ListCount - 1
For j = 0 To ComboBox1.ListCount - 1
If ComboBox1.List(i) < ComboBox1.List(j) Then
temp = ComboBox1.List(i)
ComboBox1.List(i) = ComboBox1.List(j)
ComboBox1.List(j) = temp
End If: Next j: Next i
ValeurCol.Value = [Feuil1!N1].Value
Nombre.Value = [Feuil1!O1].Value
With Sheets("Feuil1")
.ComboBox2
.ColumnCount = 2
.ColumnWidths = "100;0"
End With
With ComboBox3
.AddItem "OUI"
.AddItem "NON"
End With
With ComboBox4
.AddItem "OUI"
.AddItem "NON"
End With
End Sub

ps je viens d essayer avec Set l = CreateObject("Scripting.Dictionary") pas de probleme non plus

ile est evident que si tu laisses ce code dans initialise en plus = 2 listes
With Sheets("Feuil1")
For Each Cell In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
On Error Resume Next
Collec.Add Cell, CStr(Cell)
On Error GoTo 0
Next
For Itm = 1 To Collec.Count
ComboBox1.AddItem Collec.Item(Itm)
Next
End With
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
193

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG