[Résolu] Regrouper l'affichage de feuilles

fifine555

XLDnaute Junior
Bonjour et bonne année à tous !

Un petit problème en ce début d'année. (j'ai bien trouvé un sujet identique, mais je n'ai pas réussi à l'appliquer à mon tableau).

J'ai un gros fichier excel pour mes payes, qui contient de nombreuses feuilles. Il y a dans l'ordre :

- 1 feuille "Total"
- 1 feuille "Informations"
- de nombreuses feuilles pour les bulletins (1 feuille par salarié)
- pour chaque mois de l'année : 5 feuilles (global, récap, détail, charges, virements)

L'affichage est très dense et donc je souhaiterais afficher des Méga onglets suivants :
- BULLETINS (regroupe les onglets avec les noms)
- JANVIER (regroupe chaque mois les 5 feuilles du mois)
- FEVRIER
- MARS
-Etc les 12 mois

Que je puisse "développer" puis "regrouper" les "sous-feuilles" des feuilles selon mes besoins.

J'ai crée un fichier excel fidèle à ma base pour bien comprendre, que je vous joins. Et comme ça il est vierge de tous mes essais infructueux... :(

J'avais bien trouvé un topic similaire avec un code en vba, mais qui ne marche pas avec ma quantité d'onglets.

Si quelqu'un pouvait m'aider, ce serait vraiment très sympa ! Merci d'avance et merci pour votre site qui est une mine d'informations...

Bonne soirée
Delphine
 

Pièces jointes

  • Classeur modèle.xlsx
    39.8 KB · Affichages: 42

Hieu

XLDnaute Impliqué
Salut,

Une idée ;

J'ai créé une macro qui affiche par selection :
VB:
Sub selection()
Dim nom As String
Application.ScreenUpdating = False
If IsEmpty(Range("e3")) Then Exit Sub
nom = Range("e3")
num = num_mois(nom)

For Each sh In Sheets
    If sh.Name <> "affichage" And sh.Name <> "Total charges annuelles" And sh.Name <> "Infos salariés" Then sh.Visible = False
Next sh

Select Case nom
    Case "BULLETINS"
        For Each sh In Sheets
        If sh.Tab.Color = 65535 Then sh.Visible = True
        Next sh
    Case Else
        For Each sh In Sheets
        titi = sh.Name
        If sh.Name = nom Or Right(sh.Name, 2) = num Then sh.Visible = True
        Next sh
End Select
End Sub

Une macro qui affiche tout :
VB:
Sub tout_afficher()
Application.ScreenUpdating = False
For Each sh In Sheets: sh.Visible = True: Next sh
End Sub

Une fonction personnalisée pour avoir le 01, 02, etc... en fonction du mois (pas trouvé de fonction excel qui fait ça ?
VB:
Function num_mois(mois) As String
Select Case mois
    Case "JANVIER": num_mois = "01"
    Case "FEVRIER": num_mois = "02"
    Case "MARS": num_mois = "03"
    Case "AVRIL": num_mois = "04"
    Case "MAI": num_mois = "05"
    Case "JUIN": num_mois = "06"
    Case "JUILLET": num_mois = "07"
    Case "AOUT": num_mois = "08"
    Case "SEPTEMBRE": num_mois = "09"
    Case "OCTOBRE": num_mois = "10"
    Case "NOVEMBRE": num_mois = "11"
    Case "DECEMBRE": num_mois = "12"
End Select
End Function


Pour la macro de selection, ce qui aurait été plus simple, c'aurait été d'avoir un indice identique pour chaque groupe :
ex : JANVIER_01, toto_01, etc...
BULLETINS_00, DURAND_00, etc...

Bref, m'en suis sorti avec la fonction perso + la couleur jaune des onglets sur les bulletins.

Reviens vers moi si pas clair, sinon, n'oublie pas de changer l'intitulé de ton post en [Resolu] Intitulé
 

Pièces jointes

  • Classeur modèle_v0.xlsm
    83.8 KB · Affichages: 56

fifine555

XLDnaute Junior
Bonsoir,

Cool, merci de prendre le temps de me répondre :)
Alors je suis plus fortiche en formules qu'en vba, je vais étudier tout ça...


Mais en fait, j'ai crée les onglets des mois pour essayer d'y arriver, je croyais que ce serait plus simple, mais je n'ai pas de données dedans, les feuilles qui me servent sont celles qui ont les indices 01 , 02 , 03 etc..
Et pour les bulletins, je pourrais les nommer "bull DURAND, bull DUPOND etc.. si cela serait plus simple...
 

Hieu

XLDnaute Impliqué
Mon idée c’était de dire :
Par exemple, pour JANVIER : Si ma feuille finit par 01, j'affiche
Du coup, ce que j'ai fait : si ma feuille s'appelle JANVIER ou finit par 01, j'affiche

Et pour les bulletins, comme il n'y a aucune ressemblance, dans le nom, j'ai fait en fonction de la couleur jaune.
 

fifine555

XLDnaute Junior
Ok, je comprends un peu mieux, mais il faut que j'explore toute ton code pour essayer de m'améliorer et bien comprendre, car moi je pensais tout simplement que partir comme ça, avec juste les notions d'affichage, ça allait fonctionner :
Code:
   Private Sub Worksheet_Activate()
    If Sheets("JANVIER").Visible = False Then
    Sheets("recap 01").Visible = True
    Sheets("detail 01").Visible = True
    Sheets("charges").Visible = True
    Else
    Sheets("FEVRIER").Visible = False
    Sheets("recap 02").Visible = False
    Sheets("detail 02").Visible = False
etc etc etc.....

Faut vraiment que je fasse des progrès :):)
J'analyse demain et je reviendrai te poser des questions si besoin, mais en tout cas, le résultat est là ! chapeau :) merci beaucoup !

Je vais me coucher plus apaisée ! lol ! Bonne nuit !
 

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi