OVH Cloud OVH Cloud

Erreur instruction VB

2 réponses
Avatar
James
Bonjour,

J'ai un ptit souci avec quelques lignes de code VB qui=20
devraient me permettre de faire fonctionner un filtre=20
multi-crit=E8re.
Pour l'instant le probl=E8me c'est que lorsque j'execute le=20
formulaire en question, un message d'erreur me dit :

"Dans l'instruction SELECT, un mot r=E9serv=E9 ou un argument=20
est mal orthographi=E9 ou absent, ou la ponctuation est=20
incorrecte"

Je n'arrive pas =E0 trouver mon erreur, est-ce que=20
quelqu'un peut m'aider ?

Voici mon code :

Option Compare Database

Private Sub chkOutillageEb_Click()
If Me.chkOutillageEb Then
Me.cmbOutillageEb.Visible =3D False
Else
Me.cmbOutillageEb.Visible =3D True
End If

RefreshQuery

End Sub

Private Sub chkOutillageFi_Click()
If Me.chkOutillageFi Then
Me.cmbOutillageFi.Visible =3D False
Else
Me.cmbOutillageFi.Visible =3D True
End If

RefreshQuery

End Sub

Private Sub chkLotFi_Click()
If Me.chkLotFi Then
Me.cmbLotFi.Visible =3D False
Else
Me.cmbLotFi.Visible =3D True
End If

RefreshQuery

End Sub

Private Sub chkLotEb_Click()
If Me.chkLotEb Then
Me.cmbLotEb.Visible =3D False
Else
Me.cmbLotEb.Visible =3D True
End If

RefreshQuery

End Sub


Private Sub cmbOutillageFi_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub
Private Sub cmbLotFi_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub
Private Sub cmbOutillageEb_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub
Private Sub cmbLotEb_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub


Private Sub Form_Load()
Dim ctl As Control

For Each ctl In Me.Controls
Select Case Left(ctl.Name, 3)
Case "chk"
ctl.Value =3D -1
Case "txt"
ctl.Visible =3D False
ctl.Value =3D ""

Case "cmb"
ctl.Visible =3D False
End Select

Next ctl

Me.lstResults.RowSource =3D "SELECT Code article, Libell=E9=20
art, R=E9f=E9rence MdB, R=E9f=E9rence coiffante, R=E9f=E9rence Adapt=20
poin=E7on, R=E9f=E9rence Fourreau, R=E9f=E9rence T=EAte de S,=20
R=E9f=E9rence Pinces to, R=E9f=E9rence Plaque V, R=E9f=E9rence=20
Poin=E7on, R=E9f=E9rence refroidisseur, R=E9f=E9rence Entonnoir,=20
SOM Fi, SOM Eb FROM Filtre accessoires;"
Me.lstResults.Requery

End Sub

Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String

SQL =3D "SELECT Code article, Libell=E9 art, R=E9f=E9rence MdB,=20
R=E9f=E9rence coiffante, R=E9f=E9rence Adapt poin=E7on, R=E9f=E9rence=20
Fourreau, R=E9f=E9rence T=EAte de S, R=E9f=E9rence Pinces to,=20
R=E9f=E9rence Plaque V, R=E9f=E9rence Poin=E7on, R=E9f=E9rence=20
refroidisseur, R=E9f=E9rence Entonnoir, SOM Fi, SOM Eb FROM=20
Filtre accessoires Where Filtre accessoires!Code=20
article<>0"

If Not Me.chkOutillageFi Then
SQL =3D SQL & "And Filtre accessoires!Code article '*" &=20
Me.cmbOutillageFi & "'"
End If

If Not Me.chkLotFi Then
SQL =3D SQL & "And Filtre accessoires!SOM Fi '*" &=20
Me.cmbLotFi & "'"
End If

Me.lstResults.RowSource =3D SQL
Me.lstResults.Requery

End Sub



Merci d'avance

2 réponses

Avatar
Eric
Bonjour James

A la première lecture ...

Il faut modifier ton SQL car il contient des noms de champs, de tables
composés de 2 mots ou plus.

Me.lstResults.RowSource = "SELECT Code article, Libellé
art, Référence MdB, Référence coiffante, Référence Adapt
poinçon, Référence Fourreau, Référence Tête de S,
Référence Pinces to, Référence Plaque V, Référence
Poinçon, Référence refroidisseur, Référence Entonnoir,
SOM Fi, SOM Eb FROM Filtre accessoires;"


en

Me.lstResults.RowSource = "SELECT [Code article], [Libellé
art], ..., [Référence Tête de S], ...,
[SOM Fi], [SOM Eb] FROM [Filtre accessoires];"

Idem pour le SQL de ta procédure RefreshQuery

SQL = "SELECT [Code article], [Libellé art], ...,
...FROM [Filtre accessoires] Where [Code article]<>0"

puis dans

If Not Me.chkOutillageFi Then
SQL = SQL & "And Filtre accessoires!Code article '*" &
Me.cmbOutillageFi & "'"
End If

If Not Me.chkLotFi Then
SQL = SQL & "And Filtre accessoires!SOM Fi '*" &
Me.cmbLotFi & "'"
End If


par
SQL = SQL & " And [Code article] = '" & Me!cmbOutillageFi & "'" dans le
1er If
et pour le 2eme
SQL = SQL & " And [SOM Fi] ='" & Me.cmbLotFi & "'"

en supposant que [Code article] et [SOM Fi] sont alphanumériques, si
numériques, supprimes les ' qui entourent.

Avant Me.lstResults.RowSource = SQL
SQL = SQL & ";"


A+
Eric

"James" écrivait news:827b01c477da
$4c38e730$:

Bonjour,

J'ai un ptit souci avec quelques lignes de code VB qui
devraient me permettre de faire fonctionner un filtre
multi-critère.
Pour l'instant le problème c'est que lorsque j'execute le
formulaire en question, un message d'erreur me dit :

"Dans l'instruction SELECT, un mot réservé ou un argument
est mal orthographié ou absent, ou la ponctuation est
incorrecte"

Je n'arrive pas à trouver mon erreur, est-ce que
quelqu'un peut m'aider ?

Voici mon code :

Option Compare Database

Private Sub chkOutillageEb_Click()
If Me.chkOutillageEb Then
Me.cmbOutillageEb.Visible = False
Else
Me.cmbOutillageEb.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkOutillageFi_Click()
If Me.chkOutillageFi Then
Me.cmbOutillageFi.Visible = False
Else
Me.cmbOutillageFi.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkLotFi_Click()
If Me.chkLotFi Then
Me.cmbLotFi.Visible = False
Else
Me.cmbLotFi.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkLotEb_Click()
If Me.chkLotEb Then
Me.cmbLotEb.Visible = False
Else
Me.cmbLotEb.Visible = True
End If

RefreshQuery

End Sub


Private Sub cmbOutillageFi_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub
Private Sub cmbLotFi_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub
Private Sub cmbOutillageEb_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub
Private Sub cmbLotEb_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub


Private Sub Form_Load()
Dim ctl As Control

For Each ctl In Me.Controls
Select Case Left(ctl.Name, 3)
Case "chk"
ctl.Value = -1
Case "txt"
ctl.Visible = False
ctl.Value = ""

Case "cmb"
ctl.Visible = False
End Select

Next ctl

Me.lstResults.RowSource = "SELECT Code article, Libellé
art, Référence MdB, Référence coiffante, Référence Adapt
poinçon, Référence Fourreau, Référence Tête de S,
Référence Pinces to, Référence Plaque V, Référence
Poinçon, Référence refroidisseur, Référence Entonnoir,
SOM Fi, SOM Eb FROM Filtre accessoires;"
Me.lstResults.Requery

End Sub

Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String

SQL = "SELECT Code article, Libellé art, Référence MdB,
Référence coiffante, Référence Adapt poinçon, Référence
Fourreau, Référence Tête de S, Référence Pinces to,
Référence Plaque V, Référence Poinçon, Référence
refroidisseur, Référence Entonnoir, SOM Fi, SOM Eb FROM
Filtre accessoires Where Filtre accessoires!Code
article<>0"

If Not Me.chkOutillageFi Then
SQL = SQL & "And Filtre accessoires!Code article '*" &
Me.cmbOutillageFi & "'"
End If

If Not Me.chkLotFi Then
SQL = SQL & "And Filtre accessoires!SOM Fi '*" &
Me.cmbLotFi & "'"
End If

Me.lstResults.RowSource = SQL
Me.lstResults.Requery

End Sub



Merci d'avance



Avatar
James
Je vais essayé ce que tu m'as dit! En tout cas je tiens à
te remercier c'est super sympa.

@+

-----Message d'origine-----
Bonjour James

A la première lecture ...

Il faut modifier ton SQL car il contient des noms de
champs, de tables

composés de 2 mots ou plus.

Me.lstResults.RowSource = "SELECT Code article,
Libellé


art, Référence MdB, Référence coiffante, Référence
Adapt


poinçon, Référence Fourreau, Référence Tête de S,
Référence Pinces to, Référence Plaque V, Référence
Poinçon, Référence refroidisseur, Référence Entonnoir,
SOM Fi, SOM Eb FROM Filtre accessoires;"


en

Me.lstResults.RowSource = "SELECT [Code article],
[Libellé

art], ..., [Référence Tête de S], ...,
[SOM Fi], [SOM Eb] FROM [Filtre accessoires];"

Idem pour le SQL de ta procédure RefreshQuery

SQL = "SELECT [Code article], [Libellé art], ...,
....FROM [Filtre accessoires] Where [Code article]<>0"

puis dans

If Not Me.chkOutillageFi Then
SQL = SQL & "And Filtre accessoires!Code article '*" &
Me.cmbOutillageFi & "'"
End If

If Not Me.chkLotFi Then
SQL = SQL & "And Filtre accessoires!SOM Fi '*" &
Me.cmbLotFi & "'"
End If


par
SQL = SQL & " And [Code article] = '" & Me!
cmbOutillageFi & "'" dans le

1er If
et pour le 2eme
SQL = SQL & " And [SOM Fi] ='" & Me.cmbLotFi & "'"

en supposant que [Code article] et [SOM Fi] sont
alphanumériques, si

numériques, supprimes les ' qui entourent.

Avant Me.lstResults.RowSource = SQL
SQL = SQL & ";"


A+
Eric

"James" écrivait
news:827b01c477da

$4c38e730$:

Bonjour,

J'ai un ptit souci avec quelques lignes de code VB qui
devraient me permettre de faire fonctionner un filtre
multi-critère.
Pour l'instant le problème c'est que lorsque j'execute
le


formulaire en question, un message d'erreur me dit :

"Dans l'instruction SELECT, un mot réservé ou un
argument


est mal orthographié ou absent, ou la ponctuation est
incorrecte"

Je n'arrive pas à trouver mon erreur, est-ce que
quelqu'un peut m'aider ?

Voici mon code :

Option Compare Database

Private Sub chkOutillageEb_Click()
If Me.chkOutillageEb Then
Me.cmbOutillageEb.Visible = False
Else
Me.cmbOutillageEb.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkOutillageFi_Click()
If Me.chkOutillageFi Then
Me.cmbOutillageFi.Visible = False
Else
Me.cmbOutillageFi.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkLotFi_Click()
If Me.chkLotFi Then
Me.cmbLotFi.Visible = False
Else
Me.cmbLotFi.Visible = True
End If

RefreshQuery

End Sub

Private Sub chkLotEb_Click()
If Me.chkLotEb Then
Me.cmbLotEb.Visible = False
Else
Me.cmbLotEb.Visible = True
End If

RefreshQuery

End Sub


Private Sub cmbOutillageFi_BeforeUpdate(Cancel As
Integer)


RefreshQuery
End Sub
Private Sub cmbLotFi_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub
Private Sub cmbOutillageEb_BeforeUpdate(Cancel As
Integer)


RefreshQuery
End Sub
Private Sub cmbLotEb_BeforeUpdate(Cancel As Integer)
RefreshQuery
End Sub


Private Sub Form_Load()
Dim ctl As Control

For Each ctl In Me.Controls
Select Case Left(ctl.Name, 3)
Case "chk"
ctl.Value = -1
Case "txt"
ctl.Visible = False
ctl.Value = ""

Case "cmb"
ctl.Visible = False
End Select

Next ctl

Me.lstResults.RowSource = "SELECT Code article,
Libellé


art, Référence MdB, Référence coiffante, Référence
Adapt


poinçon, Référence Fourreau, Référence Tête de S,
Référence Pinces to, Référence Plaque V, Référence
Poinçon, Référence refroidisseur, Référence Entonnoir,
SOM Fi, SOM Eb FROM Filtre accessoires;"
Me.lstResults.Requery

End Sub

Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String

SQL = "SELECT Code article, Libellé art, Référence
MdB,


Référence coiffante, Référence Adapt poinçon,
Référence


Fourreau, Référence Tête de S, Référence Pinces to,
Référence Plaque V, Référence Poinçon, Référence
refroidisseur, Référence Entonnoir, SOM Fi, SOM Eb
FROM


Filtre accessoires Where Filtre accessoires!Code
article<>0"

If Not Me.chkOutillageFi Then
SQL = SQL & "And Filtre accessoires!Code article '*" &
Me.cmbOutillageFi & "'"
End If

If Not Me.chkLotFi Then
SQL = SQL & "And Filtre accessoires!SOM Fi '*" &
Me.cmbLotFi & "'"
End If

Me.lstResults.RowSource = SQL
Me.lstResults.Requery

End Sub



Merci d'avance



.