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 : 20450
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} SUPPRESSION DES DOUBLONS DANS PLAGE EXCEL
Liminaire : La méthode Range.AdvancedFilter Action:=xlFilterInPlace, Unique:=True proposée par ...

{C# / C#.NET} TOOLTIP TEXT POUR LA LISTE DÉROULANTE D'UN COMBOBOX
Ce code permet d'afficher un ToolTip lors du survol de la dropdwonlist d'un combobox. Cette fonctio...

{C# / C#.NET} COLORCOMBOBOX, COMBO BOX PERMETTANT DE SÉLECTIONNER DES COULEURS
Pour un projet perso, j'ai besoin d'un combobox permettant de sélectionner une couleur. N'ayant pas...

{SQL} SUPPRESSION DE DOUBLONS
C'est une suite de requêtes qui permettent de supprimer les doublons d'une table. Il y en a d'autre ...

{Visual Basic, VB6, VB.NET, VB 2005} TABLES DE MULTIPLICATION
Pour faire réviser les tables aux tout petits. En VBA Excel. Une table par feuille, dans le sommaire...

{Visual Basic, VB6, VB.NET, VB 2005} COMBOBOX FAÇON ERRORPROVIDER
Ce que je reproche au contrôle ErrorProvider, dans le cas d'un formulaire contenant des onglets, c'e...

{Visual Basic, VB6, VB.NET, VB 2005} BOUTONSFACEID
Afficher les FacesID d'Excel dans un tableau.On peut aussi afficher toutes les FacesId (10038) dans ...

{Visual Basic, VB6, VB.NET, VB 2005} JEU DU CISEAUX
Pour l'été le petit jeu du ciseaux, de la feuille, de la pierre et du puits. Vous connaissez? Vous p...

{Delphi} TRI DANS LISTBOX/COMBOBOX (TSTRINGS)
D' après une question sur le forum : http://www.delphifr.com/infomsg_TRI-NUMERIQUE-SUR-LISTBOX_1050...

{Visual Basic, VB6, VB.NET, VB 2005} MENU CONTEXTUEL
Mettre vos applications favorites dans le menu contextuel du clic droit.Vous cherchez le chemin,vous...