XL 2016 Masquer des onglets en fonction de la valeur d'une cellule

Pistoufle12

XLDnaute Junior
Bonsoir

Je reviens vers vous pour de l'aide afin d'améliorer mon fichier.

Je vous explique, pour l'organisation d'un concours et en fonction du nombre de participant, on fait le choix ou non d'organiser la phase des 1/4 de finale !
Lorsqu'on saute cette étape on passe directement des phases de qualification aux 1/2 finale mais malheureusement, les onglets des 1/4 restent visible et sont source d'erreur et surcharge visuellement le fichier !

Je souhaiterais donc une Macro afin que ces onglets soit masqué (Feuilles 4/5/6) en fonction de la valeur saisie ("x") dans une cellule (AC3) présente sur ma première feuille.

J'ai fait des recherches et fait des essais mais je n'y arrive pas !!

Merci d'avance de votre aide

A bientôt, amicalement Christophe
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @Pistoufle12 , le Forum

Une idée comme ça....

VB:
Option Explicit

Sub cACHEcACHE()
Dim i As Byte
Dim NBparticipants As Byte

NBparticipants = ThisWorkbook.Worksheets(1).Range("AC3")

For i = 1 To ThisWorkbook.Worksheets.Count
    If NBparticipants <= 10 Then ' <<<<  à ajuster limite ..........
        Select Case i
        Case 4, 5, 6
            ThisWorkbook.Worksheets(i).Visible = xlSheetHidden
        End Select
    Else
        Select Case i
        Case 4, 5, 6
            ThisWorkbook.Worksheets(i).Visible = xlSheetVisible
        End Select
    End If
Next i

End Sub

NB il faut au moins qu'il y ait 6 onglets dans le classeur pour tester.

Bonne soirée
@+Thierry
 

Pistoufle12

XLDnaute Junior
Merci Thierry pour ta réponse rapide

je vais regarder et tester

Mais en fait il ne faut pas s'embêter du nombre de participants.

Car le choix de faire des 1/4 de finale ou pas, peu être aussi arbitraire de la part de l'organisateur !

L'idée c'est que si l'option 1/4 de finale est coché "x" en AC3 les onglets spécifique apparaissent
et si c'est pas coché les onglets sont masqué

Merci
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonsoir

Alors version classée "X" LoL ;)

VB:
Option Explicit

Sub cACHEcACHE_xXx()
Dim i As Byte
Dim NBparticipants As String

NBparticipants = UCase(ThisWorkbook.Worksheets(1).Range("AC3"))

For i = 1 To ThisWorkbook.Worksheets.Count
    If NBparticipants <> "X" Then
        Select Case i
        Case 4, 5, 6
            ThisWorkbook.Worksheets(i).Visible = xlSheetHidden
        End Select
    Else
        Select Case i
        Case 4, 5, 6
            ThisWorkbook.Worksheets(i).Visible = xlSheetVisible
        End Select
    End If
Next i

End Sub

Re Bonne soirée
@+Thierry
 

Pistoufle12

XLDnaute Junior
Merci
je suis arrivé a le faire fonctionné mais j'ai un souci !

quand je mets

If NBparticipants <> "X" Then

je fais bien disparaitre les onglets en laissant la case AC3 vide
mais impossible de les faire réapparaitre en tapant "x"

quand je mets

If NBparticipants = "X" Then

je fais bien apparaitre les onglets en tapant "x" dans AC3
mais impossible de les faire réapparaitre en laissant la case AC3 vide

et est il possible d'automatiser cette macro sans bouton ?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re,

je fais bien disparaitre les onglets en laissant la case AC3 vide
mais impossible de les faire réapparaitre en tapant "x"

Avec cette instruction :
VB:
NBparticipants = UCase(ThisWorkbook.Worksheets(1).Range("AC3"))

Que tu tapes "x" ou "X" dans AC3 c'est la même chose , les onglet sont "xlSheetVisible"

Si c'est vide, c'est donc <> "X" (ou de "x") et donc "xlSheetHidden"... Vide n'étant PAS une valeur selon ta demande :
si l'option 1/4 de finale est coché "x" en AC3 les onglets spécifique apparaissent
et si c'est pas coché les onglets sont masqués...........
................


Pour le faire sans bouton, à mettre dans le Private Module de Feuille (la Feuille où il y a "AC3") en tant que macro évènementielle sur le Trigger "Change"...

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Byte
Dim NBparticipants As String

If Target.Address = "$AC$3" Then

NBparticipants = UCase(Target)

    For i = 1 To ThisWorkbook.Worksheets.Count
        If NBparticipants <> "X" Then
            Select Case i
            Case 4, 5, 6
                ThisWorkbook.Worksheets(i).Visible = xlSheetHidden
            End Select
        Else
            Select Case i
            Case 4, 5, 6
                ThisWorkbook.Worksheets(i).Visible = xlSheetVisible
            End Select
        End If
    Next i

End If

End Sub

NB pas dans un module standard ("Module1") mais bien dans celui de la Feuille en question.

Re re Bonne Soirée
@+Thierry
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 069
Messages
2 085 037
Membres
102 762
dernier inscrit
Ucef