Você exclui todo o seu intervalo original. Se sobrepuser, também excluirá as células sobrepostas. Para evitar isso, verifique cada célula para ver se há uma sobreposição, por exemplo, você pode substituir Range(COPYSOURCE).ClearContents
por
Dim rgLoop As Range, rgToDelete As Range
For Each rgLoop In Range(copysource).Cells
If Intersect(rgLoop, Range(pasterange).Resize(Range(copysource).Rows.Count, Range(copysource).Columns.Count)) Is Nothing Then
If rgToDelete Is Nothing Then Set rgToDelete = rgLoop Else Set rgToDelete = Union(rgToDelete, rgLoop)
End If
Next rgLoop
rgToDelete.ClearContents 'deletes contents keeps formatting