La macro suivante se situant sur la feuille 1, me permet de masquer la feuille 2 lorsque je choisis "Non" dans ma liste déroulante se situant en Q12 et de l'afficher lorsque je choisis "Oui".
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim titre As Variant
titre = Range("Q12")
If Not Intersect(Target, Range("Q12")) Is Nothing Then
Select Case titre
Case Is = "Oui"
Sheets("titre").Visible = True
Case Is = "Non"
Sheets("titre").Visible = False
End Select
End If
End Sub
J'aimerais utiliser la même macro sur la même feuille, soit la feuille 1, mais j'aimerais qu'elle me permette de masquer la feuille 3 lorsque je choisis "Non" dans une nouvelle liste déroulante se situant en Q43 et d'afficher la feuille 3 lorsque je choisi "Oui" en Q44.
Option Explicit: Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .CountLarge > 1 Then Exit Sub
If .Address = "$Q$12" Then
Worksheets("titre").Visible = (.Value = "Oui")
ElseIf .Address = "$Q$44" Then
Worksheets("Feuil3").Visible = (.Value = "Oui")
End If
End With
End Sub
Option Explicit: Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .CountLarge > 1 Then Exit Sub
If .Address = "$Q$12" Then
Worksheets("titre").Visible = (.Value = "Oui")
ElseIf .Address = "$Q$44" Then
Worksheets("Feuil3").Visible = (.Value = "Oui")
End If
End With
End Sub
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Dim titre As Variant
If Not Intersect(Target, [Q12]) Is Nothing Then
If [Q12] = "OUI" Then: Sheets("Feuil2").Visible = True: Else Sheets("Feuil2").Visible = False
End If
If Not Intersect(Target, [Q43]) Is Nothing Then
If [Q43] = "OUI" Then Sheets("Feuil3").Visible = True Else Sheets("Feuil3").Visible = False
End If
Fin:
End Sub
NB: je ne comprends pas comment votre macro fonctionne car Sheets("titre").Visible = False avec des guillemets c'est une chaine qui vaut titre et non le contenu de la variable titre.
pour le 2ème, j'ai oublié de mettre "Non" au lieu de "Oui" !
ça donne :
VB:
Option Explicit: Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .CountLarge > 1 Then Exit Sub
If .Address = "$Q$12" Then
Worksheets("titre").Visible = (.Value = "Oui")
ElseIf .Address = "$Q$44" Then
Worksheets("Feuil3").Visible = (.Value = "Non")
End If
End With
End Sub
si c'est ok, tant mieux ! sinon :
* as-tu bien mis Option Compare Text à droite de Option Explicit ?
* précise au juste ce qui ne va pas
* éventuellement, joins un fichier exemple (sans données confidentielles)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Dim titre As Variant
If Not Intersect(Target, [Q12]) Is Nothing Then
If [Q12] = "OUI" Then: Sheets("Feuil2").Visible = True: Else Sheets("Feuil2").Visible = False
End If
If Not Intersect(Target, [Q43]) Is Nothing Then
If [Q43] = "OUI" Then Sheets("Feuil3").Visible = True Else Sheets("Feuil3").Visible = False
End If
Fin:
End Sub
NB: je ne comprends pas comment votre macro fonctionne car Sheets("titre").Visible = False avec des guillemets c'est une chaine qui vaut titre et non le contenu de la variable titre.
C'est exactement ce que je veux faire, mais dès que je copie ton code et que je le colle sur mon doc ca ne marche plus...
Je ne comprend pas pourquoi ...
pour le 2ème, j'ai oublié de mettre "Non" au lieu de "Oui" !
ça donne :
VB:
Option Explicit: Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .CountLarge > 1 Then Exit Sub
If .Address = "$Q$12" Then
Worksheets("titre").Visible = (.Value = "Oui")
ElseIf .Address = "$Q$44" Then
Worksheets("Feuil3").Visible = (.Value = "Non")
End If
End With
End Sub
si c'est ok, tant mieux ! sinon :
* as-tu bien mis Option Compare Text à droite de Option Explicit ?
* précise au juste ce qui ne va pas
* éventuellement, joins un fichier exemple (sans données confidentielles)
Essayez avec ce code, il est insensible à la casse :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Dim titre As Variant
If Not Intersect(Target, [Q12]) Is Nothing Then
If LCase([Q12]) = "oui" Then: Sheets("Feuil2").Visible = True: Else Sheets("Feuil2").Visible = False
End If
If Not Intersect(Target, [Q43]) Is Nothing Then
If LCase([Q43]) = "oui" Then Sheets("Feuil3").Visible = True Else Sheets("Feuil3").Visible = False
End If
Fin:
End Sub
Essayez avec ce code, il est insensible à la casse :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Dim titre As Variant
If Not Intersect(Target, [Q12]) Is Nothing Then
If LCase([Q12]) = "oui" Then: Sheets("Feuil2").Visible = True: Else Sheets("Feuil2").Visible = False
End If
If Not Intersect(Target, [Q43]) Is Nothing Then
If LCase([Q43]) = "oui" Then Sheets("Feuil3").Visible = True Else Sheets("Feuil3").Visible = False
End If
Fin:
End Sub