Tu pouvais te contenter de 100 lignes...
Je suis passé de 2.58 s à 0.07 s sur ton fichier.
Du coup je n'ai pas comparé avec un .find()
Par curiosité dis le temps pour 400k lignes
Contrôle si ça te parait ok
Option Explicit
Sub nettoyage_sku()
'nettoyage des sku to ban
Dim t_sku, datas, pl As Range
Dim lig As Long, lig2 As Long, nb As Long
Dim t As Single
t = Timer
Application.ScreenUpdating = False
With Sheets("sku_to_ban")
lig = .Cells(Rows.Count, 1).End(xlUp).Row
t_sku = .Range("A1:A" & lig).Value
End With
With Sheets("report_SAP")
lig = .Cells(Rows.Count, 1).End(xlUp).Row
datas = .Range("A2:A" & lig).Value
For lig = 1 To UBound(t_sku)
For lig2 = 1 To UBound(datas)
If t_sku(lig, 1) = datas(lig2, 1) Then
If pl Is Nothing Then Set pl = .Rows(lig2 + 1).EntireRow Else Set pl = Union(pl, .Rows(lig2 + 1).EntireRow)
nb = nb + 1
Exit For
End If
Next lig2
Next lig
If Not pl Is Nothing Then pl.Delete
End With
MsgBox nb & "/" & UBound(t_sku) & " sku supprimés en " & Format(Timer - t, "0.000") & " s."
End Sub
Déclarer ses variables c'est bien, mais il faut les typer au besoin le plus proche.
Les laisser Variant ralenti le code.
Et coche ça dans les options de VBE
la déclaration obligatoire des variables te permet de les typer au passage, mais surtout d'affranchit des erreurs de saisie sur leur nom qui font des bug parfois difficiles à détecter et à rechercher.