XL 2016 Case décoche/coche toutes les cases à cocher

flodumur

XLDnaute Nouveau
Bonjour, j'aimerai avoir une case à cocher qui lorsque l'on clique dessus décohe toutes les cases, puis si on reclique dessus recoche toutes les cases ...

Pour l'instant, je n'arrive à avoir qu'un bouton qui décoche toutes les cases à cocher, mais ne fait rien lorsque l'on reclique dessus

VB:
Sub BoucleCheckBoxFalse()
    Dim Shp As Shape
    Dim Sh As Worksheet
    Set ShBatchReviewData = ThisWorkbook.Sheets("Batch review Data")
    For Each Shp In ShBatchReviewData.Shapes
        If Shp.Name Like "Check Box*" Then
            Shp.DrawingObject.Value = False
        End If
    Next Shp
End Sub
 
Solution
Bonjour à tous
Je n'aime pas les cases à cocher de Excel (en général inutiles et remplaçables à moindres frais par un simple "X" (ou vide) dans une case ad hoc)
Mais voilà ce que je ferais, par taquinerie :
VB:
 If Shp.Name Like "Check Box*" Then
   Shp.DrawingObject.Value = IIf(Shp.DrawingObject.Value < 0, 1, -4146)
End If

flodumur

XLDnaute Nouveau
Merci pour ta réponse, mais à moins d'avoir mal compris ce n'est pas ce que je cherche. Il a aussi 2 fonctions "ToutCocher" et "ToutDécocher" avec j'imagine deux boutons (comme moi)
Je cherche à avoir qu'un seul bouton qui décoche tout, puis recoche tout par un clic.

Voici ce que j'ai actuellement :

VB:
Sub BoucleCheckBoxTrue()
    Dim Shp As Shape
    Dim Sh As Worksheet
    Set ShData = ThisWorkbook.Sheets("Data")
    For Each Shp In ShData.Shapes
        If Shp.Name Like "Check Box*" Then
            Shp.DrawingObject.Value = True
        End If
    Next Shp
End Sub

Sub BoucleCheckBoxFalse()
    Dim Shp As Shape
    Dim Sh As Worksheet
    Set ShData = ThisWorkbook.Sheets("Data")
    For Each Shp In ShData.Shapes
        If Shp.Name Like "Check Box*" Then
            Shp.DrawingObject.Value = False
        End If
    Next Shp
End Sub

Capture.PNG
 

Amilo

XLDnaute Accro
Bonjour flodumur,

Effectivement, votre exemple est un poil différent notamment avec les boutons d'option au lieu d'un CheckBox
Désolé, je laisse la main aux utilisateurs VBA, ça serait beaucoup plus fiable

Edit : c'est toujours mieux de joindre un fichier exemple au lieu d'une image

Cordialement
 

ChTi160

XLDnaute Barbatruc
Bonjour flodumur
Bonjour le Fil ,le Forum
Peut être avec un truc de ce genre (non Testé pas de Fichier lol)
VB:
Sub BoucleCheckBoxFalse()
    Dim Shp As Shape
    Dim Sh As Worksheet
    Set ShBatchReviewData = ThisWorkbook.Sheets("Batch review Data")
    For Each Shp In ShBatchReviewData.Shapes
        With Shp
            If .Name Like "Check Box*" Then
                .DrawingObject.Value = IIf(.DrawingObject.Value = True, False, True)
            End If
        End With
    Next Shp
End Sub
jean marie
Prenez soin de vous
 

jmfmarques

XLDnaute Accro
Bonjour à tous
Je n'aime pas les cases à cocher de Excel (en général inutiles et remplaçables à moindres frais par un simple "X" (ou vide) dans une case ad hoc)
Mais voilà ce que je ferais, par taquinerie :
VB:
 If Shp.Name Like "Check Box*" Then
   Shp.DrawingObject.Value = IIf(Shp.DrawingObject.Value < 0, 1, -4146)
End If
 

AnneP

XLDnaute Nouveau
Merci à tous pour vos réponses. Effectivement la réponse de jmfmarques, et Staple1600 fonctionnenent très bien.
Bonjour,

Je vous contacte car je souhaite faire la même chose que vous dans un excel mais je suis novice. Je ne connais donc rien à la vba ni aux codes indiqués dans les messages ci-dessus. Pourriez-vous me préciser les étapes à effectuer pour arriver à avoir case à cocher qui coche et décoche toutes les cases dessous svp ?

Bonne journée
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, AnneP

•>AnneP
Joins un petit fichier exemple avec des cases à cocher
(NB: fichier allégé et sans données confidentielles)

EDITION: je reposte mon code du fil que je cite (pour éviter les allers et retours)
VB:
Sub Cocher_TOUT()
'coche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez True
End Sub
Sub Décocher_TOUT()
'décoche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez False
End Sub

Private Sub Cochez(statut As Boolean)
Dim c As Object
With ActiveSheet
    .CheckBoxes.Value = statut
    For Each c In .OLEObjects
    If TypeName(c.Object) = "CheckBox" Then c.Object.Value = statut
    Next c
End With
End Sub
 

AnneP

XLDnaute Nouveau
Bonjour le fil, AnneP

•>AnneP
Joins un petit fichier exemple avec des cases à cocher
(NB: fichier allégé et sans données confidentielles)

EDITION: je reposte mon code du fil que je cite (pour éviter les allers et retours)
VB:
Sub Cocher_TOUT()
'coche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez True
End Sub
Sub Décocher_TOUT()
'décoche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez False
End Sub

Private Sub Cochez(statut As Boolean)
Dim c As Object
With ActiveSheet
    .CheckBoxes.Value = statut
    For Each c In .OLEObjects
    If TypeName(c.Object) = "CheckBox" Then c.Object.Value = statut
    Next c
End With
End Sub





Bonjour

Voici en pièce jointe une ébauche du tableau concerné. J'aimerais que la case D4 me serve à cocher / décocher toutes les cases en-dessous.

Où devrais-je mettre le code que vous avez publié ? Je n'ai jamais codé, c'est une découverte pour moi.

Merci
 

Pièces jointes

  • Suivi présences.xlsx
    15.5 KB · Affichages: 13

Staple1600

XLDnaute Barbatruc
Bonjour

Etape 1
Il faut enregistrer ton classeur au format *.xlsm
(pour conserver les macros)
2) Dans Excel, faire ALT+F11 puis Insertion/Module
Dans le grand carré blanc, coller la macro ci-dessous
VB:
Sub Caseàcocher1_Cliquer()
If [D4] = True Then
Cochez True
Else
Cochez False
End If
End Sub
Public Sub Cochez(statut As Boolean)
Dim c As Object
With ActiveSheet
    .CheckBoxes.Value = statut
    For Each c In .OLEObjects
    If TypeName(c.Object) = "CheckBox" Then c.Object.Value = statut
    Next c
End With
End Sub
Refaire ALT+F11 pour retourner dans Excel.
4) Faire un clic-droit sur la case à cocher en D4
Et choisir Format de contrôle et dans Cellule liée, saisir : $D$4
puis cliquez sur OK
Dernière étape:
Refaire un clic-droit sur la case à cocher et choisir Affecter une macro


PS: Test OK sur mon PC
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16