XL 2016 Suppression de lignes si toutes les cellules = 0

ynx69

XLDnaute Junior
Bonjour à tous,

J'ai besoin de votre aide suite à un problème que je rencontre. Je dispose d'un classeur excel avec n feuilles.
Sur ces n feuilles, j'ai n colonnes. Chaque colonne correspond à une référence sauf les colonnes A et B qui sont mes en têtes.

Je souhaiterais , par le biais d'une macro , supprimer les lignes dont l'ensemble des cellules (en partant de la colonne C jusqu'à la n-ième ) sont égale à 0 à partir de la ligne 15 jusqu'à la ligne 78.

Dans l'exemple que je vous fournis en pièce jointe, si l'on se concentre sur les lignes 15 à 78, il y a au total 54 lignes à supprimer. Je devrais donc me retrouver avec 9 lignes qui comporterons des données.

Pourriez-vous m'éclairer sur ce point ?

En vous souhaitant une excellente journée.
 

Pièces jointes

  • suppression lignes exemple.xlsx
    19.2 KB · Affichages: 26

vgendron

XLDnaute Barbatruc
Bonjour

une idée
VB:
Sub Macro1()
'
' Macro1 Macro
'

'
    Range("M14").FormulaR1C1 = "To Sup"
    Range("M15").FormulaR1C1 = "=COUNT(RC[-10]:RC[-1])" 'formule pour detecter les lignes vides
   
    Range("M15:M78").FillDown 'recopie de la formule
    Range("A14:M14").AutoFilter 'active le filtre
    ActiveSheet.Range("$A$14:$M$83").AutoFilter Field:=13, Criteria1:="0" 'n'affiche que les lignes vides
     ActiveSheet.Range("$M$14:$M$83").SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes affichées (donc vides)
     'Range("A14:M14").AutoFilter
     Range("M14:M78").ClearContents 'on efface la colonne M
End Sub
 

ynx69

XLDnaute Junior
@vgendron je viens d'essayer ta methode, c'est brut de décofrage mais ca fonctionne très bien ! :)

Alors j'ai juste un point sur lequel j'aimerais que tu m'éclaires..

Comment puis-je adapter ta macro pour qu'elle s'éxécute sur toutes les feuilles ( de la feuille = 2 à sheet.count )
et deuxième point dans l'exemple que je t'ai donné, tu effectues les calculs en colonne M, or dans la pratique la feuille a un nombre de colonnes variables...

comment on peut coder une séquence qui :
Boucle sur les feuilles et à chaque feuille viens faire la manip que tu as codé dans la colonne suivant la derniere colonne non vide ?

Merci pour ton aide
 

vgendron

XLDnaute Barbatruc
Hello
un essai avec ceci

VB:
Sub Macro1()
'
' Macro1 Macro
'
For Each ws In Worksheets 'pour chaque feuille du classeur
    If ws.Name <> "NomFeuille" Then 'remplacer "NomFeuille" par le nom de la feuille à ne pas traiter, s'il y a
        With ws 'avec la feuille
            LastCol = .UsedRange.SpecialCells(xlLastCell).Column + 1 'récupère la dernière colonne non vide +1
            .Cells(14, LastCol).FormulaR1C1 = "To Sup"
            .Cells(15, LastCol).FormulaR1C1 = "=COUNT(RC[-10]:RC[-1])" 'formule pour detecter les lignes vides
            .Range(.Cells(15, LastCol), .Cells(78, LastCol)).FillDown 'recopie de la formule jusqu'en ligne 78
            .Rows("14:14").AutoFilter 'active le filtre sur la ligne 14
            .UsedRange.AutoFilter Field:=13, Criteria1:="0" 'n'affiche que les lignes vides sur la 13eme colonne de la zone filtrée
            .UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes affichées (donc vides)
     
            .Columns(LastCol).ClearContents 'on efface la dernière colonne qui a servi pour le calcul
        End With
    End If
Next ws
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum, ynx69, vgendron

Une autre syntaxe
(test OK sur XL 2013)
VB:
Sub a() 
Dim ws As Worksheet, l&, c& 
Application.ScreenUpdating = False 
For Each ws In Worksheets 
c = ws.Cells(2, Columns.Count).End(xlToLeft).Column + 1 
l = ws.Cells(Rows.Count, 1).End(xlUp).Row - 1 
With ws.Cells(3, c).Resize(l) 
.Value = "=1/(COUNTA(C3:L3))" 
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete 
.ClearContents 
End With 
Next 
End Sub

NB: Testé sur le fichier exemple, donc en partant du principe que toutes les feuilles commencent en ligne 2.
Donc a adapter si la structure des feuilles diffère.
 

Discussions similaires

Réponses
2
Affichages
156

Statistiques des forums

Discussions
312 339
Messages
2 087 414
Membres
103 542
dernier inscrit
feenix