Bonjour.
Voici une question pour laquelle j'ai trouvé maintes réponses.
Mais si je la pose encore, c'est parce que je n'en ai pas trouvé de satisfaisante…
Prenons un principe simple :
Un formulaire n'affichant qu'un seul enregistrement à la fois, composé d'un champ [Participant(s)] qui peut prendre les valeurs suivantes :
-Seul
-Equipe
Quand on sélectionne Seul, il faut remplir le champ [Nom du participant seul].
Quand on sélectionne Equipe, il faut remplir les champs [Nom de l'Equipe] et [Nombre d'équipiers].
Le but du jeu serrait de ne faire apparaître le contrôle [Nom du participant seul] que quand [Participant(s)] prend la valeur Seul et de ne faire apparaître les contrôles [Nom de l'Equipe] et [Nombre d'équipiers] que quand [Participant(s)] prend la valeur Equipe.
Jusque là, pas trop de soucis, modifier la propriété visible des contrôles [Nom du participant seul], [Nom de l'Equipe] et [Nombre d'équipiers] sur un événement associé à clic ou sortie ou perte de focus du contrôle [Participant(s)].
Mais l'ennui, pour ceux qui n'ont jamais eu ce problème, c'est que si cette fonction se déclenche à la saisie dans le champ [Participant(s)], les contrôles [Nom du participant seul], [Nom de l'Equipe] et [Nombre d'équipiers] restent à l'état de la dernière saisie, y compris lorsque l'on fait défiler les enregistrements…
On peut donc voir des contrôles qui devraient êtres invisibles et ne pas en voir d'autres qui devraient être visibles…
Les solutions idéales :
- Trouver un événement qui se déclencherait chaque fois que le formulaire changerait d'enregistrement…
Du type Curent, ou Activation, cet événement marche très bien.
Mais pour une raison qui m'échappe, peut être dûe au fait que le formulaire en question est en fait un sous-formulaire d'une base sous le coup de l'intégrité référentielle, quand je fais défiler les enregistrements et que j'arrive au dernier (avec la roulette par exemple…) je peux continuer à faire défiler les enregistrements indéfiniment, sauf qu'en fait je rajoute des enregistrements vides à ma table.
- Utiliser une mise en forme conditionnelle.
Cela marche aussi très bien, mais ne permet pas de cacher les champs, seulement de les désactiver, ce qui ne me satisfait pas.
La version VBA de la mise ne forme conditionnelle nécessite d'ailleurs, selon mon niveau de connaissance, un événement pour se déclencher…L serpent se mord la queue…
Les demies-solutions :
J'ai rattaché les fonctions visibles à la perte de focus du premier contrôle du formulaire.
Ça fonctionne, à condition que je commence par cliquer sur ce champ avant de commencer le défilement et que si je clique sur un autre contrôle, je pense à re-cliquer sur le premier avant de recommencer un défilement.
Les fausses bonnes solutions :
- Bloquer l'usage de la roulette…
- Utiliser un cadre et appliquer la mise en forme conditionnelle à ce cadre pour masquer le champ derrière…
Alors comme je pense que je ne suis pas le seul à m'être posé cette question, mais que les réponses que j'ai pu lire se trouvent pratiquement toutes listées ci-dessus, je me permets de tenter ma chance…
D'avance merci.
Partager