bonjour,
comment faire pour charger dans une liste de combobox des données qui ne
seraient pas répétées plusieurs fois (sans doublon). En effet dans ma liste
d'origine qui sert pour le "rowsource" du combobox, il y a plusieurs données
identiques
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LE TROLL
Bonsoir,
Tu peux déclarer une listBox (sorted=true) + (visiblúlse ' ça va + vite)
sub supDoublons() dim i as long list1.clear for i = 0 to combo1.listcount-1 list1.additem ta_donnée next i bis: for i = 0 to list1.listcount-2 if list1.list(i) = list1.list(i+1) then removeItem i list1.refresh goto bis end if next i combo1.clear for i = 0 to list1.listcount -1 combo1.addItem list1.list(i) next i end sub
---- OU le faire avec des variable en double boucle ----
sub supDoublons() dim x() as string dim i as long dim j as long dim nb as long ' nb = nombre_d'enregistrements redim x(nb) for i = 1 to nb x = enregistrement(i) next i for i = 1 to nb for j = 1 to nb if x(i) or x(j) = "" then: goto suite if i = j then: goto suite if x(i) = x(j) then x(j) = "" suite: next j next i combo1.clear for i = 1 to nb if x(i) <> "" then: combo1.addItem x(i) next i end sub ----------- Il y a peut être des erreurs, j'ai fait ça de tête, dis :o) --------
"laurent colledani" a écrit dans le message de news:
bonjour, comment faire pour charger dans une liste de combobox des données qui ne seraient pas répétées plusieurs fois (sans doublon). En effet dans ma liste d'origine qui sert pour le "rowsource" du combobox, il y a plusieurs données identiques
cordialement
Bonsoir,
Tu peux déclarer une listBox (sorted=true) + (visiblúlse ' ça va +
vite)
sub supDoublons()
dim i as long
list1.clear
for i = 0 to combo1.listcount-1
list1.additem ta_donnée
next i
bis:
for i = 0 to list1.listcount-2
if list1.list(i) = list1.list(i+1) then
removeItem i
list1.refresh
goto bis
end if
next i
combo1.clear
for i = 0 to list1.listcount -1
combo1.addItem list1.list(i)
next i
end sub
----
OU le faire avec des variable en double boucle
----
sub supDoublons()
dim x() as string
dim i as long
dim j as long
dim nb as long
'
nb = nombre_d'enregistrements
redim x(nb)
for i = 1 to nb
x = enregistrement(i)
next i
for i = 1 to nb
for j = 1 to nb
if x(i) or x(j) = "" then: goto suite
if i = j then: goto suite
if x(i) = x(j) then x(j) = ""
suite:
next j
next i
combo1.clear
for i = 1 to nb
if x(i) <> "" then: combo1.addItem x(i)
next i
end sub
-----------
Il y a peut être des erreurs, j'ai fait ça de tête, dis :o)
--------
"laurent colledani" <laurentcolledani@discussions.microsoft.com> a écrit
dans le message de news:
67EBB324-4DBC-47E3-B7E1-C015B4EBADDA@microsoft.com...
bonjour,
comment faire pour charger dans une liste de combobox des données qui ne
seraient pas répétées plusieurs fois (sans doublon). En effet dans ma
liste
d'origine qui sert pour le "rowsource" du combobox, il y a plusieurs
données
identiques
Tu peux déclarer une listBox (sorted=true) + (visiblúlse ' ça va + vite)
sub supDoublons() dim i as long list1.clear for i = 0 to combo1.listcount-1 list1.additem ta_donnée next i bis: for i = 0 to list1.listcount-2 if list1.list(i) = list1.list(i+1) then removeItem i list1.refresh goto bis end if next i combo1.clear for i = 0 to list1.listcount -1 combo1.addItem list1.list(i) next i end sub
---- OU le faire avec des variable en double boucle ----
sub supDoublons() dim x() as string dim i as long dim j as long dim nb as long ' nb = nombre_d'enregistrements redim x(nb) for i = 1 to nb x = enregistrement(i) next i for i = 1 to nb for j = 1 to nb if x(i) or x(j) = "" then: goto suite if i = j then: goto suite if x(i) = x(j) then x(j) = "" suite: next j next i combo1.clear for i = 1 to nb if x(i) <> "" then: combo1.addItem x(i) next i end sub ----------- Il y a peut être des erreurs, j'ai fait ça de tête, dis :o) --------
"laurent colledani" a écrit dans le message de news:
bonjour, comment faire pour charger dans une liste de combobox des données qui ne seraient pas répétées plusieurs fois (sans doublon). En effet dans ma liste d'origine qui sert pour le "rowsource" du combobox, il y a plusieurs données identiques
cordialement
Hervé
Bonsoir Laurent, Utilise une collection et gère l'erreur. Comme seules les clés uniques sont acceptées une erreur est générée si la clé ajoutée existe déjà, le fait d'ajouter comme clé ta valeur provoque une erreur si elle existe déjà (gérée par "On Error Resume Next") et donc passe à la suivante sans la prendre en compte. Pour l'exemple, la plage est dans la feuille "Feuil1" de A1 à Ax, adapte :
Private Sub UserForm_Initialize() Dim Tbl As New Collection Dim Plage As Range Dim I As Integer
With Worksheets("Feuil1") Set Plage = .Range(.[A1], .[A65536].End(xlUp)) End With On Error Resume Next For I = 1 To Plage.Rows.Count Tbl.Add Plage(I), CStr(Plage(I)) Next For I = 1 To Tbl.Count Me.ComboBox1.AddItem Tbl(I) Next I Set Plage = Nothing Set Tbl = Nothing End Sub
Hervé.
"laurent colledani" a écrit dans le message news:
bonjour, comment faire pour charger dans une liste de combobox des données qui ne seraient pas répétées plusieurs fois (sans doublon). En effet dans ma liste
d'origine qui sert pour le "rowsource" du combobox, il y a plusieurs données
identiques
cordialement
Bonsoir Laurent,
Utilise une collection et gère l'erreur.
Comme seules les clés uniques sont acceptées une erreur est générée si la
clé ajoutée existe déjà, le fait d'ajouter comme clé ta valeur provoque une
erreur si elle existe déjà (gérée par "On Error Resume Next") et donc passe
à la suivante sans la prendre en compte. Pour l'exemple, la plage est dans
la feuille "Feuil1" de A1 à Ax, adapte :
Private Sub UserForm_Initialize()
Dim Tbl As New Collection
Dim Plage As Range
Dim I As Integer
With Worksheets("Feuil1")
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
End With
On Error Resume Next
For I = 1 To Plage.Rows.Count
Tbl.Add Plage(I), CStr(Plage(I))
Next
For I = 1 To Tbl.Count
Me.ComboBox1.AddItem Tbl(I)
Next I
Set Plage = Nothing
Set Tbl = Nothing
End Sub
Hervé.
"laurent colledani" <laurentcolledani@discussions.microsoft.com> a écrit
dans le message news: 67EBB324-4DBC-47E3-B7E1-C015B4EBADDA@microsoft.com...
bonjour,
comment faire pour charger dans une liste de combobox des données qui ne
seraient pas répétées plusieurs fois (sans doublon). En effet dans ma
liste
d'origine qui sert pour le "rowsource" du combobox, il y a plusieurs
données
Bonsoir Laurent, Utilise une collection et gère l'erreur. Comme seules les clés uniques sont acceptées une erreur est générée si la clé ajoutée existe déjà, le fait d'ajouter comme clé ta valeur provoque une erreur si elle existe déjà (gérée par "On Error Resume Next") et donc passe à la suivante sans la prendre en compte. Pour l'exemple, la plage est dans la feuille "Feuil1" de A1 à Ax, adapte :
Private Sub UserForm_Initialize() Dim Tbl As New Collection Dim Plage As Range Dim I As Integer
With Worksheets("Feuil1") Set Plage = .Range(.[A1], .[A65536].End(xlUp)) End With On Error Resume Next For I = 1 To Plage.Rows.Count Tbl.Add Plage(I), CStr(Plage(I)) Next For I = 1 To Tbl.Count Me.ComboBox1.AddItem Tbl(I) Next I Set Plage = Nothing Set Tbl = Nothing End Sub
Hervé.
"laurent colledani" a écrit dans le message news:
bonjour, comment faire pour charger dans une liste de combobox des données qui ne seraient pas répétées plusieurs fois (sans doublon). En effet dans ma liste
d'origine qui sert pour le "rowsource" du combobox, il y a plusieurs données