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.
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
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
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 v ?
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
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
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?
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...
toujours dans la page de code de la feuille de choix, n'est-ce pas v ?
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
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.
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
Re : Masquer un onglet en fonction du contenu d'une cellule
re et 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.