Macro masque et groupe?

Bonjour à tous,

Sur le fichier joint j’aimerais pouvoir bénéficier d'une macro qui donne le résultat suivant :

- Masque l’ensemble des colonnes à l’exception des colonnes B, C et L dans la feuille Opérations.

- Masque les "groupes" de lignes qui ont une valeur identique (Ex : B4 = 17402, B5=17402, B6=17402) dans la colonne B ET qui disposent d’au moins une ligne avec une cellule en L contenant une valeur non nulle. (Ex: d'un groupe à masquer coloré en bleu dans l'image)

Seuls les "groupes" de lignes qui ont une valeur nulle en L doivent rester affichés à l'arrivée.

J’espère que c’est faisable, un grand merci par avance!

Bonjour,

Une piste qui peut prendre un peu de temps d'exécution mais un message annonce la fin de la procédure :

Sub Test()

    Dim Dico As Object
    Dim Cle As Variant
    Dim Plage As Range
    Dim Cel As Range
    Dim TblAdr() As String
    Dim I As Long
    Dim J As Long
    Dim Adr As String

    Set Dico = CreateObject("Scripting.Dictionary")

    With Worksheets("Opérations")

        'affiche tout
        .Rows.EntireRow.Hidden = False
        .Columns.EntireColumn.Hidden = False

        Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))

        'puis...
        'Masque l’ensemble des colonnes à l’exception des colonnes B, C et L dans la feuille Opérations.
        Application.Union(Columns("A:A"), Columns("D:K"), Columns("M:" & Split(Columns(Columns.Count).Address, ":$")(1))).EntireColumn.Hidden = True

    End With

    'dédoublonne avec un dictionnaire
    For Each Cel In Plage

        Dico(Cel.Value) = Cel.Value

    Next Cel

    Cle = Dico.keys

    'effectue la recherche pour stocker les adresses des lignes à cacher dont une valeur se trouve en colonne L
    For I = 0 To Dico.Count - 1

        Set Cel = Plage.Find(Cle(I), , xlValues, xlWhole)
        Adr = Cel.Address

        Do

            If Cel.Offset(, 10).Value <> "" Then

                J = J + 1: ReDim Preserve TblAdr(1 To J)
                TblAdr(J) = Cel.Address(0, 0)

            End If

            Set Cel = Plage.FindNext(Cel)

        Loop While Adr <> Cel.Address

    Next I

    'cache les lignes
    For I = 1 To UBound(TblAdr)

        Range(TblAdr(I)).EntireRow.Hidden = True

    Next I

    MsgBox "C'est fini !"

End Sub

Bonjour,

Merci l'ami, le programme fait bien le job!

Une très bonne journée à toi.

Merci du retour et très bonne journée à toi aussi !

Oups, désolé si j’abuse encore une fois, je me suis précipité.

Une fois le traitement effectué est-il possible de masquer - non de supprimer - les doublons?

J'espère que c'est pas trop de code en sus.

Merci,

Re,

Les doublons ne sont pas supprimé, les lignes sont seulement masquées si la cellule en colonne L contient quelque chose !

Rechercher des sujets similaires à "macro masque groupe"