Macros à la suite?
Re,
Une proposition :
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
Bonjour
voila une macro Cache Colonne & Ligne a toi de voir
Sub CacheColonneLigne()
Dim C&, L&
Application.ScreenUpdating = False
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
For C = 5 To 11
If Cells(2, C).Value = "" Then
Columns(C).EntireColumn.Hidden = True
End If
Next
For L = 6 To 100
For C = 5 To 11
If Cells(L, C).Value = "" Then
Rows(L).EntireRow.Hidden = True
Exit For
End If
Next
Next
End Sub
Bonjour
voila une macro Cache Colonne & Ligne a toi de voir
Sub CacheColonneLigne() Dim C&, L& Application.ScreenUpdating = False Cells.EntireColumn.Hidden = False Cells.EntireRow.Hidden = False For C = 5 To 11 If Cells(2, C).Value = "" Then Columns(C).EntireColumn.Hidden = True End If Next For L = 6 To 100 For C = 5 To 11 If Cells(L, C).Value = "" Then Rows(L).EntireRow.Hidden = True Exit For End If Next Next End Sub
Merci Archer, j'ai testé ta macro, très intéressant.
J'ai du la compléter pour bien signifier que l'opération doit se faire sur la feuille "Effectif" :
Sub CacheColonneLigne()
Dim O As Worksheet
Dim C&, L&
Set O = Worksheets("Effectif")
Application.ScreenUpdating = False
O.Cells.EntireColumn.Hidden = False
O.Cells.EntireRow.Hidden = False
For C = 5 To 11
If O.Cells(2, C).Value = "" Then
O.Columns(C).EntireColumn.Hidden = True
End If
Next
For L = 6 To 100
For C = 5 To 11
If O.Cells(L, C).Value = "" Then
O.Rows(L).EntireRow.Hidden = True
Exit For
End If
Next
Cependant, ta macro ne conserve que les lignes avec tous les critères cochés,
Le but est de seulement supprimer les lignes vides, et de conserver celles où au moins un des critères est coché.
J'espère que c'est clair, merci!
Re,
Une proposition :
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
Merci Thau !!!!
Ca fonctionne du tonnerre.
Un méga grand merci à toi et à tous les participants!
Ca marche dans tous les cas, sauf quand aucun critère n'est coché,
ERREUR 1004
Cela serait bien d'avoir le tableau sans les masque dans cette situation, mais bon, c'est anecdotique.
Merci.
Re,
Tu parles pour les colonnes, les lignes ou les deux ?
Bonjour
peux etre comme ca
Sub CacheColonneLigne()
Dim C&, L&, X&
Feuil4.Select
Application.ScreenUpdating = False
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
For C = 5 To 11
If Cells(2, C).Value = "" Then
Columns(C).EntireColumn.Hidden = True
End If
Next
For L = 6 To Range("B" & Rows.Count).End(xlUp).Row
X = 0
For C = 5 To 11
If Cells(L, C).Value <> "" Then
X = X + 1
Exit For
End If
Next
If X = 0 Then Rows(L).EntireRow.Hidden = True
Next
End Sub
A+
Maurice
Bonjour, je reviens vers vous en réactivant le tuto car j'ai oublié "un critère" dans mon fichier....
Vraiment désolé.
En plus des critères précédents, je me dois de masquer les lignes qui ne correspondent pas à la valeur affichée dans la colonne D2 de l'onglet "Effectif". Je m'explique, si cette cellule prend pour valeur "Quai A", seules les lignes contenant en colonne D la valeur Quai A doivent être affichées, donc : "Quai A" et "Quai A et point M". De même, si j'ai "Point M", je ne dois avoir seulement que les lignes avec "Point M" et "Quai A et point M".
Enfin, si j'ai "Quai A et point M" toutes les lignes (qui contiennent au moins un critère coché) doivent s'afficher.
J'ai testé la macro ci-dessous mais sans succès:
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
Et l'ai placée dans la macro d'appel :
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
Merci d'avance pour vos lumières et désolé de vous solliciter une nouvelle fois, je n'avais pas cette information...