Grosse lacune avec code VBA pour masquer ou afficher une feuille

Bonjour

J'ai créé ce code en espérant masquer ou afficher la feuille Tableau

ou se trouve mon erreur

Je vous remercie

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Worksheets(Poule1).Range("T9" > 0.2) Then Worksheets("Tableau").Visible = False
If Worksheets(Poule1).Range("T9" = 0.2) Then Worksheets("Tableau").Visible = True

End Sub

C'est résolu voici la solution

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Afficher ou masquer Sheet2 suivant la valeur t9 de Sheet Poule1
If Sheets("Poule1").Range("T9").Value > 0.2 Then
Sheets("Tableau").Visible = False
Else
If Sheets("Poule").Range("T9").Value = 0.2 Then
Sheets("Tableau").Visible = True
End If
End If
End Sub

Bonjour Joco7915,

La bonne syntaxe :

If Worksheets(Poule1).Range("T9").Value > 0.2 Then
   Worksheets("Tableau").Visible = False
ElseIf Worksheets(Poule1).Range("T9").Value = 0.2 Then
   Worksheets("Tableau").Visible = True
End If

Le ElseIf permet d'éviter de faire un test pour rien (si > 0.2 est vérifié alors = 0.2 ne le sera jamais) par contre si la valeur est < à 0.2 ? (peut être que cela ne peut pas se produire).

Autre point : l'affichage / masquage de la feuille se déclenche au changement de la sélection d'une cellule. Cela ne devrait pas plutôt être consécutif au changement de valeur d'une ou plusieurs cellules déterminées ?

Cdlt,

Cylfo

Bonsoir Cylfo

merci pour tes précisions

En effet il faudrait que la macro se déclenche au changement de valeur de T9

Re,

Dans ce cas, il faut utiliser l'évènement Worksheet_Change et :

1 - Si T9 est saisi => vérifier que la cellule modifiée correspond à T9

Private Sub Worksheet_Change(ByVal Target As Range)
   ' Vérifier que la cellule modifiée est bien T9 (donc l'intersection entre target et T9 ne sera pas nulle)
   If Not (Application.Intersect(Target, ActiveSheet.Range("T9")) Is Nothing) Then
      'Afficher ou masquer Sheet2 suivant la valeur de T9
      If Target.Value > 0.2 Then
         Sheets("Tableau").Visible = False
      ElseIf Target.Value = 0.2 Then
         Sheets("Tableau").Visible = True
      End If
   End If
End Sub

2 - Si T9 est la résultante d'un calcul (dans l'exemple, T9 est calculé en fonction de C9:

Private Sub Worksheet_Change(ByVal Target As Range)
   ' Vérifier que la cellule modifiée est bien C9 (donc l'intersection entre target et C9 ne sera pas nulle)
   If Not (Application.Intersect(Target, ActiveSheet.Range("C9")) Is Nothing) Then
      'Afficher ou masquer Sheet2 suivant la valeur de T9 Sheet1
      If ActiveSheet.Range("T9").Value > 0.2 Then
         Sheets("Tableau").Visible = False
      ElseIf ActiveSheet.Range("T9") = 0.2 Then
         Sheets("Tableau").Visible = True
      End If
   End If
End Sub

Cdlt,

Cylfo

Bonjour Cylfo

J'ai tenté le deuxième code vba que tu as mis dans ton post précédent en rectifiant une ligne

puisque T9 est le résultat de la plage V10:Y12 ,et bien sur cela ne fonctionne pas

If Not (Application.Intersect(Target, ActiveSheet.Range("V10:Y12")) Is Nothing) Then   

Merci pour ton aide

Bonjour Joco7915,

J'ai testé avec une formule en T9 "=SOMME(V10:Y12)" et le résultat quand tu additionnes 0,2 + 0 ne donne visiblement pas tout à fait 0,2 (*). Parade faire dans le code VBA une comparaison en arrondissant T9 à n décimales (dans le fichier joint j'ai mis 10) mais c'est peut-être à ajuster (plutôt à la baisse) en fonction du calcul que tu fais. Une autre possibilité (mais cela fausserait peut-être ton calcul) si tu arrondi le résultat de T9 à 1 décimale le code que tu as modifié fonctionne.

* En ayant comme résultat en [T9] 0,2 et il n'y a pas plus d'une décimale puisque j'ai additionné des nombres n'ayant qu'1 décimale : dans l'éditeur VBE quand tu tapes " ? Activesheet.range("T9").Value = 0.2" tu as comme réponse Faux ...

Cdlt,

Cylfo

Bonjour Cylfo

Le dernier code que tu as envoyé je l'ai légèrement modifier puisqu'il est possible que j'ai 0 en T9

j'ai passé T9 en arrondi à une décimale mais ça ne fonctionne pas le tableau ne s'affiche pas

Private Sub Worksheet_Change(ByVal Target As Range)
   ' Vérifier que la cellule modifiée est bien C9 (donc l'intersection entre target et C9 ne sera pas nulle)
   If Not (Application.Intersect(Target, ActiveSheet.Range("V10:Y12")) Is Nothing) Then
      'Afficher ou masquer Sheet2 suivant la valeur de T9 Sheet1
      'If Round(ActiveSheet.Range("T9").Value, 10) > 0.2 Then
        ' Sheets("Tableau").Visible = False
      'ElseIf Round(ActiveSheet.Range("T9").Value, 10) <= 0.2 Then
         'Sheets("Tableau").Visible = True
      'End If
      ' Ou si le résultat de T9 est arrondi à 1 décimale
      If ActiveSheet.Range("T9").Value > 0.2 Then
         Sheets("Tableau").Visible = False
      ElseIf ActiveSheet.Range("T9").Value <= 0.2 Then
         Sheets("Tableau").Visible = True
      End If
   End If
End Sub

Re,

Par rapport au précédent classeur que je t'ai envoyé, j'ai appliqué la modification que tu as faite et tu peux vérifier, cela fonctionne. Par contre compte tenu de ta modification, le test de visibilité peut être simplifié voir ci-dessous :

Private Sub Worksheet_Change(ByVal Target As Range)
   ' Vérifier que la cellule modifiée est bien dans la plage V10:Y12 (donc l'intersection entre target et V10:Y12 ne sera pas nulle)
   If Not (Application.Intersect(Target, ActiveSheet.Range("V10:Y12")) Is Nothing) Then
      'Afficher ou masquer Sheet2 suivant la valeur de T9 Sheet1
      Sheets("Tableau").Visible = (ActiveSheet.Range("T9").Value <= 0.2)
   End If
End Sub

Si cela ne fonctionne pas, je ne pourrai rien faire de plus sans un fichier représentatif (et avec des données anonymisées).

Cdlt,

Cylfo

Rechercher des sujets similaires à "grosse lacune code vba masquer afficher feuille"