Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA) [ Langages dérivés / VBA ] (setfocus)

vendredi 3 octobre 2008 à 12:13:20 | créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

setfocus

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.....


vendredi 3 octobre 2008 à 12:41:21 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

lillith212

Membre Club
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.


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


vendredi 3 octobre 2008 à 20:49:01 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

setfocus

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...


samedi 4 octobre 2008 à 17:23:55 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

LIBRE_MAX

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.
  

 								

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



samedi 4 octobre 2008 à 17:27:14 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

LIBRE_MAX

oups!
t' as raison de dire que c' est très difficile à gérer.
Cependant c' est pas impossible !


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



lundi 6 octobre 2008 à 14:20:05 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

setfocus

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!


lundi 6 octobre 2008 à 15:36:41 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

setfocus

...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:


<code>
If Form_Général.checkan Then
   xfiltre1 = Form_Général.listan.value
Else
  xfiltre1 = ""
End If

If 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
</code>



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

lundi 6 octobre 2008 à 16:51:27 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

setfocus

Réponse acceptée !

pour info....
J'ai trouvé, c'est une erreur dans mon code!

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

merci encore "LIBRE_MAX"!


lundi 6 octobre 2008 à 17:20:15 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

LIBRE_MAX

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.



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



lundi 6 octobre 2008 à 18:25:20 | Re : créer une requète en fonction d'une sélection de filtres (ACCESS/VBA)

setfocus

c'est vrai, tu as raison!
... J'en ai pris note!
bye




Cette discussion est classé dans : vba, access, fonction, créer, filtres


Répondre à ce message

Sujets en rapport avec ce message

Créer un objet image dans access en vba [ par Led0b ] Je voudrais savoir comment créer un objet image et récupérer une image dans cette objet à partir de son chemin d'accès.J'ai utiliser la fonction getob Créer un menu tout simple en VBA(ACCESS)DEBUTANT [ par seblebatou ] Bonjour,j'ai regardé dans les autres sujets j'ai vu des super menus mais moi je veux juste faire un menu avec fichier edition affichage...en VBA(ACCES programmation VBA avec ACCESS 2000 [ par michel_b ] j ai un probleme avec la roulette de la souris dans les formulaires en effet quand je l utilise elle fait défiler les enregistrements mais il y a des appel de fonction .NET de access VBA [ par quineman ] Peut on appeler du code .NET d'une application MS access (et donc dans du code VBA)Merci fonction VBA urgence [ par a_zouggari ] Bonjour ,je cherche comment déclarer une fonction en VBA est faire appel a cette fonctionMerci de me réponde en urgence créer une tableau dans boite de dialogue [ par jeannicolas1 ] Bonjour à tous,Je viens juste de m'inscrire sur ce site, et j'ai déjà une question? Je suis un novice en VBA mais bon il faut bien un jour commencer.J Signets vides sous Word avec Access+VBA [ par Scuba_069 ] Bonjour à tous. J'ai un problème sous access. J'ai créé pour ma société un petit logiciel de gestion de fin de chantier. J'ai un formulaire ou je rem [Access-VBA] Problème chaîne de caractères [ par e040098k ] Bonjour, J'ai un problème lorsque je récupére une chaine de caractère contenu dans un champ de formulaire. C'est un chemin d'accès que j'ai moi même [vba access]comment traiter mon problème ? [ par fixou81 ] bonjour,voila je commence un projet et je reflechis à mon problème dansson integralité et je me pose des questions sur les pistes à suivre...voila je [VBA excel] importer table access [ par outofbusiness ] bonjour,Je voudrais pouvoir importer une table access sous excel, et que cette table s'affiche dans une nouvelle feuille de mon classeur excel qui est


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,546 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.