Bonjour à toutes et tous.
J'ai un souci bizarre avec l'utilisation de Screen
Contexte :
Sous Access 2010 (mais je suppose que c'est pareil pour les autres versions)
Dans la hiérarchie suivante :
Parenthèse pour ceux qui se prendraient encore la tête avec ça, et pour bien préciser que mon problème n'est pas là, les onglets sont "Transparents" lorsqu'il s'agit d'atteindre un contrôle, le chemin de mon contrôle est doncF_MENU_GENERAL
Tabs_MENU_GENERAL
Tab_CONCEPTION
SF_MENU_GENERAL_CONCEPTION
Tabs_MENU_GENERAL_CONCEPTION
Tab_LISTE_DOCUMENTS
SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS
txtProcessName
- "En dur" :
- [F_MENU_GENERAL]![SF_MENU_GENERAL_CONCEPTION]![SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS]!txtProcessName
Ou, bien que plus longue, ma syntaxe favorite (parce qu'elle permet d'utiliser des variables partout) :- Forms("F_MENU_GENERAL").Form("SF_MENU_GENERAL_CONCEPTION").Form("SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS").Controls("txtProcessName")
Donc, dans le contexte cité plus haut, j'ai donc un système de navigation avec un formulaire principal qui contient des sous formulaires dans un premier jeu d'onglets, chaque onglet contenant son propre jeu d'onglets avec dans chacun de ces dernier un sous-sous formulaire du formulaire principal...
Ça va ? j'ai perdu personne ? donc on continue !
L'un de ces sous-sous formulaire (SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS) est de type "Formulaires continus" et contient de nombreux champs.
Faisons hyper simple pour l'exemple : je souhaite qu'en sélectionnant n'importe quel contrôle d'un enregistrement apparaisse un message me donnant le nom du process contenu dans txtProcessName de l'enregistrement en cours.
Afin d'éviter de lever l'événement On_Clic de chaque contrôle, j'opte pour Current du formulaire.
Le problème avec Current, c'est qu'il se déclenche au chargement du formulaire, au déchargement et Dieu sait quand encore.
Il me faut donc situer à quel moment je le traite.
Ca donne :
Ce qui me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub Form_Current() If Screen.ActiveControl.Parent.Name = "SSF_MENU_GENERAL_CONCEPTION_LISTE_RECETTE" Then MsgBox Me.txtProcessId.Value End If Sortie: End Sub
Alors moi, bon élève, dans ma fenêtre exécution juste après l'erreur :Envoyé par Cet abruti d'Access
Et là, moi je bugue...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ? Screen.ActiveControl.Parent.name SSF_MENU_GENERAL_CONCEPTION_LISTE_RECETTES ? screen.ActiveControl.name txtProcessName ? Screen.ActiveForm.Name F_MENU_GENERAL
Le premier test renvoie le bon formulaire
Le second test renvoie le bon contrôle
Le troisième test renvoie... Le premier formulaire de la hiérarchie
En tout cas, je ne comprends pas pour quoi les 2 premiers fonctionnent et que dans le contexte ça ne va plus...
Je cherche donc :
- Soit la solution et l'explication pour fonctionner avec Screen
- Soit une solution sans Screen et sans lever On_Clic sur tous les contrôles
Merci d'avance à qui saura me donner une piste valable !
Partager