Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

eastwick

XLDnaute Accro
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 !
 
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
 
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 🙂
 
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 🙂
 
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 🙂
 
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"
😉
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
281
Réponses
5
Affichages
416
Réponses
1
Affichages
218
Retour