XL 2016 VBA For Each dans un For Each

  • Initiateur de la discussion Initiateur de la discussion Waldhari
  • Date de début Date de début

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 !

Waldhari

XLDnaute Nouveau
Bonjour,

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.

Pourriez-vous m'aider ?

Je vous remercie par avance
 
Solution
C'est parfait, merci à tous.

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,

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.

Pourriez-vous m'aider ?

Je vous remercie par avance
Bonjour,

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.

A+
 
Bonjour,
Essayez
For Each c In Ws.Range("U21:U1110")

Aaaah merci c'était ce bout qui manquait effectivement 🙂

Bonjour,

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.

A+

Est-ce que ce n'est pas mieux de laisser comme je l'ai fait ? Si les noms des onglets sont modifiés ça ne perturbera pas la macro, ou je me trompe ?

Merci bcp à vous deux
 
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
 
C'est parfait, merci à tous.

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

Discussions similaires

  • Question Question
Microsoft 365 Excel VBA
Réponses
5
Affichages
352
Réponses
10
Affichages
358
Réponses
0
Affichages
538
Réponses
7
Affichages
547
Retour