Rendre un champs visible sous conditions.

Résolu
Said -  
 Said -
Bonjour, je crée une base de données de gestion des résultats d'analyses médicales, j'ai un formulaire et un sous-formulaire.

Pour le formulaire j'ai un champs, NORMES, alimenté par une liste de choix avec trois valeurs: NORMEA, NORMEF et NORMEB.

Pour le sous-formulaire , en mode feuille de données et pour chaque examen, exemple: Glycémie, j'ai aussi trois champs: VALEUREA, VALEUREF et VALEUREB.

je voudrai que à chaque fois que je sélectionne une norme sur le formulaire je retrouve uniquement la valeur qui correspond au niveau du sous-formulaire.

J'ai essayé de rendre visible et invisible chaque champs par exemple pour le Champs VALEURA :
En mode création sur la feuilles des propriétés du contrôle:
- sur format, visible = NON
- sur événement, Après MAJ, j'ai fais appel au générateur de code:
Private Sub VALEURA_AfterUpdate()
If [NORMES] = "NORMEA" then
[VALEURA].Visible=True
Else
[VALEURA].Visible=False
End If
End Sub

Héals, ça fonctionne pas, j'ai toujours mon champs VALEURA bien visible sur mon sous-formulaire!!!

Comment faire svp?
Mercie pour votre aide précieuse.

Configuration: Windows / Chrome 95.0.4638.69

4 réponses

Résumé de la discussion

Le problème concerne un formulaire avec un champ NORMES alimenté par NORMEA, NORMEF et NORMEB et sous-formulaire où examen affiche VALEURA, VALEUREF ou VALEUREB, dont la valeur dépend de la norme choisie.
Plusieurs répondants expliquent que visibilité des champs ne suffit pas et proposent d'utiliser une colonne calculée dans la requête pour récupérer la valeur, ou une expression IIf adaptée aux valeurs.
La discussion suggère que la colonne ajoutée dans la requête peut servir de source pour le champ sous-formulaire, et que IIf est limité aux cas avec peu de valeurs.
En pratique, l’approche consiste à ajouter une colonne calculée dans la source SQL et à baser la valeur affichée sur NORMES, avec des variantes selon le nombre de valeurs.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    je ne suis pas certain d'avoir tout compris.
    veux-tu cacher une colonne de la feuille de données?
    si j'ai compris, ton code ne retourne pas d'erreur, et il ne fait pas ce que tu souhaites.
    j'essaierais plutôt, pour cacher la colonne:
    .ColumnHidden = True

    et
    .ColumnHidden = False
    pour la montrer.
    Donc, jouer sur
    .ColumnHidden
    plutôt que sur
    .Visible
    .
    Je n'ai pas testé.
    0
    1. Said
       
      Bonsoir,
      Oui je veux cacher une colonne de la feuille de données.
      je viens de tester Columnhidden, hélas ça fonction pas
      Merci
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Said
       
      Peux-tu partager ton fichier?
      0
    3. Said > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour, tu veux que je t'envoie mon travail ?
      Avec plaisir, juste il faut que je trouve comment le partager.
      Je suis nouveau ici.
      Je vais voir ça rapidement.
      C'est vraiment gentil.

      Si tu veux même le recevoir par email?
      Voici le mien:

      ***@***

      Merci
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Said
       
      Il suffit de mettre ton fichier à disposition sur Internet (google drive, cjoint.com, ...) puis de partager ici un lien vers le fichier.
      0
    5. said > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour, voici le lien :

      https://drive.google.com/file/d/1g5R-0tjmWaB5jCL56xll5x4OHyPSHkXl/view?usp=sharing

      merci bien
      0
  2. Tessel75
     
    Bonjour,
    Il n'est pas nécessaire d'envoyer ton fichier, d'abord parce que je peux te dire d'emblée que tu ne peux pas masquer un contrôle en affichage feuille de données, ou alors en jouant sur la largeur de la colonne; mais là, je ne connais pas la commande en VBA.
    Tu ne peux utiliser la commande Visible =true ou False que sur l'affichage en mode formulaire.
    Deuxièmement, tu dois savoir que lorsque tu actives la commande Visible =true ou False, c'est tous les formulaires affichés, en mode continu dont le contrôle est à afficher ou masquer qui seront affichés et masqués en même temps. Il ne faut pas t'attendre à avoir les uns masqués les autres affichés selon la valeur des données des différents enregistrements.
    Troisièmement, ton code n'est pas bon et ne sert à rien. Si tu veux que seules les valeurs que tu as choisies apparaissent, il te faut une requête qui te sélectionne les enregistrements dont les données correspondent à tes critères de sélection. Tel que tu poses ton problème, je ne vois pas d'autre solution.
    En plus, je ne vois pas bien l'intérêt de ton code. Il indique qu'à peine ta donnée entrée dans le contrôle "ValeurA", celle-ci doit être masquée si elle ne correspond pas à la norme choisie. Étonnant ! Et puis après ? Quand tu auras entré une valeur acceptée par ta norme, c'est toutes tes valeurs qui réapparaitront.
    Bon courage !
    0
    1. Said
       
      Bonsoir,
      Merci pour l'orientation.
      Ça fonctionne très bien avec une requête.
      0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    suggestion:
    Private Sub NORMES_AfterUpdate()
    Dim sfd As SubForm, nrm As String, na As Boolean, nb As Boolean, ne As Boolean
    
    nrm = Me.Normes
    Set sfd = Me.Parent.[Examens sous-formulaire].Controls("[Details sous-formulaire]")
    na = True
    nb = True
    ne = True
    Select Case nrm
        Case "NORMEA":
            na = False
        Case "NORMEB":
            nb = False
        Case "NORMEE":
            ne = False
    End Select
    sfd.Controls("VALEURA").ColumnHidden = na
    sfd.Controls("VALEURB").ColumnHidden = nb
    sfd.Controls("VALEURE").ColumnHidden = ne
    End Sub
    0
    1. said
       
      Bonjour,
      Votre code fonctionne très bien, sauf qu'il y'a toujours un soucis:

      Quand je sélectionne une NORME pour un patient c'est tous les autres patients qui auront la même norme.

      Comment surmonter ce soucis svp?

      https://drive.google.com/file/d/1T1TcYS2jJy1FAMPwXCt5ho9eMwj_wlO1/view?usp=sharing

      Merci beaucoup pour votre aide.
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > said
       
      Quel rapport entre ce soucis et le code?
      Cela fonctionnait bien sans le code?
      0
    3. Said > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Aucun rapport. Votre code fonctionne très bien et je vous remercie pour votre aide.

      Vous me suggérez quoi pour que chaque patient garde la colonne sélectionnée ?
      Je dois réaliser un état pour imprimer les résultats à la demande.

      Merci bien
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Said
       
      peut-être utiliser une requête qui affiche les bonnes données?
      0
    5. Said > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour,
      Avant de chercher un code VBA, j'ai essayer avec une requête de sélection, je n'arrivais pas à sélectionner uniquement la colonne de la valeur qui correspond à la norme sélectionnée uniquement. Même en changeant la structure de la table paramètres.

      Veux-tu voir le fichier ?

      Bien merci.
      0
  4. Said
     
    Bonsoir,
    Votre code fonctionne bien avec trois valeurs.
    Avec six valeurs, on peut toujours utiliser "iif"?

    merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      oui, je pense.
      0
    2. Said > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      j’ai essayé le code :

      iif(NORMES="NORMEA",VALEURA,iif(NORMES="NORMEB",VALEURB,VALEURC, VALEURD,VALEURE,VALEURF))

      ça fonctionne pas, J’ai un message d’erreur : trop d’argument….

      merci
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Said
       
      comme tu l'as vu, il faut deux iif() pour trois valeurs.
      commence par ajouter une quatrième valeur, qui demande d'utiliser un troisième iif().
      0
    4. Said > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      iif(NORMES="NORMEA",VALEURA,iif(NORMES="NORMEB",VALEURB,iif(NORMES="NORMEC",VALEURC,iif(NORMES="NORLED",VALEURD,iif(NORMES="NORMEE",VALEURE,VALEURF)))))

      c ça ?
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Said
       
      cela donne quel résultat?
      0