Les Snippets

Connexion

Supprimer les doublons d'un combobox

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 23/04/2007 09:38:19 et initié par OneHacker [Liste]
Date de mise à jour : 03/06/2007 16:52:28
Vue : 29321
Catégorie(s) : Control
Langages dispo pour ce code :
- VB 2005, VB.NET 1.x
- VB6, VBA
- VB6, VBA
- Javascript
- C# 1.x, C# 2.x
- Delphi 5
- Delphi 5
- VBA



Langage : VB.NET 1.x , VB 2005
Date ajout : 23/04/2007
Posté par OneHacker [Liste]
DateMAJ : 23/04/2007
 Dim cResult(cbTest.Items.Count) As String
        For Each item As String In cbTest.Items
            cResult(cbTest.Items.IndexOf(item)) = item
        Next
        cResult.Sort(cResult)
        cResult.Reverse(cResult)
        Dim newindex As Integer
        For Each item As String In cResult
            If item Is Nothing Then
                newindex = cResult.IndexOf(cResult, item)
                Exit For
            End If
        Next

        Dim cnewResult(newindex - 1)
        cResult.Copy(cResult, 0, cnewResult, 0, newindex)
        cnewResult.Sort(cnewResult)
        cbTest.Items.Clear()
        cbTest.Items.AddRange(cnewResult)
        MsgBox("End Clear")
Remarque :
cbTest est un combobox
Mettre le code dans une procédure
Langage : VB6 , VBA
Date ajout : 23/04/2007
Posté par mortalino [Liste]
Private Sub NoDupesInCombo(ByRef cbo As ComboBox)
    Dim As Long, j As Long
    
    For i = To cbo.ListCount - 1
        For j = cbo.ListCount - To i + 1  Step -1
            If cbo.List(i) = cbo.List(j) Then  cbo.RemoveItem (j)
        Next j
    Next i
End Sub
Private Sub UserForm_Initialize() 'Form_Load pour  vb6
With ComboBox1
    .AddItem "1"
    .AddItem "2"
    .AddItem "3"
    .AddItem "1"
    .AddItem "2"
    .AddItem "3"
    .AddItem "1"
    .AddItem "1"
    .AddItem "2"
    .AddItem "2"
    .AddItem "3"
    .AddItem "3"
End With
End Sub

' *** Exemple d'appelle  :
Private Sub CommandButton1_Click()
    Call NoDupesInCombo(Me.ComboBox1)
End Sub
Langage : VB6 , VBA
Date ajout : 24/04/2007
Posté par jrivet [Liste]
DateMAJ : 24/04/2007
Dim i As Integer
Dim Elements As New Collection
   On Error Resume Next
       'Pour chaque éléments de la combo
       For i = 0 To Combo1.ListCount - 1
           'On l'ajoute a la collection
           'Si il existe déja => Erreur (ignorée)
           Call Elements.Add(Combo1.List(i), Combo1.List(i))
       Next
   On Error GoTo 0
   
   'On Vide le Combo
   Call Combo1.Clear
   'POur chaque éléments de la collection
   For i = 1 To Elements.Count
       'On l'ajoute au combo
       Call Combo1.AddItem(Elements(i))
   Next 
Remarque :
Ce code utilise Les collections (peu être un peu trop juste pour des doublons mais ca montre le principe).
Code à placer aussi dans une procédure. Combo1 est le comboBox.
Langage : Javascript
Date ajout : 26/04/2007
Posté par bultez [Liste]

<select  id="combobox"
            size=5>
    <option>1
    <option>2
    <option>3
    <option>1
    <option>2
    <option>3
    <option>1
    <option>1
    <option>2
    <option>2
    <option>3
    <option>3
</select>
<script type="text/javascript">
    var sel=document.getElementById("combobox");
    var i=0;
    do
    {
        j=i+1;
        do
        {
            if ( sel.options[i].text==sel.options[j].text )
                       {    sel.remove(j);    }
            else    {    j++;    }
        }    while ( j<sel.length )
        i++;
    }    while ( i<(sel.length-1) )
</script>    

Langage : C# 1.x , C# 2.x
Date ajout : 27/04/2007
Posté par Bidou [Liste]
DateMAJ : 27/04/2007

for(int i=0; i<this.comboBox.Items.Count - 1; i++)
{
   for (int j = this.comboBox.Items.Count - 1; j>i; j--)
   {
      if (comboBox.Items[i] == comboBox.Items[j])
      {
         comboBox.Items.RemoveAt(j);
      }
   }
}

Langage : Delphi 5
Date ajout : 20/05/2007
Posté par japee [Liste]
DateMAJ : 02/06/2007
procedure DeleteDoublets(const AList: TStrings);
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  with StringList do
  try
    Sorted := True;    
    Assign(AList);
    AList.Assign(StringList);
  finally
    Free;
  end;
end;
// exemple d'utilisation :
procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteDoublets(ComboBox1.Items);
end;
Remarque :
Cette fonction s'applique à tous les objets contenant une liste de chaînes : TComboBox, TMemo, TListBox, etc...
A noter que la propriété TStringList.Duplicates (librement consultable dans l'unité Classe.pas, ainsi que dans l'aide en ligne de Delphi, touche F1) est à dupIgnore par défaut, mais c'est elle qui explique le fonctionnement du code.
Langage : Delphi 5
Date ajout : 03/06/2007
Posté par DRJEROME [Liste]
DateMAJ : 03/06/2007

Autre méthode en utilisant uniquement le Combobox :


var   i: Integer; begin   with ComboBox1.Items do     for i:= Count - 1 downto 1 do       if IndexOf(Strings[i]) < i then         Delete(i); end;
Ainsi on peut garder l'ordre d'origine des items. Si on veut classer par ordre alphabétique : il suffit de
 mettre la propriété "Sorted" du Combobox1 à true (ou mettre Combobox1.Sorted:=True) J'ai mis "downto 1" (et pas "downto 0") car l'item "0" n'a pas besoin d'être traité Pour les puristes une boucle "try" peut être rajoutée. Toutefois le code ne coince pas même s'il n'y a aucun item dans le Combobox. Le même raisonnement peut être utilisé pour l'élimination de doublons dans une liste d'éléments (TStringlist par exemple) en gardant l'ordre d'origine (càd qu'on enlève les "Add" supplémentaires supposés avoir été rajoutés ultérieurement) drjerome
Langage : VBA
Date ajout : 11/03/2009
Posté par bigfish_le vrai [Liste]
' a mettre dans un module
Sub ListeSansDoublon(ByRef MaPlage As Range, ByRef MaCombobox As ComboBox)
    ' on commence par verifier ce qui a été passé en parametre
    If Not MaCombobox Is Nothing And Not MaPlage Is Nothing Then
        If TypeOf MaCombobox Is ComboBox Then
            Application.ScreenUpdating = False
            ' utilisation du filre de donnée élaboré
            MaPlage.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
            ' le filtre élaboré a besoin d'un colonne de donnée avec etiquette
            ' donc pour ne pas mettre cette etiquette dans la liste on se decale d'une ligne vers le bas
            Set MaPlage = MaPlage.Offset(1, 0).Resize(MaPlage.Rows.Count - 1, 1)
            ' les données en doubles on été cachées par le filtre
            ' il suffit donc de ne recupérer que ce qui est visible
            Set MaPlage = MaPlage.SpecialCells(xlCellTypeVisible)
            ' comme on ne peut pas attribuer les valeurs d'une plage composée de plusieurs area a une combobox
            ' on vas contourner le probleme par un copy paste des valeurs sur une plage temporaire
            MaPlage.Copy
            Range("Z1").PasteSpecial Paste:=xlPasteValues ' ici la plage temporaire est la colonne Z
            MaCombobox.List() = Selection.Value
            ' on desactive le filtre
            ActiveSheet.ShowAllData
            ' on efface la zone temporaire
            Selection.ClearContents
            ' on centre l'affichage sur la plage d'origine
            MaPlage.Cells(1, 1).Activate
            Application.ScreenUpdating = True
        End If
    End If
End Sub
Remarque :
Code sans boucle mais specifique au VBA excel.

Snippets en rapport avec : Combobox, Doublons



Codes sources en rapport avec : Combobox, Doublons

{Visual Basic, VB6, VB.NET, VB 2005} RECETTE A PARTIR WPF
J'ai écris cette application de recette de cuisine qui non seulement permet de decrire le plat et le...

{JAVA / J2EE} JCOMBOBOX EN CASCADE
Cette source montre comment créer deux combobox pour lesquelles les données contenues dans la combob...

{PHP} RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT LE OU LES CHAMPS SUR LESQUELS LA RECHERCHE S'EFFECTUE.
Scripts php qui permettent la recherche des doublons sur une table mysql. Il est nécessaire d'intro...

{Visual Basic, VB6, VB.NET, VB 2005} PARAMETRES SETTINGS VBA
Les paramètres Settings existent en VB.Net. Mais en vba, je n'ai rien trouvé! J'ai donc enregistré l...

{Visual Basic, VB6, VB.NET, VB 2005} BOLETUS 2.0
Un programme qui sert pour déterminer espéces du genre Boletus (champignons) selon les caracteres se...

{C# / C#.NET} FAIRE AVANCER UNE PROGRESSBAR EN FONCTION D'UN NOMBRE DE COMBOBOX REMPLIES
Ce code vous permet de faire avancer une progressbar en fonction du nombre de combobox remplies. Si...

{Visual Basic, VB6, VB.NET, VB 2005} [VBA VB6] FORCER L'OUVERTURE D'UN COMBOBOX
Ce classeur démontre la possibilité d'opérer une sélection sur un ComboBox, initialiser le suivant e...

{Visual Basic, VB6, VB.NET, VB 2005} TROUSSE A PHARMACIE 2
Bonsoir, J'ai modifié la version initiale "TROUSSE A PHARMACIE". J'ai introduit un commondialog ...

{Visual Basic, VB6, VB.NET, VB 2005} TROUSSE À PHARMACIE
Ce programme permet de répertorier les médicaments de notre pharmacie dans une listview selon leur ...

{Visual Basic, VB6, VB.NET, VB 2005} LISTE DÉROULANTE MULTI COLONNES POUR UN COMBOBOX D'UN DATAGRIDVIEW UTILISANT UN DATAGRIDVIEW POUR LA LISTE.
Un datagridview est utilisé plutôt que de sous-classer l'affichage, ce qui permet - d'avoir une list...