Masquer Cellule = 0

Bonjour,

J'ai essayé mais je n'y arrive pas sur mon fichier Excel.

Dans ma feuille "Bilans.." si de la plage B10:B69 = 0 alors masquer la ligne pour celà j'ai fait:

Dans ma feuille:

    Private Sub Worksheet_Change(ByVal Target As Range)
    Call Masque_lig
    End Sub

Dans mon Module:

Sub Masque_lig()
Application.ScreenUpdating = False
Dim cellule As Range
For Each cellule In Range("B10:B69")
If cellule.Value = 0 Then
cellule.EntireRow.Hidden = True
Else
cellule.EntireRow.Hidden = False
End If
Next cellule
End Sub

Mais ça ne marche pas.

J'ai également essayé avec un filtre et mes cellules I1 et I2..

Bonjour

Dans les formules des cellules de la feuille Bilan, en colonne B, il y a une condition qui donne un espace (" ") et non zéro.

Il te faut donc adapter cette valeur à la macro :

Sub Masque_lig()

Application.ScreenUpdating = False

Dim cellule As Range

For Each cellule In Range("B10:B69")

If cellule.Value = " " Then

cellule.EntireRow.Hidden = True

Else

cellule.EntireRow.Hidden = False

End If

Next cellule

End Sub

OK ?

Bye !

Oui je sais, mais par exemple en B14 je n'ai pas mis la condition ce qui donne 0 et la ligne ne se cache pas.

Du coup là je vient tout de même d'essayer en mettant " " au lieu du 0 mais les lignes ne se cachent toujours pas..

Bonjour Sebyg,

Essaye avec : If cellule.Value = " " Or cellule.Value = 0 Then

dhany

Bon... Je ne sais pas trop pourquoi ni comment mais j'ai appuyé sur entré et ça à fonctionné d'un seule coup !! ^^

C'est top merci à vous !

Bonjour,

Essaie ainsi :

Formule :

B10 : =SI(ESTVIDE('CE2 T1'!B3);"";'CE2 T1'!B3)

Procédure :

Sub Masque_lig()
    Application.ScreenUpdating = False
    Dim cellule As Range
    For Each cellule In Range("B10:B69")
        If cellule.Value = 0 Or Len(cellule) = 0 Then
            cellule.EntireRow.Hidden = True
        Else
            cellule.EntireRow.Hidden = False
        End If
    Next cellule
End Sub

Les lignes ce sont belle et bien caché d'un seul coup mais maintenant dans ma feuille CE2 quand j'écris dans la cellule "B7" je retourne dans ma feuille bilan mais ma ligne 14 ne réapparaît pas...

Je dois changer de nom d'élève pour que ça fonctionne une idée ?

Re,

Supprime ta procédure événementielle existante par celle ci :

Private Sub Worksheet_Activate()
    Masque_lig
End Sub

Ouiiii Ça fonctionne au poil !

Sublime merci infiniment pour votre savoir faire et de prendre le temps de le partager !

Je relance le sujet, j'ai voulu Protéger ma feuille mais lorsque j'ai fait ça dut coup mes lignes n'apparaissent et ne disparaissent plus.. ça m'affiche un message d'érreur

Sub Masque_lig()
Application.ScreenUpdating = False
Dim cellule As Range
For Each cellule In Range("B10:B69")
If cellule.Value = " " Or cellule.Value = 0 Then
cellule.EntireRow.Hidden = True
Else
cellule.EntireRow.Hidden = False
End If
Next cellule
End Sub

Concernant cette ligne:

cellule.EntireRow.Hidden = False

Une idée ?

Bonjour Sebyg,

Tu dois juste ajouter 2 lignes dans le code VBA :

Sub Masque_lig()
  Application.ScreenUpdating = False
  Dim cellule As Range
  ActiveSheet.Unprotect "pwd"
  For Each cellule In Range("B10:B69")
    If cellule.Value = " " Or cellule.Value = 0 Then
      cellule.EntireRow.Hidden = True
    Else
      cellule.EntireRow.Hidden = False
    End If
  Next cellule
  ActiveSheet.Protect "pwd"
End Sub

Remplace pwd par ton mot de passe ; si tu as protégé ta feuille sans mettre de mot de passe,

mets simplement ActiveSheet.Unprotect puis ActiveSheet.Protect : rien à droite.

dhany

Ça fonctionne très bien merci !!

Maintenant dans ma plage "B4:B88" toute cellule vide doit être masquer.

Si j'écrit "mon texte" dans la cellule B4 afficher la ligne vide de dessous.

Mais si j'écris dans une autre cellule comme par exemple B12 afficher la ligne de dessous.

En faite j'aimerai exactement ce code:

Sub Masque_lig()
  Application.ScreenUpdating = False
  Dim cellule As Range
  ActiveSheet.Unprotect "pwd"
  For Each cellule In Range("B10:B69")
    If cellule.Value = " " Or cellule.Value = 0 Then
      cellule.EntireRow.Hidden = True
    Else
      cellule.EntireRow.Hidden = False
    End If
  Next cellule
  ActiveSheet.Protect "pwd"
End Sub

Mais en affichant tout de même une ligne vide en dessous de la ligne ou je souhaite écrire..

Je peux écrire en B6 alors ça affiche la ligne 7 mais en parallèle je peux écrire en B25 donc afficher la ligne 26 mais de la ligne 8 incluse et 24 incluse serrons masquer.

Bonjour Sebyg,

Tu a écrit :

Maintenant dans ma plage "B4:B88" toute cellule vide doit être masquer.

Je te propose ce code VBA :

Option Explicit

Private Sub Masque_lig(Plg As Range)
  Dim cellule As Range: Application.ScreenUpdating = 0
  ActiveSheet.Unprotect "pwd"
  For Each cellule In Plg
    With cellule
      .EntireRow.Hidden = (.Value = " " Or .Value = 0)
    End With
  Next cellule
  ActiveSheet.Protect "pwd"
End Sub

Sub MaskPlg1()
  Masque_lig [B4:B88]
End Sub

Sub MaskPlg2()
  Masque_lig [B10:B69]
End Sub

Tu ne peux pas appeler la sub Masque_lig() car elle est devenue privée ; à la place, appelle MaskPlg1() ou MaskPlg2() qui appellent Masque_lig() pour faire le même travail, mais selon une plage différente : B4:B88 ou B10:B69.


Pour ce que tu as demandé ensuite, ce n'est pas bien clair !

Tu écris ton texte dans la cellule B4 : ok ; et ensuite ? tu veux lancer une autre macro pour afficher la ligne en dessous ? donc afficher la ligne 5 ; c'est ça ? et après avoir saisi un texte en B12, tu veux lancer la même macro pour afficher la ligne 13 ? si oui, essaye cette sub :

Sub ShowALig()
  ActiveSheet.Unprotect "pwd"
  Rows(ActiveCell.Row + 1).Hidden = False
  ActiveSheet.Protect "pwd"
End Sub

dhany

Rechercher des sujets similaires à "masquer"