Masquer des lignes en fonction d'une valeur

Swing92

XLDnaute Nouveau
Bjr,

J'ai un questionnaire avec des rubriques et des sous-rubriques.

Si la rubrique n'a pas la valeur "oui", les lignes des sous-rubriques ne s'affiche pas.

J'ai essayé ce code mais cela ne fonctionne pas...
-------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("G7") = "Oui" Then
Rows("7:13").Select
Selection.EntireRow.Hidden = False
Else
Rows("7:13").Select
Selection.EntireRow.Hidden = True
End If
End Sub
-------------------------

Merci pour votre aide
 

Pierrot93

XLDnaute Barbatruc
Re : Masquer des lignes en fonction d'une valeur

Bonjour Swing

chez moi ton code fonctionne... Attention sensible à la casse... Modifies le peut être comme ci dessous afin d'éviter de boucler sur l'événement "Selectionchange" :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("G7") = "Oui" Then
Rows("7:13").EntireRow.Hidden = False
Else
Rows("7:13").EntireRow.Hidden = True
End If
End Sub

bon après midi
@+
 

wilfried_42

XLDnaute Barbatruc
Re : Masquer des lignes en fonction d'une valeur

Bonjour Swing92, Pierrot

le test = "OUI" est en fonction de ce qui est saisi : Oui, oui, OUI

If ucase(range("G7")) = "OUI" then ' force le test en majuscule mais pas la saisie

Ce qui n'empeche pas que la solution de Pierrot ne soit pas plus sure que la tienne
 

Swing92

XLDnaute Nouveau
Re : Masquer des lignes en fonction d'une valeur

Merci pour votre aide.

Le code fonctionne effectivement si après changement de la valeur, je change de cellule, je pensais pouvoir afficher ou masquer directement les lignes dès que la valeur change en restant dans la même cellule.

En effet j'ai pour chaque question une liste de valeur et j'ai ajouté pour une saisie plus rapide la fonction suivante qui permet d'obtenir les valeurs autorisées sur double-clic.

Si vous avez une idée ?;)
------------------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Lig = Target.Row
Col = Target.Column
If Col = 7 Or Col = 10 Or Col = 11 Then
If Lig > 4 And Lig < 73 Then
If Cells(Lig, Col) = "Oui" Then
Cells(Lig, Col) = "Non"
Else
Cells(Lig, Col) = "Oui"
End If
End If
End If
If Col = 8 Then
If Lig > 4 And Lig < 73 Then
If Cells(Lig, Col) = "Forte" Then
Cells(Lig, Col) = "Faible"
Else
Cells(Lig, Col) = "Forte"
End If
End If
End If
If Col = 13 Then
If Lig > 4 And Lig < 73 Then
If Cells(Lig, Col) = "Faire" Then
Cells(Lig, Col) = "Faire-Faire"
Else
Cells(Lig, Col) = "Faire"
End If
End If
End If

Cancel = True
End Sub
--------------------------------
 

Pierrot93

XLDnaute Barbatruc
Re : Masquer des lignes en fonction d'une valeur

Re

essaye comme ceci :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
End Sub

Attention "Application.EnableEvents = False" désactive les procédures événementielles, au cas ou ta macro boguerait, il faudrait les remettre à "True".

autre solution, utiliser une variable de type "Booleenne".

@+
 

Yohann

XLDnaute Nouveau
Re : Masquer des lignes en fonction d'une valeur

Bonjour,
je rencontre actuellement le même problème pour masquer les lignes.
En effet, une case (B2) prend différentes valeurs en fonction d’une autre feuille de calcul, et je voudrais que dynamiquement mes lignes se masquent selon cette valeur.
Le code (faux évidemment) que j’ai tapé est le suivant :

Sub Efflignes()
'
' Efflignes Macro

If Range("B2") = "1a" Then
Rows.EntireRow.Show = True
Rows("26:31").EntireRow.Hidden = True
Rows("16:23").EntireRow.Hidden = True

ElseIf Range("B2") = "2a" Then
Rows.EntireRow.Show = True
Rows("28:31").EntireRow.Hidden = True
Rows("18:23").EntireRow.Hidden = True

ElseIf Range("B2") = "5a" Then
Rows.EntireRow.Show = True

Else
Rows.EntireRow.Show = True
Rows("30:31").EntireRow.Hidden = True
Rows("22:23").EntireRow.Hidden = True

End If
End Sub

Mes questions sont donc les suivantes :

Comment faire pour qu’à chaque changement de valeur de la case B2 ma feuille masque les lignes concernées, tout en omettant les diffétents opérations précédentes. Cad, si je masque des lignes lorsque B2=1a, je ne veux pas que lorsque B2=2a, ces lignes soient toujours masquées.

Comment faire pour que cette macro s’éxécute en permanence dans la feuille, sans avoir pour autant à faire « play » sur la macro ?

Merci d’avance pour vos réponses…
Je ne sais pas si je suis assez clair, mais je débute en VBA…ca se sent !!!

A bientot !
 

Discussions similaires

Statistiques des forums

Discussions
312 799
Messages
2 092 226
Membres
105 297
dernier inscrit
Cadnov