Masquer Lignes Trop Lent

Bonjour à tous,

Je me suis servie d'une discussion du 31/08/2020 de 21Formatic, vu que j'ai beaucoup de lignes à masquer 160 dans le 1er tableau et 247 dans le 2ème tableau, la macro masquer fait ligne à ligne ce qui est normal mais c'est très long, vraiment très long auriez-vous une solution SVP ? je joint le fichier.

14maques-lignes.xlsm (35.13 Ko)

Bonjour,

Vos 2 macros modifiées:

Sub Cacher_Nom1()
    Application.ScreenUpdating = False
    If [g3] = 0 Then
        For i = 160 To 5 Step -1
            If Cells(i, 6) = 0 And Cells(i, 7) = 0 And Cells(i, 8) = 0 And Cells(i, 9) = 0 Then Rows(i).EntireRow.Hidden = True
        Next
        [g3] = 1
    Else:
        Rows("1:160").EntireRow.Hidden = False
        [g3] = 0
    End If
End Sub

Sub Cacher_Nom2()
    Application.ScreenUpdating = False
    If [I163] = 0 Then
        For i = 382 To 165 Step -1
            If Cells(i, 6) = 0 And Cells(i, 7) = 0 And Cells(i, 8) = 0 And Cells(i, 9) = 0 Then Rows(i).EntireRow.Hidden = True
        Next
        [I163] = 1
    Else:
        Rows("165:382").EntireRow.Hidden = False
        [I163] = 0
    End If
End Sub

Cdlt

Re, Merci Arturo, Comme une flèche......... sur mon exemple, quand même long sur mon fichier original. J'ai beaucoup de tableau sur les colonnes suivantes.

Mettez un fichiez plus complet afin qu'on puisse faire des tests et l'amélioré par la suite.

Bonjour,

Ce petit bout de code en tout début?

Application.Calculation = xlCalculationManual

Et remise en normal à la fin :

Application.Calculation = xlCalculationAutomatic

Bonne apm

Bonjour à tous,

une erreur de conception à ta macro.
Il faut démasquer toutes les lignes avant de masquer, sinon celles qui ne doivent plus l'être restent masquées.

Les masquer en une fois sur le 1er tableau en les mémorisant

Sub Cacher_Nom1()
    Dim pl As Range
    Rows("1:160").EntireRow.Hidden = False
    If [g3] = 0 Then
        For i = 5 To 160
            If Cells(i, 6) = 0 And Cells(i, 7) = 0 And Cells(i, 8) = 0 And Cells(i, 9) = 0 Then
                If pl Is Nothing Then Set pl = Cells(i, 6) Else Set pl = Union(pl, Cells(i, 6))
            End If
        Next i
        If Not pl Is Nothing Then pl.EntireRow.Hidden = True
        [g3] = 1
    End If
End Sub

eric

Re eriiic, effectivement elle va plus vite, maintenant pour les demasquer je fais comment ?

Re CousinHub, j'ai mis votre code et ça fonction, je vais refaire un essai....

Re à tous les trois, je prends la version de Cousinhub et bonne fin de dimanche. Merci beaucoup.

Et encore Merci. Bonne fin de soirée.

Re eriiic, effectivement elle va plus vite, maintenant pour les demasquer je fais comment ?

Pareil qu'avant, tu relances la macro
eric

PS : par contre il faut rajouter une ligne si tu veux une bascule automatique entre filtrer/défiltrer

Sub Cacher_Nom1()
    Dim pl As Range
    Rows("1:160").EntireRow.Hidden = False
    If [g3] = 0 Then
        For i = 5 To 160
            If Cells(i, 6) = 0 And Cells(i, 7) = 0 And Cells(i, 8) = 0 And Cells(i, 9) = 0 Then
                If pl Is Nothing Then Set pl = Cells(i, 6) Else Set pl = Union(pl, Cells(i, 6))
            End If
        Next i
        If Not pl Is Nothing Then pl.EntireRow.Hidden = True
        [g3] = 1
    Else
        [g3] = 0
    End If
End Sub

Bonjour Eric,

les Shadoks ont raison, mais je me prends tellement la tête avec ce dossier que mes neurones disjonctent.

Je te remercie pour cette solution. Bonne journée.

Rechercher des sujets similaires à "masquer lignes trop lent"