Activer case option dans Access

Résolu
Bonjour,

Même dans Access 2007 la mise en forme conditionnelle ne fonctionne pas avec les cases à cocher/option. Je souhaite les activer/désactvier en fonction de la valeur d'un champs.

Quelqu'un saurait-il svp m'expliquer la procédure

11 réponses

  1. Ben en fait il suffisait de mettre exactement la même formule dans l'événement "sur ouverture" du formulaire... et tout fonctionne au poil.

    Merci à tous.
    1. Bon J'ai réussi à moitié, Quand je choisi une valeur dans ma zone de liste certaines case s'activent et d'autres se désactivent, c'est bien ce que je souhaite, grâce à la formule ci-dessous.

      Mais quand j'ouvre le formulaire avec une valeur dans la zone de liste les cases qui ne devraient pas être activées le sont...

      J'ai essayé d'imposer la désactivation en mettant "non" à "Activé" dans propriété mais cela ne marche pas, le contrôle fait passer la propriété des cases à "Oui" à la prochaine ouverture.

      Mais dès que j'active ma zone de liste, tout est Ok.

      Private Sub Form_BeforeUpdate(Cancel As Integer)

      Private Sub TypeInterventions_Change()
      If TypeInterventions.Value = "3D" Then
      Desinsectisation.Enabled = True
      Désinfection.Enabled = True
      Dératisation.Enabled = True
      Applicat.Enabled = True
      Contrat.Enabled = True
      Complément.Enabled = True
      Else
      Desinsectisation.Enabled = False
      Désinfection.Enabled = False
      Dératisation.Enabled = False
      Applicat.Enabled = False
      Contrat.Enabled = False
      Complément.Enabled = False
      End If

      If TypeInterventions.Value = "Anti-termites" Then
      InjectionSols.Enabled = True
      CeinturageMur.Enabled = True
      MurRefClois.Enabled = True
      AccotementBois.Enabled = True
      Huisseries.Enabled = True
      SolPourtour.Enabled = True
      PulvérisaSurface.Enabled = True
      BarrièreSoubass.Enabled = True
      Jardin.Enabled = True
      Else
      InjectionSols.Enabled = False
      CeinturageMur.Enabled = False
      MurRefClois.Enabled = False
      AccotementBois.Enabled = False
      Huisseries.Enabled = False
      SolPourtour.Enabled = False
      PulvérisaSurface.Enabled = False
      BarrièreSoubass.Enabled = False
      Jardin.Enabled = False
      End If

      If TypeInterventions.Value = "Barrière Physico-chimique" Then
      MurSoutenement.Enabled = True
      GaineTehnique.Enabled = True
      JointSingulier.Enabled = True
      JointDilatation.Enabled = True
      Peripherie.Enabled = True
      Else
      MurSoutenement.Enabled = False
      GaineTehnique.Enabled = False
      JointSingulier.Enabled = False
      JointDilatation.Enabled = False
      Peripherie.Enabled = False
      End If

      End Sub
      1. Oui oui, j'ai bien lu, mais comment on fait cela ?
        1. Modérateur
          Dans ton formulaire, tu peux mettre du code dans l'évènement 'sur ouverture' pour mettre une option par défaut : enabled ou non...
          Dans le code 'sur changement', il te faut compléter l'existant, de cette manière par exemple :

          Private Sub TypeInterventions_Change() 
          If TypeInterventions.Value = "3D" Then 
               SolPourtour.Enabled = True 
          else 
               SolPourtour.Enabled = False 
          End If 
          End Sub 
          

          Mais c'est variable en fonction de ce que tu souhaites faire...
      2. Bon ok, en fait faut mettre "End sub" en final après "End If".

        Donc ça fonctionne à l'ouverture du formulaire quand la valeur de la zone de liste passe à "3D" la case à cocher s'active.

        Mais quand la zone de liste change de valeur, elle reste activée.
        D'autre part à l'ouverture du formulaire quand la valeur de la zone de liste n'est pas "3D", la case reste quand même activée...

        Comment faire ?
        1. Modérateur
          Lire ce que j'ai écrit précédemment ;-)

          Par contre, il faudra gérer la valeur à l'ouverture du formulaire ainsi que les différents changements d'état. C'est-à-dire que si on saisit une autre valeur, peut-être que la case doit se retrouver disabled (enabled = false), mais c'est à toi de voir...
      3. OK, mais j'ai un message d'erreur entre "End sub" et "End if"

        il n'accepte aucun des deux. J'ai mis cela dans l'événement "sur changement" de la zone de liste :

        Private Sub TypeInterventions_Change()
        If TypeInterventions.Value = "3D" Then
        SolPourtour.Enabled = True
        End If
        1. Bon, ben quand je mets cela dans l'événement "sur changement" de la zone de liste :

          Private Sub TypeInterventions_Change()
          If TypeInterventions.Value = 3D Then
          SolPourtour.Enabled = True
          End If

          J'ai un message d'erreur : "erreur de compilation - erreur de syntaxe".

          Effectivement quand la zone de liste change de valeur la case à cocher doit se désactiver pour empêcher ce choix.

          Merci de vos lumières.
          1. Modérateur
            Comme tu testes une chaine de caractères, tu dois la mettre entre guillemets

            If TypeInterventions.Value = "3D" Then
        2. Modérateur
          Salut,

          dans l'évènement 'sur changement' de ta zone de liste, tu dois rajouter un truc comme ça :

          If zone_de_liste.value = toto then
          case1.enabled = true
          end if

          Par contre, il faudra gérer la valeur à l'ouverture du formulaire ainsi que les différents changements d'état. C'est-à-dire que si on saisit une autre valeur, peut-être que la case doit se retrouver disabled (enabled = false), mais c'est à toi de voir...
          1. Bonjour,

            exemple:
            case a cocher active
            Cocher5.Enabled = True

            case a cocher inactive (grisee sur le formulaire)
            Cocher5.Enabled = false

            Bonne suite
            1. Merci pour la réponse.
              En fait, à l'ouverture du formulaire les cases à cocher sont désactivées selon la valeur d'une zone de liste. Quand la zone de liste change de valeur certaines cases à cocher seront activées d'autres désactivées.

              C'est pour cela que je parlais de mise en forme conditionnelle. Là je ne m'intéresse pas encore à leur valeur.
              1. Contributeur
                La mise en forme conditionnelle, ça dit bien ce que ça veut dire: ça "met en forme" quand une "condition" est respectée.

                "Mettre en forme", c'est changer l'aspect - toi tu veux changer la valeur de l'enregistrement, et c'est pas du tout la même chose.

                A part ça, je ne comprend pas ton problème:
                - soit le champ que tu veux évaluer est déjà du type "Vrai/Faux" et alors il suffit de placer sur ton formulaire un case à cocher/option liée au champ en question (dans la ligne "Source de données") et il n'y aura rien à faire
                - soit le champ que tu veux évaluer n'est pas du type vrai/faux et dans ce cas, tu devras mettre comme source de données une requête basée sur un IIF pour indiquer à access que quand la valeur est A, alors le champ est VRAI et FAUX sinon.