{Access} Sous formulaire

Fermé
damien_phenix Messages postés 15 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 10 juillet 2009 - 8 juil. 2009 à 11:53
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 - 10 juil. 2009 à 21:09
Bonjour,

je suis novice en access et j'ai besoin d'aide.

Dans le cadre de mon travail j'ai réussi gràce à un tuto à créer deux listes déroulantes (la deuxième dépend de la première) dans un formulaire 1.
J'ai créer un sous-formulaire qui est visible dans mon formulaire 1.

Ce que je souhaite maintenant c'est que l'affichage des données de mon sous-formulaire dépend de la valeur de mes 2 liste déroulantes.
De plus je souhaiterais également que ce sous-formulaire s'ouvre unique lorsque l'utilisateur choisi la valeur de ma deuxième liste déroulante.
Par ailleurs j'aimerais aussi que l'utilisateur puisse modifier les champs présents dans le sous-formulaire.

Merci d'avance de m'aider.


Damien

7 réponses

zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
8 juil. 2009 à 22:54
Bonsoir,

J'imagine que tes listes déroulantes te permettent de filtrer les enregistrements de ton formulaire principal.

Il faut que ton sous-formulaire et ton formulaire principal soient liés par une relation et tu dois simplement remplir les champs "père" et "fils" dans les propriétés du sous-formulaire pour que son contenu soit mis à jour.
0
damien_phenix Messages postés 15 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 10 juillet 2009
9 juil. 2009 à 09:49
Bonjour et merci,

J'ai mis en place la relation champ père / champs fils. Maintenant lorsque mon formulaire s'ouvre mon sous-formulaire est vide (ce qui est plutôt bien).

Par contre lorsque je choisi deux valeurs pour mes listes déroulantes aucun tri n'est éffectué, tous les champs de ma requête apparaissent.
Vu que je suis en phase de test j'ai créé 2 sous formulaires, un basé sur une table et l'autre sur une requête. Le résultat est le même sur les deux sous formulaires.

Comment puis je faire pour que les données qui s'affichent dans mon sous formulaire soient triées en fonction de mes listes déroulantes?

Merci d'avance.

Damien
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
9 juil. 2009 à 17:19
Bon, on postule que tu utilises l'assistant liste de choix.

Dans la première boite de dialogue, il te demande ce que tu veux faire; choisis la troisième option: qqch comme "rechercher un enregistrement".

en principe, le reste est automatique. Si tu vas dans les propriétés de la liste, sous l'onglet événement, sur clic et que tu cliques sur les trois points à droite, tu ouvres VisualBasic et tu vois le code qui permet le tri.

Je ne comprends pas bien pourquoi tu as deux listes déroulantes. Probablement le contenu de la seconde dépend-il de la première. pourrais-tu nous en dire plus?
0
damien_phenix Messages postés 15 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 10 juillet 2009
9 juil. 2009 à 17:45
Bonsoir,

Désolé si je n'ai pas été assez explicite sur mon projet.

Dans un formulaire se trouve deux listes modifiables.
Effectivement le contenu de la seconde liste dépend de la première.
Ma première liste est basée sur une table alors que ma seconde est basée sur requête.
(Je les ai réalisé gràce à un tutoriel :
-création de la première liste
-création de la requête de liaison entre les deux listes
-création de la deuxième liste
-mise en place du critère de ma requête
-écriture du code sur l'événement après mise à jour de ma première liste.)
(Les valeurs visibles dans la deuxième liste respectent bien les conditions de la première.)

Lorsqu'un choix sur la deuxième liste a été réalisé un sous-formulaire doit s'ouvrir.
Deux champs de mon sous-formulaire doivent reprendre les deux valeurs de choix de mes listes déroulantes. Les autres champs doivent être vide et libre en écriture car l'utilisateur viendra les compléter. Mon sous-formulaire quand à lui est basée sur une autre table.


J'ai essayer de recommencer mes listes modifiable et au début l'assistant me demande simplement si je souhaite utiliser une table/requête déjà créer ou saisir les valeurs manuellement. Dans mon cas j'ai choisi à partir d'une requête/table déjà créer.

Si il faut d'autres informations que pour vous puissiez m'aider n'hésitez pas à me demander.


Merci d'avance.

Damien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
9 juil. 2009 à 21:35
Si ton sous formulaire est lié, il faut que ta seconde liste pointe sur un et un seul enregistrement de ton formulaire principal. Alors ton sous formulaire affichera automatiquement les enregistrements liés.

Si tu veux créer un nouvel enregistrement, il faut faire attention à la manière dont tu construis la requête du sous formulaire: tu ne peux pas ajouter un enregistrement du côté "plusieurs de la relation" si l'enregistrement n'existe pas dans le formulaire principal.

Sinon, tu peux écrire du code VB pour définir la valeur des contrôles dans un nouvel enregistrement.

Je pense que le mieux et de le faire au départ d'un bouton de commande dans l'en-tête du sous formulaire:

DoCmd.GoToRecord,,acNewRec
NomDuContrôle = Forms!NomFormPrincipal!NomDeLaListe
0
damien_phenix Messages postés 15 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 10 juillet 2009
10 juil. 2009 à 11:46
Bonjour,

J'ai sais le code (en l'adaptant directement dans mon formulaire) :
DoCmd.GoToRecord,,acNewRec
cmb_Machine = Forms!F_Depa_1!cmbMachine

J'ai juste modifié les noms.
Je l'ai saisi tel quel à la fin de mon code exsitant :

Option Compare Database

Private Sub cmb_Societe_AfterUpdate()
Me![cmb_Societe].Requery
End Sub
Private Sub Commande4_Click()
On Error GoTo Err_Commande4_Click

Dim stDocName As String

stDocName = "Actualisation_Depa_1"
DoCmd.RunMacro stDocName

Exit_Commande4_Click:
Exit Sub

Err_Commande4_Click:
MsgBox Err.Description
Resume Exit_Commande4_Click

End Sub

DoCmd.GoToRecord , , acNewRec
cmb_Machine = Forms!F_Depa_1!cmbMachine


Par contre maintenant dès j'ai une boite de dialogue qui me demande de saisir une valeur pour cmb_Machine.
Pour poursuivre il me suffit de cliquer sur ok sans saisir de valeur. Cette boite de dialogue revient après effectuer un choix dans la première liste et après le choix de la seconde liste.


Merci.
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
10 juil. 2009 à 21:09
Attends, je ne comprends pas:

Tu as 2 procédures Sub/End Sub
La première met à jour ta seconde liste (cmb_Societe_AfterUpdate() )
La deuxième exécute une macro (je ne sais pas à quoi elle sert)

Mais le bout de code que tu as ajouté, à quoi est-il attaché?

Il faut qu'il soit exécuté par la commande que tu souhaites voir filtrer le sous-formulaire p.ex après mise à jour de la seconde liste ou par un bouton de commande.
0