Bonjour à tous !!!

Et merci d’avance pour vos lumières!

J’aimerais que les lignes d’un tableau soient masquées/affichées en fonction de la valeur prise par une cellule de la feuille, appelée “Effectif”.
[ Il faut que la manip passe par une macro VBA (en effet, d’autres opérations sont declenchées par des macros, je dois ajouter celle là au fichier) ]

Si la cellule D2 prend la valeur “Quai A”, toutes les lignes de D6 à D100 ne contenant pas cette valeur sont masquées.
Même chose si la cellule prend la valeur “Point M”, je précise CONTENANT et non pas égal.
Le but est que, les lignes avec les cellules de D6 à D100 prenant pour valeur “Quai A et Point M” restent affichées quand D2 prend “Quai A” ou “Point M” pour valeur.

Vous suivez? J’imagine que cela n’est absolument pas clair, toutes mes excuses. J’ai essayé de procéder avec une macro qui se trouve dans le module1, “MaskSite” et qui est appelée dans le code de la feuille (“imprimer”).

Voici le code du module 1:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 Sub Worksheet_Calculate()
Dim o As Worksheet
Dim COL As Byte
 
Application.ScreenUpdating = False
Set o = Worksheets("Effectif")
o.Rows("1:100").Hidden = False
o.Columns("C:M").Hidden = False
For COL = 5 To 11
    If o.Cells(2, COL).Value = "" Then o.Columns(COL).Hidden = True
Next COL
Application.ScreenUpdating = True
End Sub
Sub Masquer_lignes()
Dim o As Worksheet
Dim LI As Integer
Dim PL As Range
Dim CEL As Range
 
Set o = Worksheets("Effectif")
Application.ScreenUpdating = False
For LI = 6 To 100
    Set PL = o.Range(o.Cells(LI, 5), o.Cells(LI, 11)).SpecialCells(xlCellTypeVisible)
    For Each CEL In PL
        If CEL.Value <> "" Then GoTo suite
    Next CEL
    o.Rows(LI).Hidden = True
suite:
Next LI
Application.ScreenUpdating = True
End Sub
Sub MaskSite()
Dim Site As String
Dim l As Integer
Dim o As Worksheet
Set o = Worksheets("Effectif")
Site = o.Range("D2").Value
For l = 7 To 100
    o.Rows(l).EntireRow.Hidden = False
    If InStr(o.Range("D" & l).Value, Site) > 0 Then
    o.Rows(l).EntireRow.Hidden = False
    Else: o.Rows(l).EntireRow.Hidden = True
    End If
Next l
End Sub

NB : Je précise que les macros ont un déclencheur, qui s'active lorsque la cellule D1 de l'onglet "imprimer" voit sa valeur changer.

Le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Private Sub Worksheet_Change(ByVal Target As Range)
 
 
    If Target.Address = Range("D1").Address Then
        Call Module1.MaskSite
        Call Module1.Worksheet_Calculate
        Call Module1.Masquer_lignes
    End If
 
End Sub
Je joins le fichier au post.

Emarg.xlsm