OVH Cloud OVH Cloud

Listbox trie et renvoie

2 réponses
Avatar
jacques-zeziola
Salut le forum,

J'ai un UserForm avec une listbox qui récupère une liste de nom dans
une feuille me servant a alimenter (En multiselect) dans un autre
UserForm un Textbox.

Mes deux questions sont :

1) Comment je pourrais trié cette ListBox par ordre albhabétique aux
lancement de l'UserForm sans y modifié l'ordre de ma feuille (Car
celle-ci possède avec cette liste de nom un numéro par nom qui est
deja trié lors de l'ajout d'une personne sur un aurtre UserForm).

2) Es-t-il possible lors de la sélection dans la ListBox et aprés la
validation de faire une vérification dans le TextBox que le ou les
noms sélectionnés ne soit pas déja présent et dans le cas de doublons
que ce doublons soit ignoré.

Je vous remercie grandement de votre aide, Jacques

2 réponses

Avatar
Denis Michon
Bonsoir Jacques,


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!




a écrit dans le message de news:
Salut le forum,

J'ai un UserForm avec une listbox qui récupère une liste de nom dans
une feuille me servant a alimenter (En multiselect) dans un autre
UserForm un Textbox.

Mes deux questions sont :

1) Comment je pourrais trié cette ListBox par ordre albhabétique aux
lancement de l'UserForm sans y modifié l'ordre de ma feuille (Car
celle-ci possède avec cette liste de nom un numéro par nom qui est
deja trié lors de l'ajout d'une personne sur un aurtre UserForm).

2) Es-t-il possible lors de la sélection dans la ListBox et aprés la
validation de faire une vérification dans le TextBox que le ou les
noms sélectionnés ne soit pas déja présent et dans le cas de doublons
que ce doublons soit ignoré.

Je vous remercie grandement de votre aide, Jacques
Avatar
jacques-zeziola
Denis, le forum,

Comme d'habitude, c'est nickel.

je vais refléchir pour le test de doublons dans mon textbox
(Multiligne)au moment de l'envoie.

Je te remercie beaucoup, Jacques

"Denis Michon" wrote in message news:<ytVwb.66447$...
Bonsoir Jacques,


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!




a écrit dans le message de news:
Salut le forum,

J'ai un UserForm avec une listbox qui récupère une liste de nom dans
une feuille me servant a alimenter (En multiselect) dans un autre
UserForm un Textbox.

Mes deux questions sont :

1) Comment je pourrais trié cette ListBox par ordre albhabétique aux
lancement de l'UserForm sans y modifié l'ordre de ma feuille (Car
celle-ci possède avec cette liste de nom un numéro par nom qui est
deja trié lors de l'ajout d'une personne sur un aurtre UserForm).

2) Es-t-il possible lors de la sélection dans la ListBox et aprés la
validation de faire une vérification dans le TextBox que le ou les
noms sélectionnés ne soit pas déja présent et dans le cas de doublons
que ce doublons soit ignoré.

Je vous remercie grandement de votre aide, Jacques