VBA Eliminer les doublons dans Combobox

gusgus13

XLDnaute Nouveau
Au secours!

Bonjour à tous,

Je travaille actuellement sur EXCEL 2007 et fait de la vba. Malheureusement, je ne suis pas très douée mais apprends au fil des jours.

J'ai passé ma journée à chercher mais je n'ai pas trouver bien qu'il y a de nombreux posts sur internet mais rien ne marche!

Alors :
Tout d'abord, j'ai joint le fichier pour une meilleure compréhension!

J'ai deux feuilles dans mon fichier : Base_de_donnees et Accueil
Ma combobox se trouve dans un userform généré dans la feuille "Accueil"
Les éléments qui doivent apparaître dans cette combobox sont toutes les cellules non vides de la colonne A (sauf A1 qui est l'intitulé de la colonne) de la feuille "Base_de_donnees". Des cellules peuvent avoir une valeur identique, c'est pourquoi j'aimerais supprimer les doublons dans la combobox mais pas dans la feuille "Base_de_donnees".


Pour accéder à la combobox dans le fichier : "Mode administrateur"-->"Ajout"-->"Ajouter un sous-groupe"


Enfin bref, je suis complètement perdue alors n'importe quelle aide sera la bienvenue!

Merci à tous!
 

Pièces jointes

  • test.xls
    76.5 KB · Affichages: 200
  • test.xls
    76.5 KB · Affichages: 206
  • test.xls
    76.5 KB · Affichages: 222

RENAUDER

Nous a quitté
Repose en paix
Re : VBA Eliminer les doublons dans Combobox

Bonjour,

Regardes si pour ta Combobox du formulaire Mode_admin_ajout_sousgroupe ça te convient.
Code:
Private Sub UserForm_Initialize()
    Application.ScreenUpdating = False
    Dim NoDupes As New Collection
    Dim A As Variant
    Dim i As Integer
    Dim J As Integer
    Sheets("Base_de_donnees").Activate
    On Error Resume Next
    Range([A2], [A65536].End(xlUp)).Select
    A = Selection.Value
    For i = 1 To UBound(A, 1)
        NoDupes.Add A(i, 1), CStr(A(i, 1))
    Next i
    [A1].Select
    For J = 1 To NoDupes.Count
        Me.ComboBox1.AddItem NoDupes(J)
    Next J
End Sub
 

Pièces jointes

  • Pas de Doublons Cbo.xls
    65.5 KB · Affichages: 399
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA Eliminer les doublons dans Combobox

Bonjour Gugusse, JNP, Renauder, bonjour le forum,

Comme JNP, tiré du site de Jacques BOISGONTIER, le code commenté ci-dessous :
Code:
Private Sub UserForm_Initialize()
Dim sd As Object 'déclare la variable sd (Sans Doublons)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tbl As Variant 'déclare la variable tbl (TaBLeau)
Dim i As Integer 'déclare la variable i (incrément)
Dim j As Integer 'déclare la variable j (incrément)
Dim temp As Variant 'déclare la variable temp (valeur TEMPoraire)
 
Set sd = CreateObject("Scripting.Dictionary") 'définit la variable sd
With Sheets("Base_de_donnees") 'prend en compte l'onglet "Base_de_donnees"
    Set pl = .Range("A2:A" & .Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Base_de_donnees"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    sd(cel.Value) = "" 'alimente la liste sans doublons
Next cel 'prochaine cellule de la boucle
tbl = sd.keys 'définit le tableau des valeurs sans doublons
'tri alphabétique
For i = 0 To UBound(tbl) 'boucle 1 de 0 au nombre de valeur du tableau
    For j = 0 To UBound(tbl) 'boucle 2 de 0 au nombre de valeur du tableau
        If tbl(i) < tbl(j) Then 'condition : si la valeur de la boucle 1 est invérieure à la valeur de la boucle 2
            temp = tbl(i) 'définit la valeur temporaire temp
            tbl(i) = tbl(j) 'la valeur de la boucle un devient la valeur de la boucle 2
            tbl(j) = temp 'la valeur de la boucle deux devient la valeur temporaire temp
        End If 'fin de la condition
    Next j 'prochaine valeur de la boucle 2
Next i 'prochaine valeur de la boucle 1
Me.ComboBox1.List = tbl 'alimente la ComboBox1 sans doublons et trié par ordre alphabétique
End Sub
 

gusgus13

XLDnaute Nouveau
Re : VBA Eliminer les doublons dans Combobox

Bonjour à tous!

Merci vous êtes géniaux!!

Merci à tous ! Vos deux codes marchent parfaitement! J'ai pris celui de Robert comme il trie mes éléments par ordre alphabétique ! Merci aussi pour le site de JNP, il a l'air vraiment pas mal!

Je continue mon application! Si j'ai un souci, je chercherai évidemment tout d'abord par moi-même et si je bloque sur un point malgré les posts sur internet, je redemanderai de l'aide sur ce forum!

Bonne journée à tous!!!:cool::cool::cool:
 

RENAUDER

Nous a quitté
Repose en paix
Re : VBA Eliminer les doublons dans Combobox

Bonjour,

En réponse à gusgus je te joins le code précédemment envoyé avec avec un tri des données
Code:
Option Explicit
Private Sub UserForm_Initialize()
    Application.ScreenUpdating = False
    Dim NoDupes As New Collection
    Dim A As Variant: Dim i As Integer:   Dim J As Integer
    Dim Swap1 As String: Dim Swap2 As String
    Sheets("Base_de_donnees").Activate
    On Error Resume Next
    Range([A2], [A65536].End(xlUp)).Select
    A = Selection.Value
    For i = 1 To UBound(A, 1)
        NoDupes.Add A(i, 1), CStr(A(i, 1))
    Next i
      ' Tri des données
    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
    [A1].Select
    For J = 1 To NoDupes.Count
        Me.ComboBox1.AddItem NoDupes(J)
    Next J
End Sub
 

gusgus13

XLDnaute Nouveau
Re : VBA Eliminer les doublons dans Combobox

Rebonjour,

Merci pour ton code RENAUDER!

J'ai un petit problème avec le code de Robert que j'ai repris! En fait le tri alphabétique fonctionne mais le problème c'est qu'il y a distinction entre Majuscule et minuscule!

Par exemple, si un groupe s'appelle JULIE et un autre groupe s'appelle arnaud et bien JULIE sera placé avant arnaud parce qu'il est en majuscules!

Vous n'auriez pas une solution?

Merci encore =)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : VBA Eliminer les doublons dans Combobox

Bonjour,

Comparaison des temps de tri pour 1000 lignes

JB 0,03 sec
Robert 1 sec

Comparaison des temps de tri pour 2000 lignes


JB 0,06 sec
Robert 4 sec

Code:
Private Sub UserForm_Initialize()
  t = Timer ')
  Set f = Sheets("base_de_donnees")
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("a2:B" & f.[a65000].End(xlUp).Row)
    MonDico(UCase(c.Value)) = ""
  Next c
  temp = MonDico.keys
  Call tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
  MsgBox Timer() - t
End Sub

Sub tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call tri(a, g, droi)
  If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
 

Pièces jointes

  • F_sansDoublonsCompare.xls
    97 KB · Affichages: 245
Dernière édition:

gusgus13

XLDnaute Nouveau
Re : VBA Eliminer les doublons dans Combobox

Bonjour!!
c'est encore moi!! =)
Votre code marche à merveille mais il y a un petit bug que je viens de constater!!
Ma plage de données commence en A2 et non en A1 car en A1 c'est le titre de ma colonne qui ne doit pas être présent dans ma combobox.
Lorsque ma plage est vide, ma combobox devrait ne rien afficher... Or elle affiche un item vide et ma cellule A1...

Auriez-vous une solution à mon petit problème?

Merci d'avance !

=)
 

raphde

XLDnaute Nouveau
Re : VBA Eliminer les doublons

bonjour,

J'ai un fichier dans lequel en colonne A je dispose des numéros de comptes clients, et en colonne B le montant des commandes respectives pour chaque comte.
Je voudrais savoir si c'est possible, de créer une macro qui me supprime les doublons des Comptes clients,
et dans ce cas la, en colonne B avoir la somme des Montants pour un seul compte.

Je vous remercie de votre aide.

Ci- joint le fichier Excel.
 

Pièces jointes

  • Macro Extraction.xls
    20.5 KB · Affichages: 158

Discussions similaires

Réponses
13
Affichages
362

Statistiques des forums

Discussions
312 285
Messages
2 086 783
Membres
103 391
dernier inscrit
lrol