Cacher ligne grâce à une macro

Bonjour à tous et merci de lire mon sujet;

Je cherche comment effectuer une macro, qui, associée à un bouton, me permettrai de cacher des lignes selon le résultat obtenu.

  • Pour être plus précis, mes lignes vont de 6 à 1002
  • le résultat de chaque ligne est dans la colonne X ( et correspond à chaque fois au numéro de la ligne)

Je souhaiterai que lorsque le résultat est supérieur ou égale à 18, ces lignes en question soit cachées.

Il me faudrait aussi une macro associé à un bouton qui me permettrai d’annuler cette macro précédente, au cas ou j’ai besoin de faire apparaitre ces fameuses lignes.

Je vous remercie beaucoup pour votre aide.
Bonne soirée

Bonjour,

Un test à voir

La Macro :

Option Explicit

Sub Masque()
Dim i%

If ActiveWorkbook.ActiveSheet.Shapes("Bouton").TextFrame.Characters.Text = "MASQUER" Then 'Si le texte du bouton est MASQUER
  For i = 1002 To 6 Step -1 'boucle depuis le bas est masque les lignes dont la valeur en colonne X est Sup ou = à 18
    If Cells(i, 24).Value >= 18 Then
      Rows(i).Hidden = True
    Else
      Rows(i).Hidden = False
    End If
  Next i
  ActiveWorkbook.ActiveSheet.Shapes("Bouton").TextFrame.Characters.Text = "AFFICHER" 'Modifie le texte du bouton en AFFICHER
Else 'Si le texte du bouton est AFFICHER
  Rows("6:1002").Hidden = False 'Affiche les lignes de 6 à 1002
  ActiveWorkbook.ActiveSheet.Shapes("Bouton").TextFrame.Characters.Text = "MASQUER"  ''Modifie le texte du bouton en MASQUER
End If
End Sub

Le Classeur :

Masquage.xlsm (79,4 Ko)

1 « J'aime »

Merci beaucoup pour cette réponse rapide.
La macro fonctionne, pas de problème, merci beaucoup.
En revanche, elle prend beaucoup de temps à réaliser: 50 sec pour le masquage ( instantanée pour rendre à nouveau visible ls cellules ).
Cela peut t’il provenir de mon tableau qui est déjà assez lourds en macro et mise en forme conditionnelle, ou est ce normale vu qu’il y a 1000 ligne à traiter?

Re,
Effectivement avec 1000 lignes,

La macro passe de ligne en ligne pour vérifier la valeur de la cellule en colonne X pour masquer
alors que pour afficher, elle sélectionne la totalité de la ligne pour afficher

Fait un test avec cette macro (tu ôtes l’autre et place celle-ci avec le filtre de données)

Sub Masque()
Dim i%

If ActiveWorkbook.ActiveSheet.Shapes("Bouton").TextFrame.Characters.Text = "MASQUER" Then 'Si le texte du bouton est MASQUER
  Selection.AutoFilter
    ActiveSheet.Range("$A$5:$X$1002").AutoFilter Field:=24, Criteria1:="<18", _
        Operator:=xlAnd
  ActiveWorkbook.ActiveSheet.Shapes("Bouton").TextFrame.Characters.Text = "AFFICHER" 'Modifie le texte du bouton en AFFICHER
Else 'Si le texte du bouton est AFFICHER
  Selection.AutoFilter
  ActiveWorkbook.ActiveSheet.Shapes("Bouton").TextFrame.Characters.Text = "MASQUER"  ''Modifie le texte du bouton en MASQUER
End If
End Sub

Masquage (1).xlsm (80,0 Ko)

Re
Ah là, c’est très rapide; En revanche, pour une raison que j’ignore, les ligne 2 à 5 incluses sont également cachées alors quelle ne compte pas de résultat, et ne devrait normalement pas être prise en compte par cette macro ( macro à mettre en place de la ligne 6 à la ligne 1002)

Re,

Comprends pas :thinking:

Qu’est ce que cela dis avec mon classeur exemple ??

Sur le classeur reçu, pas de problème, mais appliquer au miens, il y a bizarrement un problème au niveau de la première ligne

Bonjour @Benjy51190,
Re @Mimimathy,

Avec la première macro de @Mimimathy,

Sous:

Sub Masque()
Dim i%

Tu ajoutes cette ligne:

 Sub Masque()
 Dim i%
 Application.ScreenUpdating = False 'Rafraichissement écran (pour ne pas voir défiler les lignes)

Cordialement.

1 « J'aime »

Re,

Regarde où se positionne le filtre sur quel ligne

1 « J'aime »

Bonjour;
Merci à vous deux;
Effectivement, la première macro de @Mimimathy et la ligne supplémentaire de @mdo100, et tout fonctionne impeccable, et avec une bonne vitesse exécution.
Problème résolu;
je vous suis très reconnaissant et admiratif de vos connaissances.
Bonne continuation

Cordialement

Bonjour,

Si cela convient c’est le principal,
N’oublies pas de passer ton sujet en RESOLU :wink:

1 « J'aime »

Je cherche justement ou se trouve le bouton “Résolu” lol

Regarde sur mon dernier post, tu dois avoir une case à cocher

1 « J'aime »