Décocher une seule case via VBA

Bonjour,

Je tente, en vain, de décocher une case particulière lors de l'exécution d'une macro. Je veux la décocher au tout début de la macro sinon cela influe sur le reste des actions.

Je ne sais pas trop comment cette case se nomme en fait, dans Format de contrôle et texte de remplacement j'ai mis week, est-ce cela son nom ?

SI je fait affecter une macro, la fenêtre qui s'ouvre inscrit automatiquement un nom de macro est c'est celui-ci : Caseàcocher21_Cliquer

Une fois que je sais comment elle s'appelle, que faire ? J'ai trouver du code ici sur le forum mais je ne le comprends pas assez pour le modifier à ma convenance :

Dim Chk As CheckBox
Dim feuille As Worksheet
    For Each feuille In ActiveWorkbook.Sheets
        For Each Chk In feuille.CheckBoxes
            Chk.Value = 0
        Next
    Next

La feuille concernée s'appelle ADMINISTRATION dans mon classeur.

Merci pour votre aide.

Nicolas,

Ici, le code met la valeur de la checkbox à 0 pour chaque checkbox de chaque feuille du classeur...

Dans votre cas, quelque chose comme ça (au sein de votre macro) devrait suffire :

Dim Chk As CheckBox 'definition

Set Chk = Sheets("ADMINISTRATION").Checkboxes(1) 'affectation (en partant du principe que c'est la checkbox 1
'OU Set Chk = Sheets("ADMINISTRATION").Checkbox1

Chk.Value = 0 'valeur à 0
'Chk.value = 1

Je n'ai jamais manipulé de checkbox donc je ne suis pas certain mais tenter ce code ne coûte rien, en attendant que vous ayez un meilleur retour.

Bonne soirée,

Merci 3GB,

Cela fonctionne parfaitement !

Mon seul problème c'est que je ne parviens pas à trouver le numéro de la checkbox, j'ai essayé de 1 à 24 et elle ne se décoche pas, j'en ai une vingtaine d'autres qui se sont décochées au fur et à mesure de mes essais, mais il n'y pas vraiment de cohérence entre les "ID" et les cases.

Comment trouver l'ID d'une checkbox ?

Honnêtement, je ne connais pas vraiment, donc je peux dire des bêtises niveau syntaxe. Mais, en suivant la logique de VBA, tu peux la tester de cette manière :

Sub testCB()

Dim Nom$

Nom = Sheets("ADMINISTRATION").Checkbox1.Name

msgbox "Le nom est "&Nom

end sub

et tu peux essayer ce test pour obtenir l'index si tu as le nom :

Sub Test2()

Dim Num%
Dim CB as CheckBox

for each CB in Sheets("ADMINISTRATION").CheckBoxes
    If CB.Name = "lenomdelacheckbox" Then
        Num = CB.TabIndex
    end if
next CB

msgbox "Position de la Checkbox : "&Num

end sub

Voilà, j'espère que ça marchera. N'hésitez pas à vous renseigner en regardant sur Microsoft Docs où tout ce qui concerne VBA est détaillé plus ou moins bien.

A bientôt,

Bonjour,

à gauche de la zone d'édition des formules tu as une zone nom .
En temps normal tu y trouves la ref de la cellule active, si tu sélectionnes un objet tu y liras son nom.

eric

Bonjour,

à gauche de la zone d'édition des formules tu as une zone nom .
En temps normal tu y trouves la ref de la cellule active, si tu sélectionnes un objet tu y liras son nom.

eric

Bonjour,

Mais cette référence ne correspond pas à l'ID de la case, j'ai déjà tenté le coup. D'ailleurs en créant une nouvelle case, Excell l'a nommée case à cocher 25 et bien dans le code vb si vous indiquez 25 cela ne fonctionne pas. J'ai une autre case nommée case à cocher 18 et c'est l'ID 17 qui la décoche dans le code VB

Honnêtement, je ne connais pas vraiment, donc je peux dire des bêtises niveau syntaxe. Mais, en suivant la logique de VBA, tu peux la tester de cette manière :

J'ai trouvé ce bout de code qui fonctionne parfaitement :

Sheets("Feuil1").[Case à cocher 1].Value = False

Et là c'est bien le nom de la case qui est utilisée et non son ID. Merci.

Bonjour,

D'ailleurs en créant une nouvelle case, Excell l'a nommée case à cocher 25

avec ce nom c'est une case à cocher Formulaire que tu as inséré et non une ActiveX (en-dessous).
eric

Oui effectivement, mais je n'ai pas parlé d'ActiveX juste d'une case à cocher. J'aurais peut-être dû préciser...

Dans mon premier message :

SI je fait affecter une macro, la fenêtre qui s'ouvre inscrit automatiquement un nom de macro est c'est celui-ci : Caseàcocher21_Cliquer

Sinon j'ai rajouté ce code à ma macro

MsgBox "Vous avez activé l'augmentation de production automatique"

Mais le message s'active qu'on coche ou décoche la case, comment faire pour qu'il n'apparaisse que lorsqu'on coche la case ?

D'autre part, le nom de la petite fenêtre du message porte le nom Microsoft Excell, peut-on la renommer ? Et encore peut on avoir le choix de Oui ou Non au lieu de simplement OK pour fermer la petite fenêtre ?

Merci !

Salut nicodak,

Il faut mettre le code sous condition :

If Sheets("Feuil1").[Case à cocher 1].Value = True Then
    Msgbox "augmentation...."
Else: Msgbox "pas d'augmentation"
end if

La ligne Else ne sert à rien mais c'est pour que tu vois comment faire en général.

Merci,

voilà ce que j'écris pour la macro affectée à la case

Sub Case_à_cocher_25()
    If Sheets("ADMINISTRATION").[Case à cocher 25].Value = True Then
        MsgBox "Vous avez activé l'augmentation automatique de production"
        Else: MsgBox "pas d'augmentation"
    End If
End Sub

Que je coche ou décoche la case la fenêtre apparait avec les message "pas d'augmentation"

Si je supprime la ligne Else rien ne se passe...

Alors, comme je vous ai dit, c'est une question de syntaxe, que je ne connais pas. Eric me corrigera sûrement mais en attendant sa réponse vous pouvez essayer :

Sub Case_à_cocher_25()
    If Sheets("ADMINISTRATION").[Case à cocher 25].Value = 1 Then
        MsgBox "Vous avez activé l'augmentation automatique de production"
        Else: MsgBox "pas d'augmentation"
    End If
End Sub

OU

Sub Case_à_cocher_25()
    If Sheets("ADMINISTRATION").[Case à cocher 25] is True Then
        MsgBox "Vous avez activé l'augmentation automatique de production"
        Else: MsgBox "pas d'augmentation"
    End If
End Sub

OU

Sub Case_à_cocher_25()
    If Sheets("ADMINISTRATION").[Case à cocher 25] Then
        MsgBox "Vous avez activé l'augmentation automatique de production"
        Else: MsgBox "pas d'augmentation"
    End If
End Sub

OU

Sub Case_à_cocher_25()
    If Sheets("ADMINISTRATION").[Case à cocher 25].checked = True Then
        MsgBox "Vous avez activé l'augmentation automatique de production"
        Else: MsgBox "pas d'augmentation"
    End If
End Sub

Êtes-vous sûr de tester la bonne case ? C'est probablement ça l'explication.

mais puisque tu es parti pour mettre du vba pourquoi rester avec les objets Formulaire alors que que les ActiveX sont beaucoup plus souples, plus simples à gérer et permettent plus d'événements ?

A part si tu es sur Mac où ils n'existent pas, ça présente moins d'intérêt.
Tu déposes un ActiveX sur ta feuille, le renommer si besoin avant, et double-clic dessus pour accéder à son événement CheckBox1_Click() :

Private Sub CheckBox1_Click()
    If CheckBox1 Then
        MsgBox "coché"
    Else
        MsgBox "décoché"
    End If
End Sub

eric

19exemple.xlsm (18.95 Ko)

PS : et pour la décocher :

Sub decocher()
    Sheets("Feuil1").CheckBox1.Value = False
End Sub

Merci eriiic pour ces précisions. Je découvre Excel petit à petit, il y a 2 ou 3 semaines, franchement je ne savais pas faire une simple somme... Là je m'exerce aux listes déroulantes, alors ActiveX je ne sais même pas ce que ça peut représenter.

Il y a tant à faire...

Rechercher des sujets similaires à "decocher seule case via vba"