XL 2016 utilisation de la macro "worksheet_change" plusieurs fois dans la même feuille

jannine NOLAM

XLDnaute Nouveau
Bonjour tout le monde,

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.

Pouvez vous m'aider s'il vous plaît ?

Merci d'avance pour votre aide.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour jannine,

je te propose ce code VBA :

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 = "Oui")
    End If
  End With
End Sub

soan
 

jannine NOLAM

XLDnaute Nouveau
Bonjour jannine,

je te propose ce code VBA :

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 = "Oui")
    End If
  End With
End Sub

soan
Bonjour Soan,
Ca ne marche pas...
Merci quand même ;)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jannine,
Un essai en PJ avec :
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 [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.
 

Pièces jointes

  • Classeur1.xlsm
    15.5 KB · Affichages: 14

soan

XLDnaute Barbatruc
Inactif
@jannine NOLAM (salut sylvanu)

:oops: ooooppppss !

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)

soan
 

jannine NOLAM

XLDnaute Nouveau
Bonjour Jannine,
Un essai en PJ avec :
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 [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.
Bonjour à toi,

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 ...

Merci quand même pour ton aide :)
 

jannine NOLAM

XLDnaute Nouveau
@jannine NOLAM (salut sylvanu)

:oops: ooooppppss !

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)

soan
J'ai le malheur de t'annoncer que ca ne marche pas non plus... Pour le fichier, la PJ de sylvanu est très bien. :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

Pièces jointes

  • Classeur1 (32).xlsm
    15.5 KB · Affichages: 5

jannine NOLAM

XLDnaute Nouveau
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
Ca ne marche toujours pas...
 

Discussions similaires

Statistiques des forums

Discussions
315 058
Messages
2 115 812
Membres
112 550
dernier inscrit
tomate02