Alimenter, trier et éliminer doublons dans des combobox

J-Charles

XLDnaute Occasionnel
Bonsoir à tous
J'ai écrit quelques lignes de codes afin d'alimenter 2 combobox (FAI1 et FAI2) avec des données que je récupère dans 2 colonnes. Il s'agit de récupérer la chaîne de caractère se trouvant à droite du symbole @. Dans le fichier joint les 2 colonnes sont juxtaposées dans mon fichier de travail, elles sont séparées de plusieurs colonnes.
Les combobox doivent être triés et ne pas comporter de doublons.
Mon code semble fonctionner (je ne sais pas comment) mais comme je ne suis qu'un débutant j'ai l'impression qu'il est un peu lourd et qu'il pourrait être réduit de quelques lignes.
Si quelqu'un peut me venir en aide et éventuellement m'expliquer les défauts.
Je vous remercie par avance et vous souhaite une bonne soirée.
 

Pièces jointes

  • Essais Combobox.xlsm
    25.2 KB · Affichages: 27
  • Essais Combobox.xlsm
    25.2 KB · Affichages: 26
  • Essais Combobox.xlsm
    25.2 KB · Affichages: 28

pierrejean

XLDnaute Barbatruc
Re : Alimenter, trier et éliminer doublons dans des combobox

Bonjour J-Charles

Vois si cela te convient
NB: Pour un nb important de données il est possible d'opter pour une fonction TRI plus rapide
 

Pièces jointes

  • Essais Combobox.xlsm
    25.8 KB · Affichages: 42
  • Essais Combobox.xlsm
    25.8 KB · Affichages: 26
  • Essais Combobox.xlsm
    25.8 KB · Affichages: 25

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Alimenter, trier et éliminer doublons dans des combobox

Bonsoir,

Voir PJ

Code:
Private Sub UserForm_Initialize()
  Set f = Sheets("BD")
  Set champ1 = f.Range("a2:a" & f.[A65000].End(xlUp).Row)
  Set champ2 = f.Range("b2:b" & f.[b65000].End(xlUp).Row)
  Set d1 = CreateObject("Scripting.Dictionary")
  a = champ1.Value
  b = champ2.Value
  For Each c In a
    d1(Split(c, "@")(1)) = ""
  Next c
  For Each c In b
    d1(Split(c, "@")(1)) = ""
  Next c
  d = d1.keys
  Call Tri(d, LBound(d), UBound(d))
  Me.ComboBox1.List = d
  Me.combobox2.List = d
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
Formation Excel VBA JB
 

Pièces jointes

  • Essais Combobox-1.xlsm
    23.5 KB · Affichages: 23
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 487
Messages
2 088 833
Membres
103 971
dernier inscrit
abdazee