Range("D").End(xlUp).Row ne correspond à rien et provoque une erreur. Curieux d'avoir trouvé cette instruction comme fonctionnant?
Pour trouver la dernière ligne utile de la colonne D, utiliser: Range("D" & Rows.Count).End(xlUp).Row
...supprimer toutes lignes dont les valeur présentes en D ne commencent pas par 107
curieux, le code tente de faire l'inverse ! supprimer si débute par 107
If Cells(i, 1) Like "107*" Then Rows(i).Delete
encore faut-il tester la bonne cellule: Cells(i, 1) est la cellule situé colonne A ligne i, et non pas en colonne D
A+