Liste combobox triée par ordre alphabétique excluant les doublons et les vides

  • Initiateur de la discussion Initiateur de la discussion modus57
  • Date de début Date de début

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 !

modus57

XLDnaute Occasionnel
Bonjour le forum. 🙂

Pour remplir une ComboBox en fonction des données en colonne A j’ai trouvé ce code sur un autre forum :
Code:
Private Sub UserForm_Initialize()
Dim C As Range
Dim tablo()
Dim i As Integer, j As Integer
Dim temp As String
Dim present As Boolean
 
ReDim tablo(1 To 1)
 tablo(1) = Cells(2, 2)
 For Each C In Sheets("exemple 1").Range("A2:A" & Range("A65536").End(xlUp).Row)
     present = False
     For i = 1 To UBound(tablo)
         If tablo(i) = C Then present = True
     Next i
     If Not present Then
         ReDim Preserve tablo(1 To UBound(tablo) + 1)
         tablo(UBound(tablo)) = C
     End If
     For i = 1 To UBound(tablo)
         For j = 1 To UBound(tablo)
             If tablo(i) < tablo(j) Then
                 temp = tablo(i)
                 tablo(i) = tablo(j)
                 tablo(j) = temp
             End If
         Next j
     Next i
 Next C
ComboBox1.List = tablo
End Sub
Cela fonctionne très bien pour la ComboBox1.

Mais comment remplir la ComboBox2 avec les données de la colonne B, la ComboBox3 avec les données de la colonne C, sans être obligé de répéter chaque fois le code en modifiant la lettre de la colonne ?

Auriez-vous une solution, merci d’avance.
 
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Bonsoir modus57,

Sans certitude aucune puisqu'aucun fichier joint pour tester.
VB:
Private Sub UserForm_Initialize()
Dim C As Range
Dim tablo()
Dim i As Integer, j As Integer
Dim temp As String
Dim present As Boolean
Dim k as long

for k= 1 to 3
ReDim tablo(1 To 1)
 tablo(1) = Cells(2, k)
 For Each C In Sheets("exemple 1").cells(rows.count,k).End(xlUp).Row
     present = False
     For i = 1 To UBound(tablo)
         If tablo(i) = C Then present = True
     Next i
     If Not present Then
         ReDim Preserve tablo(1 To UBound(tablo) + 1)
         tablo(UBound(tablo)) = C
     End If
     For i = 1 To UBound(tablo)
         For j = 1 To UBound(tablo)
             If tablo(i) < tablo(j) Then
                 temp = tablo(i)
                 tablo(i) = tablo(j)
                 tablo(j) = temp
             End If
         Next j
     Next i
 Next C
me.controls("ComboBox" & k).List = tablo
next k
End Sub
 
Dernière édition:
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

(re)

Après m'être penché sur votre code, je vous proposerai plutôt:
VB:
Private Sub UserForm_Initialize()
Dim C As Range, tablo(), temp
Dim i As Integer, j As Integer, k As Long
Dim present As Boolean, ech As Boolean

For k = 1 To 3
  ReDim tablo(1 To 1)
   tablo(1) = Cells(2, k)
   For Each C In Sheets("exemple 1").Range(Cells(2, k), Cells(Rows.Count, k).End(xlUp))
       present = False
       For i = 1 To UBound(tablo)
           If tablo(i) = C Then
              present = True
              Exit For
            End If
       Next i
       If Not present Then
           ReDim Preserve tablo(1 To UBound(tablo) + 1)
           tablo(UBound(tablo)) = C
       End If
    Next C
    
    Do
    ech = False
       For i = 1 To UBound(tablo) - 1
          If tablo(i + 1) < tablo(i) Then
              temp = tablo(i)
              tablo(i) = tablo(i + 1)
              tablo(i + 1) = temp
              ech = True
          End If
       Next i
    Loop Until Not ech
  Me.Controls("ComboBox" & k).List = tablo
Next k
End Sub
 

Pièces jointes

Dernière édition:
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Bonsoir mapomme, BOISGONTIER.

Merci pour vos réponses.

JB j'ai cliqué sur votre lien, le code que vous proposez ne répond pas à ma question.

Par contre celui de mapomme convient, sauf petit détail, si des cellules sont vides dans les colonnes A-B-C, au déroulement des ComboBox 1-2-3 la première donnée est vide ?

Est-ce possible de corriger ce petit problème.

@ + modus57
 
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

(re)Bonsoir Modis57,

sauf petit détail, si des cellules sont vides dans les colonnes A-B-C, au déroulement des ComboBox 1-2-3 la première donnée est vide ?
Est-ce possible de corriger ce petit problème.

Voir le fichier joint. Rajouté la ligne suivante juste avant la ligne du "Next k":
Code:
If Me.Controls("ComboBox" & k).List(0) = "" Then Me.Controls("ComboBox" & k).RemoveItem 0
 

Pièces jointes

Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Pour 1.000 lignes, le programme initial prend 37 secondes
C'est un bon exemple de ce qu'il ne faut pas faire.
Le mien 0,04 s

JB
 

Pièces jointes

Dernière édition:
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Bonjour BOISGONTIER 🙂,

Hé oui! C'est pas faux. Mais volontairement, j'ai conservé l'algo du fichier initial car pas de fichier fourni par l'initiateur du fil...
 
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Bonjour BOISGONTIER , mapomme.🙂

Effectivement j’aurais dû joindre un fichier, désolé !

J’opte pour votre solution BOISGONTIER nettement plus rapide.

Une question subsidiaire, dans votre formulaire les comboBox ont le fond blanc.

J’aurais aimé savoir si on pouvait changer la couleur de fond (exemple bleu clair) au moment où l’on clique avec la souris sur un comboBox et quand on passe au suivant il reprenne sa couleur de fond blanc.

L’utilisation des évènements 'Enter' et 'Exit' pour 3 combobox n’est pas contraignante, mais en admettant que l’userform en contienne plusieurs dizaine, quelle est la procédure à suivre ?

Un module de classe peut-être, pourriez-vous m’aider, car j’ai peu de connaissance dans ce domaine.

Est-ce nécessaire de créer une nouvelle discussion ?

@+
 
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Bonjour le forum
Bonjour modus57, bonjour mapomme, bonjour BOISGONTIER

La dernière réponse à ta question relative aux modules de classes faisant référence aux évènements, se trouve sur ce lien :
https://www.excel-downloads.com/threads/exemples-modules-de-classe.111527/
(Module de classe n° 03). Je suis certain que tu trouveras ta réponse - Attention, il faut attendre un peu avant le téléchargement, pub oblige.
 
Dernière édition:
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Bonjour,


Cf PJ

Code:
Module de classe

Public WithEvents GrCbx As Msforms.ComboBox
Private Sub GrCbx_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  For i = 1 To 3
    GrCbx.Parent("Combobox" & i).BackColor = RGB(255, 255, 255)
  Next
  GrCbx.BackColor = RGB(255, 0, 0)
End Sub

Code:
Option Compare Text
Dim Cbx(1 To 10) As New ClasseCbx
Private Sub UserForm_Initialize()
  Dim temp()
  For i = 1 To 3
   Set Cbx(i).GrCbx = Me("ComboBox" & i)
  Next i
  Set f = Sheets("exemple 1")
  For col = 1 To 3
    Set MonDico = CreateObject("Scripting.Dictionary")
    derlig = f.Cells(65000, col).End(xlUp).Row
    For Each C In Range(f.Cells(2, col), f.Cells(derlig, col))
      If C.Value <> "" Then MonDico.Item(C.Value) = ""
    Next C
    temp = MonDico.keys
    Call tri(temp, LBound(temp), UBound(temp))
    Me("ComboBox" & col).List = temp
  Next col
End Sub

Formulaire & classes
Création de classe

JB
 

Pièces jointes

Dernière édition:
Re : Liste combobox triée par ordre alphabétique excluant les doublons et les vides

Bonjour BOISGONTIER, bonjour Eric C. 😀

Je vous adresse tardivement mes remerciements, à BOISGONTIER pour la réponse à ma question et à Eric C pour le lien qui me permettra de me familiariser avec les modules de classes.

Cordiales salutations.
 
- 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

Réponses
8
Affichages
233
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
144
Réponses
3
Affichages
193
Réponses
8
Affichages
468
Réponses
4
Affichages
177
Réponses
10
Affichages
281
Réponses
5
Affichages
232
Retour