Bonsoir Nairda,
Il y a confusion entre la plage (le range) et le tableau des valeurs de la plage.
Quand vous écrivez plage = Range("D2:D" & derln) , plage devient un tableau à une colonne et autant de lignes que Range("D2:D" & derln). Ce tableau contient toutes les valeurs de la plage. plage(1,1) va contenir A, plage(2,1) va contenir SQ, plage(3,1) va contenir DQS, etc. Quand vous allez parcourir plage dans la boucle, vous allez boucler sur les valeurs du tableau plage.
Une valeur est une grandeur (texte, nombre, erreur, vide, etc). Une valeur ne fait référence à aucune cellule et donc à aucune ligne.
Mais si vous aviez écrit set plage = Range("D2:D" & derln), alors plage devient un objet qui fait bien référence à l'ensemble des cellules contenues dans plages (et non à leurs valeurs). Il manquait juste ce petit mot (set) mais qui change tout.