OVH Cloud OVH Cloud

Controle pour critere

21 réponses
Avatar
Bubu
Bonjour a tous,
Je souhaite utiliser un controle de formulaire pour specifier un critere
dans une requete. Jusque la rien de complique mais ma difficulte c'est que je
souhaiterais que ce seul controle me permette de specifier un ou plusieurs
criteres pour un meme champ. Par exemple, lorsque je souhaite que ma requete
affiche les clients du departement 86, il me suffit de taper 86 dans le
controle utilise comme critere du champ departement et cela marche tres bien.
Par contre si je veux que ma requete affiche les clients des departements 86
ou 79, j'ai beau saisir 86 Ou 79 dans mon controle, cela ne marche pas. J'ai
essaye plusieurs syntaxes dans mon controle avec Comme, Dans... mais ça ne
marche pas.
Pouvez-vous m'aider ? Par avance merci.

1 réponse

1 2 3
Avatar
Jessy Sempere [MVP]
Re,

CA MARCHE tout impec, dans tous les cas !!!!


Youpi !!!

Merci beaucoup Jessy et je te dirais bien à charge de revanche mais je ne
vois pas très bien ce que je pourrais t'apporter.


Le principe d'un news group, c'est l'entraide et l'échange donc...
je suis loin de tout connaître, même très loin de là et je ne doute pas que
tu
puisse apporter des choses un jour aux autres ou à moi.

Cette fois c'est promis, je
ne t'embête plus sur ce sujet. Et encore bravo.


Le tout c'est d'y arriver. ;-)))

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------



Re,

Y'a des fois je me dis... que je suis con ??? ;-)
C'est normal, remplaces la ligne :
str1 = "Forms![ETIQUETTES ORGANISME]![Département]"
par la ligne
str1 = Forms![ETIQUETTES ORGANISME]![Département]
et remplaces la ligne :
str2 = "Forms![ETIQUETTES ORGANISME]![Type organisme]"
par la ligne :
str2 = Forms![ETIQUETTES ORGANISME]![Type organisme]

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Bubu" a écrit dans le message de
news:
Désolé Jessy, je sais que tu as déjà passé pas mal de temps là dessus
et



je
t'en suis très reconnaissant, mais ça ne marche pas : Y a pas de
message



d'erreur mais quand j'exécute le code puis que j'ouvre la requête en
mode



création, voilà ce que je trouve dans mon critère1 :
'Forms![ETIQUETTES'



Ou
'ORGANISME]![Département]' et en critère2 j'ai : [Forms]![ETIQUETTES
ORGANISME]![Type organisme]. Du coup le requête ne donne rien en
résultat.



Merci et encore désolé de monopoliser ton attention


Re,

Bon je ne suis pas tétu mais...
J'ai adapté ton code à tes besoins, si il plante, je veux bien
que tu me dises le message d'erreur parceque normalement
il devrait fonctionner sans problème

Quelques explications :
strSQL correspond à ton sql s'il n'y a aucun critères.
strFld1 correspond au premier champ de ta requête auquel tu veux
appliquer un critère
str1 correspond au critère du premier champ
tabX Split(str1, " ") te permet de stocker dans un tableau chaque
éléments de str1 qui sont séparé par un espace.
For ... Next permet de créer le premier critère s'il y en a un.

Les explications sont les même pour strFld2, str2 et tabX
sauf que pour le deuxième critère, le séparateur est le + à la place
de l'espace.

Pour finir le dernier algorythme (si alors...) permet de construire
le




critère globale en testant si il y a critère1 et/ou un critère 2

Enfin bon, voici le code complet :
*********************************************************
Dim qdf As DAO.QueryDef
Dim strSQL As String
Dim str1 As String, str2 As String
Dim tabX
Dim intTab As Integer
Dim strFld As String, strFld2 As String
Dim strCritere As String
Dim strCritere1 As String
Dim strCritere2 As String

strSQL = "SELECT ORGANISME.[Nom organisme], " _
& "[Formulaires]![ETIQUETTES ORGANISME]![Destinataire] AS
Nompersonne, "


_
& "ORGANISME.[Adresse 1], ORGANISME.[Adresse 2], " _
& "ORGANISME.[Code postal], ORGANISME.Commune, " _
& "IIf([Pays]='FRANCE',Null,[Pays]) AS [Pays-] " _
& "FROM ORGANISME"

Set qdf = CurrentDb.QueryDefs("Nom-de-ta-requête")

strFld1 = "Left([Code postal],2)="
str1 = "Forms![ETIQUETTES ORGANISME]![Département]"
If IsNull(str1) Or str1 = "" Then
strCritere1 = ""
Else
tabX = Split(str1, " ")
For intTab = 0 To UBound(tabX)
If strCritere1 = "" Then
strCritere1 = strFld1 & "'" & tabX(intTab) & "'"
Else
strCritere1 = strCritere1 & " OR " & strFld1 & "'" &
tabX(intTab) & "'"
End If
Next
End If

strFld2 = "[Type organisme]="
str2 = "Forms![ETIQUETTES ORGANISME]![Type organisme]"
If IsNull(str2) Or str2 = "" Then
strCritere2 = ""
Else
tabX = Split(str2, "+")
For intTab = 0 To UBound(tabX)
If strCritere2 = "" Then
strCritere2 = strFld2 & tabX(intTab)
Else
strCritere2 = strCritere2 & " OR " & strFld2 &
tabX(intTab)




End If
Next
End If

If strCritere1 = "" Then
If strCritere2 = "" Then
strCritere = ";"
Else
strCritere = " WHERE (" & strCritere2 & ");"
End If
Else
If strCritere2 = "" Then
strCritere = " WHERE (" & strCritere1 & ");"
Else
strCritere = " WHERE (" & strCritere1 & ") AND (" &
strCritere2




&
");"
End If
End If

strSQL = strSQL & strCritere
qdf.SQL = strSQL
*********************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Bubu" a écrit dans le message de
news:
Bonjour Jessy,

Merci encore de t'intéresser à mon cas. J'ai bien essayé
d'utiliser le





code
que tu m'as fourni pour répondre à mon problème mais ça ne me
donne





pas ce
que je veux et j'avoue que je n'y connais rien en visual Basic. Du
coup je



n'arrive pas à voir où ça cloche. Apparemment il y a une confusion
entre



le
champ pour lequel je veux fixer le critère dans ma requete et le
contrôle



de
mon formulaire qui me sert à fixer ce critère. J'ai donc essayé
avec





le
code
que m'a indiqué "crinblanc", en l'adaptant un peu pour essayer de
faire ce



que je voulais. Ca marche presque mais j'ai toujours un hic
lorsque je





ne
saisis rien dans le contrôle de mon formulaire. Il donne alors la
valeur



''
au critère de ma requête. De plus les choses se sont un peu
compliquées



car
j'ai maintenant 2 contrôles dans mon formulaires qui me servent à
fixer 2



critères de ma requête. Je sais que tu n'es pas l'auteur du code
d'origine



mais peut être pourras-tu m'aider à corriger ce qui ne va pas, car
ça





n'a
pas
l'air d'être grand chose (mais ce n'est qu'une impression). En
résumé





j'ai
mes deux contrôles du formulaire [ETIQUETTES ORGANISMES]
([Département] et



[Type organisme] ) qui me servent à fixer les critères des champs
Left([Code

postal], 2) et [Type organisme] de ma requête. La saisie est
obligatoire



dans
le premier contrôle mais pas dans le deuxième.

Voici le code que j'ai utilisé et qui ne marche pas lorsque je ne
saisie



rien dans le deuxième contrôle. Par contre dans les autres cas ça
marche



bien
:

Dim qdf As QueryDef
Dim criteres As String
Dim criteres2 As String
Dim strSQL As String

Set qdf = CurrentDb.QueryDefs("[ADRESSE organisme au choix]")
If IsNull(Forms![ETIQUETTES ORGANISME]![Département]) Then
criteres2 = Replace(Forms![ETIQUETTES ORGANISME]![Type organisme],

"+", "



OR
[Type organisme]=")
strSQL = "SELECT ORGANISME.[Nom organisme],
[Formulaires]![ETIQUETTES






ORGANISME]![Destinataire] AS Nompersonne, ORGANISME.[Adresse 1],
ORGANISME.[Adresse 2], ORGANISME.[Code postal], ORGANISME.Commune,
IIf([Pays]='FRANCE',Null,[Pays]) AS [Pays-]FROM ORGANISME WHERE
[Type




organisme]=" & criteres2
Else
criteres = "'" & Replace(Forms![ETIQUETTES
ORGANISME]![Département],






" ",
"' OR Left([Code postal],2) = '") & "'"
criteres2 = Replace(Forms![ETIQUETTES ORGANISME]![Type
organisme],






"+", "
OR [Type organisme]=")
strSQL = "SELECT ORGANISME.[Nom organisme],
[Formulaires]![ETIQUETTES






ORGANISME]![Destinataire] AS Nompersonne, ORGANISME.[Adresse 1],
ORGANISME.[Adresse 2], ORGANISME.[Code postal], ORGANISME.Commune,
IIf([Pays]='FRANCE',Null,[Pays]) AS [Pays-]FROM ORGANISME WHERE
(Left([Code


postal], 2) =" & criteres & ")" & "AND ([Type organisme]=" &
criteres2 &




")"
End If
qdf.SQL = strSQL


Merci de ton aide.
Bubu


Bonjour

Essais le code complet suivante :

******************************************************
Dim qdf As DAO.QueryDef
Dim strSQL As String
Dim strX As String
Dim tabX
Dim intTab As Integer
Dim strFld As String
Dim strCritere As String

Set qdf = CurrentDb.QueryDefs("Nom-de-ta-requête")
strSQL = "SELECT ORGANISME.[Nom organisme], ORGANISME.[Adresse
1], "






_
& "ORGANISME.Commune, " _
& "ORGANISME.[N° de département] FROM ORGANISME"

strFld = "ORGANISME.[N° de département]="
strX = "Forms![ETIQUETTES ORGANISME]![Département]"

If IsNull(strX) Or strX = "" Then
strSQL = "SELECT ORGANISME.[Nom organisme],
ORGANISME.[Adresse






1], "
_
& "ORGANISME.Commune, " _
& "ORGANISME.[N° de département] FROM ORGANISME;"
Else
tabX = Split(strX, " ")
For intTab = 0 To UBound(tabX)
If strCritere = "" Then
strCritere = strFld & "'" & tabX(intTab) & "'"
Else
strCritere = strCritere & " OR " & strFld & "'" &
tabX(intTab) &


"'"
End If
Next
strSQL = "SELECT ORGANISME.[Nom organisme],
ORGANISME.[Adresse






1], "
_
& "ORGANISME.Commune, " _
& "ORGANISME.[N° de département] " _
& "FROM ORGANISME WHERE " & strCritere & ";"
End If
qdf.SQL
******************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Bubu" a écrit dans le message
de






news:
Désolé c'est encore moi : comment faire pour le code
fonctionne







lorsqu'il
n'y
rien de saisi dans le contrôle [Département] de mon
formulaire.







Cad
que
les
utilisateurs aient le choix de préciser ou pas le n° de














1 2 3