J'ai r=E9alis=E9 une UserForm dans Excel 2000 qui permet=20
d'attaquer une base de donn=E9es Access (avec ADO) pour=20
rapatrier des noms de villes dans une listBox.
Donn=E9es :
* Base Access : C:\BASE.mdb contient une seule=20
table "tbl_Ville" avec un seul champ "Ville".=20
J'ai saisi 4 villes : TOULOUSE, TORCY, TOUCY, TOUFFLERS
* La UserForm dans VBA Excel comprend un TextBox :=20
txt_Cherche=20
et une ListBox : lst_Trouve
Le but est de saisir dans le TextBox une partie d'un nom=20
de ville et de r=E9cup=E9rer dans la liste le nom des villes=20
filtr=E9es.
Ma requ=EAte SQL n'est pas param=E9tr=E9e pour pouvoir filtrer=20
les donn=E9es dans Access.
Exemple de r=E9sultat souhait=E9 :=20
* si je tape *OU* -> TOULOUSE + TOUCY
* si je tape *LOU* -> TOULOUSE=20
Voici le code utilis=E9 pour attaquer la base et r=E9cup=E9rer=20
la liste compl=E8te des noms de villes.
Private Sub txt_Cherche_AfterUpdate()
Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSql As String
'Ouvrir la base de donn=E9es Access
Set cn =3D New ADODB.Connection
'Ouvre la connexion
With cn
.Provider =3D "Microsoft.Jet.OLEDB.4.0"
.Open "C:\BASE.mdb"
End With
=20
strSql =3D "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER=20
BY tbl_Ville.Ville;"
=20
' Ouvre un jeu d'enregistrements.
Set rst =3D New ADODB.Recordset
=20
With rst
.Open Source:=3DstrSql, _
ActiveConnection:=3Dcn, _
CursorType:=3DadOpenForwardOnly, _
LockType:=3DadLockReadOnly
End With
Dim I As Integer
I =3D 0
lst_Trouve.ColumnCount =3D 1
lst_Trouve.Clear
Do Until rst.EOF
lst_Trouve.AddItem rst.Fields(0).Value
I =3D I + 1
rst.MoveNext
Loop
If lst_Trouve.ListCount <> 0 Then lst_Trouve.ListIndex=20
=3D 0
lst_Trouve.SetFocus
=20
'Fermer le recordset et la connexion
rst.Close
Set rst =3D Nothing
=20
cn.Close
Set cn =3D Nothing
End Sub
Quelqu'un sait-il comment am=E9liorer ma requ=EAte pour que =E7a=20
fonctionne correctement (op=E9rateur Like ?) avec la =20
syntaxe exacte :
strSql =3D "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER BY=20
tbl_Ville.Ville;"
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville WHERE Ville LIKE '" & txt_Cherche & "' ORDER BY tbl_Ville.Ville;"
-----Message d'origine----- Bonjour à tous,
J'ai réalisé une UserForm dans Excel 2000 qui permet d'attaquer une base de données Access (avec ADO) pour rapatrier des noms de villes dans une listBox.
Données :
* Base Access : C:BASE.mdb contient une seule table "tbl_Ville" avec un seul champ "Ville". J'ai saisi 4 villes : TOULOUSE, TORCY, TOUCY, TOUFFLERS
* La UserForm dans VBA Excel comprend un TextBox : txt_Cherche et une ListBox : lst_Trouve
Le but est de saisir dans le TextBox une partie d'un nom de ville et de récupérer dans la liste le nom des villes filtrées. Ma requête SQL n'est pas paramétrée pour pouvoir filtrer les données dans Access. Exemple de résultat souhaité : * si je tape *OU* -> TOULOUSE + TOUCY * si je tape *LOU* -> TOULOUSE
Voici le code utilisé pour attaquer la base et récupérer la liste complète des noms de villes.
Private Sub txt_Cherche_AfterUpdate()
Dim cn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim strSql As String
'Ouvrir la base de données Access Set cn = New ADODB.Connection 'Ouvre la connexion With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .Open "C:BASE.mdb" End With
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER BY tbl_Ville.Ville;"
' Ouvre un jeu d'enregistrements. Set rst = New ADODB.Recordset
With rst .Open Source:=strSql, _ ActiveConnection:=cn, _ CursorType:OpenForwardOnly, _ LockType:LockReadOnly End With
Dim I As Integer I = 0
lst_Trouve.ColumnCount = 1 lst_Trouve.Clear
Do Until rst.EOF lst_Trouve.AddItem rst.Fields(0).Value I = I + 1 rst.MoveNext Loop
If lst_Trouve.ListCount <> 0 Then lst_Trouve.ListIndex
= 0 lst_Trouve.SetFocus
'Fermer le recordset et la connexion rst.Close Set rst = Nothing
cn.Close Set cn = Nothing
End Sub
Quelqu'un sait-il comment améliorer ma requête pour que ça
fonctionne correctement (opérateur Like ?) avec la syntaxe exacte :
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER BY tbl_Ville.Ville;"
Merci par avance
KIKSAN
.
C'est exact : L'opérateur like est de rigueur.
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville
WHERE Ville LIKE '" & txt_Cherche & "' ORDER BY
tbl_Ville.Ville;"
-----Message d'origine-----
Bonjour à tous,
J'ai réalisé une UserForm dans Excel 2000 qui permet
d'attaquer une base de données Access (avec ADO) pour
rapatrier des noms de villes dans une listBox.
Données :
* Base Access : C:BASE.mdb contient une seule
table "tbl_Ville" avec un seul champ "Ville".
J'ai saisi 4 villes : TOULOUSE, TORCY, TOUCY, TOUFFLERS
* La UserForm dans VBA Excel comprend un TextBox :
txt_Cherche
et une ListBox : lst_Trouve
Le but est de saisir dans le TextBox une partie d'un nom
de ville et de récupérer dans la liste le nom des villes
filtrées.
Ma requête SQL n'est pas paramétrée pour pouvoir filtrer
les données dans Access.
Exemple de résultat souhaité :
* si je tape *OU* -> TOULOUSE + TOUCY
* si je tape *LOU* -> TOULOUSE
Voici le code utilisé pour attaquer la base et récupérer
la liste complète des noms de villes.
Private Sub txt_Cherche_AfterUpdate()
Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSql As String
'Ouvrir la base de données Access
Set cn = New ADODB.Connection
'Ouvre la connexion
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open "C:BASE.mdb"
End With
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER
BY tbl_Ville.Ville;"
' Ouvre un jeu d'enregistrements.
Set rst = New ADODB.Recordset
With rst
.Open Source:=strSql, _
ActiveConnection:=cn, _
CursorType:=adOpenForwardOnly, _
LockType:=adLockReadOnly
End With
Dim I As Integer
I = 0
lst_Trouve.ColumnCount = 1
lst_Trouve.Clear
Do Until rst.EOF
lst_Trouve.AddItem rst.Fields(0).Value
I = I + 1
rst.MoveNext
Loop
If lst_Trouve.ListCount <> 0 Then
lst_Trouve.ListIndex
= 0
lst_Trouve.SetFocus
'Fermer le recordset et la connexion
rst.Close
Set rst = Nothing
cn.Close
Set cn = Nothing
End Sub
Quelqu'un sait-il comment améliorer ma requête pour que
ça
fonctionne correctement (opérateur Like ?) avec la
syntaxe exacte :
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER BY
tbl_Ville.Ville;"
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville WHERE Ville LIKE '" & txt_Cherche & "' ORDER BY tbl_Ville.Ville;"
-----Message d'origine----- Bonjour à tous,
J'ai réalisé une UserForm dans Excel 2000 qui permet d'attaquer une base de données Access (avec ADO) pour rapatrier des noms de villes dans une listBox.
Données :
* Base Access : C:BASE.mdb contient une seule table "tbl_Ville" avec un seul champ "Ville". J'ai saisi 4 villes : TOULOUSE, TORCY, TOUCY, TOUFFLERS
* La UserForm dans VBA Excel comprend un TextBox : txt_Cherche et une ListBox : lst_Trouve
Le but est de saisir dans le TextBox une partie d'un nom de ville et de récupérer dans la liste le nom des villes filtrées. Ma requête SQL n'est pas paramétrée pour pouvoir filtrer les données dans Access. Exemple de résultat souhaité : * si je tape *OU* -> TOULOUSE + TOUCY * si je tape *LOU* -> TOULOUSE
Voici le code utilisé pour attaquer la base et récupérer la liste complète des noms de villes.
Private Sub txt_Cherche_AfterUpdate()
Dim cn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim strSql As String
'Ouvrir la base de données Access Set cn = New ADODB.Connection 'Ouvre la connexion With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .Open "C:BASE.mdb" End With
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER BY tbl_Ville.Ville;"
' Ouvre un jeu d'enregistrements. Set rst = New ADODB.Recordset
With rst .Open Source:=strSql, _ ActiveConnection:=cn, _ CursorType:OpenForwardOnly, _ LockType:LockReadOnly End With
Dim I As Integer I = 0
lst_Trouve.ColumnCount = 1 lst_Trouve.Clear
Do Until rst.EOF lst_Trouve.AddItem rst.Fields(0).Value I = I + 1 rst.MoveNext Loop
If lst_Trouve.ListCount <> 0 Then lst_Trouve.ListIndex
= 0 lst_Trouve.SetFocus
'Fermer le recordset et la connexion rst.Close Set rst = Nothing
cn.Close Set cn = Nothing
End Sub
Quelqu'un sait-il comment améliorer ma requête pour que ça
fonctionne correctement (opérateur Like ?) avec la syntaxe exacte :
strSql = "SELECT tbl_Ville.Ville FROM tbl_Ville ORDER BY tbl_Ville.Ville;"