Masquer lignes à 0

Bonjour,

j'ai un tableau avec des chiffres, je voudrais que lorsque sur une ligne les chiffres sont tous à zéro, la ligne soit masquée.

J'ai saisi cette macro grâce à excel pratique :

Sub Masquer()
Dim i As Integer

For i = 61 To 1550
If WorksheetFunction.Sum(Range("D" & i & ":BI" & i)) = 0 Then Rows(i).EntireRow.Hidden = True
Next i

End Sub

Mais ça ne marche pas, une seule ligne reste visible alors que plusieurs lignes devraient rester visibles.

Voici le fichier de travail ci-joint.

Est ce que quelqu'un a une idée?

Merci de votre attention,

Hello essaie avec ça :

Sub Masquer()
Dim i As Integer

Application.ScreenUpdating = False

For i = 61 To 1550
If WorksheetFunction.Sum(Range("D" & i & ":BI" & i)) = 0 Then 
Rows(i & ":" & i).Select
Selection.EntireRow.Hidden = True
Next i

Application.ScreenUpdating = True

End sub

Sinon tu as une approche par PowerQuery qui fonctionne bien également :)

@+

merci beaucoup de votre aide. Malheureusement, j'obtiens le même résultat: une seule ligne reste visible.

Hello,

Tu aurais un exemple de fichier sur 5 lignes stp ?

Ca va être vite réglé avec PowerQuery. Peux tu également me dire quelle est ta version d'Excel stp ?

@+

j'utilise excel 2202. voici une version du tableau allégé. Il faudrait qu'après macro, seules les lignes 27 et 29 restent. Je ne connais pas power query

Hello,

Je n'avais pas vu car ce n'était pas indenté mais tu n'as pas mis la fin d'instruction de ta condition à savoir "End if"

Essaie ça :

Sub Masquer()
Dim i As Integer

Application.ScreenUpdating = False

For i = 61 To 1550
    If Application.WorksheetFunction.Sum(Range("D" & i & ":BI" & i)) = 0 Then
        Rows(i & ":" & i).Select
        Selection.EntireRow.Hidden = True
    End If
Next i

Application.ScreenUpdating = True

End Sub

@+

merci, désolé j'obtiens un message d'erreur: impossible de lire propriete Sum de worksheet function

Bonjour à tous!

nami77, Pourquoi ne pas prendre seulement une colonne en référence comme ceci par exemple la colonne "H" ou 8 ?

Sub Masquer()
Dim i As Integer
Application.ScreenUpdating = False
For i = 27 To 1550
    If Cells(i, 8) = 0 Then
        Rows(i).EntireRow.Hidden = True
    End If
Next i
Application.ScreenUpdating = True
End Sub

Sub Affiche()
Dim i As Integer
Application.ScreenUpdating = False
For i = 27 To 1550
    If Cells(i, 8) = 0 Then
        Rows(i).EntireRow.Hidden = False
    End If
Next i
Application.ScreenUpdating = True
End Sub

Bonne journée !

Merci Nordik de ta suggestion, mais je ne peux pas me baser sur une seule colonne car les utilisateurs du tableau peuvent potentiellement saisir des chiffres dans toutes les colonnes

Hello,

Quand je prends ton fichier et que je mets ce code ça marche pour moi

Sub Masquer()
Dim i As Integer

Application.ScreenUpdating = False

For i = 27 To 38
    If Application.WorksheetFunction.Sum(Range("D" & i & ":BI" & i)) = 0 Then
        Rows(i & ":" & i).Select
        Selection.EntireRow.Hidden = True
    End If
Next i

Application.ScreenUpdating = True

End Sub

Tu peux re tester ?

@+

Merci Baroute, en effet ça marche sur le petit tableau, mais pour une raison que je n'explique pas, ça ne marche pas sur le grand tableau avec ce code (j'ai juste changer la ligne :

For i = 61 To 1550
Sub Masquer()
Dim i As Integer

Application.ScreenUpdating = False

For i = 61 To 1550
    If Application.WorksheetFunction.Sum(Range("D" & i & ":BI" & i)) = 0 Then
        Rows(i & ":" & i).Select
        Selection.EntireRow.Hidden = True
    End If
Next i

Application.ScreenUpdating = True

End Sub

Hello

Moi ca fonctionne mais ca prend du temps par contre, sans ton fichier je ne peux rien faire de plus

@+

Bonjour,

Essaie peut-être avec ce code :

Sub Masque_0()
Dim DerLig As Long
Dim Cel As Range
With Sheets("BUDGET")
    .Cells.EntireRow.Hidden = False
    DerLig = .Cells(Rows.Count, "A").End(xlUp).Row
    For Each Cel In .Range("P24:P" & DerLig).SpecialCells(xlCellTypeFormulas, 23)
        Cel.EntireRow.Hidden = Cel.Value = 0
    Next Cel
End With
End Sub

Bonne journée

merci cousinhub, désolé ça ne marche pas, ça élimine presque toutes les lignes (donc ça élimine aussi des lignes qui ne sont pas à 0).

Je remets le tableau entier sur la demande de Baroute, merci encore

Hello c'est bon,

T'avais un #REF ligne 111 colonne je ne sais plus, donc quand tu faisais la somme d'un #REF il buggait.

Essaie ça j'ai rajouté une commande de recalcul qui se désactive et réactive pour accélérer le code

@+

Merci Baroute, effectivement, ça marche! Le problème venait donc de mon fichier qui était non conforme, il faut donc que je commence par le nettoyer.

merci encore!

Bonjour à tous,

Un essai....qui devrait, en principe, être plus rapide...

Sub Afficher_masquer()
 Dim R As Range, C, b
 Dim start As Single: start = Timer
  Application.Calculation = xlCalculationManual
  Application.ScreenUpdating = False
   For i = 61 To 1550
    If Application.WorksheetFunction.Sum(Range("D" & i & ":BI" & i)) = 0 Then
     If R Is Nothing Then
      b = Rows(i).EntireRow.Hidden
       Set R = Rows(i)
     End If
     Set R = Union(R, Rows(i))
    End If
   Next i
  If Not R Is Nothing Then R.EntireRow.Hidden = Not b     'en 1 commande, toutes les lignes
 Application.ScreenUpdating = True
 Application.Calculation = xlCalculationAutomatic
 MsgBox "durée du traitement: " & Timer - start & " secondes"
End Sub

Double action:

  • si lignes affichées, on les masque.
  • si lignes masquées, on les affiche.

[source] : https://forum.excel-pratique.com/s/goto/1103530 BsAlv

Cordialement,

Rechercher des sujets similaires à "masquer lignes"