Supprimer des lignes dont la valeur en colone A se termine par "_ENR"

Bonjour à toutes et à tous,

J'extrais un fichier EXCEL toutes les semaines contenant 47000 lignes mais il y a des lignes erronés. Je dois donc les supprimés manuellement toutes les semaines.

Je débute VBA et je ne suis pas un pro d'EXCEL (Désolé) et je voudrais pouvoir créé une macro que je pourrai lancer chaque semaine sur mon extraction de la semaine pour pouvoir supprimer les lignes dont la valeur en colonne A se termine par une des valeurs suivantes :

_ENR

_SCB

_BR1

_TO1

_IN1

_LO1

_RU1

_ST1

_CA1

_SCI

_LM1

_PA1

_CH1

_ZAM

Exemple de valeur dont je veux supprimer la ligne "PC2_20170421_ENR".

Je joints un exemple de fichier.

Autre info : je n'ai pas mis la totalité du fichier pour des raisons de donnée personnel mais le fichier est lourd et du coup pas très réactif.

J'ai trouvé des sujets qui parle de problème proche mais je n'ai pas réussi à les adapter à mon problème.

Merci par avance pour votre aide et j'espère que mon explication est claire.

10exemple-extrac.xlsx (877.58 Ko)

Bonjour,

Une proposition :

Sub SuppressionConditionnelle()

'Déclaration des variables
Dim Lig As Long, LigMax As Long, Listing As Variant, Code As Integer

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Sheets("ListingSuppr")
    'Chargement des codes dans une variable tableau
    Listing = .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row)
End With
With Sheets("Feuil1")
    LigMax = .Range("A" & Rows.Count).End(xlUp).Row
    For Lig = LigMax To 1 Step -1 'Boucle sur les lignes, en partant de la dernière
        For Code = LBound(Listing) To UBound(Listing) 'Boucle sur les codes
            If .Range("A" & Lig) Like "*" & Listing(Code, 1) Then .Rows(Lig).Delete 'Si correspondance, supprimer la ligne
        Next Code
    Next Lig
    MsgBox LigMax - .Range("A" & Rows.Count).End(xlUp).Row & " lignes ont été supprimées."
End With
Application.Calculation = xlCalculationAutomatic

End Sub

Le fichier :

6exemple-extrac.xlsm (888.52 Ko)

bonjour,

une proposition

edit : Salut Pedro22

Sub aargh()
    Dim td()
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        dc = .Cells(1, Columns.Count).End(xlToLeft).Column
        term = Split("_ENR,_SCB,_BR1,_TO1,_IN1,_LO1,_RU1,_ST1,_CA1,_SCI,_LM1,_PA1,_CH1,_ZAM", ",")
        ReDim td(1 To dl, 1 To 1)
        For i = 1 To dl
            s = Right(.Cells(i, 1), 4)
            For j = LBound(term) To UBound(term)
                If s = term(j) Then td(i, 1) = "X": Exit For
            Next j
        Next i
        .Cells(1, dc + 1).Resize(dl, 1) = td
        .Range("A1").Resize(dl, dc + 1).Sort key1:=.Cells(1, dc + 1), order1:=xlAscending, Header:=xlYes
        .Cells(1, dc + 1).Resize(dl, 1).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete shift:=xlUp
    End With
End Sub

Merci beaucoup PEDRO22 et h2so4.

La macro fonctionne.

Salut Takiloum,

Salut Pedro, h2sO4,

fort semblable, évidemment, mais, ici, il te suffit de :

  • d'abord, ouvrir ton fichier contenant l'extract' (! pas d'autres fichiers ouverts !) ;
  • ouvrir ensuite le fichier 'ExtractTAKILOUM.xlsm' qui se charge de détecter ton extract' et de faire le travail.
Private Sub Workbook_Activate()
'
Dim sWB As Workbook, sWBB As Workbook, tTab, tItem(), lgRow&, iCol%
'
On Error Resume Next
Application.ScreenUpdating = False
'
For Each sWB In Workbooks
    If sWB.Name <> ThisWorkbook.Name Then
        Set sWBB = sWB
        With sWBB
            lgRow = .Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
            iCol = .Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
            tTab = .Sheets(1).Range("A1").Resize(lgRow, iCol).Value
            .Close False
        End With
        tItem = Array("_ENR", "_SCB", "_BR1", "_TO1", "_IN1", "_LO1", "_RU1", "_ST1", "_CA1", "_SCI", "_LM1", "_PA1", "_CH1", "_ZAM")
        For x = 2 To UBound(tTab, 1)
            For y = 0 To 13
                If Right(tTab(x, 1), 4) = tItem(y) Then
                    tTab(x, 1) = ""
                    Exit For
                End If
            Next
        Next
        With Worksheets("Extract")
            .Cells.Delete
            .Range("A1").Resize(lgRow, iCol).Value = tTab
            .Range("A1:A" & lgRow).SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlUp
            lgRow = .Range("A" & Rows.Count).End(xlUp).Row
            .Range("A1").Resize(lgRow, iCol).Borders.LineStyle = xlContinuous
            .Range("A1").Resize(1, iCol).Interior.ColorIndex = 15
            .Columns.HorizontalAlignment = xlHAlignLeft
            .Columns.AutoFit
        End With
        Exit For
    End If
Next
Application.ScreenUpdating = True
On Error GoTo 0
'
End Sub

A+

Merci curulis57

Pedro, h2sO4 et curulis57 je vais devoir maintenant remettre dans les cours de VBA de "EXCEL-PRATIQUE" pour comprendre vos macro afin pouvoir développer des macro aussi pratique que les vôtres et qui sait, peut-être qu'un jour je pourrai également apporter mon aide à une âme en peine comme moi aujourd'hui.

Encore merci à vous 3.

Rechercher des sujets similaires à "supprimer lignes valeur colone termine enr"