Macro pour masquer/afficher ligne si valeur 0 dans colonne C

Bonjour,

Comment serait le script d'une macro qui permettrait de masquer / afficher des lignes si valeur 0 contenue dans des cellules de la colonne C.

Le but et de masquer les lignes pour lesquelles il y a une valeur zéro dans la colonne C. La macro permettrait de masquer et réafficher.

Bien cordialement,

Vincent

Bonjour Vincentt le forum

un petit fichier exemple et on te fera cela

a+

papou

Bonjour,

début de réponse,à adapter selon ton fichier:

Sub Masque_lig() ' masque les lignes ou la valeur dans les cellules de la colonne C sont =0

Range("C1:C50").Select

For Each cellule In Selection

If cellule.Value = "0" Then cellule.EntireRow.Hidden = True

Next cellule

End Sub

Sub Affiche_lig() 'affiche les lignes ou la valeur dans les cellules de la colonne C sont =0

Range("C1:C50").Select

Selection.EntireRow.Hidden = False

End Sub

Cordialement

Bonjour,

Une autre manière d'appréhender la question avec la proriété AutoFilter

(cette solution masque les lignes vides ou égales à 0)

Cordialement

Code à recopier et voir fichier joint

Option Explicit
'----------------------------------------------------------------
Public Sub Masquer()

    Sheets(1).Select
        If Sheets(1).AutoFilterMode Then
            Sheets(1).AutoFilterMode = False
        End If

    Range("A1").CurrentRegion.Select

    With Selection
        .AutoFilter Field:=3, Criteria1:=">0", Operator:=xlAnd
    End With

End Sub
'----------------------------------------------------------------
Public Sub Afficher()

    If Sheets(1).AutoFilterMode Then
        Sheets(1).AutoFilterMode = False
    End If

End Sub
1'931autofilter.xlsm (17.46 Ko)

Bonjour,

Pour Patrick :

  • Evite le SELECT. Ton code fonctionne plus aussi comme ceci
  • Prends l'habitude de déclarer tes variables
Sub Masque_lig() ' masque les lignes ou la valeur dans les cellules de la colonne C sont =0
Dim cellule as range
For Each cellule In Range("C1:C50").
If cellule.Value = "0" Then cellule.EntireRow.Hidden = True
Next cellule
End Sub

Idem pour le code suivant.

Autre chose, utilise les balises de code pour placer ton code dans tes réponses

Bonne journée

Amicalement

Merci tout le monde !

Vincent

Bonjour,

Je viens de me servir de votre macro (en réadaptant à mes lignes et colonnes) et cela fonctionne du feu de dieu !

Merci beaucoup, vous êtes géniaux

Lenou

Bonjour à tous,

Je me permet de remonter se poste car mon problème est similaire :

Je souhaiterai que lorsque la cellule A (plus particulièrement A17 à A53) est égale à 0 la ligne se masque. Mais je souhaiterai également qu'a chaque nouvelle donnée entrée dans la feuille qu'Excel affiche automatiquement les cellules A étant différente de 0 et masque les nouvelles ayant basculé à 0.

Pouvez-vous m'aider?

Bonjour

Le code dans le module devient :

Sub Masque_lig() 
Dim cellule As Range
For Each cellule In Range("A17:A53")
If cellule.Value = "0" Then cellule.EntireRow.Hidden = True
Next cellule
End Sub

Et tu places celui-ci dans la feuille concernée

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B17:E53")) Is Nothing Then
Call Masque_lig
End If
End Sub

Dans mon exemple, la cellule A dépend des valeurs en cellules B:E

Tu modifies selon ton fichier.

Amicalement

Nad

Bonjour et merci,

Cela masque effectivement bien mes lignes contenant un 0 en A. Mais par contre cela ne les démasque pas si elle sont masquées et que la valeur A devient différente de 0 lorsque je change une valeur dans ma page.

Re

De quelle manière modifies-tu la valeur de la colonne A ?

J'ai considéré une formule sur la même ligne ce qui n'est apparemment pas le cas.

Peux-tu joindre ton fichier ?

Edit

Essaye :

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

Pense à bien modifier la/les cellules qui déclenche(nt) le code dans la Private Sub

Amicalement

Nad

Ne peut on pas faire réagir la macro à chaque modification sur la page?

Je peux joindre la feuille mais il y a tellement de données qu'il n'est facile de la comprendre.

Re

Bien sûr que l'on peut - Il suffit d'enlever la ligne disant quelles cellules doivent déclencher le code

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

Mais faire tourner un code quand ce n'est pas nécessaire ...

Nad

Je dois faire mal quelque chose...

Voici mon fichier, les valeurs qui pourront être modifiées sont celles repérées en vert.

195test.zip (18.48 Ko)

Tu as mis le code du Module1 dans la Feuille et inversement

Je te laisse modifier - Tu testes et tu me dis

Nad

Ah effectivement... Merci! Ça marche!

Dernière petite chose, lorsque je protège la feuille j'ai une erreur avec la macro :

Erreur d'éxecution '1004';

Impossible de définir la propriété Hidden de la classe Range.

Si tu n'as pas de mot de passe

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

Si tu as un mot de passe

Sub Masque_lig()
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect ("TonMotDePasse")
    Dim cellule As Range
    For Each cellule In Range("A17:A53")
    If cellule.Value = 0 Then
    cellule.EntireRow.Hidden = True
    Else
    cellule.EntireRow.Hidden = False
    End If
    Next cellule
    ActiveSheet.Protect Password:="TonMotDePasse"
    End Sub

Parfait!

Je me permet de relancer le sujet car je souhaiterai savoir comment viser une page en particulier la page "calculs"

Rechercher des sujets similaires à "macro masquer afficher ligne valeur colonne"