Etats sous access

[Résolu]
Signaler
Messages postés
6
Date d'inscription
jeudi 29 mars 2007
Statut
Membre
Dernière intervention
18 juin 2007
-
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
-
Bonjour,
Je suis en ce moment dans l'élaboration d 'une base de donnée sous access qui me servira à gérer l'inventaire de materiel d'un collège.
Je voudrais savoir, si c'est possible, comment faire pour afficher l'état (déja créé) d'un enregistrement courent qu'on a devant soi dans un formulaire access. J'ai préalablement crée un état mais lorsque je lance cette état depuis le formulaire il me donne tous les enregistrements alors que j'en voudrais qu'un.
Au début j'ai pensé a un filtre ou on pourai metre comme restriction l'égalité des clefs primaires mais ca ne marche pas ou peut etre que j'ai essayé une mauvaise sintaxe. Alors j'aimerais avoir vos solutions, merci d'avance. Bonne continuation a tous.

8 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Dans ton formulaire, comment lances-tu l'état ? Tu as fait avec l'assistant de création du bouton, ou directement en code ?

Si tu codes toi même, tu dois normalement afficher ton Etat avec une ligne de commande de type : DoCmd.OpenReport.
Ouvre l'aide sur OpenReport, tu verras que tu peux intégrer une condition, par exemple sur ta clé primaire.

Voici comment j'ai fait pour mon propre cas (je passe par une variable parce qu'en fait, mon critère est bien plus compliqué que dans l'exemple que je te mets ^^) :

Dim Critère as String
Critère = "NomCléPrimaire=" & cbo_Enregistrement.value
DoCmd.OpenReport "MonEtat", acViewPreview, , Critère

Ca suppose donc tout de même que ton état soit déjà crée pour tous les enregistrements

Molenn
Messages postés
9
Date d'inscription
vendredi 9 décembre 2005
Statut
Membre
Dernière intervention
15 juin 2007

Bon, après tous ces échanges, je reprend (prèsque) à zéro.
1) Ton formulaire est basée sur une table, tu nous a dit.
2) La table contient 600 enrégistrements
3) Ton formulaire n'affiche qu'une certaine sélection de ces 600 lignes (une ou plusieurs, peu importe)
4) Il y a donc une sélection qui se fait
5) Pour que cette sélection puisse être variable en fonction des besoins, une des possibilités est de passer par une "box" quelquonque (personellement je préfère les listbox que j'intègre dans le formulaire, mais c'est une question de goût)
6) Tu actualise ton formulaire en fonction de cette sélection
7) Tu applique la même sélection dans ton état à l'ouerture de celui-ci

Maintenant, il reste à savoir comment tu veux appliquer ta sélection : Soit tu crée un filtre soit tu modifie ta source (aussi bien dans le formulaire que dans l'état !)
Dans le code du formulaire cela peut donner :Me.RecordSource "SELECT A, B, C FROM [MaTable] WHERE A '" & Formulaires![MonForm].SEL_A & "'" ,en une seule ligne, supposant A, B et C comme zone de la table (sinon mettre *) et SEL_A la listbox
ensuite fais un "RepaintObject" du formulaire
Pour l'état, tu l'écris dans une Sub "Report_Open" (tu ouvres l'état surtout PENDANT que tu es dans ton formulaire !)
Ainsi, tu obtient la même sélection
Messages postés
9
Date d'inscription
vendredi 9 décembre 2005
Statut
Membre
Dernière intervention
15 juin 2007

Bonjour yohann974,

Quel sont les données sources du formulaire ? Des filtres dans le formulaire ?
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Salut,

Quelle est la source de ton formulaire (et de ton etat) et comment la definies tu (recordset, requete SQL) ?

Car je pense que tu pourrais simplement faire :
Nom_etat.RecordSource "Select * From Ta_table Where <gras>Ton_champ </gras> Ton_filtre"

cela signifie que la source ne sera que le resultat de la selection de tous les enregistrements qui repondent a la condition definie dans la clause Where de la requete SQL. Si tu as un filtre correspond, la selection ne donnera que l'enregistrement qui tu souhaites.

Est ce que tu comprends ce que je veux dire ?
Messages postés
6
Date d'inscription
jeudi 29 mars 2007
Statut
Membre
Dernière intervention
18 juin 2007

Merci a tous pour vos réponses aussi rapide.
Je n'utilise pas de filtre dans mon formulaire, j'affiche tous les enregistrements de ma table ( a peu prés 600) et l'état que je veu lancer est un tableau d'amortissement ( donc beaucoup de calcul). Si j'ouvre l'état avec les 600 enregistrements j'aurais de gros soucis sur ma machine ( qui date un peu)
Donc la solution de Molenn me convient parfaitement mais je voudrais savoir à quoi correspond "cbo_Enregistrement.value" je pense que c'est le champ de mon état qui recevra la valeur de la clé primaire mais j'en suis pas sure, merci pour ta réponse, éclaire moi encore un peu si possible merci.
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Oups pardon, en fait, cbo_Enregistrement.value, c'est le nom d'une comboBox ^^

En fait, comme j'ai compris ton souci, tu as une liste de matériel, et tu ne veux afficher l'état que pour un seul de ces 600 matériels. Il faut donc que tu choisisses quelque part ce matériel.

Je suis partit du principe qu'il s'agissait d'une comboBox (d'où le cbo_ devant, je nomme toujours mes objets en fonction du type de control) et donc, je prends la valeur de cette combobox, qui doit contenir (en colonne liée) la clé primaire. Mais si tu veux faire ça avec un textbox, une listbox, une inputbox ou ce que tu veux, ça fonctionne pareil ^^ Il faut juste rentrer dans le critère la valeur de ta clé primaire pour que ton état n'affiche que l'enregistrement voulu.

Molenn
Messages postés
6
Date d'inscription
jeudi 29 mars 2007
Statut
Membre
Dernière intervention
18 juin 2007

Merci encore a tous pour vos réponses. Molenn au début j'ai voulu utiliser ton code mais les états à leur ouverture n'aime pas beaucoup le code VBA, il ya des propriétés qui sont pas encore activé et j'aurais tout changer, mais merci de ton effort je pense que ca peut énormément servir dans d'autre cas plus spécifique.
Moi pour n'afficher qu'un état de mon formulaire j'ai rajouter une clause a la requete de base de mon etat  : WHERE [Clé primaire]=Formulaires![NomForm ].[Champs qui contient la clé primaire].  Alors pour ca grand merci a IORANNA.
Dans mon cas il ne faut pa metre ni de ("") ni de (&) dans la requete.
Bonne continuation a tous a plus.
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Sniff,

c'est exectement ce que je te proposais de faire. Tant pis, LOL. L'important c'est que ca fonctionne.

bonne continuation.