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 :
Je joins le fichier au post.
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
Emarg.xlsm
Partager