Pour moi, ce que tu as fait est très bien.
Pour résumé : tu passes tous les lignes d'une plage en revue que tu compares aux lignes d'une autre plage si elles répondent à un critère pour finalement copier la ligne, tout cela en générant les messages des contrôles et actions.
Le nombre de lignes que tu as dans ton code n'est pas exubérant au regard du nombre d'actions codées.
Ton code est probablement optimisable (par exemple : utiliser d'autres moyens que les boucles qui peuvent être longue à l'exécution), mais là ça dépasse mes compétences, désolé.
Il y aura peut-être un Barbatruc, s'ils ne sont pas tous en congés, qui pourra te proposer ce genre d'optimisation.