bonsoir a tous
j'utilise cette ligne de code pour remplir une combo
ComboBox1.RowSource = "N1:N" & ActiveSheet.UsedRange.Rows.Count
que faut il rajouter pour qu'il ne m'affiche pas les doublons et que la liste
affichee
soit trier par ordre alphabetique
merci pour vos conseils
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Srogeau,
Voici une façon de faire qui peut sembler un peu compliquer mais qui est très efficace... tu n'as qu'à suivre les indications...
TU NE DOIS PAS UTILISER LA PROPRIÉTÉ ROWSOURCE DU COMBOBOX ...laisse-la vide ...
À l'aide d'une fonction utilisant ADO (activex data objet), il est possible de combiner plusieurs opérations dans la même :
A ) Éliminer les doublons B ) Trier les items du combobox par ordre croissant C ) Éliminer les lignes(entrées) vides si il y en a dans la plage de cellules.
Pour ce faire, ajouter la bibliothèque suivante à ton projet : "Microsoft Activex Data Object 2.0 Librairy"
Le nom de la feuille et la plage de cellules doivent être adapté selon ton projet.
Selon que ta plage de cellules a une étiquette de colonne tu devras utiliser dans cette ligne de code qui fait référence à une fonction différente...
à copier dans le module du formulaire '--------------------------------------------- Private Sub UserForm_Initialize()
Dim Rg As Range, Fichier As Workbook
Set Fichier = ThisWorkbook
With Worksheets("Denis") Set Rg = Range("A1:A" & .Range("A65536").End(xlUp).Row) End With
Me.ComboBox1.List = MaListe(Rg, Fichier)
Set Fichier = Nothing: Set Rg = Nothing
End Sub '---------------------------------------------
'à copier dans un modules standard 'Si ta plage de cellules CONTIENT une étiquette de colonne, utilise ceci : '--------------------------------------------- Public Function MaListe(Rg As Range, Fichier As Workbook)
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset Dim Requete As String, NomColonne As String
MaListe = Application.Transpose(Rst.GetRows) ThisWorkbook.Names(Rg(1, 1).Text).Delete Rst.Close: Conn.Close Set Rst = Nothing: Set Conn = Nothing
End Function '---------------------------------------------
'à copier dans un modules standard 'Si ta plage de cellules NE CONTIENT PAS d'étiquette de colonne, utilise ceci : '--------------------------------------------- Public Function MaListe1(Rg As Range, Fichier As Workbook)
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset Dim Requete As String
Rg.Name = "NomColonne"
Requete = "SELECT f1 From NomColonne " & vbCrLf & _ "Where f1 <> Null " & vbCrLf & _ "Group By f1 ORDER By f1"
Set Conn = New ADODB.Connection Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Fichier.FullName & ";" & _ "Extended Properties=""Excel 8.0;HDR=No;"""
Rst.Close: Conn.Close Set Rst = Nothing: Set Conn = Nothing
End Function '---------------------------------------------
Salutations!
"Srogeau" a écrit dans le message de news: bonsoir a tous j'utilise cette ligne de code pour remplir une combo ComboBox1.RowSource = "N1:N" & ActiveSheet.UsedRange.Rows.Count que faut il rajouter pour qu'il ne m'affiche pas les doublons et que la liste affichee soit trier par ordre alphabetique merci pour vos conseils
Bonjour Srogeau,
Voici une façon de faire qui peut sembler un peu compliquer mais qui est très efficace... tu n'as qu'à suivre les
indications...
TU NE DOIS PAS UTILISER LA PROPRIÉTÉ ROWSOURCE DU COMBOBOX ...laisse-la vide ...
À l'aide d'une fonction utilisant ADO (activex data objet), il est
possible de combiner plusieurs opérations dans la même :
A ) Éliminer les doublons
B ) Trier les items du combobox par ordre croissant
C ) Éliminer les lignes(entrées) vides si il y en a dans la plage de cellules.
Pour ce faire, ajouter la bibliothèque suivante à ton projet :
"Microsoft Activex Data Object 2.0 Librairy"
Le nom de la feuille et la plage de cellules doivent être adapté
selon ton projet.
Selon que ta plage de cellules a une étiquette de colonne tu devras
utiliser dans cette ligne de code qui fait référence à une fonction différente...
à copier dans le module du formulaire
'---------------------------------------------
Private Sub UserForm_Initialize()
Dim Rg As Range, Fichier As Workbook
Set Fichier = ThisWorkbook
With Worksheets("Denis")
Set Rg = Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
Me.ComboBox1.List = MaListe(Rg, Fichier)
Set Fichier = Nothing: Set Rg = Nothing
End Sub
'---------------------------------------------
'à copier dans un modules standard
'Si ta plage de cellules CONTIENT une étiquette de colonne, utilise ceci :
'---------------------------------------------
Public Function MaListe(Rg As Range, Fichier As Workbook)
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, NomColonne As String
MaListe = Application.Transpose(Rst.GetRows)
ThisWorkbook.Names(Rg(1, 1).Text).Delete
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
'à copier dans un modules standard
'Si ta plage de cellules NE CONTIENT PAS d'étiquette de colonne, utilise ceci :
'---------------------------------------------
Public Function MaListe1(Rg As Range, Fichier As Workbook)
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String
Rg.Name = "NomColonne"
Requete = "SELECT f1 From NomColonne " & vbCrLf & _
"Where f1 <> Null " & vbCrLf & _
"Group By f1 ORDER By f1"
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"""
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
Salutations!
"Srogeau" <srogeau@aol.com> a écrit dans le message de news:20040606170849.00400.00000560@mb-m14.aol.com...
bonsoir a tous
j'utilise cette ligne de code pour remplir une combo
ComboBox1.RowSource = "N1:N" & ActiveSheet.UsedRange.Rows.Count
que faut il rajouter pour qu'il ne m'affiche pas les doublons et que la liste
affichee
soit trier par ordre alphabetique
merci pour vos conseils
Voici une façon de faire qui peut sembler un peu compliquer mais qui est très efficace... tu n'as qu'à suivre les indications...
TU NE DOIS PAS UTILISER LA PROPRIÉTÉ ROWSOURCE DU COMBOBOX ...laisse-la vide ...
À l'aide d'une fonction utilisant ADO (activex data objet), il est possible de combiner plusieurs opérations dans la même :
A ) Éliminer les doublons B ) Trier les items du combobox par ordre croissant C ) Éliminer les lignes(entrées) vides si il y en a dans la plage de cellules.
Pour ce faire, ajouter la bibliothèque suivante à ton projet : "Microsoft Activex Data Object 2.0 Librairy"
Le nom de la feuille et la plage de cellules doivent être adapté selon ton projet.
Selon que ta plage de cellules a une étiquette de colonne tu devras utiliser dans cette ligne de code qui fait référence à une fonction différente...
à copier dans le module du formulaire '--------------------------------------------- Private Sub UserForm_Initialize()
Dim Rg As Range, Fichier As Workbook
Set Fichier = ThisWorkbook
With Worksheets("Denis") Set Rg = Range("A1:A" & .Range("A65536").End(xlUp).Row) End With
Me.ComboBox1.List = MaListe(Rg, Fichier)
Set Fichier = Nothing: Set Rg = Nothing
End Sub '---------------------------------------------
'à copier dans un modules standard 'Si ta plage de cellules CONTIENT une étiquette de colonne, utilise ceci : '--------------------------------------------- Public Function MaListe(Rg As Range, Fichier As Workbook)
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset Dim Requete As String, NomColonne As String
MaListe = Application.Transpose(Rst.GetRows) ThisWorkbook.Names(Rg(1, 1).Text).Delete Rst.Close: Conn.Close Set Rst = Nothing: Set Conn = Nothing
End Function '---------------------------------------------
'à copier dans un modules standard 'Si ta plage de cellules NE CONTIENT PAS d'étiquette de colonne, utilise ceci : '--------------------------------------------- Public Function MaListe1(Rg As Range, Fichier As Workbook)
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset Dim Requete As String
Rg.Name = "NomColonne"
Requete = "SELECT f1 From NomColonne " & vbCrLf & _ "Where f1 <> Null " & vbCrLf & _ "Group By f1 ORDER By f1"
Set Conn = New ADODB.Connection Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Fichier.FullName & ";" & _ "Extended Properties=""Excel 8.0;HDR=No;"""
Rst.Close: Conn.Close Set Rst = Nothing: Set Conn = Nothing
End Function '---------------------------------------------
Salutations!
"Srogeau" a écrit dans le message de news: bonsoir a tous j'utilise cette ligne de code pour remplir une combo ComboBox1.RowSource = "N1:N" & ActiveSheet.UsedRange.Rows.Count que faut il rajouter pour qu'il ne m'affiche pas les doublons et que la liste affichee soit trier par ordre alphabetique merci pour vos conseils