Macro masque et groupe?

Bonjour à tous,

Sur le fichier joint j’aimerais avoir la possibilité de faire 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 lignes qui ont une valeur identique (Ex : B2 = 17000, B3=17000, B4=17000) dans la colonne B et qui, dans ce groupe de lignes ainsi constitué, dispose d’au moins d’une ligne avec une cellule en L contenant une valeur non nulle.

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

FiltreBCL.xls (810 Ko)

Bonjour,

Précision: Sur les doublons avec la colonne L non vide, quel doublons garder ?
le plus récent ou ???

1 J'aime

Désolé, je vais essayer d’être plus clair dans mon propos.
Une fois les colonnes masquées, des doublons apparaissent au niveau de la colonne B, C.

Il faut que soit masqué les groupes de lignes qui ont une même valeur de cellule en B et qui ont au moins une ligne avec une valeur non nulle en L (voir Exemple en bleu sur l’image)

En espérant que c’est plus clair pour toi, merci.

J’ai parlé de doublons car l’idéal serait par la suite de pouvoir masquer les lignes avec la même valeur prise en B (une fois que les groupes de lignes composé d’au moins une ligne avec une valeur non-nulle en L ont été masqué).

Désolé si je t’ai induit en erreur…

Donc, pardon, pour répondre précisément à ta question, tu n’en gardes aucun.

Bonjour
Voilà deux macros

Macro pour Masquer

Sub doublons()
Dim Dl%, F$
  Application.Calculation = xlCalculationManual
  Cells.EntireColumn.Hidden = False 'Affiche les colonnes
  Cells.EntireRow.Hidden = False 'Affiche les lignes
  Columns("A:A").Select
  Selection.EntireColumn.Hidden = True 'Masque colonne A
  Columns("D:K").Select
  Selection.EntireColumn.Hidden = True 'Masque colonne D à K
  Columns("M:Q").Select
  Selection.EntireColumn.Hidden = True 'Masque les colonnes M à Q
  
  Dl = Range("B" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne B
  
  F = "=IF(AND(IF(RC[-6]="""","""",IF(COUNTIF(R1C2:R[-1]C[-16],RC[-16])>0,"""",MAX(R1C18:R[-1]C)+1))="""",RC[-16]=R[-1]C[-16]),R[-1]C,IF(RC[-6]="""","""",IF(COUNTIF(R1C2:R[-1]C[-16],RC[-16])>0,"""",MAX(R1C18:R[-1]C)+1)))"
  Range("R2").Formula = F 'Attribue la formule à R2
  Range("R2").AutoFill Destination:=Range("R2:R" & Dl), Type:=xlFillDefault 'Recopie la formule
  Application.Calculation = xlCalculationAutomatic
  Range("R2:R" & Dl).Copy 'Copy la plage pour la copier en valeur
  Range("R2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
          :=False, Transpose:=False
      Application.CutCopyMode = False
  
  Range("R2:R" & Dl).SpecialCells(xlCellTypeConstants, 1).EntireRow.Hidden = True 'Masque les lignes contenant du numérique
  Range("B1").Select
End Sub

Macro pour Afficher

Sub Affiche()
  Cells.EntireColumn.Hidden = False 'Affiche les colonnes
  Cells.EntireRow.Hidden = False 'Affiche les lignes
  Range("A1").Select
End Sub

A toi de mettre les boutons adéquat où bon te semble
FiltreBCL.xls (842 Ko)

1 J'aime

Bonjour,

J’ai testé plusieurs fois pour vérifier que le programme masque bien ce qui doit l’être : tout roule, impressionnant.

Je te remercie d’autant plus que tu as placé des commentaires très instructifs.

Une très bonne journée à toi @Mimimathy

NB :

J’ai juste ajouté en début de macro :

    Application.ScreenUpdating = False

Et à la fin,

        Application.ScreenUpdating = False

C’est pour éviter que l’écran “scintille” (que l’on voit les mouvements rapides d’exécution).

Oups, désolé si j’abuse encore une fois.

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

Merci mimimathy,

Re,

Je ne vois pas ou sont les cellules “SUPPRIMEES”, elles sont toutes MASQUEES
et au cas où tu n’aurais lu mon commentaire, il est bien précisé

> Voilà deux macros

FiltreBCL.xls (843 Ko)

Tu m’as mal compris, je n’ai pas dit que tu avais supprimer qqch. C’est juste une étape supplémentaire que je souhaitais.
Mais en bidouillant avec l’enregistreur j’ai réussi à trouver le bout de code que je souhaitais pour finir le traitement.

Merci encore de ton attention

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.