Copying and comparing two sheets before deleting duplicates
It's poor form to have this much logic in an event procedure. The first step is to move 99% of this code into another module and call it from the event procedure.
Don't activate and select. This slows down your code and makes it bug prone. Use a variable to reference the worksheets and ranges you need instead.
There's no reason to select and paste. The Copy method takes an optional Destination parameter.

Instead of this

Sheets("Sheet1").Range("C:C").Copy
Sheets("Sheet2").Range("M1").Select
ActiveSheet.Paste


Use this

Sheets("Sheet1").Range("C:C").Copy Sheets("Sheet1").Range("M1")

Anytime you turn sheet calculation or screen updating off, you need to use an error handler to make sure it always gets turned back on.
Look into using an ADODB connection to query the workbook instead of working directly with the COM object. It's typically a much, much faster approach.