OVH Cloud OVH Cloud

Chargement et selection combobox

1 réponse
Avatar
fruityfrank
Bonjour,

Est il possible de charger dans un comboxbox ( à 2 colonnes) deux
colonnes en supprimant au préalable les doublons de la 1ere colonne.
Par exemple, dans une feuille avec les colonnes de A jusqu'à I
renseignées.
je veux avoir dans la combobox les Colonnes A et E en supprimmant les
doublons de A.

Dans la feuille
Col A / Col E
chateau du bon vin / rouge
chateau du bon vin / rouge
chateau du bon vin / blanc
chateau du bon vin / blanc
chateau du vin / rouge

Dans la combo
Col 1 / Col 2
chateau du bon vin / rouge
chateau du bon vin / blanc
chateau du vin / rouge

J'y arrive avec une seule colonne mais pas 2.
Voilà le code que j'utilise.
Merci pour votre aide

****************************

Sub chargement_combo(myplage As Range, mycombobox As MSForms.combobox)
'procédure générique pour charger les combobox

Dim AllCells As Range, cell As Range
Dim NoDupes As New Collection
Dim i As Integer, J As Integer
Dim Swap1, Swap2, item

'remove items from list
total = mycombobox.ListCount
If total = 0 Then GoTo remplissage
For Num = 0 To total
If Num = total Then Exit For
mycombobox.RemoveItem 0
Next
mycombobox.Value = ""

remplissage:
'liste entree************************
' The items are in D2:D65600
Set AllCells = myplage

' The next statement ignores the error caused
' by attempting to add a duplicate key to the collection.
' The duplicate is not added - which is just what we want!
On Error Resume Next
For Each cell In AllCells
NoDupes.Add cell.Value, CStr(cell.Value)
' Note: the 2nd argument (key) for the Add method must be a
string
Next cell

' Resume normal error handling
On Error GoTo 0

' Sort the collection (optional)
For i = 1 To NoDupes.Count - 1
For J = i + 1 To NoDupes.Count
If NoDupes(i) > NoDupes(J) Then
Swap1 = NoDupes(i)
Swap2 = NoDupes(J)
NoDupes.Add Swap1, before:=J
NoDupes.Add Swap2, before:=i
NoDupes.Remove i + 1
NoDupes.Remove J + 1
End If
Next J
Next i

' Add the sorted, non-duplicated items to a ListBox
For Each item In NoDupes
mycombobox.AddItem item
Next item

End Sub

1 réponse

Avatar
Clément Marcotte
Bonjour,

Un truc pour extraire les données d'une colonne Excel et les mettre
dans un contrôle (ListBox ou ComboBox), sans doublon:


http://www.excelabo.net/xl/listes.php#listesansdoublon



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

Est il possible de charger dans un comboxbox ( à 2 colonnes) deux
colonnes en supprimant au préalable les doublons de la 1ere colonne.
Par exemple, dans une feuille avec les colonnes de A jusqu'à I
renseignées.
je veux avoir dans la combobox les Colonnes A et E en supprimmant
les

doublons de A.

Dans la feuille
Col A / Col E
chateau du bon vin / rouge
chateau du bon vin / rouge
chateau du bon vin / blanc
chateau du bon vin / blanc
chateau du vin / rouge

Dans la combo
Col 1 / Col 2
chateau du bon vin / rouge
chateau du bon vin / blanc
chateau du vin / rouge

J'y arrive avec une seule colonne mais pas 2.
Voilà le code que j'utilise.
Merci pour votre aide

****************************

Sub chargement_combo(myplage As Range, mycombobox As
MSForms.combobox)

'procédure générique pour charger les combobox

Dim AllCells As Range, cell As Range
Dim NoDupes As New Collection
Dim i As Integer, J As Integer
Dim Swap1, Swap2, item

'remove items from list
total = mycombobox.ListCount
If total = 0 Then GoTo remplissage
For Num = 0 To total
If Num = total Then Exit For
mycombobox.RemoveItem 0
Next
mycombobox.Value = ""

remplissage:
'liste entree************************
' The items are in D2:D65600
Set AllCells = myplage

' The next statement ignores the error caused
' by attempting to add a duplicate key to the collection.
' The duplicate is not added - which is just what we want!
On Error Resume Next
For Each cell In AllCells
NoDupes.Add cell.Value, CStr(cell.Value)
' Note: the 2nd argument (key) for the Add method must be a
string
Next cell

' Resume normal error handling
On Error GoTo 0

' Sort the collection (optional)
For i = 1 To NoDupes.Count - 1
For J = i + 1 To NoDupes.Count
If NoDupes(i) > NoDupes(J) Then
Swap1 = NoDupes(i)
Swap2 = NoDupes(J)
NoDupes.Add Swap1, before:=J
NoDupes.Add Swap2, before:=i
NoDupes.Remove i + 1
NoDupes.Remove J + 1
End If
Next J
Next i

' Add the sorted, non-duplicated items to a ListBox
For Each item In NoDupes
mycombobox.AddItem item
Next item

End Sub