Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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
 
Dernière édition:

Discussions similaires

Réponses
18
Affichages
462
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…