Une question aussi simple, mais je ne trouve pas la réponse (Google, MS Help, SO):
Comment puis-je vérifier par VBA si une case à cocher non liée sur un formulaire d'accès est cochée par l'utilisateur ou non? Impossible de trouver la bonne propriété.
Merci d'avance!
MISE À JOUR:
J'ai utilisé ce code après les suggestions de @HansUp et @RC:
Private Sub CmdTest_Click()
MsgBox "Check1.Value = " & Me.Check1.Value
MsgBox "Check2.Value = " & Me.Check2.Value
End Sub
Private Sub Form_Load()
Me.Check1.Value = 25
Me.Check2.Value = 50
End Sub
2e MISE À JOUR:
Le code devrait être le suivant (merci à @ David-W-Fenton):
Private Sub CmdTest_Click()
If Me.Check1 = True Then
MsgBox "Check1 IS CHECKED"
Else
MsgBox "Check1 IS NOT CHECKED"
End If
If Me.Check2 = True Then
MsgBox "Check2 IS CHECKED"
Else
MsgBox "Check2 IS NOT CHECKED"
End If
End Sub
Private Sub Form_Load()
' set first checkbox default checked
Me.Check1.Value = True
' set second checkbox default unchecked
Me.Check2.Value = False
End Sub
Les cases à cocher sont un type de contrôle conçu dans un seul but: garantir une entrée valide des valeurs booléennes.
Dans Access, il existe deux types:
2 états - peut être coché ou décoché, mais pas Null. Les valeurs sont True (cochée) ou False (non cochée). Dans Access et VBA, la valeur de True est -1 et la valeur de False est 0. Pour la portabilité avec les environnements qui utilisent 1 pour True, vous pouvez toujours tester False ou Not False, puisque False est la valeur 0 pour tous les environnements I entendu parler.
3 états - comme le 2 états, mais peut être nul. Cliquer dessus fait défiler True/False/Null. C'est pour la liaison à un champ entier qui autorise les Nulls. Il ne sert à rien avec un champ booléen, car il ne peut jamais être nul.
Petit problème avec les réponses:
Il n'est presque jamais nécessaire d'utiliser la propriété .Value d'un contrôle d'accès, car c'est la propriété par défaut. Ces deux sont équivalents:
?Me!MyCheckBox.Value
?Me!MyCheckBox
Le seul problème ici est qu'il est important de faire attention à ne pas créer de références implicites lors du test de la valeur d'une case à cocher. Au lieu de cela:
If Me!MyCheckBox Then
... écrivez l'une de ces options:
If (Me!MyCheckBox) Then ' forces evaluation of the control
If Me!MyCheckBox = True Then
If (Me!MyCheckBox = True) Then
If (Me!MyCheckBox = Not False) Then
De même, lorsque vous écrivez des sous-routines ou des fonctions qui obtiennent des valeurs d'un contrôle booléen, déclarez toujours vos paramètres booléens comme ByVal, sauf si vous voulez réellement manipuler le contrôle. Dans ce cas, le type de données de votre paramètre doit être un contrôle d'accès et non une valeur booléenne. Tout le reste court le risque de références implicites.
Enfin, si vous définissez la valeur d'une case à cocher dans le code, vous pouvez réellement la définir sur n'importe quel nombre, pas seulement 0 et -1, mais tout nombre autre que 0 est traité comme vrai (car ce n'est pas faux). Bien que vous puissiez utiliser ce genre de chose dans un formulaire HTML, ce n'est pas une conception d'interface utilisateur appropriée pour une application Access, car il n'y a aucun moyen pour l'utilisateur de voir quelle valeur est réellement stockée dans le contrôle, ce qui va à l'encontre de l'objectif de en le choisissant pour éditer vos données.
Vérifier yourCheckBox.Value
?