Afficher/Masquer un champ sur un Etat - ACCES [Fermé]

Signaler
-
 Jeen -
Bonjour,

Voila, lorsque je génère un Etat, je souhaiterai que les champs vide ne s'affiche pas . Je suis débutante en écriture de code... mais voilà ce que j'ai essayé :

Private Sub TOTAL_FRAIS_BeforeUpdate(Cancel As Integer)
If IsNull(Me.TOTAL_FRAIS.Value) Then
Me.Étiquette32.Visible = False
Me.TRANSPORT_ALLER.Visible = False
Me.Étiquette33.Visible = False
Me.TRANSPORT_RETOUR.Visible = False
Me.Étiquette34.Visible = False
Me.TOTAL_TRANSPORT.Visible = False
Me.Étiquette42.Visible = False
Me.Étiquette44.Visible = False
Me.Étiquette35.Visible = False
Me.NOMBRE_DE_REPAS.Visible = False
Me.Étiquette36.Visible = False
Me.PRIX_PAR_REPAS.Visible = False
Me.Étiquette37.Visible = False
Me.TOTAL_REPAS.Visible = False
Me.Étiquette43.Visible = False
Me.Étiquette38.Visite = False
Me.NOMBRE_DE_NUIT.Visible = False
Me.Étiquette39.Visible = False
Me.PRIX_HOTEL.Visible = False
Me.Etiquette40.Visible = False
Me.TOTAL_HEBERGEMENT.Visible = False
Me.Etiquette41.Visible = False
Me.TOTAL_FRAIS.Visible = False
Me.Etiquette31.Visible = False
End If
End Sub

Par le plus grand des hasard, pourriez vous m'aider en me disant ce qui ne va pas ?
MERCI BEAUCOUP !

7 réponses


Bonjour JEEN,

La solution se trouve du côté de la fonction Vrai/Faux.
Voici un spécimen à titre d'exemple :

=VraiFaux([RéfOpération]=1;"Montant brut de la vente";VraiFaux([RéfOpération]=2;"Montant brut de la vente";"Erreur !"))

NB : Cette fonction est souvent documentée avec l'équivalent anglais : IIF

Vous trouverez facilement sur google
Voir aussi le site de référence : http://access.developpez.com/cours/

***
Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
Merci beaucoup pour ce lien. Ça m'est très utile ! Surtout pour comprendre le code VBA.


Toutefois, je n'arrive pas à faire le lien entre la fonction VraiFaux, et ne pas faire apparaitre mes champs ...

VraiFaux([ChampX]=0; me.[champy].visible=false;me.[champy].visible=true) ?
Bonsoir Jeen,

En activant la touche F1, vous obtiendrez l'aide en ligne.
Saisir : IIF dans le champ recherche intuitive.
NB : " " équivaut à -> Ne pas afficher


Ne pas oublier de commencer par le signe = (comme dans EXCEL)

Cordialement
***
La science ne fait que trouver ce qui existe depuis toujours.
REEVES hUBERT.
Bonjour Jean Jacques,

Merci pour tout vos précieux conseils. ça aide !

Seulement, désolé d'encore abuser, mais j'ai encore un problème...

Lorsque ma fonction est exprimée comme ci-dessous j'ai un message d'erreur : "Problème de compilation - Attendu : numéro de ligne ou étiquette ou instructions ou fin instructions" en me sélectionnant le 1er signe "="
=> =IIf("TRANSPORT_ALLER=0", "", [TRANSPORT_ALLER])

Lorsque je mets cette même fonction sans le 1er signe "=", j'ai un message d'erreur : "Problème de compilation - Attendu : ="

J'ai essayé plusieurs syntaxes, j'ai recherché dans les aides, sur internet et je ne trouve pas la réponse à mon problème. J'ai essayé en incluant des "Private sub... End sub" mais rien n'y fait.

Encore Merci !!!
Toutes mes excuses Jeen,
En relisant attentivement, je réalise que je me suis fourvoyé.

Dans votre premier post vous étiez à un poil de la solution. En effet,
dans votre évènement sur Ouverture (si j'ai, cette fois, bien compris) il convient de répéter la syntaxe if/endif comme suit :

Private Sub Report_Open(Cancel As Integer)


If IsNull(Me.<nom_du_champ>) Then
Étiquette29.Visible = False
End If

DoCmd.Maximize
End Sub

Désolé pour le temps perdu
A+
Jeen,
Voici une syntaxe qui (chez moi) permet de masquer un champ dans un état.
Elle est à saisir dans les propriétés de la zone de texte, onglet données/ligne source contrôle
=VraiFaux([<nom_du_champ>]="";"")
Merci. Mais j'ai un problème de référence circulaire, et si je change le nom du contrôle comme il le suggère, ça me fait un message "#Erreur" sur mon Etat...

Et sinon je me demandais, comment je peux faire la même démarche comme vous faites sur les Étiquettes, parce que dans l'onglet données je n'ai pas de source contrôle mais seulement balises actives. je ne peux rentrer d'expressions.

Merci encore
Merci votre aide !!!

J'ai bien fait comme vous m'avez dit. Mais les champs vide de mon Etat persiste à rester visible. Je crois bien que c'est mon fichier qui doit avoir un problème. Après plusieurs essais diverses rien y fait.
Le seul changement que j'ai fait dans le code vous m'avez fournit est d'avoir remplacé "IsNull" par "IsEmpty"...

Enfin Merci pour votre temps !
Bonsoir Jeen,
Le sujet du masquage des champs est traité sur ce lien.
Je vous laisse le découvrir :

http://www.vbfrance.com/forum/sujet-CACHER-CHAMP-DANS-ETAT-ACCESS-QD-CELUI-CI_719208.aspx

La solution proposée :

If Not IsNull(Me.Controls("NomduContrôle").value) Then
Me.Controls("NomduContrôle").Visible = True
Me.Controls("Étiquette_Contrôle").Visible = True
Else:
Me.Controls("NomduContrôle").Visible = False
Me.Controls("Étiquette_Contrôle").Visible = False
End If
Jean_Jacques
Messages postés
1045
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 mars 2014
108
So war's
Merci.
J'avais trouvé ce forum aussi. J'ai re essayé, une fois en rendant invisible par défaut mes champs et l'autre fois en faisant If ...then ...esle ...end if. Dans les 2 cas, ça ne fonctionne pas. Je pense que les codes ont tout simplement pas d'impact sur mon Etat. Je suis pratiquement sure d'avoir bien fait. J'ai fait plusieurs tests, rien y fait.

En tout cas merci beaucoup pour votre aide !!!

Private Sub Report_Activate()
If Not IsNull(Me.Controls(TOTAL_FRAIS).Value) Then
Me.Controls(TRANSPORT_ALLER).Visible = True
Me.Controls(Etiquette32).Visible = True
End If
End Sub