Masquer la ligne entière si cellules est égale à Zéro

Bonjour,

J'ai réalisé un tableau et avec la fonction RECHERV je rempli les cellule correspondantes. Je souhaite que lorsqu'une ligne comporte des "0" que la ligne ne s'afficher plus. Ci-joint je vous transfert le tableau

Merci beaucoup.

10calculs-pro2.xlsx (23.70 Ko)

Bonsoir,

Voici :

Sub Masqueligne0()
    Dim plage As Range, cel As Range
    Set plage = Range("B23:C40")
    For Each cel In plage
        If cel.Value = "0" Then
            cel.EntireRow.Hidden = True
        Else
            cel.EntireRow.Hidden = False
        End If
    Next cel
    Set plage = Nothing
End Sub

Si il y a plus de ligne alors modifié le C40

Bonne soirée

Bonjour,

Une autre proposition à étudier.

J'ai de plus apporter quelques modifications supplémentaires.

Cdlt.

5calculs-pro2.xlsm (27.45 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$20" Then
        With Me.ListObjects(1)
            If .ShowAutoFilter Then .AutoFilter.ShowAllData
            .Range.AutoFilter field:=2, Criteria1:=">0"
        End With
    End If
End Sub

Je vous remercie pour votre rapidité !! C'est vraiment cool !!! Par contre je n'ai pas de niveau en VBA. Mon pb ne peut pas se résoudre avec une formule ? Si non je vais me lancer dans le VBA juste svp me donner le mode opératoire pour pouvoir copier vos solutions svp ! Encore merci désolé, mais j'apprend.

Re

Développeur > Visual Basic > Module

et ensuite F5 pour lancer la macro.

Le nom de la macro se situe dans la première ligne Sub ... Tu peut le modifié (attention pas d'espace tu peux mettre : _ )

Tu peux également créer un bouton : Développeur > inséré puis clique droit sur le bouton créé et affecté une macro

Sinon sans VBA je vois pas, sauf si tu souhaite juste masqué les zéros et pas la ligne entière dans se cas tu rajoute SI( ta formule = 0 ; "" ; Ta formule)

Au plaisir de rendre service

a+

Encore désolé mais je n'arrive pas à faire fonctionner la macro.

Merci bcp

Pour quelle raison ?

Un message d'erreur ? Tu ne trouve pas module ? ...

Normalement j'ai le Module 1 ok mais rien ne se produit au niveau de la feuille de calcul ?

Ci-joint la capture écran

2017 10 07

Bonjour,

Si tu veux utiliser la procédure événementielle, tu n'as nul besoin du Module1 et cela peut amener des erreurs d'exécution !

Supprime le !

J'ai modifié la procédure précédente et ajouté des commentaires pour une meilleure compréhension.

AL F11 pour ouvrir l'éditeur VBE.

Cdlt.

11calculs-pro2.xlsm (27.45 Ko)
Option Explicit
'Procédure événementielle module Feuil1 (Calculs)
Private Sub Worksheet_Change(ByVal Target As Range)
    'Si la cellule A20 est modifiée
    If Target.Address = "$A$20" Then
        With Me.ListObjects(1)
            'Désactivation du filtre (RAZ)
            If .ShowAutoFilter Then .AutoFilter.ShowAllData
            'Si A20 est vide, sortir de la procédure
            If IsEmpty(Target) Then Exit Sub
            'Sinon appliquer le filtre sur le champ Qté/1kg (Colonne 2)
            .Range.AutoFilter field:=2, Criteria1:=">0"
        End With
    End If
End Sub

Bonjour Jean Eric,

Votre solution est excellente !!! J'ai tout repris et cela marche parfaitement ! Je vous remercie pour votre assistance et également aux autres qui m'ont aidés depuis hier avec chacun j'au pu apprendre.

Petite question supplémentaire. Si j'ai p lusieurs tableau, il faut que reprenne le code à partir de quelle ligne pour coller à la suite les autres coordonnées des cellules de référence pour la liste déroulante.

Merci

@ Jean Eric

Je débute sur VBA, pourquoi est ce que les modules peuvent entrainer des erreur ?

Il vaut mieux mettre sur la feuille en question directement ? Et ce servir des modules uniquement pour les macro que l'on veut call ?

Re,

Il faut savoir si les tableaux sont sur une même feuille.

Si tel est le cas, il ne faut utiliser le nom des tableaux. Dans mon exemple, je l'ai nommé tbl_Calculs'.

Cela pourrait devenir :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$20" Then
        With Me.ListObjects("tbl_Calculs")
            If .ShowAutoFilter Then .AutoFilter.ShowAllData
            If IsEmpty(Target) Then Exit Sub
            .Range.AutoFilter field:=2, Criteria1:=">0"
        End With
        With Me.ListObjects("tbl_Calculs_2")
            If .ShowAutoFilter Then .AutoFilter.ShowAllData
            If IsEmpty(Target) Then Exit Sub
            .Range.AutoFilter field:=2, Criteria1:=">0"
        End With
    End If
End Sub

Ok J.E, si je comprends bien je dois nommer mes tableaux. J'ai essayé passe pas; Est-ce qu'il faut pas que j'introduise les cellules de références pour chaque tableau ?

Merci

Re,

Merci de joindre un fichier.

Cdlt.

Salut JE,

Je vous transmets ce fichier avec les 3 tableaux concernés et les notes.

Merci

12calculs.xlsm (39.80 Ko)

Bonjour,

Ton fichier en retour.

Cdlt.

10calculs.xlsm (44.07 Ko)
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strName As String
    If Not Intersect(Target, Range("A24,A49,A72")) Is Nothing Then
        Select Case Target.Address(False, False)
            Case "A24": strName = "Tabl2"
            Case "A49": strName = "Tabl3"
            Case "A72": strName = "Tabl4"
        End Select
        With Me.ListObjects(strName)
            If .ShowAutoFilter Then .AutoFilter.ShowAllData
            If IsEmpty(Target) Then Exit Sub
            .Range.AutoFilter field:=2, Criteria1:=">0"
        End With
    End If
End Sub

Formidable JE !!! le code fonctionne parfaitement.

Encore merci pour ton assistance et à bientôt. Bravo !

Re,

Merci

Pense à clore le sujet.

Bonne soirée.

Rechercher des sujets similaires à "masquer ligne entiere egale zero"