Masquer certaines lignes suivant conditions

jean de chez claude

XLDnaute Junior
Bonjour à tous
Je souhaiterais masquer dans la feuille "cause" toutes les lignes qui sont :
-colonne D : différentes de ZAOG en
-colonnes I et/ou J : différentes la date de la cellule D2 de la feuille « AO »
Merci pour votre aide
Cordialement
 

Pièces jointes

  • Demo 23-11.xls
    60 KB · Affichages: 86

jp14

XLDnaute Barbatruc
Re : Masquer certaines lignes suivant conditions

Bonjour à tous

Ci joint une solution par macro évènementielle

A tester

JP
 

Pièces jointes

  • Demo 23-11.zip
    22.2 KB · Affichages: 71
  • Demo 23-11.zip
    22.2 KB · Affichages: 66
  • Demo 23-11.zip
    22.2 KB · Affichages: 68

jean de chez claude

XLDnaute Junior
Re : Masquer certaines lignes suivant conditions

Problème
Je préfère une macro pour la mettre à la suite d’une déjà existante afin de finaliser mon analyse, celle de jp14 bloque au niveau de (If Target.Count > 1 Then Exit Sub) il remonte le message (erreur d’exécution ‘424’ : objet requis).
Merci de m'aider
@+
 
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Masquer certaines lignes suivant conditions

Bonjour

Cette ligne peut être supprimé sans problème. Elle sert pour vérifier si la zone active est formé d'une seule colonne.
L'objet Target est la cellule active, c'est un objet qui est déclaré dans la ligne de début de la fonction : Private Sub Worksheet_SelectionChange(ByVal Target As Range).
La valeur étant transmise par le système.
Il est possible de mettre cette procédure à la suite d'une autre mais il faut y apporter des modifications.

Ci dessous le code pour une procédure situé dans un module

Code:
Private Sub cacherligne()
Dim Target As Range
Dim trouve As Byte
Dim data1 As String
Dim cellule As Range
If flag = True Then Exit Sub
Application.ScreenUpdating = False
Dim dl1 As Long ' dernière ligne
Set Target = Sheets("Ao").Range("d2")
With Sheets("Cause ")
dl1 = .Range("d65536").End(xlUp).Row
.Rows("2:" & dl1).EntireRow.Hidden = False
    If Not Intersect(Target, Range("d2")) Is Nothing Then
        
        For Each cellule In .Range("d2:d" & dl1)
        trouve = 0
            If cellule.Offset(0, 5).Value = Target.MergeArea(1).Value Then trouve = 1
            If cellule.Offset(0, 6).Value = Target.MergeArea(1).Value Then trouve = 1
            If trouve = 1 And cellule = "ZAOG" Then
            Else
                .Rows(cellule.Row).EntireRow.Hidden = True
            End If
        Next cellule
        
Application.ScreenUpdating = True
        
    End If
flag = False
End With


End Sub
Il a en plus une déclaration et une affectation (set).

JP
 
Dernière édition:

jean de chez claude

XLDnaute Junior
Re : Masquer certaines lignes suivant conditions

Re
Ok ça fonctionne pil-poil, merci pour ta précieuse aide.
Maintenant que c'est ok, je m'aperçois qu’il faudrait pouvoir masquer
-colonne D : différente de ZAOG en (ça c’est ok)
-colonnes I et/ou J : différentes la date de la cellule D2 de la feuille « AO » (ça aussi c’est ok)
mais aussi
-colonne H et K si égales la date de la cellule D2 de la feuille « AO »

Je me suis très mal expliqué jusqu'à présent, en fait je souhaiterais faire remonter les lignes des colonnes I et J qui sont égales à la date de la cellule D2 de la feuille « AO » et masquer toutes les autres, j'ai modifié mon fichier démo pour être plus explicite ( ce qui n'est pas mon fort, je vous l'accorde)

Peut-être qu’une petite modif de la macro peut faire cela, si non pas de blème et merci pour tout
 

Pièces jointes

  • Demo 25-11.xls
    44.5 KB · Affichages: 84
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Masquer certaines lignes suivant conditions

Bonjour

Ci joint la procédure modifiée.

Code:
Option Explicit

Private Sub cacherligne()
Dim Target As Range
Dim trouve As Byte
Dim data1 As String
Dim cellule As Range

Application.ScreenUpdating = False
Dim dl1 As Long ' dernière ligne
Set Target = Sheets("Ao").Range("d2")
With Sheets("Cause ")
dl1 = .Range("d65536").End(xlUp).Row
.Rows("2:" & dl1).EntireRow.Hidden = False

        
        For Each cellule In .Range("d2:d" & dl1)
        trouve = 0
            If cellule.Offset(0, 5).Value = Target.MergeArea(1).Value Then trouve = 1
            If cellule.Offset(0, 6).Value = Target.MergeArea(1).Value Then trouve = 1
            If trouve = 1 And cellule = "ZAOG" Then
            
            Else
                .Rows(cellule.Row).EntireRow.Hidden = True
            End If
            'colonne H [COLOR="Red"]et[/COLOR] K si égales la date de la cellule D2 de la feuille « AO »
            
            If .Rows(cellule.Row).EntireRow.Hidden = False And _
            (cellule.Offset(0, 4).Value = Target.MergeArea(1).Value [COLOR="Red"]And[/COLOR] _
            cellule.Offset(0, 7).Value = Target.MergeArea(1).Value) Then _
            .Rows(cellule.Row).EntireRow.Hidden = True
            
            
        Next cellule
        
Application.ScreenUpdating = True
        

End With


End Sub
Il faudra, en fonction du résultat souhaité, remplacer le And par OR car pour l'instant il faut : colonne H et K ( l'une et l'autre ) si égales à la date de la cellule D2 de la feuille « AO »

A tester

JP
 

Discussions similaires

Réponses
17
Affichages
421

Statistiques des forums

Discussions
312 042
Messages
2 084 829
Membres
102 685
dernier inscrit
med_remi021