Bonjour à toutes et tous!
J’ai un formulaire Menu contenant un grand nombre de boutons. J’ai besoin qu’un click sur l’un de ces boutons ouvre un formulaire puis (ou et) son sous-Formulaire associé. L’idée est de faire apparaître dans le formulaire un seul champ (obtenu selon requête SELECT DISTINCT) et de toujours lui associer le même sous-Formulaire… Mon probléme (cf ci-dessous module3) est de réussir à créer le lien entre le champ variable de mon formulaire et le champ adéquate contenu dans le sous-formulaire (à noter: le sous-formulaire contient la totalité des champs qui pourront être appelé par un click sur bouton).
Détails :
Module 1 :
En cliquant sur un bouton J’active à chaque fois une variable différente :
etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub Commande58_Click() click sur bouton subord Call ChampRef("Subord") End Sub Private Sub Commande59_Click() click sur bouton Décl Call ChampRef("Décl") End Sub
module 2:
Cette variable est transmise à la procédure ChampRef :
Module 3 : ouverture du sous formulaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 Option Compare Database Public Static Sub ChampRef(NomChamp As String) 'avec ou sans static selon portée variables 'Public Static Sub ChampRef(NomChamp As String) Dim stDocName As String, stLinkCriteria As String Dim ChampVar As String 'recupérer dans une variable le nom du champ pointé ChampVar = NomChamp Call Eff_RF_SchemasUniq Dim Db As Database, req As QueryDef, s As String, NewNom As String Dim rs As Recordset Set Db = CurrentDb 'Mettre ici n'importe quel nom de champ, issu de la table T_ExElementaires ou T_Exemples 'NomChamp = "SchemaSubord" 'créons la requête 'SOIT attribuer un nom invariant de type ChpBaseForm au champ créé : jai préféré ce moyen qui me permet de ne pas avoir à agir sur le formulaire (pas de changement de nom de contrôle) s = "SELECT DISTINCT [" & NomChamp & "] AS ChpBaseForm FROM T_Exemples INNER JOIN T_ExElementaires ON T_Exemples.N°Exemple = T_ExElementaires.N°Exemple ORDER BY [" & NomChamp & "];" 'SOIT laisser le nom de la variable au champ créé : 's = "SELECT DISTINCT [" & NomChamp & "] FROM T_Exemples INNER JOIN T_ExElementaires ON T_Exemples.N°Exemple = T_ExElementaires.N°Exemple ORDER BY [" & NomChamp & "];" Set req = Db.CreateQueryDef("RF_SchemasUniq", s) 'affichons les données qu'elle génère Set rs = Db.OpenRecordset("RF_SchemasUniq") Do Until rs.EOF 'Debug.Print rs(NomChamp) Debug.Print rs![ChpBaseForm] rs.MoveNext Loop stDocName = "F_SchemasUniq" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_Ad_Schema_A__Click: Exit Sub Err_Ad_Schema_A__Click: MsgBox Err.Description Resume Exit_Ad_Schema_A__Click End Sub
= MON PROBLEME et mes questions :
‘je n’arrive pas à accéder dans ce module à la variable (ChampVar) mémorisée en module 2. Est-ce possible d’accéder à cette variable ? Si oui comment y faire référence et comment l'utiliser?
‘Comment puis-je faire pour déterminer stLinkCriteria de manière à ce que le sous formulaire s’ouvre sur le champ voulu : c’est-à-dire décl (si le click dans le menu initial se fait sur décl), subord (si click… sur subord), etc etc
‘faut-il utiliser une boucle if ChampVar = Décl then stLinkCriteria .... ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Private Sub OuvSsForm_Click() On Error GoTo Err_OuvSsForm_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "SsF_SchemasUniq" stLinkCriteria = "[Décl]=" & "'" & Me![ChpBaseForm] & "'" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_OuvSsForm_Click: Exit Sub Err_OuvSsForm_Click: MsgBox Err.Description Resume Exit_OuvSsForm_Click
Je désespère... Ce qui se traduit par un message très long, je m'en excuse mais j'espère qu'il a l'avantage d'être clair.
Merci beaucoup pour l’aide que vous pourriez m’apporter.
MarLoZ
Partager