XL 2013 cacher une feuille de calcul en fonction du contenu d'une cellule

mrdo

XLDnaute Nouveau
Bonjour,

J'aimerai cacher des feuilles en fonction de:

si valeur cellule S3(feuille1) est <à valeur cellule P2 de l'avant avant dernière feuille = cacher l'avant avant dernière feuille
si valeur cellule S3(feuille1) est <à valeur cellule P2 de l'avant dernière feuille = cacher l'avant dernière feuille
si valeur cellule S3(feuille1) est <à valeur cellule P2 de la dernière feuille = cacher la dernière feuille

en une seule formule à mettre dans la page de code de feuille1 ?

ou l'inverse

si valeur P2 de l'avant avant dernière feuille >à S3 feuille1 = cacher l'avant avant dernière feuille
si valeur P2 de l'avant dernière feuille >à S3 feuille1 = cacher l'avant dernière feuille
si valeur P2 de la dernière feuille >à S3 feuille1 = cacher de la dernière feuille

à mettre dans la page de code de chaque feuille concernée

ceci pour cacher les onglets en fonction du nombre de jours dans le mois
31 onglets pour 31 jours, et donc cacher les 3 derniers onglets pour le mois de 28 jrs, les 2 derniers pour 29 jrs, le dernier pour 30 jrs et aucun pour 31 jrs
le nom de chaque onglet change chaque mois (lundi 1, mardi 2, mercredi 3..., c'est pourquoi je ne peux pas nommer la feuille dans la formule.

est-ce possible?
 
Solution
Re,
Pas bien sur d'avoir tout compris.
Je ne comprends pas le "S3(feuille1)", je pense plutôt à G2.
Un essai en PJ.
Quand on modifie G2 de PAGE alors toutes les feuilles dont P2 est supérieur sont masquées.
Par ex si en G2 je met 28 alors les feuilles qui contiennent 29 à 31 sont masquées.
Avec dans PAGE :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [G2]) Is Nothing Then
        Application.ScreenUpdating = False
        For Each F In Worksheets
            If F.Name <> "PAGE" And F.Name <> "PLANNING PROD" Then
                If Sheets(F.Name).[P2] > Target Then
                    Sheets(F.Name).Visible = False
                Else...

mrdo

XLDnaute Nouveau
effectivement, formule c'est plutôt un code vba
je joins un fichier avec 2 onglets
la feuille modifiable est celle nommé "page", les dates du 1 au 31 sont modifiées sur cette feuille uniquement
donc il y a 31 page générées pour les diverses formules et macros.
je n'ai pas trouvé la solution pour le pas généré d'erreur sur les différentes formules qui font apparaitre les dates, si je ne place que 28, 29, ou 30 jours sur la feuille "page"
donc à défaut je voulais masquer les onglets non utilisés
 

Pièces jointes

  • planning prod_2021-02_v0 - CopieTEST.xlsm
    171.6 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Pas bien sur d'avoir tout compris.
Je ne comprends pas le "S3(feuille1)", je pense plutôt à G2.
Un essai en PJ.
Quand on modifie G2 de PAGE alors toutes les feuilles dont P2 est supérieur sont masquées.
Par ex si en G2 je met 28 alors les feuilles qui contiennent 29 à 31 sont masquées.
Avec dans PAGE :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [G2]) Is Nothing Then
        Application.ScreenUpdating = False
        For Each F In Worksheets
            If F.Name <> "PAGE" And F.Name <> "PLANNING PROD" Then
                If Sheets(F.Name).[P2] > Target Then
                    Sheets(F.Name).Visible = False
                Else
                    Sheets(F.Name).Visible = True
                End If
            End If
        Next F
    End If
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • planning prod_2021-02_v0 - CopieTEST.xlsm
    161.6 KB · Affichages: 5

mrdo

XLDnaute Nouveau
hello,

ça marche super bien sur le fichier, j'ai ajouté des feuilles ça fonctionne parfaitement.

merci beaucoup,

il faut que je trouve pourquoi cela ne fonctionne pas sur le fichier original

en tout cas bon boulot, merci sylvanu

je suis pas couché....
 

mrdo

XLDnaute Nouveau
oui, oui je l'ai placé exactement comme sur le fichier test .
le target est bien G2 dans la feuille page
les cibles sont toutes cellules P2 des feuilles autres que "plage" et "planning prod" qui sont cachés si > au target
mais pour l'instant nada, je cherche..
 

mrdo

XLDnaute Nouveau
ça fonctionne , GG

alors, j'ai comparé les projet BVA des 2 fichier, un "module1" existant sur mon fichier et pas sur le fichier test.
rien vu de spécial dans ce module, je l'ai supprimé.
et ça fonctionne depuis.

je vais tester plus en profondeur demain matin, voir si les différentes macro fonctionnent bien, et s'il n'y a pas de bug, mais je suis confiant


bravo et merci SYLVANU
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Ouais, ça, je ne l'avais pas prévu. ;)
Une possibilité est de masquer la feuille si P2 est vide ou si P2=0 avec :
VB:
If Sheets(F.Name).[P2] > Target Or Sheets(F.Name).[P2] = "" Or Sheets(F.Name).[P2] = 0 Then
De cette façon, les feuilles "parasites" sont masquées.
 

Pièces jointes

  • planning prod_2021-02_v0 - CopieTEST2.xlsm
    166.6 KB · Affichages: 2

mrdo

XLDnaute Nouveau
Merci,

Et pour prendre un mot en target (dimanche) ce doit être un peu différent?

et pour les samedis j'aimerai insérer une liste de samedi travaillés (ex samedi 4, samedi 11, ... et les comparer pour cacher les samedis sauf ceux de la liste

merci encore et très bonne journée
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oui, donc c'est pas le même fichier.
En PJ j'ai rajouté la zone des samedis travaillés, les différentes feuilles pour test.
La macro s'exécute sur modification de G2 ou de BB2:BB5.
J'ai rajouté un bouton gris pour faire apparaitre toutes les feuilles et ainsi pouvoir tester.
J'ai ajouté ça à la macro :
VB:
        ' Masque tous les dimanches
        For Each F In Worksheets
            If F.Name <> "PAGE" And F.Name <> "PLANNING PROD" Then
                If F.Name Like "Dimanche*" Then
                    Sheets(F.Name).Visible = False
                End If
            End If
        Next F
        ' Démasque les samedis travaillés
        For Each F In Worksheets
            If F.Name Like "Samedi*" Then
                For N = 2 To 5
                    If Range("BB" & N) <> "" And F.Name Like "*" & Range("BB" & N) Then Sheets(F.Name).Visible = True
                Next N
            End If
        Next F
pour l'action sur le Planning prod, faites un fichier représentatif. Je n'ai nullement envie de le faire, comme ce fut le cas pour la feuille PAGE.
 

Pièces jointes

  • planning prod_2021-02_v0 - CopieTEST3.xlsm
    176.8 KB · Affichages: 5

mrdo

XLDnaute Nouveau
bonsoir,
désolé pour le fichier,
merci pour le code, j'ai testé ce soir, les dimanches cachés ça fonctionne, les samedis à afficher par rapport à la liste ça ne fonctionne pas. Il cache tous les onglets après la date notifié
j'ai préparé un fichier test mais trop lourd pour le déposer ici
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Mdro,
Effectivement les feuilles étaient masquées.
En PJ c'est corrigé.
J'ai rajouté quelques jours, et quelques samedis pour tester.
1638823090160.png
 

Pièces jointes

  • planning prod_2021-02_v0 - CopieTEST4.xlsm
    135.1 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 157
Membres
103 137
dernier inscrit
Billly