Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trier une liste dans combobx d'une form

7 réponses
Avatar
papyjo
bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site
(je sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste

--
papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

7 réponses

Avatar
Daniel
Bonjour.
Je pense que c'est le fait d'utiliser Rowsource pour ta combobox; essaie
d'utiliser additem à la place.
Cordialement.
Daniel
"papyjo" a écrit dans le message de news:

bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site
(je sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste

--
papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net




Avatar
Pounet95
Bonjour,
Je ne sais pas si c'est la meilleure façon de faire, mais je pratique comme
ceci :

la listbox (ou combobox) étant alimentée à partir de la propriété RowSource
à laquelle
j'attribue le nom d'une plage du classeur :
lstbox1.rowsource=range("toto")

dans un premier temps, je remets à blanc Rowsource ( listbox.rowsource="")
ensuite j'effectue le tri sur la plage nommée "toto" et je réaffecte la
propriété rowsource

Essaie pour voir ( en utilisant éventuellement l'enregistreur de macro pour
trier la plage "toto" )
Si pb, reviens ici
Bonne journée


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"papyjo" a écrit dans le message de news:

bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site
(je sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste

--
papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net




Avatar
michdenis
Bonjour Papyjo,


Voici une façon de faire avec Quick_Sort...

Tu dois adapter dans la procédure le nom de la
feuille et de la plage de cellules où sont tes données.

Dans ton formulaire :
'------------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant, Rg As Range

With Worksheets("Feuil1")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Tblo = Application.Transpose(Rg)
Quick_Sort Tblo, LBound(Tblo), UBound(Tblo)
UserForm1.ComboBox1.List = Application.Transpose(Tblo)
Set Rg = Nothing

End Sub
'------------------------------------


Tu peux mettre cette procédure dans un module standard.
'------------------------------------
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last As Long)
Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last
List_Separator = SortArray((First + Last) / 2)
Do
Do While (SortArray(Low) < List_Separator)
Low = Low + 1
Loop
Do While (SortArray(High) > List_Separator)
High = High - 1
Loop
If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If
Loop While (Low <= High)
If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last
End Sub
'------------------------------------


Salutations!



"papyjo" a écrit dans le message de news:
bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site
(je sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste

--
papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
papyjo
Bonjour,
Je ne sais pas si c'est la meilleure façon de faire, mais je pratique comme
ceci :

la listbox (ou combobox) étant alimentée à partir de la propriété RowSource à
laquelle
j'attribue le nom d'une plage du classeur :
lstbox1.rowsource=range("toto")

dans un premier temps, je remets à blanc Rowsource ( listbox.rowsource="")
ensuite j'effectue le tri sur la plage nommée "toto" et je réaffecte la
propriété rowsource

Essaie pour voir ( en utilisant éventuellement l'enregistreur de macro pour
trier la plage "toto" )
Si pb, reviens ici
Bonne journée


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"papyjo" a écrit dans le message de news:

bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site (je
sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste

-- papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net


Merci ça marche super



--
papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net


Avatar
papyjo
Bonjour Papyjo,


Voici une façon de faire avec Quick_Sort...

Tu dois adapter dans la procédure le nom de la
feuille et de la plage de cellules où sont tes données.

Dans ton formulaire :
'------------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant, Rg As Range

With Worksheets("Feuil1")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Tblo = Application.Transpose(Rg)
Quick_Sort Tblo, LBound(Tblo), UBound(Tblo)
UserForm1.ComboBox1.List = Application.Transpose(Tblo)
Set Rg = Nothing

End Sub
'------------------------------------


Tu peux mettre cette procédure dans un module standard.
'------------------------------------
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last As
Long) Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last
List_Separator = SortArray((First + Last) / 2)
Do
Do While (SortArray(Low) < List_Separator)
Low = Low + 1
Loop
Do While (SortArray(High) > List_Separator)
High = High - 1
Loop
If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If
Loop While (Low <= High)
If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last
End Sub
'------------------------------------


Salutations!



"papyjo" a écrit dans le message de news:
bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site
(je sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste


merci d'avoir répondu mais je n'ai pas pu tester
je bloque sur Quick_Sort (non reconnu)

--
papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

Avatar
michdenis
Bonjour Papyjo,

Pour utiliser la solution préconisée, tu ne dois pas renseigner la propriété RowSource
du combobox.

Un fichier exemple là : http://cjoint.com/?mmqi04CxBa


Salutations!



"papyjo" a écrit dans le message de news:
Bonjour Papyjo,


Voici une façon de faire avec Quick_Sort...

Tu dois adapter dans la procédure le nom de la
feuille et de la plage de cellules où sont tes données.

Dans ton formulaire :
'------------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant, Rg As Range

With Worksheets("Feuil1")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Tblo = Application.Transpose(Rg)
Quick_Sort Tblo, LBound(Tblo), UBound(Tblo)
UserForm1.ComboBox1.List = Application.Transpose(Tblo)
Set Rg = Nothing

End Sub
'------------------------------------


Tu peux mettre cette procédure dans un module standard.
'------------------------------------
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last As
Long) Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last
List_Separator = SortArray((First + Last) / 2)
Do
Do While (SortArray(Low) < List_Separator)
Low = Low + 1
Loop
Do While (SortArray(High) > List_Separator)
High = High - 1
Loop
If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If
Loop While (Low <= High)
If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last
End Sub
'------------------------------------


Salutations!



"papyjo" a écrit dans le message de news:
bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site
(je sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste


merci d'avoir répondu mais je n'ai pas pu tester
je bloque sur Quick_Sort (non reconnu)

--
papyjo
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

Avatar
papyjo
OK merci ça marche


Bonjour Papyjo,

Pour utiliser la solution préconisée, tu ne dois pas renseigner la propriété
RowSource du combobox.

Un fichier exemple là : http://cjoint.com/?mmqi04CxBa


Salutations!



"papyjo" a écrit dans le message de news:

Bonjour Papyjo,


Voici une façon de faire avec Quick_Sort...

Tu dois adapter dans la procédure le nom de la
feuille et de la plage de cellules où sont tes données.

Dans ton formulaire :
'------------------------------------
Private Sub UserForm_Initialize()

Dim Tblo As Variant, Rg As Range

With Worksheets("Feuil1")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With

Tblo = Application.Transpose(Rg)
Quick_Sort Tblo, LBound(Tblo), UBound(Tblo)
UserForm1.ComboBox1.List = Application.Transpose(Tblo)
Set Rg = Nothing

End Sub
'------------------------------------


Tu peux mettre cette procédure dans un module standard.
'------------------------------------
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last
As Long) Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last
List_Separator = SortArray((First + Last) / 2)
Do
Do While (SortArray(Low) < List_Separator)
Low = Low + 1
Loop
Do While (SortArray(High) > List_Separator)
High = High - 1
Loop
If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If
Loop While (Low <= High)
If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last
End Sub
'------------------------------------


Salutations!



"papyjo" a écrit dans le message de news:
bonjour
- j'ai crée une form sur laquelle j'ai combox
que j'initialise comme ceci

Private Sub UserForm_Initialize()
ComboBoxProduit.RowSource = "Produits" 'remplir la combobox1
ComboBoxProduit.List = ListSort(ComboBoxProduit.List)
FrmCalendrier.Show
End Sub

- que j'essais de trier avec cette function que j'ai trouvé sur un site
(je sais plus ou )

Public Function ListSort(liSte)
' Trier les données dans la box
Dim First As Integer, Last As Integer

Dim i As Integer, j As Integer
Dim Temp

First = LBound(liSte)
Last = UBound(liSte)
For i = First To Last - 1
For j = i + 1 To Last
If liSte(i, 0) > liSte(j, 0) Then
Temp = liSte(j, 0)
liSte(j, 0) = liSte(i, 0)
liSte(i, 0) = Temp
End If
Next j
Next i
ListSort = liSte
End Function

quand je fait du pas a pas je vois que la procedure marche
mais elle ne retourne rien si ce n'est qu'une erreur :-@

merci de m'aider a pouvoir trier ma liste


merci d'avoir répondu mais je n'ai pas pu tester
je bloque sur Quick_Sort (non reconnu)



--
papyjo



Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net