ACCESS: filtre par formulaire [Fermé]

- - Dernière réponse :  Zorglub0346 - 22 juil. 2011 à 11:25
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
Afficher la suite 

20/28 réponses

Meilleure réponse
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
4
Merci
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"

Dire « Merci » 4

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 58968 internautes nous ont dit merci ce mois-ci

Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
3
Merci
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"
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
Pour ceux qui sont fâches avec les codes, Il suffit de lancer une macro '' Excecuter commande'' / ''Filtrer par formulaire'' à l'ouverture du formulaire ( propriété '' sur ouverture '' )
1
Merci
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
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
1
Merci
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"
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
0
Merci
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"
0
Merci
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?
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
0
Merci
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"
0
Merci
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
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
0
Merci
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"
0
Merci
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...
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
0
Merci
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"
0
Merci
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
0
Merci
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 ?
0
Merci
Très bonne idée je vai essayer merci bcp t'es un amour
blux
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647 -
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"
0
Merci
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?
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
0
Merci
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"
0
Merci
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
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
0
Merci
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"
0
Merci
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
Messages postés
23909
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2647
0
Merci
Voui c'est normal...

Un form doit être basé sur une requête ou une table.

Quand on l'ouvre, on met une restriction (mareq), mais dans ce cas 'mareq' doit être la fin d'une requête sans le WHERE... J'avais commis l'erreur en l'indiquant dans mon message 19 (mais je l'ai pas corrigé pensant que tu ne l'utiliserais pas)

En résumé :

Pour ouvrir un formulaire :

mareq = "critere1 = '" + valeur1.value + "'"

Pour affecter un recordsource à un objet (genre liste déroulante)

mareq = "SELECT....WHERE...."

C'est quoi comme molécules pour que l'on ait le choix de 'moche' ?
Cyclohexane, ADN, paradichlorobenzene ? :-)
Ou alors c'est en oncologie (et c'est moins drôle) ?

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