A toi de tester, étant sous Excel 2003, je ne peux point
Option Explicit
Sub test()
Dim ws As Worksheet, rngCrit As Range, vCrit
Application.ScreenUpdating = False
With Sheets("Liste IDs")
Set rngCrit = .Range("A4:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
vCrit = rngCrit.Value
For Each ws In Worksheets
If Not ws Is Sheets("Liste IDs") Then
With ws.Range("A1:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
ws.AutoFilterMode = False
.AutoFilter 1, Application.Transpose(vCrit), 7
.Offset(1).EntireRow.Delete
.AutoFilter
End With
End If
Next
Application.ScreenUpdating = True
End Sub
La proposition de Klin89 ( ) me semblait tout à fait convenir (à un détail près : la suppression ne ciblant pas les cellules filtrées...) mais elle m'a fait planter Excel à répétition (divers essais d'aménagements qui n'ont pas été concluants, peut-être aurait-il fallu épurer le tableau de critères ?...), je me suis donc rabattu sur une autre méthode.
Sub SupprimIDs()
Dim ws As Worksheet, lstP, d As Object, i%, n%
Set d = CreateObject("Scripting.Dictionary")
With [T_Liste_ID]
If .Worksheet.FilterMode Then .Worksheet.ShowAllData
lstP = .Value
End With
For i = 1 To UBound(lstP)
d(lstP(i, 1)) = ""
Next i
Application.ScreenUpdating = False
For Each ws In Worksheets
Select Case ws.Name
Case "Liste IDs"
Case Else
If ws.FilterMode Then ws.ShowAllData
n = ws.Cells(Rows.Count, 1).End(xlUp).Row
lstP = ws.Range("A1:A" & n).Value
For i = 2 To n
If d.exists(lstP(i, 1)) Then lstP(i, 1) = Empty
Next i
With ws.Range("A1:A" & n)
.Value = lstP
On Error Resume Next
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
End With
End Select
Next ws
End Sub
Comme tes données sont numériques, ceci devrait le faire
Option Explicit
Sub test()
Dim ws As Worksheet, rngCrit As Range, vCrit, i As Long
Application.ScreenUpdating = False
With Sheets("Liste IDs")
Set rngCrit = .Range("A4:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
vCrit = rngCrit.Value
For i = 1 To UBound(vCrit, 1)
vCrit(i, 1) = CStr(vCrit(i, 1))
Next i
For Each ws In Worksheets
If Not ws Is Sheets("Liste IDs") Then
With ws.Range("A1:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
ws.AutoFilterMode = False
.AutoFilter 1, Application.Transpose(vCrit), 7
.Offset(1).EntireRow.Delete
.AutoFilter
End With
End If
Next
Application.ScreenUpdating = True
End Sub