Masquer un onglet en fonction du contenu d'une cellule

Krystel2903

XLDnaute Nouveau
Bonsoir à tous,

Je suis toute nouvelle sur le forum et débutante concernant les fonctions d'excel.

Je post sur ce forum pour faire appel à votre aide et vous remercie d'avance pour vos explications.

Voici mon problème :

Je souhaiterais pouvoir masquer un onglet en fonction du contenu d'une cellule.
Sur ma page 1, j'ai un menu déroulant avec comme réponse possibles "oui" ou "non".
Je souhaiterais que si la personne répond "oui" l'onglet 2 se masque et l'onglet 3 s'affiche.
A l'inverse, je souhaiterais si la réponse est "non" l'onglet 3 s'affiche et l'onglet 2 se masque.

Apparemment il faut agir au niveau des codes VBA en macro mais je n'y connais pas grand chose...

Il y a-t-il un moyen de faire cela sans VBA ?

Sinon quel est le code a effectuer ?

Je vous joint un fichier expliquant plus visuellement mon problème.

Merci d'avance
 

Pièces jointes

  • Masquer onglet essai.xlsx
    9.8 KB · Affichages: 40

CPk

XLDnaute Impliqué
Re : Masquer un onglet en fonction du contenu d'une cellule

Bonjour, sans vba, peu probable que ce soit possible où du moins pas à ma connaissance,du coup j'ai fait un petit bout de code que j'ai placé dans le fichier test qu'il faudra faire évoluer (soit l'un soit l'autre). J'ai placé des commentaires qui me paraissent explicite mais je verrais bien à votre tête s'il l'est ou non.


Code:
Private Sub Worksheet_Change(ByVal Target As Range)    'déclencher une action si il y a un changement sur la feuille
    If Not Intersect(Target, Cells(3, 4)) Is Nothing Then    'Si le changement à lieu dans la cellule D3 (intersection de la ligne 3 et de la colonne 4)
        If Target = "oui" Then    'Si la nouvelle c'est "oui" alors
            Feuil2.Visible = xlSheetVisible    'rendre visible la feuil2
            Feuil3.Visible = xlSheetHidden    'masquer la feuil3
        Else    'sinon
            Feuil3.Visible = xlSheetVisible    'rentre visible la feuil3
            Feuil2.Visible = xlSheetHidden    'masquer la feuil2
        End If 'fin de ma première condition
    End If 'fin de ma deuxième condition
End Sub
 

Pièces jointes

  • Masquer onglet essai.xlsm
    15.9 KB · Affichages: 69
Dernière modification par un modérateur:

DoubleZero

XLDnaute Barbatruc
Re : Masquer un onglet en fonction du contenu d'une cellule

Bonjour à toutes et à tous,

Bienvenue sur XLD, Krystel2903.

Une autre suggestion avec le code ci-après, logé dans le module de l'onglet "Feuil1".

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal c As Range)
    If c.Address = "$D$3" Then
        Select Case c
        Case "oui": With Sheets("Feuil2"): .Visible = -1: .Activate: End With: Sheets("Feuil3").Visible = 2
        Case "non": Sheets("Feuil2").Visible = 2: With Sheets("Feuil3"): .Visible = -1: .Activate: End With
        Case Empty: Sheets("Feuil2").Visible = 2: Sheets("Feuil3").Visible = 2
        End Select
    End If
End Sub

A bientôt :)
 

Si...

XLDnaute Barbatruc
Re : Masquer un onglet en fonction du contenu d'une cellule

salut

toujours dans la page de code de la feuille de choix, n'est-ce pas :Dv:D ?
Code:
Private Sub Worksheet_Change(ByVal R As Range)
  If Intersect(R, [D3]) Is Nothing Then Exit Sub 'si pas D3, cellule de la liste de validation, sortie en douce
  Feuil2.Visible = R = "oui": Feuil3.Visible = R = "non"
End Sub
 

Krystel2903

XLDnaute Nouveau
Re : Masquer un onglet en fonction du contenu d'une cellule

Else 'sinon
Feuil3.Visible = xlSheetVisible 'rentre visible la feuil3
Feuil2.Visible = xlSheetHidden 'masquer la feuil2
End If 'fin de ma première condition
End If 'fin de ma deuxième condition
End Sub

[/CODE]

Bonjour CPk,

Merci beaucoup pour ta réponse, et tes commentaires sur le code qui sont bien explicite, je commence à comprendre le fonctionnement de certaines formules.

Cependant, dans la citation ci-dessus, il y aurait-il moyen de remplacer "Else" par un "sinon si" (Else if peut être??), afin que lorsque D3 contient "non" l'onglet 3 s'affiche et l'onglet 2 se masque?
Et que rajouter pour que lorsque D3 est vide, aucun des deux onglet ne s'affiche?

Merci beaucoup d'avance !
cordialement,

Krystel2903
 

Krystel2903

XLDnaute Nouveau
Re : Masquer un onglet en fonction du contenu d'une cellule

Bonjour DoubleZero,

Merci beaucoup pour ton aide !

C'est vraiment presque ça, je m'explique : avec ton code, quand on insert la réponse "oui" ou "non" dans le menu déroulant, on arrive directement sur la feuil2 ou feuil3, or je voudrais que l'onglet s'affiche juste en bas mais que l'on n'y soit pas envoyé directement...

Est-ce possible ?

J'espère être assez explicite :confused:...

Merci d'avance,
cordialement,

Krystel2903
 

Krystel2903

XLDnaute Nouveau
Re : Masquer un onglet en fonction du contenu d'une cellule

salut

toujours dans la page de code de la feuille de choix, n'est-ce pas :Dv:D ?
Code:
Private Sub Worksheet_Change(ByVal R As Range)
  If Intersect(R, [D3]) Is Nothing Then Exit Sub 'si pas D3, cellule de la liste de validation, sortie en douce
  Feuil2.Visible = R = "oui": Feuil3.Visible = R = "non"
End Sub

Bonjour Si... !

Merci du fond du cœur !!!! Ton code est exactement ce que je cherchais, ça fonctionne à merveille dans mon fichier de base!
Super ! !

Cordialement,
Krystel2903
 

CPk

XLDnaute Impliqué
Re : Masquer un onglet en fonction du contenu d'une cellule

Bonjour krystel, double zéro, si..
Krystel, ma macro (en théorie) affiche le contraire d'un cas à l'autre (oui/non) mais les autres codes proposés sont moins académique et prennent en compte le cas sans valeur donc je vous laisse vous diriger vers les autres propositions.

Bon courage à vous.
 

DoubleZero

XLDnaute Barbatruc
Re : Masquer un onglet en fonction du contenu d'une cellule

Bonjour à toutes et à tous,

...je voudrais que l'onglet s'affiche juste en bas mais que l'on n'y soit pas envoyé directement... Est-ce possible ?

Oui, comme ceci :

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal c As Range)
    If c.Address = "$D$3" Then
        Select Case c
        Case "oui": With Sheets("Feuil2"): .Visible = -1: End With: Sheets("Feuil3").Visible = 2
        Case "non": Sheets("Feuil2").Visible = 2: With Sheets("Feuil3"): .Visible = -1: End With
        Case Empty: Sheets("Feuil2").Visible = 2: Sheets("Feuil3").Visible = 2
        End Select
    End If
End Sub

A bientôt :)
 

Si...

XLDnaute Barbatruc
Re : Masquer un onglet en fonction du contenu d'une cellule

re et :D aux intervenants

Quelques explications quand même ;):
Le code est écrit dans la page de code de la feuille : clic bouton droit sur le nom de celle-ci puis sélection de l’option Visualiser le code.

Code:
Private Sub Worksheet_Change(ByVal R As Range)
  Feuil2.Visible = R = "oui": Feuil3.Visible = R = "non"
End Sub

- Private Sub Worksheet_Change(ByVal R As Range)
macro évènementielle prenant en compte le changement de contenu d'une (ou plusieurs) cellule(s) de la feuille
- Feuil2.Visible = …
False (0) ou Vrai(#0) pour cacher ou afficher l’onglet
- R= "oui"
c’est Faux ou True comme l’égalité


Donc Feuil2 ne sera visible que si le contenu de D3 est oui et Feuil3 ne sera visible que si le contenu est non.
 

Discussions similaires

Statistiques des forums

Discussions
312 377
Messages
2 087 738
Membres
103 655
dernier inscrit
MOUNIRACH16