VBA - Bouton pour masquer/afficher de façon conditionnelle

Hello

J'ai une petite problématique. J'ai une feuille pour chaque ligne en colonne I, une liste de selection "Y/N".

J'ai créé 2 boutons, pour:

* bouton 1 > masquer toutes les lignes dont la case I est sur "N"

* bouton 2 > Afficher toutes les lignes qui sont masqués

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
    DebutLgn = 14
    FinLgn = 740
    Valeur = 9
    For NbLgn = DebutLgn To FinLgn
        If Cells(NbLgn, Valeur).Value = 0 Then
            Cells(NbLgn, Valeur).EntireRow.Hidden = True
        End If
    Next NbLgn
Application.ScreenUpdating = True
End Sub

Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
    DebutLgn = 14
    FinLgn = 740
    Valeur = 9
    For NbLgn = DebutLgn To FinLgn
        If Cells(NbLgn, Valeur).EntireRow.Hidden = True Then
            Cells(NbLgn, Valeur).EntireRow.Hidden = False
        End If
    Next NbLgn
Application.ScreenUpdating = True
End Sub

J'ai 2 "soucis":

> Ce processus est un peu long à traiter: y a t-il moyen d'optimiser le code?

> Je souhaiterai intégrer tout cela sur un seul bouton pour masquer/afficher

Une idée de comment m'y prendre?

Merci

Bonjour,

Un simple Filtre Automatique???

Pas plus simple

Hello

Qu'appelles tu un filtre automatique? si je mets "N" dans la case I, cela masque automatiquement avec la mise en forme conditionnelle?

Pas possible car par défaut toutes les cases I sont sur "N"

Re

Bon j'ai réussi à faire le processus affichage/masque avec un seul bouton:

Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
    Dim R As Range
    Dim Cel As Range
    Set R = Application.Range("D14:D700")
    For Each Cel In R.Cells
        If Cel.Text = "N" Then
            Cel.EntireRow.Hidden = Not (Cel.EntireRow.Hidden)
        End If
    Next Cel
Application.ScreenUpdating = True
End Sub

A voir si cela est optimisable pour accélérer le process

Euh, sérieux, tu ne connais pas le filtre automatique?

image image

Natif d'Excel...

Lol si si je connais bien les filtres automatiques... Je n'avais juste pas fait le rapprochement car je parlais de VBA

Re-,

Donc, avec l'enregistreur, et en utilisant le filtre, tu as ta solution...

Bonne soirée

Re

Pas besoin au final... j'ai trouvé une solution avec un seul bouton.

Cela prend qq secondes mais rien de bien génant

votre solution est suboptimal, vous inverser le "masquer/afficher" des lignes individuellement, pas le groupe entier. Cette solution prend le status de la première N-cellule et l'inverse.

Private Sub CommandButton3_Click()
     Dim R     As Range, C, b
     For Each C In Range("D14:D700").Cells     'boucle ces cellules
          If StrComp(C.Text, "N", 1) = 0 Then     'majuscules, miniscules ...
               If R Is Nothing Then     'première N-cellules
                    b = C.EntireRow.Hidden     'est cette ligne masquée ?
                    Set R = C
               End If
               Set R = Union(R, C)     'toutes les N-cellules
          End If
     Next
     If Not R Is Nothing Then R.EntireRow.Hidden = Not b     'en 1 commande, toutes les lignes
End Sub

Hello BsAlv

Merci beaucoup pour le code. Je vais tester cela.

Rechercher des sujets similaires à "vba bouton masquer afficher facon conditionnelle"