Cacher des sous-onglets si onglet principal inactif - Resolue

kris12

XLDnaute Nouveau
Bonjour a tous,

Apres avoir fouiller d'anciens posts sur des sujets plus ou moins equivalents je n'ai pas reussi a adapter les reponses donnees a mon probleme.


J'ai une feuille excel avec 3 onglets appeles: Onglet 1, Onglet 2 et Onglet 3.

J'ai ensuite d'autres onglets que j'appelerais "sous-onglets" pour chacun des trois onglets principaux mentionnes ci-dessus

Onglet 1:

Onglet 1_1
Onglet 1_2
Onglet 1_3

Onglet 2:

Onglet 2_1
Onglet 2_2
Onglet 2_3

Onglet 3:

Onglet 3_1
Onglet 3_2
Onglet 3_3

Je souhaiterais masquer les "sous-onglets" lorsque l'onglet principal n'est pas selectionne, c'est-a-dire que lorsque je selectionne "Onglet 1" je veux que les sous-onglets Onglet 1_1, Onglet 1_2 et Onglet 1_3 soient visible mais dans le meme temps les autres sous-onglets soient masques.

Merci d'avance. Je ne pense pas que ce soit super complique a resoudre mais ma maitrise de VBA est... limitee

PS: Desole pour les accents je suis sur un clavier qwerty
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Cacher des sous-onglets si onglet principal inactif

Bonsoir kris12, camarchepas,

A placer dans ThisWorkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim s As Object
For Each s In Sheets
  s.Visible = IIf(Not s.Name Like "*#_#*" Or s.Name Like "*#_#*" _
    And s.Name Like Sh.Name & "*", xlSheetVisible, xlSheetVeryHidden)
Next
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Cacher des sous-onglets si onglet principal inactif

Re,

Avec un test de plus et un test de moins ceci va mieux :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim s As Object
If Sh.Name Like "*#_#*" Then Exit Sub
For Each s In Sheets
  s.Visible = IIf(Not s.Name Like "*#_#*" Or _
    s.Name Like Sh.Name & "*", xlSheetVisible, xlSheetVeryHidden)
Next
End Sub
A+
 
Dernière édition:

kris12

XLDnaute Nouveau
Re : Cacher des sous-onglets si onglet principal inactif

Camarchepas, Job75,

Merci bcp pour votre aide. Ca marche tres bien maintenant. J'ai utilise la deuxieme solution que j'ai tres legerement readapte du fait que je n'utilise pas de numero d'onglet comme dans mon exemple mais des noms.

J'avais effectivement trouve des questions avec le meme type de reponses mais que je n'arrivais pas a adapter car je n'ai pas tres bien compris le role que joue les fonctions InStr ou Sh.Name. Si vous pouvez m'eclairer sur ce sujet ca serait tres apprecie sinon dois-je indiquer qq part que le probleme a ete resolu et fermer la thread?

Merci encore

Kris12
 

camarchepas

XLDnaute Barbatruc
Re : Cacher des sous-onglets si onglet principal inactif

Bonjour Kris,

Alors si tu place le curseur souris sur ton mot clé et que tu appuies sur [F1] , tu as droit à l'aide contextuelle, qui logiquement doit t'éclairer .

Bon Pour Instr , job préfére utiliser Like mais bon :
- Instr
Renvoie une valeur de type Variant (Long) indiquant la position de la première occurrence d'une chaîne à l'intérieur d'une autre
chaîne.
Voir l'aide pour complément
- Like
Permet de comparer deux chaînes.
Voir l'aide pour complément

et sh.name
vient de la variable implémentée par l'événementiel SheetActivate permettant de savoir l'object feuille activée

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

et donc le sh.name permet d'avoir le nom de la feuille activée à l'intérieur bien sur de cette procédure.


Pour fermer la discussion , reprends le 1er post de la discussion et dans le titre mets : Résolue


Bon courage pour la suite
 

kris12

XLDnaute Nouveau
Re : Cacher des sous-onglets si onglet principal inactif

Bonjour Kris,

Alors si tu place le curseur souris sur ton mot clé et que tu appuies sur [F1] , tu as droit à l'aide contextuelle, qui logiquement doit t'éclairer .

Bon Pour Instr , job préfére utiliser Like mais bon :
- Instr
Renvoie une valeur de type Variant (Long) indiquant la position de la première occurrence d'une chaîne à l'intérieur d'une autre
chaîne.
Voir l'aide pour complément
- Like
Permet de comparer deux chaînes.
Voir l'aide pour complément

et sh.name
vient de la variable implémentée par l'événementiel SheetActivate permettant de savoir l'object feuille activée

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

et donc le sh.name permet d'avoir le nom de la feuille activée à l'intérieur bien sur de cette procédure.


Pour fermer la discussion , reprends le 1er post de la discussion et dans le titre mets : Résolue


Bon courage pour la suite


Merci Camarchepas pour cette explication tres Claire. J'essairai de m'aider plus de l'aide comme indique.
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 616
Membres
103 607
dernier inscrit
lolo1970