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

IHM Discussion :

Masquer champ dans un sous formulaire sous condition


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur environnement
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 73
    Points : 20
    Points
    20
    Par défaut Masquer champ dans un sous formulaire sous condition
    Bonjour,

    Je souhaiterai pouvoir masquer sur demande un champ dans un sous formulaire. Je m'explique, mon sous formulaire contient un champ classement 1 et classement 2 correspondant à 2 classement effectué par 2 personnes différentes. L'idée est donc que la personne 2 ne puisse pas voir le champ classement 1 de mon sous formulaire pour l'ensemble des enregistrement.

    Au départ je pensais créér un double de mes formulaires et sous formulaires spécialement pour la personne 2, en supprimant le champ classement 1 et en verrouillant tous les autres champs. Malheureusement une simple copie de mon formulaire principale ne suffit pas et cela nécessiterait une copie également de tous mes sous formulaires (ou je m'y prends mal) ce qui serait trop long, j'ai 5 formulaires principaux contenant chacun 4 sous formulaire.

    L'autre idée que j'ai est de rajouter une case a cocher directement dans mon formulaire, permettant de masquer le champ "classement 1" si cocher, et d'afficher le "classement 1" sinon. Avant de me lancer la dedans, je voulais savoir si cette méthode était la bonne ? Je penser mettre un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If nom_de_la_case_à_cocher = True Then 'si la case est cochée
        Me!champs_à_cacher.Visible = True 'on affiche la zone texte1
      Else
        Me!champs_à_cacher.Visible = False
    End If
    Merci d'avance

    Bonne journée

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Fontaine_CLB,

    oui en effet en jouant sur les propriétés des champs tu peux rendre visible ou non certains champs. Il existe d'autres techniques mais celle-ci est cohérente.

    attention à utiliser me. et pas me! cela te permets de bénéficier de l'affichage de la liste des méthodes et propriétés disponibles dans ton code.

    maintenant concernant la case à cocher, j'avoue ne pas comprendre Comment l'affectes tu ? N'y as t'il pas un moyen plus élégant d'identifier l'utilisateur afin d'afficher ou non tel champ et utiliser ainsi le masquage lors de l'ouverture du formulaire ?

    Dans l'attente de ta réponse

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur environnement
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 73
    Points : 20
    Points
    20
    Par défaut
    Bonjour Jimbolion.

    Pour la case à cocher, l'utilisateur devrait la cocher "manuellement" lorsqu'il effectue le classement. C'est vrai que ce n'est ni élégant, ni pratique pour l'utilisateur. Mon formulaire principale comprend actuellement 5 boutons appelant des sous formulaires de saisies différents. Une idée plus élégante pourrait être de demander lors d'un clic sur un des boutons si l'utilisateur est l'utilisateur 1 ou l'utilisateur 2. Mais je n'y connais vraiment rien en VBA et je n'ai jamais fait de Msgbox. C'est à ce type de solution que tu penses ?

    J'ai essayé ma méthode vendredi dernier et ca ne fonctionne pas (j'ai mis la procédure sur clic). J'arrive à masquer en cochant mais ca n'affiche pas lorsque je décoche et surtout au moment de passer a l'enregistrement suivant j'ai un message d'erreur me disant que je ne peux ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table mère correspondant aux classements possibles. Autres précision, le champ classement 1 est un menu déroulant dont le contenu dépend d'un autre menu déroulant.

    Bonne journée,

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Fontaine_CLB,

    Pour la case à cocher, l'utilisateur devrait la cocher "manuellement" lorsqu'il effectue le classement. C'est vrai que ce n'est ni élégant, ni pratique pour l'utilisateur. Mon formulaire principale comprend actuellement 5 boutons appelant des sous formulaires de saisies différents. Une idée plus élégante pourrait être de demander lors d'un clic sur un des boutons si l'utilisateur est l'utilisateur 1 ou l'utilisateur 2. Mais je n'y connais vraiment rien en VBA et je n'ai jamais fait de Msgbox. C'est à ce type de solution que tu penses ?
    Non je voyais plutôt une identification au démarrage, car dans ton cas il suffit de poser la question pour déterminer si il s'agit de l'utilisateur 1 ou 2 :ckoi:

    Pour faire simple une liste déroulante serait déjà un peu plus propre, mais loin des standards de sécurité préconisés.

    J'ai essayé ma méthode vendredi dernier et ca ne fonctionne pas (j'ai mis la procédure sur clic). J'arrive à masquer en cochant mais ca n'affiche pas lorsque je décoche et surtout au moment de passer a l'enregistrement suivant j'ai un message d'erreur me disant que je ne peux ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table mère correspondant aux classements possibles. Autres précision, le champ classement 1 est un menu déroulant dont le contenu dépend d'un autre menu déroulant.
    Ou là là , on part tout azimuts et n'ayant ni le code, ni le contenu de tes ZL ni même le dessin de tes écrans difficile de te répondre en l'occurence.
    En affichant déjà ne serait-ce qu'une msgbox sur ton test, peux tu contrôler que l’événement est bien lancé dans tes 2 cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If nom_de_la_case_à_cocher = True Then 'si la case est cochée
       msgbox "True"	
        Me!champs_à_cacher.Visible = True 'on affiche la zone texte1
      Else
       msgbox "False"
        Me!champs_à_cacher.Visible = False
    End If
    Pour le message d'erreur, ton souci est lié aux règles d'intégrité référentielles qui est une erreur typique dans la gestion des sous formulaires (la table parent doit contenir la clé primaire nécessaire à la création d'enregistrements dans la table enfants).

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur environnement
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 73
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par jimbolion Voir le message
    Fontaine_CLB,



    Non je voyais plutôt une identification au démarrage, car dans ton cas il suffit de poser la question pour déterminer si il s'agit de l'utilisateur 1 ou 2 :ckoi:

    Pour faire simple une liste déroulante serait déjà un peu plus propre, mais loin des standards de sécurité préconisés.
    Bah ca correspond plus ou moins a ma proposition de demander l'utilisateur au moment du clic sur le bouton appelant le formulaire de saisie non ? Quelle serait la structure du code à appliquer sur l'ouverture du formulaire dans ce cas ? Si vous avez un tuto pouvant répondre à ma question, je suis preneur.


    Citation Envoyé par jimbolion Voir le message
    Ou là là , on part tout azimuts et n'ayant ni le code, ni le contenu de tes ZL ni même le dessin de tes écrans difficile de te répondre en l'occurence.
    En affichant déjà ne serait-ce qu'une msgbox sur ton test, peux tu contrôler que l’événement est bien lancé dans tes 2 cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If nom_de_la_case_à_cocher = True Then 'si la case est cochée
       msgbox "True"	
        Me!champs_à_cacher.Visible = True 'on affiche la zone texte1
      Else
       msgbox "False"
        Me!champs_à_cacher.Visible = False
    End If
    J'ai essayé ce code sur la procédure clic avec le rajout des msgbox et que je coche ou décoche, j'obtiens toujours "False"... Je mets ci joint un screen de mon formulaire, expert 1 et expert 2 correspondant respectivement au classement de l'expert 1 (que l'on souhaite masquer lorsque expert 2 classe à nouveau) et classement expert 2.

    Nom : Fontaine_CLB_casecoche.png
Affichages : 1540
Taille : 195,6 Ko

    Citation Envoyé par jimbolion Voir le message
    Pour le message d'erreur, ton souci est lié aux règles d'intégrité référentielles qui est une erreur typique dans la gestion des sous formulaires (la table parent doit contenir la clé primaire nécessaire à la création d'enregistrements dans la table enfants).

    Jimbolion
    J'avais bien identifié ce pb d'après le message d'erreur sauf que je ne le comprends pas. Il survient uniquement si je joue avec la case "cocher/décocher" (avant ça aucun pb), et mes clefs primaires sont des numéro auto générées automatiquement non visibles sur les sous formulaires. L'action de cocher/décocher ne fait, pour moi, que masquer une information mais n'a aucune action sur la table si ?

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Fontaine_CLB bonsoir,

    Bah ca correspond plus ou moins a ma proposition de demander l'utilisateur au moment du clic sur le bouton appelant le formulaire de saisie non ? Quelle serait la structure du code à appliquer sur l'ouverture du formulaire dans ce cas ? Si vous avez un tuto pouvant répondre à ma question, je suis preneur.
    Malheureusement et pour le moment pas de solution tout faite ou de tuto (mais tu me donnes une excellente idée quant à la rédaction d'un futur article).

    Pour faire simple, prévoir une table utilisateur avec un id, un identifiant et un mot de passe. A l'ouverture de ton projet, demander à l'utilisateur de renseigner son identifiant et mot de passe (à toi de fixer les règles: 3 essais et sortie...). Après contrôle (fonction de domaine : http://starec.developpez.com/tuto/fonctionsdomaines/, tu mémoriseras alors l'id soit dans une table locale, soit dans une variable globale. Tu pourras ensuite à souhait faire appel à cette table ou variable afin de déterminer l'utilisateur connecté.

    J'ai essayé ce code sur la procédure clic avec le rajout des msgbox et que je coche ou décoche, j'obtiens toujours "False"... Je mets ci joint un screen de mon formulaire, expert 1 et expert 2 correspondant respectivement au classement de l'expert 1 (que l'on souhaite masquer lorsque expert 2 classe à nouveau) et classement expert 2.
    Regarde bien ton code, sur la condition False il te manque une propriété

    J'avais bien identifié ce pb d'après le message d'erreur sauf que je ne le comprends pas. Il survient uniquement si je joue avec la case "cocher/décocher" (avant ça aucun pb), et mes clefs primaires sont des numéro auto générées automatiquement non visibles sur les sous formulaires. L'action de cocher/décocher ne fait, pour moi, que masquer une information mais n'a aucune action sur la table si ?
    Oui tu as parfaitement raison, et à j'avoue avoir les mêmes interrogations
    Avant d'aller plus loin confirme moi tes hypothèses sur la checkbox, une modification inopportune peut être source du problème

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur environnement
    Inscrit en
    Septembre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur environnement
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2014
    Messages : 73
    Points : 20
    Points
    20
    Par défaut
    Oh oui il y avait plusieurs erreurs de syntaxe dans mon mini code, même le nom de la case était incorrecte... Je suis désolé pour cette perte de temps.

    La bonne nouvelle c'est qu'une fois les choses écrites convenablement, je n'ai plus aucun pb et cela fait bien le travail ! Certes ce n'est pas extrêmement élégant mais c'est suffisant à mon niveau en attendant votre prochain tuto

    Merci pour votre aide et bonne journée

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

Discussions similaires

  1. [AC-2010] Masquer champs dans requete d'un sous formulaire.
    Par gil68 dans le forum IHM
    Réponses: 12
    Dernier message: 21/01/2015, 12h29
  2. [AC-2003] Sous formulaire selon condition dans le Formulaire
    Par tonioboss dans le forum Access
    Réponses: 3
    Dernier message: 12/02/2012, 23h40
  3. [AC-2010] Formulaire - Sous formulaire - Sous sous formulaire
    Par meli74 dans le forum IHM
    Réponses: 1
    Dernier message: 21/04/2011, 19h35
  4. formulaire/sous formulaire/sous formulaire
    Par aimejielle dans le forum Access
    Réponses: 1
    Dernier message: 24/07/2006, 22h48
  5. Réponses: 1
    Dernier message: 10/07/2006, 09h15

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