Sub Nettoyer()
Dim a, ligdeb&, w As Worksheet, P As Range
a = Array("M1", "M2", "M3", "M4", "M5") 'liste des feuilles à traiter
ligdeb = 7 '1ère ligne à traiter
Application.ScreenUpdating = False
For Each w In Worksheets
If IsNumeric(Application.Match(w.Name, a, 0)) Then
Set P = Intersect(w.Rows(ligdeb & ":" & w.Rows.Count), w.UsedRange.EntireRow)
If Not P Is Nothing Then
P.Columns(1).Insert xlToRight 'insère une colonne auxiliaire
P.Columns(1) =...
Merci, c'est un exemple. Supprimer les lignes des feuilles M1, M2, M3 et M4 lorsqu'il y a de l'espace dans les cellules de la colonne E à TBonjour, oui c'est faisable avec un peu fichier avec des données factices illustrant ton véritable fichier.
Option Explicit
Option Compare Text
Sub supprimer_lignes_vides()
Dim Feuil As Worksheet, dl As Integer, i As Integer, Rng As Range, j As Integer, kit As Boolean
For Each Feuil In ThisWorkbook.Worksheets
If Feuil.Name <> "data" And Feuil.Name <> "janvier" Then
With Sheets(Feuil.Name)
dl = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set Rng = .Range("E7:T" & dl)
For i = dl To 8 Step -1
For j = 1 To Rng.Columns.Count
Debug.Print .Cells(i, j + 4)
If .Cells(i, j + 4).Value = "" Then
kit = True
Else
kit = False
Exit For
End If
Next j
Debug.Print Feuil.Name, i, j, kit
If kit Then .Rows(i).Delete
Next i
End With
End If
Next
MsgBox "Traitement terminé!"
End Sub
Hé, oui quand on ne pose pas son problème comme il se doit, la réponse ne peut que se rapprochait du résultat réel souhaité.Merci pour votre aide. Mais le fichier d'origine contient plus de 20 feuilles. Il sera difficile de toutes les énumérer. Puis-je ajouter un exemple ?
MyArray= Array("Feuil1", "feuil2")
Sur cette ligne les feuilles non concernées par la suppression. Je te laisse adapter à ta guise.If Feuil.Name <> "data" And Feuil.Name <> "janvier" Then
Oui. Mais il faut boucler sur l'array.Puis-je ajouter un exemple ?
MyArray= Array("Feuil1", "feuil2")
Sub Nettoyer()
Dim a, ligdeb&, w As Worksheet, P As Range
a = Array("M1", "M2", "M3", "M4", "M5") 'liste des feuilles à traiter
ligdeb = 7 '1ère ligne à traiter
Application.ScreenUpdating = False
For Each w In Worksheets
If IsNumeric(Application.Match(w.Name, a, 0)) Then
Set P = Intersect(w.Rows(ligdeb & ":" & w.Rows.Count), w.UsedRange.EntireRow)
If Not P Is Nothing Then
P.Columns(1).Insert xlToRight 'insère une colonne auxiliaire
P.Columns(1) = "=1/SIGN(SUMPRODUCT(N(RC[5]:RC[20]<>"""")))"
P.Columns(1) = P.Columns(1).Value 'supprime les formules
P.Sort P(1), xlAscending, Header:=xlNo 'tri pour regrouper et accélérer
On Error Resume Next 'si aucune SpecialCell
P.Columns(1).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
P.Columns(1).Delete xlToLeft 'supprime la colonne auxiliaire
On Error GoTo 0
End If
End If
Next
End Sub
Option Explicit
Sub supprimer_lignes_vides_filtrees()
Dim Sh As Worksheet, i As Integer, Plg As Range
Application.Calculation = xlManual
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each Sh In ThisWorkbook.Worksheets
If Sh.Name Like "M*" Then
With Sheets(Sh.Name)
Set Plg = .Range("A8:T" & .UsedRange.SpecialCells(xlCellTypeLastCell).Row)
If Not .AutoFilterMode Then .Rows("7:7").AutoFilter
For i = 5 To 20
Plg.AutoFilter Field:=i, Criteria1:="="
Next i
On Error Resume Next
Plg.SpecialCells(xlCellTypeVisible).Delete
On Error GoTo 0
.AutoFilterMode = False
End With
End If
Next
MsgBox "Traitement terminé!"
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub