XL 2016 VBA - Filtre + calcul.

Keran

XLDnaute Junior
Bonjour a tous , deja bonne année a vous .

Je me permet de vous deranger pour vous demander un peu d'aide car je suis un peu perdu .
j'ai un GROS fichier et j'ai deja une vba qui masque les ligne selon la casse cocher dans une autre feuille
et une autre vba qui filtre si une case est vide . j'aimerais fusionner les deux et les mettre en filtre si possible .
De plus j'aimerais avoir si vous auriez une idee pour faire en sorte que les calcul ne ce fasse pas sur toutes les pages a chaque changement .

ma macro avec masquage
VB:
 If Not Intersect(Target, Range("I6:I65")) Is Nothing Then
        If Cells(Target.Row, 9) = "X" Then
            Cells(Target.Row, 9) = ""
            For Each f In Sheets(Array("HJanvier", "Janvier", "BJanvier"))
                          
                If f.Range("A6") = "Jours" And f.Range("A8") = Range("X26") Then
                    For i = 9 To 65
                        If f.Range("A" & i) = Cells(Target.Row, 8).Value Then
                            f.Rows(i & ":" & i).EntireRow.Hidden = False
                        End If
                    Next i
                End If
                
            Next f
        Else
            Cells(Target.Row, 9) = "X"
            For Each f In Sheets(Array("HJanvier", "Janvier", "BJanvier"))
                          
                If f.Range("A6") = "Jours" And f.Range("A8") = Range("X26") Then
                    For i = 9 To 65
                        If f.Range("A" & i) = Cells(Target.Row, 8).Value Then
                            f.Rows(i & ":" & i).EntireRow.Hidden = True
                        End If
                    Next i
                
                End If
            Next f

        End If

ma macro filtre
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
    Dim WS As Worksheet
    Dim wss As Worksheet
For Each WS In Sheets(Array("HJanvier", "HFevrier", "HMars", "HAvril", "HMai", "HJuin", _
                           "HJuillet", "HAout", "HSeptembre", "HOctobre", "HNovembre", "HDecembre", _
                           "BJanvier", "BFevrier", "BMars", "BAvril", "BMai", "BJuin", _
                           "BJuillet", "BAout", "BSeptembre", "BOctobre", "BNovembre", "BDecembre", _
                           "Bilan"))
                          
                    If Not Intersect(Target, Range("H5:H69")) Is Nothing Then
                                               WS.Unprotect "azerty"
                                    WS.Range("$A$8:$A$67").AutoFilter Field:=1, Criteria1:="<>", Visibledropdown:=False
                                      WS.Protect ("azerty"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
                       , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True
                                              
                                              
End If
Next WS
    For Each wss In Sheets(Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", _
                           "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"))
                          
                    If Not Intersect(Target, Range("H5:H69")) Is Nothing Then
                                            wss.Unprotect "azerty"
                                    wss.Range("$A$8:$A$67").AutoFilter Field:=1, Criteria1:="<>", Visibledropdown:=False
                                    wss.Protect ("azerty"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
                       , AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True
                                    
                                              
                                              
End If
Next wss
Application.ScreenUpdating = True
End Sub

merci d'avance
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Keran

Comme les deux macros fonctionnent, le mieux est de ne pas les changer. Cela permet d'être mieux structuré.
A la fin de la première macro, vous faites un Call MacroFiltre tout simplement.

On peut interdire de tout recalculer en mettant l'option Calcul Manuel, mais dans ce cas aucune page ne sera recalculée sans votre ordre.
On peut aussi mettre dans une macro Calculate, toutes les pages ne seront recalculées qu'à cet instant.
Tout dépend de ce que vous voulez faire, et comment est architecturé votre fichier.
 
Dernière édition:

Discussions similaires

Réponses
19
Affichages
1 K

Statistiques des forums

Discussions
294 039
Messages
1 935 786
Membres
187 447
dernier inscrit
Harvedo