IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros Access Discussion :

Masquer champs sous condition [AC-2019]


Sujet :

Macros Access

  1. #1
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut Masquer champs sous condition
    Bonjour,

    J'essaie désespérement de faire une macro pour masquer un champs dans un état s'il est vide.

    J'ai un formulaire sur lequel j'ouvre un état basé sur une requête par un bouton.

    Je voudrais que si le champs Longueur est vide cela masque le contrôle "Longueur" ainsi que l'étiquette "Étiquette216" liée.

    Voici le code que j'ai fait et qui malheureusement ne fonctionne pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Report_Load()
    If IsNull(Me.Longueur) Then
    Me.Longueur.Visible = True
    Me.Étiquette216.Visible = True
    Else
    Me.Longueur.Visible = False
    Me.Étiquette216.Visible = False
    End If
    End Sub

    Merci d'avance pour votre retour car je sèche complètement

  2. #2
    Membre à l'essai
    Homme Profil pro
    Retraité - ex ingénieur de développement
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité - ex ingénieur de développement

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 21
    Points
    21
    Par défaut Masquer champs sous condition
    Bonjour bon jour et aussi bonne année.
    Si "Longueur" est effectivement une longueur (un nombre donc), il ne faut pas que tu emploies la fonction "IsNull" mais plutôt "If Me.Longueur <>0 etc".
    Si "Longueur" est une chaîne de caractères, tu peux utiliser la fonction "Length" pour en fabriquer un nombre et alors, tu mets "If Len(Me.Longueur) <>0 etc "...
    Enfin, d'après ton code, tu affiches le champ s'il est vide et tu le masques dans le cas contraire.

    Bonne chance pour la suite.

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 745
    Points : 14 770
    Points
    14 770
    Par défaut
    bonjour,
    J'essaie désespérement de faire une macro pour masquer un champs dans un état s'il est vide.
    Attention, ce que tu montres n'est pas une macro, ce terme est utilisé dans Excel pour enregistrer du code VBA d'où la confusion de plus en plus fréquente.
    Dans Access, les termes Macro et VBA désignent 2 outils de programmation complètement différents.

    Il faut que tu mettes le code dans l'évènement Détail_Format ou (Détail_Print, c'est à dire au moment du formatage ou de l'impression des données traitées ligne à ligne) et, en prenant compte de la réponse de PapiJJ, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
    If Nz(Me.Longueur, 0) = 0 Then
        Me.Longueur.Visible = True
        Me.Étiquette216.Visible = True
    Else
        Me.Longueur.Visible = False
        Me.Étiquette216.Visible = False
    End If
    End Sub
    ou encore ce code, plus évolué et plus efficace mais nettement moins lisible pour les débutants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
    Me.Longueur.Visible = Not(Nz(Me.Longueur, 0) = 0)
    Me.Étiquette216.Visible = Not(Nz(Me.Longueur, 0) = 0)
    End Sub
    Explication: on inverse le résultat de l'expression donc,
    si longueur = 0, l'expression est vraie, donc Non(Vrai) = Faux: Longueur sera invisible
    si longueur <>0, l'expression est fausse, donc Non(Faux) = Vrai: Longueur sera visible
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Merci à vous 2 de prendre le temps de m'aider (et bonne année au passage )

    je viens de tester les 2 codes et malheureusement cela ne change rien. Les champs sont toujours visible dans mon état.

    Etant donné que j'ouvre l'état avec un bouton sur un formulaire, est-ce qu'il ne vaut pas mieux placer le code dans l'évènement ouverture?

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 745
    Points : 14 770
    Points
    14 770
    Par défaut
    je viens de tester les 2 codes et malheureusement cela ne change rien. Les champs sont toujours visible dans mon état.
    Etant donné que j'ouvre l'état avec un bouton sur un formulaire, est-ce qu'il ne vaut pas mieux placer le code dans l'évènement ouverture?
    le code est correct et doit fonctionner dans l'évènement Détail_Format...
    sauf si tu ouvres l'état en "Mode état" (qui n'exécute pas les évènements) et pas en "Aperçu avant impression" comme c'est la règle (et je me demande encore pourquoi Microsoft a mis ce mode d'affichage par défaut pour les états )
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Retraité - ex ingénieur de développement
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité - ex ingénieur de développement

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 21
    Points
    21
    Par défaut Masquer champs sous condition
    Hello hello.... c'est une remarque de tee_grandbois m'a fait réaliser que tu n'étais pas forcément familier avec les procédures événementielles dans Access....
    Alors oui, c'est sûr qu'il faut mettre la procédure que tu choisis dans une macro qui va s'exécuter automatiquement lors de l'ouverture du formulaire (ou de l'état).
    En ce qui me concerne, je ne pratique plus les macros depuis une vingtaine d'années .... je les ai en effet remplacées par du code VBA.
    Ici, ce qui est inhabituel pour moi, c'est que tu mélanges "macro" et "code VBA", un peu comme ce qui se passe quand tu cliques sur "Enregistrer une macro" dans Excel.
    Mais tu peux bien sûr essayer la solution que tu proposes, même si pour a part, je prendrais l'évènement "Ouvrir Formulaire" (ou Etat).

    Bonne chance et ... ne te décourage pas, Access + Développez.net, c'est vraiment super !!

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 745
    Points : 14 770
    Points
    14 770
    Par défaut
    Citation Envoyé par PapiJJ
    Mais tu peux bien sûr essayer la solution que tu proposes, même si pour a part, je prendrais l'évènement "Ouvrir Formulaire" (ou Etat).
    contrairement à Form_Open, l'évènement Report_Open n'a pas encore accès aux enregistrements, il faut être dans le groupe Détail_Format ou Détail_Print pour les traiter un par un ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Retraité - ex ingénieur de développement
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité - ex ingénieur de développement

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 21
    Points
    21
    Par défaut Masquer champs sous condition
    Citation Envoyé par tee_grandbois Voir le message
    contrairement à Form_Open, l'évènement Report_Open n'a pas encore accès aux enregistrements, il faut être dans le groupe Détail_Format ou Détail_Print pour les traiter un par un ...
    La réponse de Tee_Grandbois est sans doute plus pertinente que la mienne... j'utilise en effet Access 2010 ou 2013 (je ne sais pas bien au juste lequel), dans lequel la syntaxe est légèrement différente ; en plus, c'est vrai que ma remarque vaudrait surtout pour un formulaire. Pour un Etat, il faudra sans aucun doute suivre les indications de Tee !!

    Bonne continuation.

  9. #9
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 271
    Points : 6 580
    Points
    6 580
    Par défaut
    Salut
    Le 2ème code proposé par tee_grandbois, que je salue, dans le Post#3 est fonctionnel. La preuve en img.
    La question est de savoir où se trouve Étiquette216 !
    - zone Détail ?
    - zone En-tête de page ?
    - zone en-tête de groupe ?
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  10. #10
    Membre à l'essai
    Homme Profil pro
    Retraité - ex ingénieur de développement
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité - ex ingénieur de développement

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 21
    Points
    21
    Par défaut Masquer champs sous condition
    Bonjour à tout le monde ...
    D'un seul coup, il me vient une idée saugrenue... et si le code n'était pas placé au bon endroit ?
    Donc, ami John, peux-tu confirmer :
    1. Que le bouton sur ton formulaire déclenche l'ouverture de ton Etat par l'intermédiaire d'une ligne de commande (ou d'une tout petite macro) liée au "clic" sur le bouton. Mais, le clic déclenche un événement qui se produit "dans le formulaire de commande" lui-même ; une fois cette commande exécutée, tu n'es plus dans ce formulaire mais dans l'état que tu viens de solliciter.
    2. Que, dans l'état lui-même, tu as mis le code proposé par tee_grandbois (et confirmé/ illustré par Hyperion), lié à l'évènement "Au formatage" de la section "Détail" de ton état ; l'évènement "Au formatage" va se produire automatiquement dans ton état lors de la mise en forme de la section "Détail" quand il passera en mode "aperçu avant impression" (pour te donner, on espère tous le résultat que tu cherches).


    A+

  11. #11
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour à tous et désolé pour mon absence indépendant de ma volonté.

    J'ai refait le test en lançant l'ouverture en mode "Aperçu avant impression" et non en mode "Etat" et le code fonctionne parfaitement.

    le problème venait simplement de la.

    Je vous remercie pour votre aide, ce forum est un vrai petit bijou !

  12. #12
    Membre à l'essai
    Homme Profil pro
    Retraité - ex ingénieur de développement
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité - ex ingénieur de développement

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 21
    Points
    21
    Par défaut Masquer champs sous condition
    Bonjour John.
    Ton pb est résolu.... alors n'oublie pas de le marquer comme "résolu".
    Bonne chance pour la suite.
    PapiJJ

  13. #13
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Juste pour ma connaissance personnelle, si je voulais à tout pris ouvrir l'état en mode état et non en mode "Aperçu avant impression", dans quel évènement aurait-il fallu placer le code?

    Merci

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 745
    Points : 14 770
    Points
    14 770
    Par défaut
    bonsoir,
    cela ne fonctionnera pas en mode état pour la simple raison qu'il y a peu d'évènements (Load, Open, Activate ... de mémoire) qui s'exécutent. Et à ce niveau, le détail des enregistrements n'est pas accessible.
    La seule solution possible serait la mise en forme conditionnelle mais elle n'est pas applicable sur les étiquettes
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  15. #15
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Merci pour cette explication, je met le sujet en "Resolu"

    Encore un grand merci à vous tous pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Masquer un champ sous condition
    Par sandralep84 dans le forum IHM
    Réponses: 5
    Dernier message: 27/08/2012, 15h05
  2. Remplir automatiquement un champ sous condition.
    Par popoliline dans le forum Access
    Réponses: 15
    Dernier message: 15/09/2006, 23h04
  3. [PHP-JS] accessibilité d'un champ sous condition
    Par maraly dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 16h31
  4. Somme de champs sous condition
    Par Nicola dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/08/2006, 14h47
  5. Afficher un champ sous condition
    Par Cantalou dans le forum Access
    Réponses: 24
    Dernier message: 01/02/2006, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo