Boucle sur checkBox pour afficher/masquer des feuilles

Bonjour,

Je dois créer un registre, avec en première page, la liste intégrale des fiches registres construite sur différentes feuilles(onglets).

Ce registre va rapidement atteindre plus de 200 feuilles, voir plus.

Je souhaite donc faire apparaitre ces feuilles en cochant la case correspondante.

J'ai bien réussi, avec mes faibles compétences de dev, à sortir quelque chose, mais ce n'est vraiment pas optimisé...

pour les checker toutes:

Private Sub CheckBox1_Click()
  Set ws = ActiveSheet
    If CheckBox1.Value = True Then
    Range("A4").Interior.ColorIndex = 3

    For Each oj In ws.OLEObjects
    If TypeName(oj.Object) = "CheckBox" Then
        oj.Object.Value = True
    End If
    Next oj
    Else
    Range("A4").Interior.ColorIndex = 0
    For Each oj In ws.OLEObjects
    If TypeName(oj.Object) = "CheckBox" Then
    oj.Object.Value = False
    End If
    Next oj
    End If

Puis ou afficher/masquer les onglets, ce simple code sur chaque chekbox:

Private Sub CheckBox2_Click()
    If CheckBox2 = True Then
        Range("A5").Interior.ColorIndex = 3
        Feuil98.Visible = True
    Else
        Range("A5").Interior.ColorIndex = 0
        Feuil98.Visible = False
    End If

End Sub

Avec mise en couleur de la cellule pour mieux se repérer.

J'imagine qu'il y a moyen de boucler les checkbox avec un compteur....mais hélas..je suis à la ramasse.

Sachant que des fiches registres vont s'ajouter régulièrement, il faudrait, au mieux, pouvoir ajouter ces fiches simplement..

Auriez vous une solution?

Merci d'avance.

6classeur1.xlsx (24.73 Ko)

Bonjour Jean, bonjour le forum,

En pièce jointe, ton fichier modifié.

Clic du bouton droit sur A1 pour masquer/afficher tous les onglets.

Double-clic sur une cellule dans la colonne A des lignes 2 à 8 pour masquer/afficher l'onglet correspondant...

Le code :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim DL As Integer
Dim PL As Range
Dim CEL As Range

Application.ScreenUpdating = False
DL = Cells(Application.Rows.Count, "B").End(xlUp).Row
Set PL = Range("A2:A" & DL)
If Application.Intersect(Target, PL) Is Nothing Then Exit Sub
Cancel = True
Target.Value = IIf(Target.Value = "", "X", "")
For Each CEL In PL
    Worksheets(CEL.Offset(0, 3).Value).Visible = CEL.Value = "X"
Next CEL
Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim DL As Integer
Dim PL As Range
Dim CEL As Range

Application.ScreenUpdating = False
If Target.Address <> "$A$1" Then Exit Sub
Cancel = True
Target.Value = IIf(Target.Value = "", "X", "")
DL = Cells(Application.Rows.Count, "B").End(xlUp).Row
Set PL = Range("A2:A" & DL)
PL.Value = IIf(Range("A1").Value = "X", "X", "")
For Each CEL In PL
    Worksheets(CEL.Offset(0, 3).Value).Visible = CEL.Value = "X"
Next CEL
Application.ScreenUpdating = True
End Sub

Le fichier :

10jean-ep-v01.xlsm (25.61 Ko)

Parfait !

Donc, dans cet état, le DoubleClick ouvre bien la feuille dont le nom correspond à la colonne D (REF)

et l'ajout de ligne est infini j'imagine?

par contre, quand je clique droit sur A1, pour tout cocher, il m’envoie sur une autre feuille, pas toujours la même sans comprendre pourquoi..

il semblerait que ce soit la dernière modif réaliser sur les Refs.

Pour décocher l'ensemble, pas de problème...

autre chose, si admettons je veux prendre une autre colonne de référence, comment modifier votre code?

Merci beaucoup

2 jours a parcourir le web à la recherche d'info, résolu en quelques minutes grâce à vous...Bravo.

Re,

et l'ajout de ligne est infini j'imagine?

par contre, quand je clique droit sur A1, pour tout cocher, il m’envoie sur une autre feuille, pas toujours la même sans comprendre pourquoi..

il semblerait que ce soit la dernière modif réaliser sur les Refs.

Oui j'ajout de lignes est infini.

Le clic-droit sur A1 ne renvoie nulle part chez moi !?... Il ne fait qu'Afficher/Masquer tous les onglets. Je ne comprends pas ce qui se passe chez toi ?

[Édition]

je n'avais pas lu ta demande pour prendre une autre colonne en compte. Il te faut adapter le décalage avec la colonne A dans Offset(0, 3). Le 3 ici correspond à un décalage de trois colonnes par rapport à la colonne A, soit la colonne D...

oui, c'est étonnant, dés que je doucleClick sur A1 pour tout cocher, en l'état il m'envoie sur la feuille Ref-F...

Merci pour l’édition, c'est ce que j'avais testé, sans succès...je rééssaierai.

Re,

Le Double-Clic sur A1 n'a pas d'effet, sinon de passer en mode Édition. C'est le Clic Droit qui réagit...

Si tu as recopié le code, prend garde à la plage PL qui commence toujours à la ligne 2 (A2:A...) pour éviter justement un problème avec A1.

Oui pardon, le click Droit sur A1 renvoi sur une feuille mais les cases se cochent bien.

Décocher toutes les cases ne pose pas de problème.

Possible que cela vienne d'Excel 16 Pro?

Idem quand je veux prendre comme référence la colonne C, donc en offset (0; 2), et renommé l'onglet en A , ça affiche/cache bien l'onglet, mais une erreur apparait:

Edit: Par contre inversement, lorsque je rajoute une colonne entre elles, et donc agrandi l'offset à 4, pour la colonne E qui reste les REFs, pas de problème.

capture

j'ai plusieurs erreurs que je ne comprends évidemment pas...

Re,

C'est normal ! Tu boucles sur toutes les lignes et certains onglets n'existent pas (ref-F, ref-G, ref-H, ref-I) ! Donc ça plante.

Il faut impérativement que pour tous les noms de la colonne E il y ait un onglet portant EXACTEMENT ce nom... Ou alors il faut modifier le code...

Je ne comprends pas que tu ne comprennes pas ça ?!...

Je ne comprends pas que tu ne comprennes pas ça ?!...

Oui, exacte..suis passé à côté...

Rechercher des sujets similaires à "boucle checkbox afficher masquer feuilles"