Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

rendre bouton invisible sur condition à l'ouverture d'un form ?

5 réponses
Avatar
gauso
Bonjour,
Je m'agace depuis une heure avec un truc qui me paraissait =E0 premi=E8re
vue une chose facile et simple =E0 r=E9aliser (!!) :
Voil=E0, je voudrais - pour ne pas alourdir ma base - utiliser un m=EAme
formulaire (formA) pour 2 actions diff=E9rentes (je vous passe le
d=E9tail).
Je voudrais donc "forcer" explicitement l'apparition/disparition de
certains boutons de mon formA en fonction de l'endroit (formulaires
formB ou formC) d'o=F9 on l'ouvre.
J'ai cr=E9=E9 un champ "rep=E8re" dans mon formA =E0 qui je donne telle ou
telle valeur via les boutons qui l'ouvre (depuis formB ou formC).
Et j'essaye d'utiliser cette valeur comme condition de l'apparition
(propri=E9t=E9 visible ou invisible) de mes boutons : mais =E7a marche
pas :o[[[ !!
J'ai essay=E9 =E0 peu pr=E8s tous les =E9v=E8nements : sur ouverture, sur
activ=E9, sur chargement, sur activation... RIEN A FAIRE ! Tout se passe
comme si quand j'ouvre le formulaire la valeur de mon champ rep=E8re
n'=E9tait pas encore enregistr=E9e, non prise en compte en tous les cas :
les boutons qui s'affichent ne sont pas les bons !

Ci-dessous le principe de mon code :
If Me![ReperOrig] =3D 1 Then
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnIndexTyp2].Visible =3D False
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnRechTyp2].Visible =3D True
Else
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnIndexTyp2].Visible =3D True
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnRechTyp2].Visible =3D False
End If

Oui je sais il s'agit de sous-formulaire, mais j'ai essay=E9 avec un
bouton au niveau du formulaire et =E7a ne marche pas non plus !

Merci d'avance aux bonnes =E2mes...
Sonia.

5 réponses

Avatar
gauso
Bon, finalement je m'en suis sorti en donnant une instruction de
recordsource à l'ouverture de mon formulaire -( j'ai mis le code à
l'évènement sur activation...:) toujours pas compris pourquoi, mais ç a
marche maintenant !?
Si d'aucuns comprenaient la logique de ceci, qu'ils n'hésitent
cependant pas à m'éclairer (?),
Bonne journée,
Sonia.
Avatar
3stone
Salut,

gauso wrote:
Bonjour,
Je m'agace depuis une heure avec un truc qui me paraissait à première
vue une chose facile et simple à réaliser (!!) :
Voilà, je voudrais - pour ne pas alourdir ma base - utiliser un même
formulaire (formA) pour 2 actions différentes
(je vous passe le détail).




oui... mais encore ? ;-)



Je voudrais donc "forcer" explicitement l'apparition/disparition de
certains boutons de mon formA en fonction de l'endroit (formulaires
formB ou formC) d'où on l'ouvre.
J'ai créé un champ "repère" dans mon formA à qui je donne telle ou
telle valeur via les boutons qui l'ouvre (depuis formB ou formC).
Et j'essaye d'utiliser cette valeur comme condition de l'apparition
(propriété visible ou invisible) de mes boutons : mais ça marche
pas :o[[[ !!
J'ai essayé à peu près tous les évènements : sur ouverture, sur
activé, sur chargement, sur activation... RIEN A FAIRE ! Tout se passe
comme si quand j'ouvre le formulaire la valeur de mon champ repère
n'était pas encore enregistrée, non prise en compte en tous les cas :
les boutons qui s'affichent ne sont pas les bons !

Ci-dessous le principe de mon code :
If Me![ReperOrig] = 1 Then
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnIndexTyp2].Visible = False
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnRechTyp2].Visible = True
Else
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnIndexTyp2].Visible = True
Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif]!
[BtnRechTyp2].Visible = False
End If

Oui je sais il s'agit de sous-formulaire, mais j'ai essayé avec un
bouton au niveau du formulaire et ça ne marche pas non plus !




Si je lis bien, "frmInvIndexTypoSFSpecif" est le sous-formulaire...
et dans ce cas, tu l'écris mal...

Forms![FmrInvIndexTypol].FORM![FmrInvIndexTypoSFSpecif]![BtnIndexTyp2].Visible = False

devrait aller mieux... pour autant que le reste...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
gauso
Bonsoir 3 et merci de ta fidélité :o),


Si je lis bien, "frmInvIndexTypoSFSpecif" est le sous-formulaire...
et dans ce cas, tu l' cris mal...

Forms![FmrInvIndexTypol].FORM![FmrInvIndexTypoSFSpecif]![BtnIndexTyp2].Vi sible = False
devrait aller mieux... pour autant que le reste...



Oups !! Ben en effet : à force de faire des copier/coller sans
vérifier (!!!)

Mais alors comment se fait-il que - malgré cette écriture lacunaire,
le système ne moufte pas, et même il a fini par comprendre ce que je
voulais, puisque les choses fonctionnent maintenant ?

Par ailleurs, contrairement à ce que tu proposes, je désigne
habituellement les sous-formulaires de cette façon (modèle trouvé je
ne sais plus où) :
'Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif].form!
[BtnIndexTyp2].Visible = False

... ??

Mais je viens de vérifier : le fait d'ajouter la précision (form), ne
change rien à l'affaire décidément (de toute façon j'avais testé avec
un bouton au niveau du formulaire et non dans les sous-form) : dès que
j'enlève la mention recordsource dans le bouton ouvrant le formulaire,
l'interprétation du code se fait mal (il ne fait pas rien pour autant,
mais le repère n'est pour lui pas à 1, donc il affiche les "mauvais"
boutons) :
Voilà ce que j'ai mis sur le bouton qui ouvre mon formA :

Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "FmrInvINDEXTYPOL"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Forms![FmrInvIndexTypol]![ReperOrig] = 1
Forms![FmrInvIndexTypol].RecordSource = "Typologie1"

A plus,
Sonia.
Avatar
3stone
Salut,

gauso wrote:
[...]
Par ailleurs, contrairement à ce que tu proposes, je désigne
habituellement les sous-formulaires de cette façon (modèle trouvé je
ne sais plus où) :
'Forms![FmrInvIndexTypol]![FmrInvIndexTypoSFSpecif].form!
[BtnIndexTyp2].Visible = False




Oui bien sûr...

Forms!NomForm!CtrlSousForm.FORM!controle-du-sform



Mais je viens de vérifier : le fait d'ajouter la précision (form), ne
change rien à l'affaire décidément (de toute façon j'avais testé avec
un bouton au niveau du formulaire et non dans les sous-form) : dès que
j'enlève la mention recordsource dans le bouton ouvrant le formulaire,
l'interprétation du code se fait mal (il ne fait pas rien pour autant,
mais le repère n'est pour lui pas à 1, donc il affiche les "mauvais"
boutons) :
Voilà ce que j'ai mis sur le bouton qui ouvre mon formA :

Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "FmrInvINDEXTYPOL"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Forms![FmrInvIndexTypol]![ReperOrig] = 1
Forms![FmrInvIndexTypol].RecordSource = "Typologie1"



Par contre, je préfère ne pas manipuler un formulaire de l'extérieur.
Je préfère utiliser un argument transmis au formulaire à ouvrir.

DoCmd.OpenForm "NomForm", acPreview, , , , , strArgs

dans strArgs tu mets ce que tu veux, et que tu récupères du
coté formulaire à ouvrir.

Select Case Me.OpenArgs
Case "toto"
...
Case "titi"
...
Case Else
...
End Select

Cela permet une adaptation bien plus souple que la manipulation
extérieure au form et évite pas mal d'erreurs.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
gauso
Bonjour,
Excuse : je n'avais pas vu ta réponse...
J'ai suivi ton conseil et j'ai changé l'instruction de "re-chargement"
du recordsource de place : mis à l'ouverture de mon formulaire : ça
marche aussi en effet...
Mais concernant l'affectation de valeur de mon "reperOrig" bien
obligée de le commander depuis mon FormA puisque cette affectation se
fait justement en fonction de l'endroit d'où j'ouvre le formulaire
(!),
Avec tout ça, toujours pas compris pourquoi je suis obligée de
rappeler à mon formulaire la source de ses données pour qu'il
comprenne que le repère est à 1 et qu'il applique les instructions de
visibilité/invisibilité des boutons... mais bon : ça marche, c'est le
principal ;o)
Bon week-end et merci encore,
Sonia.