XL 2010 Macro pour décocher toutes les cases à cocher d'une feuille

rosabelle

XLDnaute Junior
Bonjour,

J'aurais besoin d'un coup de pouce :

Sur une feuille j'ai une multitude de cases à cocher.
Pour remettre à zéro cette feuille j'ai besoin entre autres de décocher toutes ces cases en une seule fois.
Quel serait le code qui chercherait toutes les cases à cocher de la feuille et les mettrai en "décoché" systématiquement que l'utilisateur les ait cochées ou pas.
J'ai tenté avec visual basic mais il ne se passe rien.
Merci par avance ;)
 

Pièces jointes

  • Test effacer toutes les cases à cocher de la feuille.xlsm
    17.1 KB · Affichages: 9
Solution
Re

Pour commodité de lecture, je remets le code posté jadis dans la discussion citée dans celle-ci
VB:
Sub test_I()
'coche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez True
End Sub
Sub test_II()
'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

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Issu des Discussions similaires en bas de page

Et pour tout type de CheckBox
 

Staple1600

XLDnaute Barbatruc
Re

Pour commodité de lecture, je remets le code posté jadis dans la discussion citée dans celle-ci
VB:
Sub test_I()
'coche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez True
End Sub
Sub test_II()
'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
 

rosabelle

XLDnaute Junior
Re

Pour commodité de lecture, je remets le code posté jadis dans la discussion citée dans celle-ci
VB:
Sub test_I()
'coche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez True
End Sub
Sub test_II()
'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 @Staple1600 ,

Merci pour ta réponse.
J'ai essayé de mettre :

Sub test_II()
'décoche tous les types de CheckBox
Application.ScreenUpdating = False
Cochez False
End Sub
dans mon fichier et ça me renvoie le message ci-dessous, je rappelle que je veux décocher uniquement toutes les cases à cocher que l'utilisateur a pu cocher :

1656855428557.png

Qu'est ce que je fais mal?
 

Staple1600

XLDnaute Barbatruc
Re

Je viens de retester (sur Office 365)
Le code fonctionne

Testé sur feuille avec deux cases à cocher
(une issue de la BO Formulaire et une autre étant un contrôle ActiveX

Tu as copié tout le code VBA présent dans mon message ? (et ce dans un module standard ?)
 

soan

XLDnaute Barbatruc
Inactif
Bonjour rosabelle, Staple,

note que tes 4 cases à cocher sont cochées ; fais Ctrl d
ça décoche tout, puis ça sauvegarde ton classeur.



@Staple1600 : je crois que rosabelle a uniquement besoin de décocher tout : c'est comme pour parvenir à un formulaire vierge ; elle pourrait aussi utiliser un classeur modèle .xltm où toutes les cases à cocher sont décochées à l'avance.​



code VBA de Module1 (6 lignes) :

VB:
Sub DécocherTout()
  'décocher toutes les cases à cocher
  Worksheets("Feuil1").CheckBoxes = 0
  'sauvegarder ce classeur
  ThisWorkbook.Save
End Sub

soan
 

Pièces jointes

  • Test décocher toutes les cases à cocher de la feuille.xlsm
    19.2 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
Re

Pour tester le code de "cochage/décochage", voici une macro de test
(à exécuter sur une feuille vierge)
VB:
Sub Créér_Test_TOUT()
Dim c As Range, cc As Range, chkBox As CheckBox, ChBx As OLEObject
For Each c In Range("A2:A7")
Set chkBox = Range("A2:A7").Parent.CheckBoxes.Add(0, 1, 1, 0)
 With chkBox
.Top = c.Top + c.Height / 2 - chkBox.Height / 2
.Left = c.Left + c.Width / 2 - chkBox.Width / 2
.Caption = ""
End With
Set cc = c.Offset(, 3)
Set ChBx = ActiveSheet.OLEObjects.Add("Forms.CheckBox.1", Left:=cc.Left, Top:=cc.Top, Width:=cc.Width, Height:=cc.Height)
ChBx.Object.Caption = ""
Next c
End Sub
Cette macro insère des cases à cocher et des CheckBox
(case à cocher de type Formulaire et CheckBox Active X)

Ensuite lance la macro test_I
•Toutes les cases seront cochées
Puis lance la macro test_II
•Toutes les cases seront décochées
 

Staple1600

XLDnaute Barbatruc
Re

soan
Ton code ne décoche que les cases à cocher
Le mien coche/décoche tout les types de case à cocher ;)

NB: Comme c'est une question récurrente sur le forum, depuis le temps, je ne me laisse plus surprendre et je puise dans mes archives.
 

soan

XLDnaute Barbatruc
Inactif
@Staple1600

Ton code ne décoche que les cases à cocher
Le mien coche/décoche tout les types de case à cocher ;)

effectivement, mon code ne décoche pas des cases à cocher de type OleObject, alors que le tien si ; mais comme j'ai téléchargé le classeur de rosabelle, j'ai vu que mon code suffit. :) (j'ai testé ma macro : c'est ok)

j'ai aussi laissé l'instruction de sauvegarde du classeur qui était à l'origine, à part que j'ai préféré mettre ThisWorkbook.Save plutôt que ActiveWorkbook.Save.​

soan
 

Staple1600

XLDnaute Barbatruc
Re

soan
Je m'étais juste focalisé sur
Quel serait le code qui chercherait toutes les cases à cocher

Mais mon passage dans le fil était plus pour rappeler l'existence des Discussions similaires
et surtout ce point de la charte du forum
La charte¸ dans sa grande sagesse¸ un soir à dit:
2.1 – Un outil de recherche sur le forum permet de voir si la question a déjà été posée.
Ne pas hésiter à l’utiliser.

Car la réponse à la question du message#1 dormait sous la poussière des archives du forum. ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

=>rosabelle
Tu peux expliquer comment tu as testé le code du message#3, stp ?
Car je n'arrive pas à reproduire l'erreur que tu as mis en copie d'écran.

Sauf si il manque dans le module cette partie du code VBA
VB:
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
 

rosabelle

XLDnaute Junior
Bonjour rosabelle, Staple,

note que tes 4 cases à cocher sont cochées ; fais Ctrl d
ça décoche tout, puis ça sauvegarde ton classeur.



@Staple1600 : je crois que rosabelle a uniquement besoin de décocher tout : c'est comme pour parvenir à un formulaire vierge ; elle pourrait aussi utiliser un classeur modèle .xltm où toutes les cases à cocher sont décochées à l'avance.​



code VBA de Module1 (6 lignes) :

VB:
Sub DécocherTout()
  'décocher toutes les cases à cocher
  Worksheets("Feuil1").CheckBoxes = 0
  'sauvegarder ce classeur
  ThisWorkbook.Save
End Sub

soan
@Staple1600



effectivement, mon code ne décoche pas des cases à cocher de type OleObject, alors que le tien si ; mais comme j'ai téléchargé le classeur de rosabelle, j'ai vu que mon code suffit. :) (j'ai testé ma macro : c'est ok)

j'ai aussi laissé l'instruction de sauvegarde du classeur qui était à l'origine, à part que j'ai préféré mettre ThisWorkbook.Save plutôt que ActiveWorkbook.Save.​

soan
Désolée , je viens de coller le code de @soan du post 6 dans mon fichier et ça ne fonctionne plus, mis dans un module , je suis nulle....
Dans mon fichier j'ai des cases de ce type:
1656863558888.png

J'ai mis ceci sur 1 module :
1656863376752.png
 

Staple1600

XLDnaute Barbatruc
Re

soan
Peu importe le code qui sera choisi

Moi, je vais mal dormir, si cette contre-vérité reste publiée sur le forum
(Oui, je parle de celle qui "me nargue" depuis 10h07 ce matin)

Je sais mon code fonctionnel, je voudrais donc avant de me brosser les dents et d'enfiler mon pyjama que Rosabelle corrige le message#4 en l'éditant.
Pour enfin (après avoir copier/coller le bout manquant (là je suppute ;)) -> voir message#11) qu'elle arrive à faire fonctionner mon VBA.

Ainsi j'aurais le sommeil léger et le teint frais demain matin. ;)
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla