-----Message d'origine-----
Bonjour petchy,
Voici 3 façons de faire :
Le premier exemple si ta plage de cellules contenant ton
combobox n'est pas énorme.
Le deuxième exemple est plus rapide sur une grande plage
de cellule mais requiert d'ajouter une référence au
Le deuxième exemple vient en 2 versions selon qu'un
étiquette est présente ou non dans ta plage de cellules
ton combobox.
Amuse-toi bien,
Salutations!
************ PREMIER EXEMPLE****************
Voici un exemple comment trier par ordre croissant le
contenu
d'un combobox avec l'aide d'une fonction
Si tu utilises ceci, tu ne dois pas utiliser la
propriété "RowSource"
du combobox pour définir son contenu.
Tu dois adapter le nom de la feuille et la plage de
cellules définies
dans cette exemple selon ton projet.
'--------------------------------------------------------
-------
Private Sub UserForm_Initialize()
Dim Rg As Range, Tblo As Variant
Set Fichier = ThisWorkbook
With Worksheets("Denis")
Set Rg = Range("A1:A" & .Range("A65536").End
(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = BubbleSort(Tblo)
Set Rg = Nothing
End Sub
'--------------------------------------------------------
-------
' À copier dans un Module Standard
Public Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'--------------------------------------------------------
-------
************ DEUXIÈME EXEMPLE****************
À 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...
Me.ComboBox1.List = MaListe(Rg, Fichier) 'Avec étiquette
OU
Me.ComboBox1.List = MaListe1(Rg, Fichier) 'Sans étiquette
à 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
Rg.Name = Rg(1, 1).Text
NomColonne = Fichier.Names(Rg(1, 1).Text).Name
Requete = "SELECT " & NomColonne & " From " & NomColonne
& "" _
& vbCrLf & "Where " & NomColonne & " <> Null " &
vbCrLf & _
"Group By " & NomColonne & " ORDER By " & NomColonne
& ""
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"""
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
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.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
MaListe1 = Application.Transpose(Rst.GetRows)
Fichier.Names("NomColonne").Delete
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
************** DAO SOLUTION******************
Tu ajoutes la bibliothèque suivante ;
"Microsoft DAO 3.51 Objects Librairy"
ATTENTION : Vous allez éprouver des difficultés si les
données
de la plage n'appartiennent pas au même type comme par
exemple du Numérique avec du texte. La liste ne
contiendra
qu'un type de données...
2 Procédures selon que ta colonne a une étiquette de
colonnes ou non.
Si ta plage de cellules a une étiquette de colonne
L'étiquette ne fera pas parti de la liste du combobox
'-------------------------------------------
Private Sub UserForm_Initialize()
'Avec Étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String, Titre As String
With Worksheets("Denis")
Set Rg = .Range("A1:A" & .Range("A65356").End
(xlUp).Row)
Rg.Name = "NomColonne"
Titre = Rg(1, 1).Text
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT " & Titre & " From NomColonne " &
vbCrLf & _
"Where " & Titre & " <> Null " & vbCrLf
& _
"Group By " & Titre & " ORDER By " &
Titre & ""
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Rst.MoveNext
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close
bd.Close
Set Rg = Nothing
Set Rst = Nothing
Set bd = Nothing
End Sub
'-------------------------------------------
Sans étiquettes de colonne, la première cellule de la
plage signifiée
dans la procédure doit être vide. Avec DAO, on ne peut
spécifier
explicitement comme ADO que l'étiquette est absente.
Pour DAO,
la première donnée est résevée au nom du champ.
'--------------------------------------------
Private Sub UserForm_Initialize()
'Sans étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String
With Worksheets("Denis")
.Range("A1:A" & .Range("A65356").End
(xlUp).Row).Name = "NomColonne"
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT F1 From NomColonne " & vbCrLf & _
"Where F1 <> Null " & vbCrLf & _
"Group By F1 ORDER By F1"
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close 'ferme le recordset
bd.Close
'Libère la mémoir des objets
Set Rst = Nothing
Set bd = Nothing
Set Rg = Nothing
End Sub
'--------------------------------------------
"petchy" a écrit
dans le message de
news:10b3f01c440a0$dac0f400$
bonjour
comment mettre par ordre alphabétique un combobox qui se
trouve dans un USF
.
-----Message d'origine-----
Bonjour petchy,
Voici 3 façons de faire :
Le premier exemple si ta plage de cellules contenant ton
combobox n'est pas énorme.
Le deuxième exemple est plus rapide sur une grande plage
de cellule mais requiert d'ajouter une référence au
Le deuxième exemple vient en 2 versions selon qu'un
étiquette est présente ou non dans ta plage de cellules
ton combobox.
Amuse-toi bien,
Salutations!
************ PREMIER EXEMPLE****************
Voici un exemple comment trier par ordre croissant le
contenu
d'un combobox avec l'aide d'une fonction
Si tu utilises ceci, tu ne dois pas utiliser la
propriété "RowSource"
du combobox pour définir son contenu.
Tu dois adapter le nom de la feuille et la plage de
cellules définies
dans cette exemple selon ton projet.
'--------------------------------------------------------
-------
Private Sub UserForm_Initialize()
Dim Rg As Range, Tblo As Variant
Set Fichier = ThisWorkbook
With Worksheets("Denis")
Set Rg = Range("A1:A" & .Range("A65536").End
(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = BubbleSort(Tblo)
Set Rg = Nothing
End Sub
'--------------------------------------------------------
-------
' À copier dans un Module Standard
Public Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'--------------------------------------------------------
-------
************ DEUXIÈME EXEMPLE****************
À 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...
Me.ComboBox1.List = MaListe(Rg, Fichier) 'Avec étiquette
OU
Me.ComboBox1.List = MaListe1(Rg, Fichier) 'Sans étiquette
à 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
Rg.Name = Rg(1, 1).Text
NomColonne = Fichier.Names(Rg(1, 1).Text).Name
Requete = "SELECT " & NomColonne & " From " & NomColonne
& "" _
& vbCrLf & "Where " & NomColonne & " <> Null " &
vbCrLf & _
"Group By " & NomColonne & " ORDER By " & NomColonne
& ""
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"""
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
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.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
MaListe1 = Application.Transpose(Rst.GetRows)
Fichier.Names("NomColonne").Delete
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
************** DAO SOLUTION******************
Tu ajoutes la bibliothèque suivante ;
"Microsoft DAO 3.51 Objects Librairy"
ATTENTION : Vous allez éprouver des difficultés si les
données
de la plage n'appartiennent pas au même type comme par
exemple du Numérique avec du texte. La liste ne
contiendra
qu'un type de données...
2 Procédures selon que ta colonne a une étiquette de
colonnes ou non.
Si ta plage de cellules a une étiquette de colonne
L'étiquette ne fera pas parti de la liste du combobox
'-------------------------------------------
Private Sub UserForm_Initialize()
'Avec Étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String, Titre As String
With Worksheets("Denis")
Set Rg = .Range("A1:A" & .Range("A65356").End
(xlUp).Row)
Rg.Name = "NomColonne"
Titre = Rg(1, 1).Text
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT " & Titre & " From NomColonne " &
vbCrLf & _
"Where " & Titre & " <> Null " & vbCrLf
& _
"Group By " & Titre & " ORDER By " &
Titre & ""
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Rst.MoveNext
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close
bd.Close
Set Rg = Nothing
Set Rst = Nothing
Set bd = Nothing
End Sub
'-------------------------------------------
Sans étiquettes de colonne, la première cellule de la
plage signifiée
dans la procédure doit être vide. Avec DAO, on ne peut
spécifier
explicitement comme ADO que l'étiquette est absente.
Pour DAO,
la première donnée est résevée au nom du champ.
'--------------------------------------------
Private Sub UserForm_Initialize()
'Sans étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String
With Worksheets("Denis")
.Range("A1:A" & .Range("A65356").End
(xlUp).Row).Name = "NomColonne"
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT F1 From NomColonne " & vbCrLf & _
"Where F1 <> Null " & vbCrLf & _
"Group By F1 ORDER By F1"
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close 'ferme le recordset
bd.Close
'Libère la mémoir des objets
Set Rst = Nothing
Set bd = Nothing
Set Rg = Nothing
End Sub
'--------------------------------------------
"petchy" <anonymous@discussions.microsoft.com> a écrit
dans le message de
news:10b3f01c440a0$dac0f400$a301280a@phx.gbl...
bonjour
comment mettre par ordre alphabétique un combobox qui se
trouve dans un USF
.
-----Message d'origine-----
Bonjour petchy,
Voici 3 façons de faire :
Le premier exemple si ta plage de cellules contenant ton
combobox n'est pas énorme.
Le deuxième exemple est plus rapide sur une grande plage
de cellule mais requiert d'ajouter une référence au
Le deuxième exemple vient en 2 versions selon qu'un
étiquette est présente ou non dans ta plage de cellules
ton combobox.
Amuse-toi bien,
Salutations!
************ PREMIER EXEMPLE****************
Voici un exemple comment trier par ordre croissant le
contenu
d'un combobox avec l'aide d'une fonction
Si tu utilises ceci, tu ne dois pas utiliser la
propriété "RowSource"
du combobox pour définir son contenu.
Tu dois adapter le nom de la feuille et la plage de
cellules définies
dans cette exemple selon ton projet.
'--------------------------------------------------------
-------
Private Sub UserForm_Initialize()
Dim Rg As Range, Tblo As Variant
Set Fichier = ThisWorkbook
With Worksheets("Denis")
Set Rg = Range("A1:A" & .Range("A65536").End
(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = BubbleSort(Tblo)
Set Rg = Nothing
End Sub
'--------------------------------------------------------
-------
' À copier dans un Module Standard
Public Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'--------------------------------------------------------
-------
************ DEUXIÈME EXEMPLE****************
À 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...
Me.ComboBox1.List = MaListe(Rg, Fichier) 'Avec étiquette
OU
Me.ComboBox1.List = MaListe1(Rg, Fichier) 'Sans étiquette
à 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
Rg.Name = Rg(1, 1).Text
NomColonne = Fichier.Names(Rg(1, 1).Text).Name
Requete = "SELECT " & NomColonne & " From " & NomColonne
& "" _
& vbCrLf & "Where " & NomColonne & " <> Null " &
vbCrLf & _
"Group By " & NomColonne & " ORDER By " & NomColonne
& ""
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"""
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
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.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
MaListe1 = Application.Transpose(Rst.GetRows)
Fichier.Names("NomColonne").Delete
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
************** DAO SOLUTION******************
Tu ajoutes la bibliothèque suivante ;
"Microsoft DAO 3.51 Objects Librairy"
ATTENTION : Vous allez éprouver des difficultés si les
données
de la plage n'appartiennent pas au même type comme par
exemple du Numérique avec du texte. La liste ne
contiendra
qu'un type de données...
2 Procédures selon que ta colonne a une étiquette de
colonnes ou non.
Si ta plage de cellules a une étiquette de colonne
L'étiquette ne fera pas parti de la liste du combobox
'-------------------------------------------
Private Sub UserForm_Initialize()
'Avec Étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String, Titre As String
With Worksheets("Denis")
Set Rg = .Range("A1:A" & .Range("A65356").End
(xlUp).Row)
Rg.Name = "NomColonne"
Titre = Rg(1, 1).Text
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT " & Titre & " From NomColonne " &
vbCrLf & _
"Where " & Titre & " <> Null " & vbCrLf
& _
"Group By " & Titre & " ORDER By " &
Titre & ""
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Rst.MoveNext
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close
bd.Close
Set Rg = Nothing
Set Rst = Nothing
Set bd = Nothing
End Sub
'-------------------------------------------
Sans étiquettes de colonne, la première cellule de la
plage signifiée
dans la procédure doit être vide. Avec DAO, on ne peut
spécifier
explicitement comme ADO que l'étiquette est absente.
Pour DAO,
la première donnée est résevée au nom du champ.
'--------------------------------------------
Private Sub UserForm_Initialize()
'Sans étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String
With Worksheets("Denis")
.Range("A1:A" & .Range("A65356").End
(xlUp).Row).Name = "NomColonne"
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT F1 From NomColonne " & vbCrLf & _
"Where F1 <> Null " & vbCrLf & _
"Group By F1 ORDER By F1"
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close 'ferme le recordset
bd.Close
'Libère la mémoir des objets
Set Rst = Nothing
Set bd = Nothing
Set Rg = Nothing
End Sub
'--------------------------------------------
"petchy" a écrit
dans le message de
news:10b3f01c440a0$dac0f400$
bonjour
comment mettre par ordre alphabétique un combobox qui se
trouve dans un USF
.
-----Message d'origine-----
Bonjour petchy,
Voici 3 façons de faire :
Le premier exemple si ta plage de cellules contenant ton
combobox n'est pas énorme.
Le deuxième exemple est plus rapide sur une grande plage
de cellule mais requiert d'ajouter une référence au
Le deuxième exemple vient en 2 versions selon qu'un
étiquette est présente ou non dans ta plage de cellules
ton combobox.
Amuse-toi bien,
Salutations!
************ PREMIER EXEMPLE****************
Voici un exemple comment trier par ordre croissant le
contenu
d'un combobox avec l'aide d'une fonction
Si tu utilises ceci, tu ne dois pas utiliser la
propriété "RowSource"
du combobox pour définir son contenu.
Tu dois adapter le nom de la feuille et la plage de
cellules définies
dans cette exemple selon ton projet.
'--------------------------------------------------------
-------
Private Sub UserForm_Initialize()
Dim Rg As Range, Tblo As Variant
Set Fichier = ThisWorkbook
With Worksheets("Denis")
Set Rg = Range("A1:A" & .Range("A65536").End
(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = BubbleSort(Tblo)
Set Rg = Nothing
End Sub
'--------------------------------------------------------
-------
' À copier dans un Module Standard
Public Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'--------------------------------------------------------
-------
************ DEUXIÈME EXEMPLE****************
À 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...
Me.ComboBox1.List = MaListe(Rg, Fichier) 'Avec étiquette
OU
Me.ComboBox1.List = MaListe1(Rg, Fichier) 'Sans étiquette
à 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
Rg.Name = Rg(1, 1).Text
NomColonne = Fichier.Names(Rg(1, 1).Text).Name
Requete = "SELECT " & NomColonne & " From " & NomColonne
& "" _
& vbCrLf & "Where " & NomColonne & " <> Null " &
vbCrLf & _
"Group By " & NomColonne & " ORDER By " & NomColonne
& ""
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"""
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
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.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
MaListe1 = Application.Transpose(Rst.GetRows)
Fichier.Names("NomColonne").Delete
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
************** DAO SOLUTION******************
Tu ajoutes la bibliothèque suivante ;
"Microsoft DAO 3.51 Objects Librairy"
ATTENTION : Vous allez éprouver des difficultés si les
données
de la plage n'appartiennent pas au même type comme par
exemple du Numérique avec du texte. La liste ne
contiendra
qu'un type de données...
2 Procédures selon que ta colonne a une étiquette de
colonnes ou non.
Si ta plage de cellules a une étiquette de colonne
L'étiquette ne fera pas parti de la liste du combobox
'-------------------------------------------
Private Sub UserForm_Initialize()
'Avec Étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String, Titre As String
With Worksheets("Denis")
Set Rg = .Range("A1:A" & .Range("A65356").End
(xlUp).Row)
Rg.Name = "NomColonne"
Titre = Rg(1, 1).Text
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT " & Titre & " From NomColonne " &
vbCrLf & _
"Where " & Titre & " <> Null " & vbCrLf
& _
"Group By " & Titre & " ORDER By " &
Titre & ""
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Rst.MoveNext
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close
bd.Close
Set Rg = Nothing
Set Rst = Nothing
Set bd = Nothing
End Sub
'-------------------------------------------
Sans étiquettes de colonne, la première cellule de la
plage signifiée
dans la procédure doit être vide. Avec DAO, on ne peut
spécifier
explicitement comme ADO que l'étiquette est absente.
Pour DAO,
la première donnée est résevée au nom du champ.
'--------------------------------------------
Private Sub UserForm_Initialize()
'Sans étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String
With Worksheets("Denis")
.Range("A1:A" & .Range("A65356").End
(xlUp).Row).Name = "NomColonne"
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT F1 From NomColonne " & vbCrLf & _
"Where F1 <> Null " & vbCrLf & _
"Group By F1 ORDER By F1"
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close 'ferme le recordset
bd.Close
'Libère la mémoir des objets
Set Rst = Nothing
Set bd = Nothing
Set Rg = Nothing
End Sub
'--------------------------------------------
"petchy" a écrit
dans le message de
news:10b3f01c440a0$dac0f400$
bonjour
comment mettre par ordre alphabétique un combobox qui se
trouve dans un USF
.
-----Message d'origine-----
Bonjour petchy,
Voici 3 façons de faire :
Le premier exemple si ta plage de cellules contenant ton
combobox n'est pas énorme.
Le deuxième exemple est plus rapide sur une grande plage
de cellule mais requiert d'ajouter une référence au
Le deuxième exemple vient en 2 versions selon qu'un
étiquette est présente ou non dans ta plage de cellules
ton combobox.
Amuse-toi bien,
Salutations!
************ PREMIER EXEMPLE****************
Voici un exemple comment trier par ordre croissant le
contenu
d'un combobox avec l'aide d'une fonction
Si tu utilises ceci, tu ne dois pas utiliser la
propriété "RowSource"
du combobox pour définir son contenu.
Tu dois adapter le nom de la feuille et la plage de
cellules définies
dans cette exemple selon ton projet.
'--------------------------------------------------------
-------
Private Sub UserForm_Initialize()
Dim Rg As Range, Tblo As Variant
Set Fichier = ThisWorkbook
With Worksheets("Denis")
Set Rg = Range("A1:A" & .Range("A65536").End
(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = BubbleSort(Tblo)
Set Rg = Nothing
End Sub
'--------------------------------------------------------
-------
' À copier dans un Module Standard
Public Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'--------------------------------------------------------
-------
************ DEUXIÈME EXEMPLE****************
À 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...
Me.ComboBox1.List = MaListe(Rg, Fichier) 'Avec étiquette
OU
Me.ComboBox1.List = MaListe1(Rg, Fichier) 'Sans étiquette
à 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
Rg.Name = Rg(1, 1).Text
NomColonne = Fichier.Names(Rg(1, 1).Text).Name
Requete = "SELECT " & NomColonne & " From " & NomColonne
& "" _
& vbCrLf & "Where " & NomColonne & " <> Null " &
vbCrLf & _
"Group By " & NomColonne & " ORDER By " & NomColonne
& ""
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"""
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
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.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
MaListe1 = Application.Transpose(Rst.GetRows)
Fichier.Names("NomColonne").Delete
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
************** DAO SOLUTION******************
Tu ajoutes la bibliothèque suivante ;
"Microsoft DAO 3.51 Objects Librairy"
ATTENTION : Vous allez éprouver des difficultés si les
données
de la plage n'appartiennent pas au même type comme par
exemple du Numérique avec du texte. La liste ne
contiendra
qu'un type de données...
2 Procédures selon que ta colonne a une étiquette de
colonnes ou non.
Si ta plage de cellules a une étiquette de colonne
L'étiquette ne fera pas parti de la liste du combobox
'-------------------------------------------
Private Sub UserForm_Initialize()
'Avec Étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String, Titre As String
With Worksheets("Denis")
Set Rg = .Range("A1:A" & .Range("A65356").End
(xlUp).Row)
Rg.Name = "NomColonne"
Titre = Rg(1, 1).Text
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT " & Titre & " From NomColonne " &
vbCrLf & _
"Where " & Titre & " <> Null " & vbCrLf
& _
"Group By " & Titre & " ORDER By " &
Titre & ""
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Rst.MoveNext
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close
bd.Close
Set Rg = Nothing
Set Rst = Nothing
Set bd = Nothing
End Sub
'-------------------------------------------
Sans étiquettes de colonne, la première cellule de la
plage signifiée
dans la procédure doit être vide. Avec DAO, on ne peut
spécifier
explicitement comme ADO que l'étiquette est absente.
Pour DAO,
la première donnée est résevée au nom du champ.
'--------------------------------------------
Private Sub UserForm_Initialize()
'Sans étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String
With Worksheets("Denis")
.Range("A1:A" & .Range("A65356").End
(xlUp).Row).Name = "NomColonne"
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT F1 From NomColonne " & vbCrLf & _
"Where F1 <> Null " & vbCrLf & _
"Group By F1 ORDER By F1"
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close 'ferme le recordset
bd.Close
'Libère la mémoir des objets
Set Rst = Nothing
Set bd = Nothing
Set Rg = Nothing
End Sub
'--------------------------------------------
"petchy" <anonymous@discussions.microsoft.com> a écrit
dans le message de
news:10b3f01c440a0$dac0f400$a301280a@phx.gbl...
bonjour
comment mettre par ordre alphabétique un combobox qui se
trouve dans un USF
.
-----Message d'origine-----
Bonjour petchy,
Voici 3 façons de faire :
Le premier exemple si ta plage de cellules contenant ton
combobox n'est pas énorme.
Le deuxième exemple est plus rapide sur une grande plage
de cellule mais requiert d'ajouter une référence au
Le deuxième exemple vient en 2 versions selon qu'un
étiquette est présente ou non dans ta plage de cellules
ton combobox.
Amuse-toi bien,
Salutations!
************ PREMIER EXEMPLE****************
Voici un exemple comment trier par ordre croissant le
contenu
d'un combobox avec l'aide d'une fonction
Si tu utilises ceci, tu ne dois pas utiliser la
propriété "RowSource"
du combobox pour définir son contenu.
Tu dois adapter le nom de la feuille et la plage de
cellules définies
dans cette exemple selon ton projet.
'--------------------------------------------------------
-------
Private Sub UserForm_Initialize()
Dim Rg As Range, Tblo As Variant
Set Fichier = ThisWorkbook
With Worksheets("Denis")
Set Rg = Range("A1:A" & .Range("A65536").End
(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = BubbleSort(Tblo)
Set Rg = Nothing
End Sub
'--------------------------------------------------------
-------
' À copier dans un Module Standard
Public Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i, 1) > List(j, 1) Then
Temp = List(j, 1)
List(j, 1) = List(i, 1)
List(i, 1) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'--------------------------------------------------------
-------
************ DEUXIÈME EXEMPLE****************
À 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...
Me.ComboBox1.List = MaListe(Rg, Fichier) 'Avec étiquette
OU
Me.ComboBox1.List = MaListe1(Rg, Fichier) 'Sans étiquette
à 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
Rg.Name = Rg(1, 1).Text
NomColonne = Fichier.Names(Rg(1, 1).Text).Name
Requete = "SELECT " & NomColonne & " From " & NomColonne
& "" _
& vbCrLf & "Where " & NomColonne & " <> Null " &
vbCrLf & _
"Group By " & NomColonne & " ORDER By " & NomColonne
& ""
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"""
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
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.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic
MaListe1 = Application.Transpose(Rst.GetRows)
Fichier.Names("NomColonne").Delete
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing
End Function
'---------------------------------------------
************** DAO SOLUTION******************
Tu ajoutes la bibliothèque suivante ;
"Microsoft DAO 3.51 Objects Librairy"
ATTENTION : Vous allez éprouver des difficultés si les
données
de la plage n'appartiennent pas au même type comme par
exemple du Numérique avec du texte. La liste ne
contiendra
qu'un type de données...
2 Procédures selon que ta colonne a une étiquette de
colonnes ou non.
Si ta plage de cellules a une étiquette de colonne
L'étiquette ne fera pas parti de la liste du combobox
'-------------------------------------------
Private Sub UserForm_Initialize()
'Avec Étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String, Titre As String
With Worksheets("Denis")
Set Rg = .Range("A1:A" & .Range("A65356").End
(xlUp).Row)
Rg.Name = "NomColonne"
Titre = Rg(1, 1).Text
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT " & Titre & " From NomColonne " &
vbCrLf & _
"Where " & Titre & " <> Null " & vbCrLf
& _
"Group By " & Titre & " ORDER By " &
Titre & ""
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Rst.MoveNext
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close
bd.Close
Set Rg = Nothing
Set Rst = Nothing
Set bd = Nothing
End Sub
'-------------------------------------------
Sans étiquettes de colonne, la première cellule de la
plage signifiée
dans la procédure doit être vide. Avec DAO, on ne peut
spécifier
explicitement comme ADO que l'étiquette est absente.
Pour DAO,
la première donnée est résevée au nom du champ.
'--------------------------------------------
Private Sub UserForm_Initialize()
'Sans étiquettes de colonnes
Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String
With Worksheets("Denis")
.Range("A1:A" & .Range("A65356").End
(xlUp).Row).Name = "NomColonne"
End With
Set bd = OpenDatabase(ThisWorkbook.Name, False,
False, "excel 8.0")
Requete = "SELECT F1 From NomColonne " & vbCrLf & _
"Where F1 <> Null " & vbCrLf & _
"Group By F1 ORDER By F1"
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst
Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop
Rst.Close 'ferme le recordset
bd.Close
'Libère la mémoir des objets
Set Rst = Nothing
Set bd = Nothing
Set Rg = Nothing
End Sub
'--------------------------------------------
"petchy" a écrit
dans le message de
news:10b3f01c440a0$dac0f400$
bonjour
comment mettre par ordre alphabétique un combobox qui se
trouve dans un USF
.
-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
la virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : = Maintenant
()
Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
tu additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
d'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
la virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : = Maintenant
()
Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
tu additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
d'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
la virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : = Maintenant
()
Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
tu additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
d'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
la virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : = Maintenant
()
Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
tu additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
d'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
la virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : = Maintenant
()
Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
tu additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
d'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
la virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : = Maintenant
()
Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
tu additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
d'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
-----Message d'origine-----
Bonjour J-Dan,
Voici un exemple trafiqué pour obtenir ce que tu veux :
A ) à sa face même, la fonction "Now()" et TimeValue()
dans une fenêtre VBA gèrent seulement des heures H:M:S .
difficile de leur faire afficher les centièmes de
secondes dans une cellule.
B ) pour ce qui est du format à transmettre à la cellule
avec une ligne de code comme celle-ci :
[D1].NumberFormat = "HH:mm:ss.00"
Cela fonctionne très bien si le séparateur décimale
est le point. Si c'est la virgule utilisé dans la feuille
calcul, cela ne semble pas fonctionner !!!
C ) voici l'exemple : En utilisant l'api GetTickCount ,
il est possible de retourner dans la feuille une valeur au
millième de seconde ...mais ce n'est pas évident parce
que ce n'est pas toutes les fonctions qui retournent une
que l'on peut formater au millième....!!!
'Déclaration de l'API dans le haut d'un module
Public Declare Function GetTickCount Lib "kernel32" ()
As Long
'------------------------
Sub compteur()
Dim A As Double, B As Double, C As Double
Dim D As Integer, E As Integer, F As String
B = 0
A = GetTickCount
'Pour provoquer un délai de 2 secondes ...
Application.Wait (Now + TimeValue("0:00:02"))
B = GetTickCount
C = B - A
D = Int(C / 1000)
E = C Mod 1000
'la paire de "00:00:" c'est pour compléter
'la donnée à être transmise à la cellule
'soit heure:Minutes:Secondes.Millième Sec.
F = "00:00:" & D & "." & E
[D1].NumberFormat = "HH:mm:ss.00"
[D1] = F
End Sub
'------------------------
Salutations!
"J-Dan" a écrit
dans le message de news:113db01c44183$4707ef00
merci pour ta réponse, et pardon de pousuivre une
conversation en dehors de son fil.
Ce que tu me proposes fonctionne parfaitement. Mon
problème doit se situer au niveau de la macro :
Sub compteur()
Temps = Time 'j'ai essayé aussi avec "Now"
' ** routine quelconque **
Temps = Time - Temps
[D1] = Format(Temps, "mm:ss.00")
End Sub
En "D1", j'obtiens quelque chose comme 12:06.00 !
En revanche, si en "D1" je saisis à nouveau =MAINTENANT
(), les centièmes sont présents.
Je sèche lamentablement !-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
point oula virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : =
Maintenant
()Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
centièmes de seconde.Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
plus, situ additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
nombred'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
.
-----Message d'origine-----
Bonjour J-Dan,
Voici un exemple trafiqué pour obtenir ce que tu veux :
A ) à sa face même, la fonction "Now()" et TimeValue()
dans une fenêtre VBA gèrent seulement des heures H:M:S .
difficile de leur faire afficher les centièmes de
secondes dans une cellule.
B ) pour ce qui est du format à transmettre à la cellule
avec une ligne de code comme celle-ci :
[D1].NumberFormat = "HH:mm:ss.00"
Cela fonctionne très bien si le séparateur décimale
est le point. Si c'est la virgule utilisé dans la feuille
calcul, cela ne semble pas fonctionner !!!
C ) voici l'exemple : En utilisant l'api GetTickCount ,
il est possible de retourner dans la feuille une valeur au
millième de seconde ...mais ce n'est pas évident parce
que ce n'est pas toutes les fonctions qui retournent une
que l'on peut formater au millième....!!!
'Déclaration de l'API dans le haut d'un module
Public Declare Function GetTickCount Lib "kernel32" ()
As Long
'------------------------
Sub compteur()
Dim A As Double, B As Double, C As Double
Dim D As Integer, E As Integer, F As String
B = 0
A = GetTickCount
'Pour provoquer un délai de 2 secondes ...
Application.Wait (Now + TimeValue("0:00:02"))
B = GetTickCount
C = B - A
D = Int(C / 1000)
E = C Mod 1000
'la paire de "00:00:" c'est pour compléter
'la donnée à être transmise à la cellule
'soit heure:Minutes:Secondes.Millième Sec.
F = "00:00:" & D & "." & E
[D1].NumberFormat = "HH:mm:ss.00"
[D1] = F
End Sub
'------------------------
Salutations!
"J-Dan" <anonymous@discussions.microsoft.com> a écrit
dans le message de news:113db01c44183$4707ef00
merci pour ta réponse, et pardon de pousuivre une
conversation en dehors de son fil.
Ce que tu me proposes fonctionne parfaitement. Mon
problème doit se situer au niveau de la macro :
Sub compteur()
Temps = Time 'j'ai essayé aussi avec "Now"
' ** routine quelconque **
Temps = Time - Temps
[D1] = Format(Temps, "mm:ss.00")
End Sub
En "D1", j'obtiens quelque chose comme 12:06.00 !
En revanche, si en "D1" je saisis à nouveau =MAINTENANT
(), les centièmes sont présents.
Je sèche lamentablement !
-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
point ou
la virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : =
Maintenant
()
Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
centièmes de seconde.
Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
plus, si
tu additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
nombre
d'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
.
-----Message d'origine-----
Bonjour J-Dan,
Voici un exemple trafiqué pour obtenir ce que tu veux :
A ) à sa face même, la fonction "Now()" et TimeValue()
dans une fenêtre VBA gèrent seulement des heures H:M:S .
difficile de leur faire afficher les centièmes de
secondes dans une cellule.
B ) pour ce qui est du format à transmettre à la cellule
avec une ligne de code comme celle-ci :
[D1].NumberFormat = "HH:mm:ss.00"
Cela fonctionne très bien si le séparateur décimale
est le point. Si c'est la virgule utilisé dans la feuille
calcul, cela ne semble pas fonctionner !!!
C ) voici l'exemple : En utilisant l'api GetTickCount ,
il est possible de retourner dans la feuille une valeur au
millième de seconde ...mais ce n'est pas évident parce
que ce n'est pas toutes les fonctions qui retournent une
que l'on peut formater au millième....!!!
'Déclaration de l'API dans le haut d'un module
Public Declare Function GetTickCount Lib "kernel32" ()
As Long
'------------------------
Sub compteur()
Dim A As Double, B As Double, C As Double
Dim D As Integer, E As Integer, F As String
B = 0
A = GetTickCount
'Pour provoquer un délai de 2 secondes ...
Application.Wait (Now + TimeValue("0:00:02"))
B = GetTickCount
C = B - A
D = Int(C / 1000)
E = C Mod 1000
'la paire de "00:00:" c'est pour compléter
'la donnée à être transmise à la cellule
'soit heure:Minutes:Secondes.Millième Sec.
F = "00:00:" & D & "." & E
[D1].NumberFormat = "HH:mm:ss.00"
[D1] = F
End Sub
'------------------------
Salutations!
"J-Dan" a écrit
dans le message de news:113db01c44183$4707ef00
merci pour ta réponse, et pardon de pousuivre une
conversation en dehors de son fil.
Ce que tu me proposes fonctionne parfaitement. Mon
problème doit se situer au niveau de la macro :
Sub compteur()
Temps = Time 'j'ai essayé aussi avec "Now"
' ** routine quelconque **
Temps = Time - Temps
[D1] = Format(Temps, "mm:ss.00")
End Sub
En "D1", j'obtiens quelque chose comme 12:06.00 !
En revanche, si en "D1" je saisis à nouveau =MAINTENANT
(), les centièmes sont présents.
Je sèche lamentablement !-----Message d'origine-----
Bonjour J-Dan,
Attention au séparateur décimal
le format est : hh:mm:ss.00 et le point devant les 00
doit être le séparateur décimal reconnu par excel. (le
point oula virgule)
à titre d'exemple :
Entre la formule suivante dans une cellule : =
Maintenant
()Formate la cellule de cette façon : hh:mm:ss.00
et tu devrais voir s'afficher dans la cellule
(expérience mené sur excel 2002) les dixièmes et les
centièmes de seconde.Si tu utilises la touche F9, leur valeur se met à jour
au même titre que le reste du contenu de la cellule. De
plus, situ additionnes 2 cellules ayant ce format, excel tiendra
compte des dixièmes et centièmes dans son calcul. Si le
nombred'heures est étale ou supérieur à 24, utilise plutôt ce
format [hh]:mm:ss.00 .
Si le résultat n'est pas au rendez-vous, tu as sûrement
un autre type de problème sur ta bécane ...!
Salutations!
.