Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Alimenter, trier et éliminer doublons dans des combobox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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

Merci pierrejean. Ton code est du tonnerre, il a considérablement diminué le nombre de lignes. Il me reste à le comprendre.
Encore merci et bonne soirée
 
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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

E
Réponses
3
Affichages
763
ExcelBeginner
E
R
Réponses
20
Affichages
4 K
RaVenSs
R
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…