Macro sur feuille non active

Bonjour

Encore un problème de macro sur une autre feuille.

Voici celle d'origine pour masquer des lignes si la valeur "0" a été trouvée dans la plage C30 à C44 :

Range("C30:C44").Select
For Each o In Selection
If o.Value = "0" Then
o.EntireRow.Hidden = True
End If
Next

Mais je n'arrive à la faire fonctionner si je me trouve sur une autre feuille...

D'autre part, j'ai lu à de nombreuses reprises que la méthode Select était à éviter. Quelle serait la solution ici ?

Merci d'avance

Effectivement le Select est à éviter. Cela n'est pas utile et ne fait que ralentir l'exécution.

Par exemple, au lieu d'écrire :

Range("C30:C44").Select
For Each o In Selection

Tu peux écrire directement :

For Each o In Range("C30:C44")

Quand tu dis que tu veux la faire fonctionner sur une autre feuille, peux tu préciser ce que tu souhaites?

Etre en feuil2 et activer la macro pour la feuil1

Ou etre en feuil2 et exécuter la macro sur la feuille active ?

Bonjour boby63, melch

Voici une correction possible

Sub CacherZero()
Dim onglet As Object

    Set onglet = Worksheets("ZERO")
    For Each o In onglet.Range(Cells(6, 2), Cells(10, 2))
        If o.Value = 0 Then
            o.EntireRow.Hidden = True
        End If
    Next
End Sub

évidement il faut remplacer Worksheets("ZERO") par le nom de l'onglet de ton besoin

merci à vous 2

* melch : je suis sur la feuille "Acc" et je souhaite que ce soit les lignes concernées de la feuille "Synt" qui se masquent

*andrea73 : ton code marche très bien si je suis déjà positionné sur la feuille "Synt". Mais si je lance la macro alors que je suis positionné sur la feuille "Acc", j'ai un bug Erreur définie par l'application ou par l'objet

sur la ligne

For Each o In onglet.Range(Cells(30, 3), Cells(44, 3))

du code suivant :

Dim onglet As Object

    Set onglet = Worksheets("Synt")
    For Each o In onglet.Range(Cells(30, 3), Cells(44, 3))
        If o.Value = 0 Then
            o.EntireRow.Hidden = True
        End If
    Next

Bonjour,

La proposition de bobby ayant toutes les chances de ne pas marcher

Je te suggère cette autre formulation :

Sub test()
Dim o

With Worksheets("Synt")
    For Each o In .Range(.Cells(30, 3), .Cells(44, 3))
        If o.Value = 0 Then
            o.EntireRow.Hidden = True
        End If
    Next
End With

End Sub

Nota : Attention aux "."(points !)

A+

Bonjour

Impec' galopin01, ça marche nickel

Merci beaucoup, à vous tous, et bonne journée

Rechercher des sujets similaires à "macro feuille active"