Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je me permets de vous solliciter car je voudrais écrire une macro ayant ce comportement :
Masquer les lignes 21 à 1110 dont la valeur en colonne U est égale à 0, et ce pour toutes les feuilles exceptées celles exclues dans la condition "If".
La macro fonctionne correctement (en partie) car elle ne se lance que que sur la feuille active.
Ma boucle pour la faire tourner sur toutes les feuilles exceptées certaines ne fonctionne pas et je n'arrive pas à comprendre pourquoi.
VB:
Sub MasquerLignesZero()
Dim Ws As Worksheet
Dim c As Range
For Each Ws In Worksheets
If Ws.Name <> Sheets(1).Name And Ws.Name <> Sheets(2).Name And Ws.Name <> Sheets(3).Name And Ws.Name <> Sheets(4).Name And Ws.Name <> Sheets(5).Name And Ws.Name <> Sheets(6).Name And Ws.Name <> Sheets(7).Name And Ws.Name <> Sheets(18).Name And Ws.Name <> Sheets(19).Name Then
For Each c In Range("U21:U1110")
c.EntireRow.Hidden = (c = 0)
Next c
End If
Next Ws
End Sub
Il doit y avoir une subtilité mais elle m'échappe.
Je mets du coup ici la macro modifiée selon vos retours, et qui fonctionne parfaitement 🙂
VB:
Sub MasquerLignesZero()
Dim Ws As Worksheet
Dim c As Range
For Each Ws In Worksheets
If Ws.Name <> Sheets(1).Name And Ws.Name <> Sheets(2).Name And Ws.Name <> Sheets(3).Name And Ws.Name <> Sheets(4).Name And Ws.Name <> Sheets(5).Name And Ws.Name <> Sheets(6).Name And Ws.Name <> Sheets(7).Name And Ws.Name <> Sheets(18).Name And Ws.Name <> Sheets(19).Name Then
With Ws
For Each c In .Range("U21:U1110")
c.EntireRow.Hidden = (c = 0)
Next c
End With
End If
Next Ws
End Sub
Je me permets de vous solliciter car je voudrais écrire une macro ayant ce comportement :
Masquer les lignes 21 à 1110 dont la valeur en colonne U est égale à 0, et ce pour toutes les feuilles exceptées celles exclues dans la condition "If".
La macro fonctionne correctement (en partie) car elle ne se lance que que sur la feuille active.
Ma boucle pour la faire tourner sur toutes les feuilles exceptées certaines ne fonctionne pas et je n'arrive pas à comprendre pourquoi.
VB:
Sub MasquerLignesZero()
Dim Ws As Worksheet
Dim c As Range
For Each Ws In Worksheets
If Ws.Name <> Sheets(1).Name And Ws.Name <> Sheets(2).Name And Ws.Name <> Sheets(3).Name And Ws.Name <> Sheets(4).Name And Ws.Name <> Sheets(5).Name And Ws.Name <> Sheets(6).Name And Ws.Name <> Sheets(7).Name And Ws.Name <> Sheets(18).Name And Ws.Name <> Sheets(19).Name Then
For Each c In Range("U21:U1110")
c.EntireRow.Hidden = (c = 0)
Next c
End If
Next Ws
End Sub
Il doit y avoir une subtilité mais elle m'échappe.
Un fichier aurait été le bienvenu.
Remplace les Sheets(x).Name par le nom de la feuille en dur.
exemple si le nom de la feuille Sheet(1) est "MonOnglet"
écris alors if ws.name <> "MonOnglet" ça devrait fonctionner.
Un fichier aurait été le bienvenu.
Remplace les Sheets(x).Name par le nom de la feuille en dur.
exemple si le nom de la feuille Sheet(1) est "MonOnglet"
écris alors if ws.name <> "MonOnglet" ça devrait fonctionner.
Bonjour
Il faudrait préciser sur quelle feuille travailler.
VB:
Sub MasquerLignesZero()
Dim Ws As Worksheet
Dim c As Range
For Each Ws In Worksheets
If Ws.Name <> Sheets(1).Name And Ws.Name <> Sheets(2).Name And Ws.Name <> Sheets(3).Name And Ws.Name <> Sheets(4).Name And Ws.Name <> Sheets(5).Name And Ws.Name <> Sheets(6).Name And Ws.Name <> Sheets(7).Name And Ws.Name <> Sheets(18).Name And Ws.Name <> Sheets(19).Name Then
With Ws
For Each c In .Range("U21:U1110")
c.EntireRow.Hidden = (c = 0)
Next c
End If
end with
Next Ws
End Sub
Je mets du coup ici la macro modifiée selon vos retours, et qui fonctionne parfaitement 🙂
VB:
Sub MasquerLignesZero()
Dim Ws As Worksheet
Dim c As Range
For Each Ws In Worksheets
If Ws.Name <> Sheets(1).Name And Ws.Name <> Sheets(2).Name And Ws.Name <> Sheets(3).Name And Ws.Name <> Sheets(4).Name And Ws.Name <> Sheets(5).Name And Ws.Name <> Sheets(6).Name And Ws.Name <> Sheets(7).Name And Ws.Name <> Sheets(18).Name And Ws.Name <> Sheets(19).Name Then
With Ws
For Each c In .Range("U21:U1110")
c.EntireRow.Hidden = (c = 0)
Next c
End With
End If
Next Ws
End Sub
Bonjour,
J'arrive un peu après la bataille, mais comme j'ai testé une modification je la propose ci-dessous (dans une forme un peu plus simple pour les tests) :
Sub MasquerLignesZero()
Dim Ws As Object, c As Range, feuille As String
Application.ScreenUpdating = False
feuille = ActiveSheet.Name
For Each Ws In Worksheets
If Ws.Name <> Sheets(1).Name And Ws.Name <> Sheets(2).Name And Ws.Name <> Sheets(3).Name Then
Ws.Activate
For Each c In Range("A1:A36")
c.EntireRow.Hidden = (c = 0)
Next c
End If
Next Ws
Sheets(feuille).Activate
Application.ScreenUpdating = True
End Sub
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD