Masquer/Afficher des lignes grâce à un bouton selon critère

Bonjour à tous,

tout nouveau sur le forum et je préfère préciser que j'ai un niveau très faible (proche du néant) en macro.

J'aimerais, grâce à un bouton, masquer ou afficher des lignes en fonction d'un seul critère. Voici un exemple pour illustrer (fichier exemple joint au message):

- Onglet 1 'Récap': Tableau récapitulatif de différents problèmes (de 1 à 20) qui peuvent être classés en fonction de 3 degrés de gravité (faible, moyen et fort). J'ai créé une liste déroulante pour affecter à chaque problème un degré de gravité en colonne 'D' (avec Data validation).

- Onglet 2 'Faible': j'ai recopié le tableau récap, mais cette fois-ci les degrés de gravité ne peuvent pas être manipulés (les cellules de la colonne gravité renvoient au contenu de l'onglet Récap, il n'y a plus de liste déroulante).

Je souhaite que dans cet onglet s'affiche seulement les lignes de problèmes qui ont un degré de gravité 'Faible'. Je sais que je pourrais le faire en filtrant la colonne Gravité mais je devrais refaire cette manip à chaque fois que j'actualise l'onglet 'Récap' (et ce sera un fichier collaboratif). En fait, j'aimerais le faire grâce un bouton qui contiendrait une macro qui puisse afficher ou masquer en fonction du contenu de la case Gravité.

Idem pour les onglets Moyen et Fort.

En cherchant un peu, j'ai réussi à trouver quelque chose mais je rencontre un problème. Je vous mets le code et j'explique mon problème par la suite:

Sub HideRow()
Dim isfLastRow As Long
Dim isfCounter As Long

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

With ActiveSheet

.Shapes("Actualisertableau").Visible = True

isfLastRow = .Range("D10000").End(xlUp).Row
For isfCounter = 5 To isfLastRow
If .Cells(isfCounter, "D").Value = "moyen" Or .Cells(isfCounter, "D").Value = "fort" Then
.Cells(isfCounter, "D").EntireRow.Hidden = True
Else
.Cells(isfCounter, "D").Value = "faible"
.Cells(isfCounter, "D").EntireRow.Hidden = False
End If
Next isfCounter
.Range("A1").Select

End With

Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

Edit modo : code mis entre balises, merci d'y faire attention la prochaine fois

Le code fonctionne, mais lorsque j'exécute la macro grâce au bouton, ma formule (=Récap!D5 par exemple) comprise dans la colonne degré (colonne D) qui renvoit au contenu de l'onglet Récap disparait . C'est à dire que ces cases ne s'actualisent plus en fonction des changements que l'ont fait dans l'onglet Récap (si je souhaite changer de degré de gravité). En gros, le bouton fonctionne une fois et ensuite tout est catégorisé en "faible" et ne s'actualise plus.

Avez-vous une idée pour améliorer le code ou simplement quelque chose de similaire qui fonctionne déjà?

Je vous remercie,

Anthony.

21book1.xlsm (29.45 Ko)

Bonjour anthod13 et

Une petite présentation ICI serait la bienvenue

Tout nouveau, commencez donc par lire :
- La charte du forum et notamment :

  • Pour plus de lisibilité, utilisez le bouton </> situé dans la barre d'outils, pour insérer vos codes VBA (et si possible aussi pour vos formules Excel).

- Quelques fonctionnalites du forum à connaître

Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)

Merci pour votre participation

Cordialement

Bonjour,

Hello Bruno

Sans VBA, mais en utilisant Power Query, ça pourrait donner ça.

Regarde le fichier joint

Merci beaucoup pour la réponse, effectivement cela fonctionne.

J'ai également trouvé une macro plus simple que celle que j'avais essayé d'utiliser, associée à un bouton dans l'onglet Récap, qui actualise les différents onglets.

Voici le code si jamais ça peut servir pour d'autres personnes:

Sub Generalrefresh()
    With Worksheets("Faible")
        Dim c As Range
        For Each c In Worksheets("Faible").Range("D5:D24")

            If c.Value = "moyen" Or c.Value = "fort" Then
            c.EntireRow.Hidden = True
            Else
            c.EntireRow.Hidden = False
            End If
        Next
    End With
    With Worksheets("Moyen")
        Dim d As Range
        For Each d In Worksheets("Moyen").Range("D5:D24")

            If d.Value = "faible" Or d.Value = "fort" Then
            d.EntireRow.Hidden = True
            Else
            d.EntireRow.Hidden = False
            End If
        Next
    End With
    With Worksheets("Fort")
        Dim e As Range
        For Each e In Worksheets("Fort").Range("D5:D24")

            If e.Value = "faible" Or e.Value = "moyen" Then
            e.EntireRow.Hidden = True
            Else
            e.EntireRow.Hidden = False
            End If
        Next
    End With

End Sub

Je passe en résolu.
merci beaucoup !

Anthony

30book1.xlsm (29.00 Ko)

Re-,

Euh, je ne comprends pas tout...

Tu mets mon post comme le post t'ayant permis de résoudre ta demande, mais tu ne l'utilises pas...
Au contraire, tu utilises un code inexact, et ça te suffit...????

Dans ton code, tu ne fais que masquer les lignes non concernées par le nom de l'onglet, donc tu ne peux pas utiliser pleinement ces nouveaux tableaux...
Ces données sont toujours présentes...
Mais bon, si ça te va!!

Bonne fin d'apm

Rechercher des sujets similaires à "masquer afficher lignes bouton critere"