Trouver une macro VBA pour masquer automatiquement des lignes

Bonjour à tous,

après des recherches, je n'ai pas trouvé de macro qui fonctionne avec mon fichier.

J'aimerais pour la plage de données C9:C14 que les lignes n'ayant pas de données dans les colonnes C à F se masquent automatiquement selon une macro dont je pourrais modifier les plages afin de l'utiliser dans d'autres fichier Excel que j'utilise. Dans fichier ci-joint, les lignes 10 et 13 doivent être masquées.

Merci :)

Bonjour Franck125

Code à intégrer dans un module de ton fichier ou dans un fichier de macros persos et à appeler via AL+F8 ou à associer à un bouton menu.

' Procédure à appeler via ALTT+F8 ou à intégrer dans un menu
Sub MasquerSiLigneVide()
Dim nLig As Long
Dim nCol As Integer
Dim lLigAMasquer As Boolean
   ' avec la plage sélectionnée
   With Selection
      ' Par précaution on ne traite pas une selection ne comportant qu'une seule cellule ou comportant plusieurs zones
      If (.Cells.Count = 1) Or (.Areas.Count > 1) Then Exit Sub
      ' Parcours de toutes les lignes de cette plage
      For nLig = 1 To .Rows.Count
         ' Par défaut, on part du principe que la ligne sera à masquer (donc vide)
         lLigAMasquer = True
         ' Parcours des colonnes de cette ligne
         For nCol = 1 To .Columns.Count
            ' Si au moins une cellule est renseignée, la ligne n'est pas à masquer et il est inutile de poursuivre la vérification
            If .Cells(nLig, nCol).Value <> "" Then
               lLigAMasquer = False
               Exit For
            End If
         Next
         ' Si la ligne est vide, on la masque
         If lLigAMasquer = True Then .Rows(nLig).EntireRow.Hidden = True
      Next
   End With
End Sub

Cdlt,

Cylfo

Bonjour Frank125

Pourquoi ne pas tout simplement utiliser le filtre

Une colonne qui fait la somme et lignes qu'on masque si égal 0

A+

Edit : bonjour Cylfo

Bonjour

Essayez avec ce code

Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range

Set plage = ActiveSheet.Range("C9:F14")
If Not Intersect(Target, plage) Is Nothing Then
    If WorksheetFunction.CountA(Range(Cells(Target.Row, 3), Cells(Target.Row, 6))) = 0 Then
        Target.EntireRow.Hidden = True
    End If
End If
End Sub

Code à placer dans la feuille Resultat et qui est exécuté dès que vous changez une valeur entre les colonnes C et F dans la plage de la ligne 9 à 14

Cordialement

Edit : oups.... j'avais pas rafraichi.... avant de poster

Bonjour BrunoM45, Dan,

Franck125 aura l'embarras du choix

Bonjour,

merci Bruno pour la suggestion, cependant même si je filtre une colonne.. ce filtre ne tient pas comptes des valeurs nulles dans les autres colonnes. Question pour Dan, merci pour ce généreux code.. est-ce qu'on peut modifier la nature de la macro pour qu'elle s'enregistre dans un module et qu'elle s'inscrive dans la liste des macros à exécuter à l'onglet développeur\Macro ?

je l'ai copié dans le worksheet dans un module mais la macro n'est pas listée dans l'onglet Développeur\Macro..

....le worksheet dans un module ???

faites ceci :

- click droite sur le nom de l'onglet
- choisir "Visualiser le code"
- collez le code dans la fenêtre

est-ce qu'on peut modifier la nature de la macro pour qu'elle s'enregistre dans un module et qu'elle s'inscrive dans la liste des macros à exécuter à l'onglet développeur\Macro ?

Oui mais alors le masquage ne se fera pas automatiquement comme vous le demandez dans le titre.

Je crois que la macro doit débuter par Sub plutôt que Private Sub, est-ce possible ?

Je crois que la macro doit débuter par Sub plutôt que Private Sub, est-ce possible ?

Non. Faites ce que je vous ai écrit avant --> https://forum.excel-pratique.com/s/goto/1158505

EDIT : après dans votre fichier faites un essai en supprimant la valeur 90 eur en C12

ok merci pour l'information Dan

La macro fonctionne. Les données arrivent toutefois de d'autres onglets, je me rend compte qu'il serait préférable que la macro s'exécute sur demande va un bouton ou le Alt F8.

Les données arrivent toutefois de d'autres onglets,

Ah oui si vous donnez pas toutes les infos....

Alors comme ceci :

Sub masquer()
Dim plage As Range, cel As Range

Set plage = ActiveSheet.Range("C9:C14")
For Each cel In plage
    If WorksheetFunction.CountA(Range("C" & cel.Row & ":F" & cel.Row)) = 0 Then
        cel.EntireRow.Hidden = True
    End If
Next cel
End Sub

Macro à placer dans un module puis l'associer à votre bouton
Pensez à supprimer ou désactivez celle qui se trouve dans la feuille Resultat

wow ça fonctionne presque parfaitement!

J'ai certaines cellules qui contiennent un "-" qui sont des formules d'additions qui totalisent zéro mais qui ne sont pas nulles...
Y-a-t-il un moyen de masquer les lignes contenant non seulement des valeurs nulles mais aussi des valeurs zéro ?

J'ai certaines cellules qui contiennent un "-" qui sont des formules d'additions qui totalisent zéro mais qui ne sont pas nulles...
Y-a-t-il un moyen de masquer les lignes contenant non seulement des valeurs nulles mais aussi des valeurs zéro ?

Heu je n'ai pas compris. Valeurs nulles ou zéro c'est quoi la différence ?

Edit : dans le code essayez en remplaçant COUNTA par SUM

** merci ça fonctionne avec avec la formule SUM

Sujet réglé

merveilleux!!!!!!

*** merci ça fonctionne avec avec la formule SUM

Ok. On peut supprimer le dernier fichier que vous avez posté

SI terminé pensez à

Cordialement

Rechercher des sujets similaires à "trouver macro vba masquer automatiquement lignes"