OVH Cloud OVH Cloud

EXCEL VBA -> ACCESS 2000

1 réponse
Avatar
KIKSAN
Bonjour =E0 tous,

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;"

Merci par avance

KIKSAN

1 réponse

Avatar
Fred M.
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:­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

.