Cocher toutes les checkbox d'une colonne en fonction de l'etat de la premiere{RESOLU}

popcorn

XLDnaute Junior
Bonjour à tous,

Je cherche a cocher toutes les checkbox d'une colonne si la première de la liste est coché, puis inversement.

J'imagine que c'est quelque chose de classique, du moins traiter plusieurs fois. Pourtant, je ne trouve rien qui me convienne. J'ai pas mal écumer le net et les forums. Peut etre que la solution est très simple du coup, personne n'en parle..
Il faut bien dire également que mon niveau vba est bien bas.

J'ai trouvé des codes pour sélectionner l'ensemble des checkbox du document mais pas pour une série de checkbox que je sélectionnerai moi même.

J'ai une autre contrainte, je suis sur Mac (mon fichier circule entre PC/Mac), du coup je ne peux pas utiliser des checkbox en ActiveX, cela ne marche pas.

J'ai pensé a faire ca pour le moment :

Ce code pour sélectionner toutes les checkbox si leur nom commence par Electric...

Code:
Sub select_all_electric()
For Each CheckBox In ActiveSheet.Shapes
If CheckBox.Name Like "Electric*" Then CheckBox.ControlFormat.Value = True
Next CheckBox
End Sub
C'est pas bien terrible comme solution car il me faut une case a cocher pour désélectionner. J'ai plusieurs colonne.

Je sais pas comment je pourrai traduire ce code en vba :
Si CheckBox 1 cocher, alors cocher toutes les checkbox de 2 a 7 sinon décocher.

Si quelqu'un pourrai m'aiguiller.

Merci
 

Fichiers joints

Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Cocher toutes les checkbox d'une colonne en fonction de l'etat de la premiere

Bonjour popcorn,

Pas certain d'avoir compris ... si la même case d'en-tête doit permettre de sélectionner/désélectionner toutes celles de la série, essaie
VB:
Sub select_all_electric()
For Each CheckBox In ActiveSheet.Shapes
If CheckBox.Name Like "Electric*" Then CheckBox.ControlFormat.Value = Me.Shapes("CheckBox 1").ControlFormat.Value
Next CheckBox
End Sub
Ça fonctionne sur Excel 2010 (PC), mais qu'en sera-t-il du MAC, je l'ignore!?
 

popcorn

XLDnaute Junior
Re : Cocher toutes les checkbox d'une colonne en fonction de l'etat de la premiere

Bonjour Modeste,

Merci pour ta réponse. J'ai peut être pas été très clair.

En effet, la même case d'en-tête doit permettre de sélectionner/désélectionner toutes celles de la série. C'est exactement ce que je souhaite.

J'ai du remplacer ton code Me.Shapes par ActiveSheet.Shapes et ça marche!! Merci.

Code:
Sub select_all_electric()
For Each CheckBox In ActiveSheet.Shapes
If CheckBox.Name Like "Electric*" Then CheckBox.ControlFormat.Value = ActiveSheet.Shapes("CheckBox 1").ControlFormat.Value
Next CheckBox
End Sub
Cela me renvoyer une erreur : Cet objet ne gère pas cet action.

Merci encore Modeste, c'est parfait.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Cocher toutes les checkbox d'une colonne en fonction de l'etat de la premiere

Bonjour à tous :),

Mise en pratique:
Juste pour le fun, à condition que les noms des checkbox d'une colonne aient le même préfixe. Pour renommer en masse les checkbox d'une même colonne, voir le fichier joint et la macro RenommerSelection().
 

Fichiers joints

Dernière édition:

popcorn

XLDnaute Junior
Re : Cocher toutes les checkbox d'une colonne en fonction de l'etat de la premiere

Bonjour mapomme,

Waow, j'en demandais pas tant! C'est nickel, je vais regarder ton code de plus près.
Merci, pour ce que vous faites.

Au passage un bout de code pour insérer des CheckBox liee à la cellule juste dessous.

Sélectionnez les cellules sur lesquelles vous voulez superposer une CheckBox et lancé la macro.

D’ailleurs, j'aime bien les tiennes mapomme.

Code:
Sub Inserer_Cases_a_cocher_Liees()
Dim rngCel As Range
Dim ChkBx As CheckBox

For Each rngCel In Selection
  With rngCel.MergeArea.Cells
    If .Resize(1, 1).Address = rngCel.Address Then
    'Pour ne pas afficher la valeur de la cellule liée, enlevez l'apostrophe en début de ligne suivante :
      '.NumberFormat = ";;;"
      Set ChkBx = ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height)
      With ChkBx
        'valeur par défaut :
        .Value = xlOff 'pourrait être True ou False
        'cellule liée
        .LinkedCell = rngCel.MergeArea.Cells.Address
        'Texte de remplacement
        '.Characters.Text = "TITI"
        'texte
        '.Text = "Toto" ' ou : .Caption = "Toto"
        'bordure :
        With .Border
          'Style de ligne
          '.LineStyle = xlLineStyleNone 'ou xlContinuous 'ou xlDashDot ou xlDashDotDot ou xlDot
          'couleur
          '.ColorIndex = 3  '3 = rouge
          'épaisseur du trait
          '.Weight = 4
        End With
        'accessibles aussi les propriétés .Locked, .Name, .Enabled etc...
      End With
    End If
  End With
Next rngCel
End Sub

Merci
 

Discussions similaires


Haut Bas