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

Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

modus57

XLDnaute Occasionnel
Bonjour,

Suite à une discussion sur ce forum :
- Première question comment trier une liste sans doublons dans le ComboBox lorsqu'une ou plusieurs lettres sont saisies dans la TextBox.
- Deuxième question comment alimenter la ComboBox avec les données triées et sans doublons d'un classeur fermé

Je fais appel à vous et vous sollicite encore.

Ci-joint fichier pour mieux comprendre le problème.

Merci d'avance pour votre aide.
 

Pièces jointes

  • A-ListeIntuitiveFormulaireFilterInfo_1col - Copie.xlsm
    31 KB · Affichages: 76

Lone-wolf

XLDnaute Barbatruc
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonjour modus

C'est seulement entre nous d'accord?! Modus et bouche cousue . Je n'ai pas ouvert le classeur, mais je peux te proposer ceci:

Dans une colonne non utilisée séléctionne une cellule. Vas dans Formules > Définir un nom, donne lui "plage" comme nom et comme formule ='D:\Dossiers Excel\The Best Of VBA\Commerciaux\[Table.xls]Data'!$A$2:$A$37 < à modifier. Ensuite

Code:
Private Sub Workbook_Open()
Dim Chemin As String, Fichier As String
Chemin = "D:\Dossiers Excel\The Best Of VBA\Commerciaux\"
Fichier = "Table.xls"
ThisWorkbook.Names.Add "plage", _
 RefersTo:="='" & Chemin & "[" & Fichier & "]Data'!$A$2:$A$37"
Feuil1.Range("az2:az37") = "=plage"
End Sub



Private Sub UserForm_Activate()
ComboBox1 = ""
End Sub

Private Sub UserForm_Initialize()
Dim i As Integer
          With Feuil1
        For i = 2 To .Range("AZ65536").End(xlUp).Row
        ComboBox1 = .Range("AZ" & i)  
           'Remplissage de la ComboBox sans doublons
        If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("AZ" & i)
    Next i
    End With
End Sub

D'accord c'est un peu de boulot, mais ça t'évite de passer par ADODB (OLE DB). Pour le tri, c'est un peu plus compliqué pour moi.
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonjour le fil,
J'avais fait cela pour remplir un combobox avec classeur fermé.
Voici la macro commentée
Pour le trie sans doublon je pense q'il faudrait mettre les données dans un Scripting.Dictionary
avant de mettre en combobox
Bruno
Code:
Sub vachercher()
With UserForm1
.ComboBox1.Clear
Chemin = "'" & ThisWorkbook.Path & "\" 'le même dossier
Fichier = "[charpente.xls]" ' le nom du fichier à lire
Onglet = "Tuiles'!" 'le nom de l'onglet à lire
For k = 7 To 65000 'commencer à lire à la ligne 7
ChampALire = "R" & k & "C1" ' k est la ligne incrémentée C1 est col A C2 est B ainsi de suite
'ChampALire2 = "R" & k & "C2" 'si combobox a 2 colonnes
.ComboBox1.AddItem Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire)
'.ComboBox1.Column(1, .ComboBox1.ListCount - 1) = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire2)
If .ComboBox1.List(.ComboBox1.ListCount - 1) = 0 Then
.ComboBox1.RemoveItem (.ComboBox1.ListCount - 1)
Exit For 'si vide on quitte la boucle
End If
Next
.Show
End With
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonjour Jacky, .........(si je me trompe pas)
salut modus,
Macro sans doublon+trie en classeur fermé.
Bruno
Code:
Sub vachercher()
 Set dico = CreateObject("Scripting.Dictionary")
With UserForm1
.ComboBox1.Clear
Chemin = "'" & ThisWorkbook.Path & "\" 'le même dossier
Fichier = "[charpente.xls]" ' le nom du fichier à lire
Onglet = "Tuiles'!" 'le nom de l'onglet à lire
For k = 7 To 65000 'commencer à lire à la ligne 7
 ChampALire = "R" & k & "C1" ' k est la ligne incrémentée C1 est col A C2 est B ainsi de suite
 tx = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire)
  If tx = 0 Then Exit For
 dico(tx) = "" 
Next
a = dico.keys 'Obtient les éléments
For k = 0 To UBound(a) - 1 'trie éléments
 For b = k + 1 To UBound(a)
   If a(b) < a(k) Then
   temp = a(b)
   a(b) = a(k)
   a(k) = temp
   End If
 Next
Next
For k = 0 To dico.Count - 1 'mets éléments
.ComboBox1.AddItem a(k)
Next
.Show
End With
End Sub
PS petite rectif de la macro le 30/04 sur dico
 
Dernière édition:

modus57

XLDnaute Occasionnel
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonjour à vous

Je n'ai pas testé le code de Lone-wolf !

Si j'ai bien compris le code de youky(BJ) lance l'Userform, mais j'ai un petit bug sur la ligne : With UserForm1

Avez-vous une explication ?

Je me demande si la bonne solution serait de :

1. À l'ouverture du fichier ouvrir le fichier contenant les données, copier celle-ci dans un onglet de destination
les trier et supprimer les doublons

2. Fermer le fichier contenant les données sans l'enregistrer

C'est peut-être pas la meilleure méthode, mais elle permet de ne pas trier et supprimer les doublons dans le ComboBox.
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonjour,
C'est possible aussi de faire comme tu dis....
L'avantage de copier est si tu dois y chercher des infos en fonction du combobox.
Pour le bug>>> Vérifie le nom de l'userform
Si différent de UserForm1 mets le nom que tu as donné.
pense à bien modifier Chemin Fichier 7 et C1
7 >>>>commence à la ligne 7
C1 >>>est la colonne 1 C2 est col B
Cette façon de faire ne doit pas comporter de lignes vides sinon la boucle s'arrête.
Y a t'il beaucoup de lignes ?
Bruno

PS verifier que End With à bien été copié
 
Dernière édition:

modus57

XLDnaute Occasionnel
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Effectivement une petite faute de frappe dans le nom de l'Userform.

L'avantage de copier, permet de pêcher des infos dans le combobox.

Je vais tester la solution de Lone-wolf avant de noter la discussion comme résolue.

Merci pour votre aide
 

modus57

XLDnaute Occasionnel
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonjour youky(BJ), Lone-wolf

J'ais tester ta solution Lone-wolf elle a aussi l'avantage de copier les données dans une colonne plus simplement que la solution que j'envisageais

La discussion est résolue.

Encore merci pour votre aide
 

modus57

XLDnaute Occasionnel
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonjour à tous.

Je reviens sur cette discussion car je viens de constater que le code de youky(BJ) n'accepte pas les noms de fichier à lire avec une extension xlsm.

Comment contourner ce problème ?

Peut-être que ma solution …. est la bonne.

Existe-t-il une autre piste
 

youky(BJ)

XLDnaute Barbatruc
Re : Remplir un ComboBox avec une liste triée sans doublons depuis un classeur fermé

Bonsoir,
Fichier = "[charpente.xls]" ' le nom du fichier à lire
au lieu de .xls mettre .xlsm
Bruno
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…