Créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

Résolu
setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011 - 3 oct. 2008 à 12:13
setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011 - 6 oct. 2008 à 18:25
Bonjour à tous,

Je ne suis pas une grosse bete en développement, et aurai donc besoin de vos lumières en vba sur ACCESS...

Dans un premier formulaire, l'utilisateur sélectionne (par checkbox) les filtres qu'il veut utiliser, et précise leur valeur dans un textbox associé.

lorsqu'il appuie sur un bouton, ca lance un datalist.
Le but est, vous l'avez bien compris, de renseigner le rowsource du datalist en fonction des filtres sélectionnés, s'il y en a!

J'ai essayé de créer un tableau avec une boucle "FOR"... mais je ne m'en sors pas! Je me vois faire des "IF" partout pour savoir quel filtre et combien sont sélectionnés! (bah oui, je sais... dsl)

En vous remerciant tous d'avance pour l'aide apportée.....

9 réponses

setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011
6 oct. 2008 à 16:51
pour info....
J'ai trouvé, c'est une erreur dans mon code!

tout mes champs filtrés sont des string, donc par ex :
req1 = req1 & " Where Num_client=""" & xfiltre4 & """"


merci encore "LIBRE_MAX"!
3
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
3 oct. 2008 à 12:41
Bonjour,

Alors désolée mais il va falloir être un peu plus détailler...
Les informations que tu veux mettre dans ta list, elles sont stockées ou?
Une requete de selection pourrai peut etre t'aider en mettant en paramètre les valeurs saisie par l'utilisateur. Cependant, des erreurs ne peuvent-elles pas survenir si ton utilisateur effectu une mauvaise saisie? Attention à gerer ceci aussi...
Pour la requête :
Select (champs)
From (table)
Where champs = valeursaisie par l'utilisateur
Le tout bien sur codé en vba
Voila bon courage et n'hesite pas à soumettre ton code

S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- Le bon t
0
setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011
3 oct. 2008 à 20:49
Salut, et merci de répondre.

(En effet, excuse, j'ai l'aissé le message un peu rapidement, pris par le temps)

En fait, oui, j'ai une base de donnée sur laquelle je fais une requete (code vba) afin d'afficher les données dans un datalist. J'ai bien pensé à la requete paramétrée, mais si le paramètre n'est pas ou mal renseigné, la requete va planter.

C'est pourquoi je suis parti dans un mélange de boucles FOR et IF pour essayer de gérer tout ca....mais ca devient très vite une usine à gaz! (et c'est franchement pas très beau à voir!!!!)

Je me dis donc que je pars dans une mauvaise voie, et il me semble qu'il faut carrément que je change de méthode!

principe :
5 filtres facultatifs, on clique sur le bouton, et le datalist s'alimente comme désiré.

comment feriez vous ca?.... peut être en utilisant un autre controle?

Merci encore pour tous vos commentaires...
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 oct. 2008 à 17:23
Salut,
t' as raison de dire que c' est très duffucile à gérer.
Cependant c' est pas très difficile.Le tout est d' être
en bon terme avec la logique.
-J' ai 5 CheckBox par les quels je veux savoir si le filtre associé doit être pris ou pas en charge.
 
Prenons l' exemple de trois filtres:
If Check1 Then
   xFiltre1=TextBox1.Texte
Else
  xFiltre1=""
End If


If Check2 Then
   xFiltre2=TextBox2.Texte
Else
  xFiltre2=""
End If


If Check3 Then
   xFiltre3=TextBox3.Texte
Else
  xFiltre3=""
End If


Vient ensuite ma requete, qui de toute façon sera de la forme:


sQuery="SELECT * FROM MATABLE"


Ensuite je dois savoir si des critère ou pas.
Le problère ici est de savoir s' il y' aura un WHERE au début et surtout à quel niveau.Et s' il y' aura oui ou non un ou plusieurs AND.


Pour ça je dois impérativement passer par des tests.Voir des tests imbriqués.


If xFiltre1<>"" Or xFiltre2<>"" Or xFiltre3<>"" Then
    'là je sais que j' ai au moins un filtre.
    'Le ou lesquels ?
    If xFiltre1<>"" Then
        sQuery=sQuery & " WHERE chp1=" & xFiltre1
        If xFiltre2<>"" Then _
            sQuery=sQuery & " And chp2=" & xFiltre2
        If xFiltre3<>"" Then _
            sQuery=sQuery & " And chp3=" & xFiltre3
         
    Else
       If xFiltre2<>"" Then
           sQuery=sQuery & " WHERE chp2=" & xFiltre2
            If xFiltre3<>"" Then _
                sQuery=sQuery & " And chp3=" & xFiltre3
       Else
          If xFiltre3<>"" Then _
               sQuery=sQuery & " WHERE chp3=" & xFiltre3
        End If


End If
  
  C' est vrai que ça devient un peu plus compliqué avec 5 filtres ou plus, mais ça te donnes au moins une idée du comment procèder.
  





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
4 oct. 2008 à 17:27
oups!
t' as raison de dire que c' est très difficile à gérer.
Cependant c' est pas impossible !

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />
0
setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011
6 oct. 2008 à 14:20
Milles merci pour ton message...

En effet, en  reprennant ca en début de semaine, cela parait bien moins tordu! hi!

C'est même plutot simple!!

Encore merci pour ton aide!
0
setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011
6 oct. 2008 à 15:36
...j'ai encore un ptit hic....
tout se passe plutot bien, sauf qu'au moment de s'afficher, le datalist me demande de préciser le paramètre du filtre renseigné!
ci-dessous le code pour 7 filtres:


<hr />
If Form_Général.checkan Then
   xfiltre1 = Form_Général.listan.value
Else
  xfiltre1 = ""
End IfIf Form_Général.checkmois Then
   xfiltre2 = Form_Général.listmois.value
Else
  xfiltre2 = ""
End If

If Form_Général.checkresp Then
   xfiltre3 = Form_Général.listresp.value
Else
  xfiltre3 = ""
End If

If Form_Général.checkcli Then
   xfiltre4 = Form_Général.txtcli.value
Else
  xfiltre4 = ""
End If

If Form_Général.checkplan Then
   xfiltre5 = Form_Général.txtplan.value
Else
  xfiltre5 = ""
End If

If Form_Général.checkactiv Then
   xfiltre6 = Form_Général.txtactiv.value
Else
  xfiltre6 = ""
End If

If Form_Général.checkra Then
   xfiltre7 = Form_Général.txtra.value
Else
  xfiltre7 = ""
End If

req1 = "SELECT * FROM [stock kam+]"

If xfiltre1 <> "" Or xfiltre2 <> "" Or xfiltre3 <> "" Or xfiltre4 <> "" Or xfiltre5 <> "" Or xfiltre6 <> "" Or xfiltre7 <> "" Then
    If xfiltre1 <> "" Then
        req1 = req1 &amp; " WHERE Année=" &amp; xfiltre1
        If xfiltre2 <> "" Then _
            req1 = req1 &amp; " And mid(Date_pass_exe,4,2)=" &amp; xfiltre2
        If xfiltre3 <> "" Then _
            req1 = req1 &amp; " And Resp_plan=" &amp; xfiltre3
        If xfiltre4 <> "" Then _
            req1 = req1 &amp; " And Num_client=" &amp; xfiltre4
        If xfiltre5 <> "" Then _
            req1 = req1 &amp; " And Num_plan=" &amp; xfiltre5
        If xfiltre6 <> "" Then _
            req1 = req1 &amp; " And Num_Activite=" &amp; xfiltre6
        If xfiltre7 <> "" Then _
            req1 = req1 &amp; " And Num_RA=" &amp; xfiltre7

        Else
            If xfiltre2 <> "" Then
                req1 = req1 &amp; " Where mid(Date_pass_exe,4,2)=" &amp; xfiltre2
            If xfiltre3 <> "" Then _
                req1 = req1 &amp; " And Resp_plan=" &amp; xfiltre3
            If xfiltre4 <> "" Then _
                req1 = req1 &amp; " And Num_client=" &amp; xfiltre4
            If xfiltre5 <> "" Then _
                req1 = req1 &amp; " And Num_plan=" &amp; xfiltre5
            If xfiltre6 <> "" Then _
                req1 = req1 &amp; " And Num_Activite=" &amp; xfiltre6
            If xfiltre7 <> "" Then _
                req1 = req1 &amp; " And Num_RA=" &amp; xfiltre7
            Else
                If xfiltre3 <> "" Then
                    req1 = req1 &amp; " Where Resp_plan=" &amp; xfiltre3
                If xfiltre4 <> "" Then _
                    req1 = req1 &amp; " And Num_client=" &amp; xfiltre4
                If xfiltre5 <> "" Then _
                    req1 = req1 &amp; " And Num_plan=" &amp; xfiltre5
                If xfiltre6 <> "" Then _
                    req1 = req1 &amp; " And Num_Activite=" &amp; xfiltre6
                If xfiltre7 <> "" Then _
                    req1 = req1 &amp; " And Num_RA=" &amp; xfiltre7
                Else
                    If xfiltre4 <> "" Then
                        req1 = req1 &amp; " Where Num_client=" &amp; xfiltre4
                    If xfiltre5 <> "" Then _
                        req1 = req1 &amp; " And Num_plan=" &amp; xfiltre5
                    If xfiltre6 <> "" Then _
                        req1 = req1 &amp; " And Num_Activite=" &amp; xfiltre6
                    If xfiltre7 <> "" Then _
                        req1 = req1 &amp; " And Num_RA=" &amp; xfiltre7
                    Else
                        If xfiltre5 <> "" Then
                            req1 = req1 &amp; " Where Num_plan=" &amp; xfiltre5
                        If xfiltre6 <> "" Then _
                            req1 = req1 &amp; " And Num_Activite=" &amp; xfiltre6
                        If xfiltre7 <> "" Then _
                            req1 = req1 &amp; " And Num_RA=" &amp; xfiltre7
                        Else
                            If xfiltre6 <> "" Then
                                req1 = req1 &amp; " Where Num_Activite=" &amp; xfiltre6
                            If xfiltre7 <> "" Then _
                                req1 = req1 &amp; " And Num_RA=" &amp; xfiltre7
                            Else
                                If xfiltre7 <> "" Then
                                    req1 = req1 &amp; " Where Num_RA=" &amp; xfiltre7
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
End If

List1.RowSource = req1


<hr />
ci-dessous, "RA34208" est la valeur du filtre renseigné!

Mis à part ca, le datalist s'alimente correctement si je rerenseigne la valeur

Si qqun à une idée du pourquoi du comment..... Je suis tout ouie! merci
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
6 oct. 2008 à 17:20
Salut,
j' étais sur le point de te demander plus de précision au sujet
la valeur du filtre demandée :-)
Tant mieux alors si tout est ok.
Pour ne pas repartir les "mains vides", une suggestion pour simplifier l' écriture pour les champs string , une simple quote de part et d' autre suffira :
req1 = req1 & " Where Num_client='" & xfiltre4 & "'"

Bonne continuation.

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />
0
setfocus Messages postés 47 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 7 novembre 2011
6 oct. 2008 à 18:25
c'est vrai, tu as raison!
... J'en ai pris note!
bye
0
Rejoignez-nous