Exclure doublons pour un ComboBox

Le
SI
Bonjour

J'ai une colonne qui me sert de source pour un combobox mais je souhaiterais
extraire les valeurs sans doublons.

Merci
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre CFI [mvp]
Le #1346056
bonjour
je mets en téte de colonne un nom (ici NOM) je nomme la totalité de la colonne ici Lst_nom
mon combo se nomme Lst_noms
Private Sub UserForm_Activate()
'// pas oublier de mettre Microsoft dao 3.x
'// dans Outils/références
Dim bd As DAO.Database
Dim rst As DAO.Recordset
On Error GoTo f_err
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")
Set rst = bd.OpenRecordset("select NOM from lst_nom where NOM <> '' Group by Nom order by nom")
Do Until rst.EOF
Me.Lst_noms.AddItem rst(0)
rst.MoveNext
Loop
rst.Close
bd.Close
Set bd = Nothing
Set rst = Nothing
f_err_bye:
Exit Sub
f_err:
MsgBox Error$
Resume f_err_bye
End Sub
comme çà la liste est triée sans doublons, et peut étre remplie ou modifiée quand on veut

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de news:408f7018$0$19471$
Bonjour

J'ai une colonne qui me sert de source pour un combobox mais je souhaiterais
extraire les valeurs sans doublons.

Merci




HD
Le #1326041
'--------------------------------
Sub ComboBox1_SansDoublons_OrdreCroissant()

Dim t As Variant, G(), A As Integer
Dim ans As Variant, B As Integer

With Worksheets("Feuil1")
t = .Range("A1:A" & .Range("A65536").End(xlUp).Row) 'À définir
End With

For A = 1 To UBound(t)
On Error Resume Next
ans = Application.Match(t(A, 1), G, 0)
If Err <> 0 Then Err = 0
If ans = "" Then
ReDim Preserve G(B + 1)
G(B) = t(A, 1)
B = B + 1
End If
Next
BubbleSort G
Worksheets("Feuil1").ComboBox1.List = G

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


'Procédure de tri bien connu à
'mettre dans un module standard
'-----------------------------------------
Sub BubbleSort(List())
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Sub
'-----------------------------------------
--
@+
HD
SI
Le #1325877
Bonjour Pierre

Merci pour cette excellente idée mais aussi très claire.

Cependant serais-tu pourquoi lors de l'inialisation de la variable "bd" le
code erreur suivant apparait :"trop de paramètre. 1 attendu".

Merci

"Pierre CFI [mvp]" news:
bonjour
je mets en téte de colonne un nom (ici NOM) je nomme la totalité de la
colonne ici Lst_nom

mon combo se nomme Lst_noms
Private Sub UserForm_Activate()
'// pas oublier de mettre Microsoft dao 3.x
'// dans Outils/références
Dim bd As DAO.Database
Dim rst As DAO.Recordset
On Error GoTo f_err
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel
8.0")

Set rst = bd.OpenRecordset("select NOM from lst_nom where NOM <> ''
Group by Nom order by nom")

Do Until rst.EOF
Me.Lst_noms.AddItem rst(0)
rst.MoveNext
Loop
rst.Close
bd.Close
Set bd = Nothing
Set rst = Nothing
f_err_bye:
Exit Sub
f_err:
MsgBox Error$
Resume f_err_bye
End Sub
comme çà la liste est triée sans doublons, et peut étre remplie ou
modifiée quand on veut


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f7018$0$19471$

Bonjour

J'ai une colonne qui me sert de source pour un combobox mais je
souhaiterais


extraire les valeurs sans doublons.

Merci








SI
Le #1346052
Merci HD, cette solution est parfaite bien qu'elle utilise pour une
débutante comme moi quelques fonctions inconnues.
C'est pour cette raison que j'aurais souhaité des information sur la méthode
"Match" mais l'aide Excel n'en fourni pas.
Serais tu ou je pourrais en trouver s'il te plait.

Merci encore

"HD" news:
'--------------------------------
Sub ComboBox1_SansDoublons_OrdreCroissant()

Dim t As Variant, G(), A As Integer
Dim ans As Variant, B As Integer

With Worksheets("Feuil1")
t = .Range("A1:A" & .Range("A65536").End(xlUp).Row) 'À définir
End With

For A = 1 To UBound(t)
On Error Resume Next
ans = Application.Match(t(A, 1), G, 0)
If Err <> 0 Then Err = 0
If ans = "" Then
ReDim Preserve G(B + 1)
G(B) = t(A, 1)
B = B + 1
End If
Next
BubbleSort G
Worksheets("Feuil1").ComboBox1.List = G

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


'Procédure de tri bien connu à
'mettre dans un module standard
'-----------------------------------------
Sub BubbleSort(List())
' Sorts the List array in ascending order
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Sub
'-----------------------------------------
--
@+
HD




Pierre CFI [mvp]
Le #1346046
..../...
quelle version de excel ? et quelle version de dao ?
quoique que ce message vient quand un paramétre est manquant ou faux
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")
ici en excel 97 (ton classeur est enregistré ?)


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de news:408f8eb6$0$19498$
Bonjour Pierre

Merci pour cette excellente idée mais aussi très claire.

Cependant serais-tu pourquoi lors de l'inialisation de la variable "bd" le
code erreur suivant apparait :"trop de paramètre. 1 attendu".

Merci

"Pierre CFI [mvp]" news:
bonjour
je mets en téte de colonne un nom (ici NOM) je nomme la totalité de la
colonne ici Lst_nom

mon combo se nomme Lst_noms
Private Sub UserForm_Activate()
'// pas oublier de mettre Microsoft dao 3.x
'// dans Outils/références
Dim bd As DAO.Database
Dim rst As DAO.Recordset
On Error GoTo f_err
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel
8.0")

Set rst = bd.OpenRecordset("select NOM from lst_nom where NOM <> ''
Group by Nom order by nom")

Do Until rst.EOF
Me.Lst_noms.AddItem rst(0)
rst.MoveNext
Loop
rst.Close
bd.Close
Set bd = Nothing
Set rst = Nothing
f_err_bye:
Exit Sub
f_err:
MsgBox Error$
Resume f_err_bye
End Sub
comme çà la liste est triée sans doublons, et peut étre remplie ou
modifiée quand on veut


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f7018$0$19471$

Bonjour

J'ai une colonne qui me sert de source pour un combobox mais je
souhaiterais


extraire les valeurs sans doublons.

Merci












SI
Le #1346045
Pierre
Ma version d'excel est 2000, DAO = 3.6
et mon classeur est enregistré
Merci


"Pierre CFI [mvp]" news:
..../...
quelle version de excel ? et quelle version de dao ?
quoique que ce message vient quand un paramétre est manquant ou faux
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")
ici en excel 97 (ton classeur est enregistré ?)


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f8eb6$0$19498$

Bonjour Pierre

Merci pour cette excellente idée mais aussi très claire.

Cependant serais-tu pourquoi lors de l'inialisation de la variable "bd"
le


code erreur suivant apparait :"trop de paramètre. 1 attendu".

Merci

"Pierre CFI [mvp]" news:
bonjour
je mets en téte de colonne un nom (ici NOM) je nomme la totalité de la
colonne ici Lst_nom

mon combo se nomme Lst_noms
Private Sub UserForm_Activate()
'// pas oublier de mettre Microsoft dao 3.x
'// dans Outils/références
Dim bd As DAO.Database
Dim rst As DAO.Recordset
On Error GoTo f_err
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel
8.0")

Set rst = bd.OpenRecordset("select NOM from lst_nom where NOM <>
''



Group by Nom order by nom")
Do Until rst.EOF
Me.Lst_noms.AddItem rst(0)
rst.MoveNext
Loop
rst.Close
bd.Close
Set bd = Nothing
Set rst = Nothing
f_err_bye:
Exit Sub
f_err:
MsgBox Error$
Resume f_err_bye
End Sub
comme çà la liste est triée sans doublons, et peut étre remplie ou
modifiée quand on veut


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f7018$0$19471$

Bonjour

J'ai une colonne qui me sert de source pour un combobox mais je
souhaiterais


extraire les valeurs sans doublons.

Merci
















Pierre CFI [mvp]
Le #1346026
bizarre
j'ai fais l'essai sur 97, xp et 2003 pas de pb
si tu veux je peux t'envoyer le classeur
tu me "mél" enléve xxx_

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de news:408fa89d$0$19484$
Pierre
Ma version d'excel est 2000, DAO = 3.6
et mon classeur est enregistré
Merci


"Pierre CFI [mvp]" news:
..../...
quelle version de excel ? et quelle version de dao ?
quoique que ce message vient quand un paramétre est manquant ou faux
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")
ici en excel 97 (ton classeur est enregistré ?)


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f8eb6$0$19498$

Bonjour Pierre

Merci pour cette excellente idée mais aussi très claire.

Cependant serais-tu pourquoi lors de l'inialisation de la variable "bd"
le


code erreur suivant apparait :"trop de paramètre. 1 attendu".

Merci

"Pierre CFI [mvp]" news:
bonjour
je mets en téte de colonne un nom (ici NOM) je nomme la totalité de la
colonne ici Lst_nom

mon combo se nomme Lst_noms
Private Sub UserForm_Activate()
'// pas oublier de mettre Microsoft dao 3.x
'// dans Outils/références
Dim bd As DAO.Database
Dim rst As DAO.Recordset
On Error GoTo f_err
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel
8.0")

Set rst = bd.OpenRecordset("select NOM from lst_nom where NOM <>
''



Group by Nom order by nom")
Do Until rst.EOF
Me.Lst_noms.AddItem rst(0)
rst.MoveNext
Loop
rst.Close
bd.Close
Set bd = Nothing
Set rst = Nothing
f_err_bye:
Exit Sub
f_err:
MsgBox Error$
Resume f_err_bye
End Sub
comme çà la liste est triée sans doublons, et peut étre remplie ou
modifiée quand on veut


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f7018$0$19471$

Bonjour

J'ai une colonne qui me sert de source pour un combobox mais je
souhaiterais


extraire les valeurs sans doublons.

Merci




















HD
Le #1346017
'trouver un texte (ou une partie d'un texte) dans une colonne
'en utilisant la fonction Match au lieu d'une boucle
' Stephen Bullen, mpep

Sub FindIt()
Dim oRange As Range
Dim vRow As Variant

Set oRange = ActiveSheet.Range("A1:A20000")

'Find the full cell contents
vRow = Application.Match("TheText", oRange, False)
'Find in part of the cell contents
'vRow = Application.Match("*TheText*", oRange, False)

If IsError(vRow) Then
Debug.Print "Not found"
Else
Debug.Print "Found in row " & vRow
End If
End Sub



--
@+
HD
SI
Le #1345922
Encore merci pour tout HD

"HD" news:c6ofn6$2tm3$
'trouver un texte (ou une partie d'un texte) dans une colonne
'en utilisant la fonction Match au lieu d'une boucle
' Stephen Bullen, mpep

Sub FindIt()
Dim oRange As Range
Dim vRow As Variant

Set oRange = ActiveSheet.Range("A1:A20000")

'Find the full cell contents
vRow = Application.Match("TheText", oRange, False)
'Find in part of the cell contents
'vRow = Application.Match("*TheText*", oRange, False)

If IsError(vRow) Then
Debug.Print "Not found"
Else
Debug.Print "Found in row " & vRow
End If
End Sub



--
@+
HD




SI
Le #1345920
Malheureusement, c'est un fichier de travail, mais dès que je peux je teste
ta methode sur un autre fichier et te tiens au courant.

Encore merci pour tes conseils.

"Pierre CFI [mvp]" news:
bizarre
j'ai fais l'essai sur 97, xp et 2003 pas de pb
si tu veux je peux t'envoyer le classeur
tu me "mél" enléve xxx_

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408fa89d$0$19484$

Pierre
Ma version d'excel est 2000, DAO = 3.6
et mon classeur est enregistré
Merci


"Pierre CFI [mvp]" news:
..../...
quelle version de excel ? et quelle version de dao ?
quoique que ce message vient quand un paramétre est manquant ou faux
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel
8.0")



ici en excel 97 (ton classeur est enregistré ?)


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f8eb6$0$19498$

Bonjour Pierre

Merci pour cette excellente idée mais aussi très claire.

Cependant serais-tu pourquoi lors de l'inialisation de la variable
"bd"




le
code erreur suivant apparait :"trop de paramètre. 1 attendu".

Merci

"Pierre CFI [mvp]" message de




news:
bonjour
je mets en téte de colonne un nom (ici NOM) je nomme la totalité
de la





colonne ici Lst_nom
mon combo se nomme Lst_noms
Private Sub UserForm_Activate()
'// pas oublier de mettre Microsoft dao 3.x
'// dans Outils/références
Dim bd As DAO.Database
Dim rst As DAO.Recordset
On Error GoTo f_err
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False,
"excel





8.0")
Set rst = bd.OpenRecordset("select NOM from lst_nom where NOM
<>





''
Group by Nom order by nom")
Do Until rst.EOF
Me.Lst_noms.AddItem rst(0)
rst.MoveNext
Loop
rst.Close
bd.Close
Set bd = Nothing
Set rst = Nothing
f_err_bye:
Exit Sub
f_err:
MsgBox Error$
Resume f_err_bye
End Sub
comme çà la liste est triée sans doublons, et peut étre remplie ou
modifiée quand on veut


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site perso
http://access.cfi.free.fr
"SI" a écrit dans le message de
news:408f7018$0$19471$

Bonjour

J'ai une colonne qui me sert de source pour un combobox mais je
souhaiterais


extraire les valeurs sans doublons.

Merci
























Publicité
Poster une réponse
Anonyme