web-dev-qa-db-fra.com

Vérifier si une case à cocher basée sur une feuille de calcul est cochée

J'essaie d'utiliser une clause IF pour déterminer si ma case à cocher, nommée "Case à cocher 1", est cochée ou non, pour une utilisation ultérieure dans mon programme.

Mon code actuel:

Sub Button167_Click()
 If ActiveSheet.Shapes("Check Box 1") = True Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub

Cela ne semble pas fonctionner, mais le débogage me dit qu'il y a un problème avec le

      ActiveSheet.Shapes("Check Box 1")

Cependant, je sais que ce code fonctionne (même s'il sert un objectif différent):

ActiveSheet.Shapes("Check Box 1").Select
With Selection
.Value = xlOn

EDIT: Si plus d'informations sont nécessaires, Mes cases à cocher (il y en a 200 sur ma page), se trouvent dans la feuille1, sous le nom de "Demande". Et chaque case à cocher a le même nom formaté de "case à cocher ...".

Toute aide serait appréciée. Merci

20
Paolo Bernasconi
Sub Button167_Click()
 If ThisWorkbook.Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value = 1 Then
 Range("Y12").Value = 1
 Else
 Range("Y12").Value = 0
 End If
End Sub

1 est coché, -4146 n'est pas coché, 2 est mélangé (case grise)

21
Motes

C'est ce que vous essayez?

Sub Sample()
    Dim cb As Shape

    Set cb = ActiveSheet.Shapes("Check Box 1")

    If cb.OLEFormat.Object.Value = 1 Then
        MsgBox "Checkbox is Checked"
    Else
        MsgBox "Checkbox is not Checked"
    End If
End Sub

Remplacez Activesheet par le nom de feuille approprié. Remplacez également Check Box 1 avec le nom de la case appropriée.

10
Siddharth Rout

En s'appuyant sur précédentréponses , vous pouvez tirer parti du fait que True est -1 et False est 0 et raccourcir votre code comme ceci :

Sub Button167_Click()
  Range("Y12").Value = _
    Abs(Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0)
End Sub

Si la case est cochée, .Value = 1.

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0 renvoie True.

L'application de la fonction Abs convertit True en 1.

Si la case n'est pas cochée, .Value = -4146.

Worksheets(1).Shapes("Check Box 1").OLEFormat.Object.Value > 0 renvoie False.

L'application de la fonction Abs convertit False en 0.

3
JimmyPena

Il semble que dans le code macro VBA pour un contrôle de case à cocher ActiveX que vous utilisez

If (ActiveSheet.OLEObjects ("CheckBox1"). Object.Value = True)

et pour un contrôle de case à cocher Formulaire que vous utilisez

If (ActiveSheet.Shapes ("CheckBox1"). OLEFormat.Object.Value = 1)

0
Allan F