Rechercher : dans
Par :

ACCESS: filtre par formulaire

Dernière réponse le 31 jan 2009 à 21:07:17 Aurore, le 24 aoû 2004 à 12:08:07 
 Signaler ce message aux modérateurs

Bonjour à tous,
quelqu'un saurait comment faire pour qu'un formulaire lorsqu'on l'ouvre soit directement en mode filtre par formulaire?
Merci d'avance
Aurore

1

blux, le 24 aoû 2004 à 12:46:18

Salut,

dans les propriétés du formulaire, onglet 'données', il y a un champ nommé 'filtre' qui correspond au filtre souhaité et qui sera chargé avec le formulaire.

Mais il ne sera pas appliqué automatiquement. Pour cela, il faut écrire un peu de code dans l'évènement 'surouverture' et exécuter la méthode 'applyfilter' (dixit la doc).

Des renseignements plus détaillés sont dispo dans l'aide, à la rubrique 'filtre'.

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

28

stephan, le 15 oct 2004 à 20:41:19
  • +1

Bonsoir,

En réponse à ta question.
c'est à dire Mettre en mode "filtrer par formulaire" un formulaire de saisie afin de se servir de ce même formulaire pour visualiser le résultat enregistrement par enregistrement voila la réponse.

Place un Bouton sur un autre Formulaire pour ouvrir ton formulaire en mode "Filtrer par formulaire" et applique lui ce code.

 
	Private Sub Btn_Click()

    		DoCmd.OpenForm "F_TonFormulaire"
    		DoCmd.RunCommand acCmdFilterByForm
    
	End Sub


Ensuite seul une barre de commande peut activer le filtre.
En effet, le mode "Filtrer par formulaire" désactive tous les évènements des contrôles du formulaire.
Ceci dit, par défaut, la barre de commande "Filtre/Tri" s'affiche automatiquement en mode "Filtrer par formulaire".

Afin si tu ne veux pas être obligé de te taper ton précédent filtre à effacer à chaque sélection place ce code sur le chargment de ton formulaire.

	Private Sub Form_Load()

		DoCmd.Maximize
		Me.Filter = ""
		Mon1erchamp.SetFocus
	End Sub


En espérant qu'il ne soit pas trop tard, bonne continuation.

stéphan

Répondre à stephan

2

Aurore, le 24 aoû 2004 à 13:49:39

Merci Blux T'es un choux
mais pourrait tu me donner quelque renseignements sur la methode aplyfilter: c'est un docmd, quels sont ses parametres sais-tu l'utiliser?
merci encore
Aurore

Répondre à Aurore

3

blux, le 24 aoû 2004 à 14:52:13

D'après l'aide (que tu devrais consulter...) :

Cet exemple utilise la méthode ApplyFilter pour n'afficher que les enregistrements contenant le nom Roi dans le champ Nom:

DoCmd.ApplyFilter , "Nom = 'Roi'"


A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

4

Aurore, le 24 aoû 2004 à 16:43:53

D'après ce que j'ai compris dans l'aide (pas grand chose je bosse dans une boite américaine et tout est en anglais).
Applyfilter sert comme son nom l'indique à valider un filtre déjà existant. mais tout ce que je désire c'est arriver sur le formulaire en mode filtre pour formulaire sans devoir cliquer sur l'icone m'amenant dans ce mode.
J'ai un second problème: comment basé un autre formulaire sur le résultat de ce premier filtre?

Répondre à Aurore

5

blux, le 24 aoû 2004 à 16:58:23

Pour arriver au mode filtré, encore faut-il définir un filtre !
C'est l'objet de mon premier message : enregistrer un filtre avec le formulaire...
L'icone de passage en mode filtré n'est opérationnelle que si un filtre est défini.

Pour ton deuxième problème, je ne pense pas que l'on puisse baser un formulaire sur un formulaire filtré, il vaudrait mieux baser le formulaire sur une requête...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

6

Aurore, le 24 aoû 2004 à 17:18:57

Je ne veux pas arriver en mode filtrer just arriver et pouvoir sélectionner les valeurs que je veux dans les champs que je veux sans devoir presser filtre par formulaire. Ensuite je pense que je serai obligé de revenir en mode normal pour pouvoir presser sur un bouton m'ouvrant mon deuxième formulaire en mode tabulaire donc tous les tuples conprenant ces valeurs sont afficher, je click sur celui qu'il me faut et il m'ouvre mon état.

Je pense que il y a à peu près tout si tu pouvais m'aider je te serai infinement reconnaissant

merci Aurore

Répondre à Aurore

7

blux, le 24 aoû 2004 à 17:32:57

D'après ce que tu expliques, il semblerait que tes champs dans le formulaire soient indépendants. Dans ce cas, mets les en liste déroulante, laisse l'utilsateur choisir les bonnes valeurs dans toutes les listes, et à l'appui sur un bouton tu récupères les données des listes déroulantes pour ouvrir un autre formulaire...

Ou alors j'ai pas saisi où tu voulais en venir...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

8

Aurore, le 25 aoû 2004 à 09:42:51

Tu veux que je les récupère avec une requete
Champs = liste dans le formulaire
Je vois ce que tu veux dire mais j'ai 38 champs au choix ce qui me fait 274 000 000 de possibillités. En faisant une ligne à la minute ça devrait pas me prendre plus de 10 000 ans...
en fait c'est pour ça que je me suis dirigé vers les filtre par formulaire...

Répondre à Aurore

9

blux, le 25 aoû 2004 à 10:03:33

10 000 ans...
ben comme ça, tu seras jamais au chômage... :-)

Je n'ai pas compris ce que tu souhaites faire : où sont tes données, pourquoi veux-tu les filtrer ?

Sache qu'il est parfaitement possible de modifier dynamiquement les données présentées dans une liste déroulante.

Ex :

un formulaire avec une liste des marques (de voitures), une liste des modèles et une liste des couleurs.

Le choix de 'bmw' dans la première liste fera que la deuxième ne proposera que les modèles bmw et ainsi de suite...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

10

Aurore, le 25 aoû 2004 à 10:44:45

Le but est de sortir un état avec une seule ligne.
Pour cela il y a 38 champs dans ma table principal qui peuvent etre un critère de séléction ou pas.
ex : taille = grand / apparance = moche / épaisseur = mince
ex2 : taille = petit / épaisseur = mince
donc j'ai un formulaire permettant de faire cette saisie et après un deuxième formulaire en mode tabulaire s'ouvre avec tous les tuples comprenant ces infos.
On en choisi un et l'état avec cette ligne s'affiche

Répondre à Aurore

11

blux, le 25 aoû 2004 à 10:54:11

Si tes 38 critères sont indépendants, quel est l'intérêt du filtre ?

Si c'est ce que j'ai compris, je te propose cela :

- sélection des critères
- appui sur un bouton (nécessaire puisque certains critères sont optionnels)
- création d'une requête qui recherche tous les enr correspondant aux critères choisis
- affichage d'un formulaire basé sur cette requête
- sélection de l'enr souhaité
- édition

Ca irait ?

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

12

Aurore, le 25 aoû 2004 à 11:15:01

C'était mon idée de base mais le probleme c'est que les 38 champs sont optionnel donc dans la requete qui les récupère je peu avoir quelque chose dans mon premier champs et rien dans le 37 autres ou le 1er , le 2eme et les 36 autres vides ...etc et tu fais ça pour les 38 champs ce qui me fait 274 000 000 de ou c'est un peu bcp non ?

Répondre à Aurore

13

blux, le 25 aoû 2004 à 11:24:54

Ben oui, mais si on simplifie :

Tu crées une requête en vba en testant les champs :

Mareq = "SELECT * FROM matable WHERE "
if not isnull(champ1.value) then
   mareq = mareq + " critere1 = '" & champ1.value & "'"
end if
if not isnull(champ2.value) then
   mareq = mareq + " critere2 = '" & champ2.value & "'"
end if
....
if not isnull(champ38.value) then
   mareq = mareq + " critere38 = '" & champ38.value & "'"
end if
mareq = mareq + " ;"
Il ne reste plus qu'à mettre un .recordsource = mareq pour ton deuxième formulaire.

Ca irait ?

Mais faut gérer les AND, je l'ai pas mis, mais bon, c'est l'esprit qui vaut...

A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

14

Aurore, le 25 aoû 2004 à 11:29:17

Très bonne idée je vai essayer merci bcp t'es un amour

Répondre à Aurore

15

blux, le 25 aoû 2004 à 11:30:12

Euh, ma femme va pas apprécier, ni mon fils ;-)

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

16

Aurore, le 25 aoû 2004 à 11:42:59

J'essaye et je te donne des nouvelles
merci encore
mais ton mareq c'est une variable?
Si c'est le cas t'es sur que je peux basé un recordsource dessus?

Répondre à Aurore

17

blux, le 25 aoû 2004 à 12:55:01

Mareq est de type string

forms![mondeuxiemeformulaire].recordsource = mareq

ou

DoCmd.OpenForm "mondeuxiemeformulaire", acNormal, , mareq

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

18

Aurore, le 25 aoû 2004 à 15:38:10

Désolé de faire une nouvelle fois appel à toi mais ça marche pas un message d'erreur s'affiche: (traduit en français) access ne peut pas trouver le formulaire mondeuxiemeformulaire se référant à du code vb...
c'est bizarre t'es sur qu'on peut lier le recordsource à une variable
et si je la déclare pas mareq et que je nomme une requete comme ça

Répondre à Aurore

19

blux, le 25 aoû 2004 à 16:00:26

Je confirme : on peut bien lier le recordsource à une variable (si elle contient quelque chose au format nécessaire, c'est à dire une requête). C'est ce que je fais depuis de nombreuses années ;-)

Ton erreur vient sûrement du fait que le formulaire dont tu souhaites changer une propriété n'est pas ouvert...

Ouvre ton formulaire 'mondeuxiemeformulaire' et laisse-le en icône, exécute ensuite la procédure du formulaire principal, ça devrait aller beaucoup mieux !

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

20

Aurore, le 26 aoû 2004 à 09:51:55

Effectivement ça joue un rôle mais un message d'erreur ( The action or method is invalid because the form or report isn't bound to a table or query.) apparait encore meme en simplifiant a fond la requete de cette façon:
mareq = "SELECT * FROM T_molecule ;"
stDocName = "f_name1"
DoCmd.OpenForm stDocName, acNormal, , mareq
vois-tu l'erreur
merci encore pour tout ce que tu fais pour moi c'est vraiment cool
Aurore

Répondre à Aurore