Macro masquage de ligne selon valeur

Benjy51190

XLDnaute Nouveau
Bonjour à tous et merci à vous de lire mon sujet.

Je cherche à réaliser une macro "réversible" qui me permettrait de masquer/afficher les lignes dont le total de la cellule de cette même ligne est égale ou supérieur à 72:

Ligne concernée de 6 à 1003
Cellule dont la valeur détermine le masquage/affichage: S

Merci par avance pour votre aide
Bonne soirée à tous
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Une autre proposition "AllinOne"
(la 1ère exécution masque les lignes, la seconde les démasque ;) )
VB:
Sub MasqueDemasque()
With Range("S6:S1003").Offset(, Columns.Count - 19)
.FormulaR1C1 = "=CHAR(65-(8*(RC19>=72)))*1"
.SpecialCells(xlCellTypeFormulas, 1).EntireRow.Hidden = Not .SpecialCells(xlCellTypeFormulas, 1).EntireRow.Hidden 
.Clear
End With
End Sub

EDITION: Bonsoir mapomme, Hieu
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Staple1600 :);),

Juste pour pinailler et surtout me permettre de te saluer...

Ta macro est dépendante de l'état (masqué ou non) de la première ligne contenant une valeur >= 72 (me semble-t-il).

Soyons tordus :rolleyes::
Ligne 10 : première valeur supérieure à 71 en colonne S
Masquons cette ligne (n °10)
Exécutons la macro MasqueDemasque -> la macro affiche toutes les lignes dont la valeur en S est supérieure ou égale à 72

Masquons à nouveau cette ligne (n ° 10) (un utilisateur fou en quelque sorte et qui en veut beaucoup à la ligne 10)
Exécutons une 2ème fois la macro MasqueDemasque -> la macro affiche encore toutes les lignes dont la valeur en S est supérieure ou égale à 72

Masquons à nouveau cette ligne (n° 10) (un utilisateur toujours aussi fou et qui en veut à mort à la ligne 10)
Exécutons une 3ème fois la macro MasqueDemasque -> la macro affiche encore toutes les lignes dont la valeur en S est supérieure ou égale à 72
etc...

voir illustration dans fichier joint...
 

Pièces jointes

  • Test- Masquer lignes- v1.xlsm
    22.5 KB · Affichages: 21

job75

XLDnaute Barbatruc
Bonjour Benjy51190, Hieu, mapomme, JM, le forum,
Code:
Sub VuPasVu()
Application.ScreenUpdating = False
If TypeName([PasVu]) <> "Boolean" Then ThisWorkbook.Names.Add "PasVu", False
ThisWorkbook.Names.Add "PasVu", Not [PasVu]
With [S6:S1003] 'adaptable
    .Insert xlToRight
    .Offset(, -1) = "=1/(RC[1]>=72)"
    On Error Resume Next 'si aucune SpecialCell
    .Offset(, -1).SpecialCells(xlCellTypeFormulas, 1).EntireRow.Hidden = [PasVu]
    .Offset(, -1).Delete xlToLeft
End With
End Sub
Bonne journée.
 

Pièces jointes

  • VuPasVu(1).xlsm
    29.5 KB · Affichages: 28

job75

XLDnaute Barbatruc
Re,

Une autre solution avec le filtre avancé sur ce fichier (2) :
Code:
Sub VuPasVu()
If TypeName([Vu]) <> "Boolean" Then ThisWorkbook.Names.Add "Vu", True
ThisWorkbook.Names.Add "Vu", Not [Vu]
With Feuil1 'CodeName
    If [Vu] Then
        If .FilterMode Then .ShowAllData
    Else
        With .[S5:S1003] 'adaptable
            .Cells(2, 2) = "=RC[-1]<72" 'critère en T6
            .AdvancedFilter xlFilterInPlace, .Cells(1, 2).Resize(2)
        End With
    End If
End With
End Sub
A+
 

Pièces jointes

  • VuPasVu(2).xlsm
    31.1 KB · Affichages: 25

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 869
dernier inscrit
radyreth