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.....
A voir également:
Créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)
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
(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?
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.
...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 & " WHERE Année=" & xfiltre1
If xfiltre2 <> "" Then _
req1 = req1 & " And mid(Date_pass_exe,4,2)=" & xfiltre2
If xfiltre3 <> "" Then _
req1 = req1 & " And Resp_plan=" & xfiltre3
If xfiltre4 <> "" Then _
req1 = req1 & " And Num_client=" & xfiltre4
If xfiltre5 <> "" Then _
req1 = req1 & " And Num_plan=" & xfiltre5
If xfiltre6 <> "" Then _
req1 = req1 & " And Num_Activite=" & xfiltre6
If xfiltre7 <> "" Then _
req1 = req1 & " And Num_RA=" & xfiltre7
Else
If xfiltre2 <> "" Then
req1 = req1 & " Where mid(Date_pass_exe,4,2)=" & xfiltre2
If xfiltre3 <> "" Then _
req1 = req1 & " And Resp_plan=" & xfiltre3
If xfiltre4 <> "" Then _
req1 = req1 & " And Num_client=" & xfiltre4
If xfiltre5 <> "" Then _
req1 = req1 & " And Num_plan=" & xfiltre5
If xfiltre6 <> "" Then _
req1 = req1 & " And Num_Activite=" & xfiltre6
If xfiltre7 <> "" Then _
req1 = req1 & " And Num_RA=" & xfiltre7
Else
If xfiltre3 <> "" Then
req1 = req1 & " Where Resp_plan=" & xfiltre3
If xfiltre4 <> "" Then _
req1 = req1 & " And Num_client=" & xfiltre4
If xfiltre5 <> "" Then _
req1 = req1 & " And Num_plan=" & xfiltre5
If xfiltre6 <> "" Then _
req1 = req1 & " And Num_Activite=" & xfiltre6
If xfiltre7 <> "" Then _
req1 = req1 & " And Num_RA=" & xfiltre7
Else
If xfiltre4 <> "" Then
req1 = req1 & " Where Num_client=" & xfiltre4
If xfiltre5 <> "" Then _
req1 = req1 & " And Num_plan=" & xfiltre5
If xfiltre6 <> "" Then _
req1 = req1 & " And Num_Activite=" & xfiltre6
If xfiltre7 <> "" Then _
req1 = req1 & " And Num_RA=" & xfiltre7
Else
If xfiltre5 <> "" Then
req1 = req1 & " Where Num_plan=" & xfiltre5
If xfiltre6 <> "" Then _
req1 = req1 & " And Num_Activite=" & xfiltre6
If xfiltre7 <> "" Then _
req1 = req1 & " And Num_RA=" & xfiltre7
Else
If xfiltre6 <> "" Then
req1 = req1 & " Where Num_Activite=" & xfiltre6
If xfiltre7 <> "" Then _
req1 = req1 & " And Num_RA=" & xfiltre7
Else
If xfiltre7 <> "" Then
req1 = req1 & " Where Num_RA=" & 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
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 & "'"