Afficher/Masquer un champ sur un Etat - ACCES

Jeen -  
 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

  1. Jean_Jacques
     
    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.
    0
  2. Jeen
     
    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) ?
    0
  3. jean_Jacques
     
    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.
    0
  4. Jeen
     
    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 !!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. UJAT4232
     
    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+
    0
    1. UJAT4232
       
      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>]="";"")
      0
    2. Jeen
       
      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
      0
  7. Jeen
     
    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 !
    0
  8. Jean_Jacques
     
    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
    0
    1. Jean_Jacques Messages postés 1045 Date d'inscription   Statut Membre Dernière intervention   112
       
      So war's
      0
    2. Jeen
       
      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
      0