C'est vrai que c'est de l'amusement pur, du VBA pour ça !
ActiveCell. Range("D7") ? Cela te renvoie une cellule qui serait D7 si la cellule active était A1 (si tu es positionné en D7, par exemple, ça te renverra G13). Tu peux mettre ActiveSheet, ce sera plus conforme.
O et M ne contiennent rien, tes données sont en A et B...
Cadre tes plages, et si tu le fais avec dl, calcule-le sur la feuille concernée...
"B7" c'est pas syntaxe VBA : Range("B7") ou [B7]. Et il doit y avoir quelque chose dans cette cellule.
J'espère avoir fait le tour...