XL 2010 masquer si

eastwick

XLDnaute Impliqué
Bonjour à toutes et tous,
Pour un fichier avec x feuilles, j'aimerais que pour chacune d'elles, les lignes soient AUTOMATIQUEMENT masquées si la cellule de la colonne D est égale à "n". Ce n est obtenu par formule et non déposé directement.

Merci beaucoup !
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Estwick, bonjour le forum,

Essaie cette procédure à mettre dans le composant ThisWorkbook.

VB:
Private Sub Workbook_Open()
Dim O As Worksheet 'déclare la variable O (Onglets)
Dim DL As Long 'déclare la variable DL (Dernière ligne)
Dim I As Long 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque ls rafraîchissements d'écran
For Each O In Sheets 'boucle sur tous les onglets du classeur
    DL = O.Cells(Application.Rows.Count, "D").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne D de l'onglet O
    If DL > 1 Then Rows(DL + 1 & ":" & Application.Rows.Count).Hidden = True 'si DL est supérieur à 1, masque toutes les lignes après DL
    For I = 1 To DL 'boucle de 1 à DL
        'si la cellule ligne I colonne D est différente de "N", masque la ligne I
        If UCase(O.Cells(I, "D").Value) <> "N" Then Rows(I).Hidden = True
    Next I 'prochaine ligne de la boucle
Next O 'prochain onglet du classeur
Application.ScreenUpdating = True 'affiche ls rafraîchissements d'écran
End Sub
 

Calvus

XLDnaute Barbatruc
Bonjour Eastwick, le Forum

Un essai :
VB:
Sub Masquer()
Dim WS As Worksheet, cel As Range, i As Long

For Each WS In ThisWorkbook.Worksheets
    WS.Activate
    For i = 1 To Rows.Count
        If Cells(i, 4) = "n" Then
        Cells(i, 4).Rows.Hidden = True
        End If
    Next
Next
End Sub

Bonne journée.
EDIT : Bonjour Robert :)
 

DoubleZero

XLDnaute Barbatruc
Bonjour, eastwick, Robert :), Calvus :), le Forum,

Autre possibilité :
VB:
Option Explicit
Sub Masquer_si_valeur_x_en_y()
    Dim c As Range, o As Object
    For Each o In Worksheets
        On Error Resume Next
        For Each c In o.Columns(4).SpecialCells(xlCellTypeFormulas, 23)
            If c.Value = "n" Then c.EntireRow.Hidden = True
        Next
    On Error GoTo 0
    Next
End Sub
A bientôt :)
 

DoubleZero

XLDnaute Barbatruc
Re-bonjour,

Je n'avais pas prêté attention à ceci :oops: :
...AUTOMATIQUEMENT...
Autre suggestion (dans "ThisWorkbook") :
VB:
Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal o As Object, ByVal c As Range)
    Application.EnableEvents = False
    On Error Resume Next
    For Each c In o.Columns(4).SpecialCells(xlCellTypeFormulas, 23)
        If c.Value = "n" Then c.EntireRow.Hidden = True
    Next
    Application.EnableEvents = True
End Sub
A bientôt :)
 

Si...

XLDnaute Barbatruc
Salut

ÓÒ, peux-tu m’apprendre quel est le rôle du 23 dans .SpecialCells(xlCellTypeFormulas, 23) ?

Merci :):D

Je me contentais de
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal R As Range)
  On Error Resume Next 'pas de n
   For Each R In Sh.[D:D].SpecialCells(xlCellTypeFormulas)
      Rows(R.Row).Hidden = R.Value = "n"
   Next
End Sub

Pour me rapprocher un peu plus de toi, j'aurais dû aussi remplacer les "Sh" par "o"
;)
 

Si...

XLDnaute Barbatruc
Re

SpecialCells(xlCellTypeConstants, n)

Merci ÓÒ, j’ai trouvé une info que je livre telle quelle :

1 xl number
2 xlTextValues
4 xlLogical
16 xlError

et on peut combiner les types en les additionnant : d'où le 23 !

Bon enregistrement :):D
 
Dernière édition:

Discussions similaires

Réponses
18
Affichages
482

Statistiques des forums

Discussions
312 841
Messages
2 092 710
Membres
105 517
dernier inscrit
Freddy93