Tu peux effacer la plage destination avant d'effectuer une nouvelle copie
Sub Test()
Dim WsS As Worksheet, WsC As Worksheet
Dim Dico
Dim C As Range, DerCel As Range
Dim Col As Integer, DerCol As Integer
Dim DerLig As Long
Application.ScreenUpdating = False
Set WsS = Worksheets("Base")
Set WsC = Worksheets("Table")
DerLig = WsC.Range("A" & Rows.Count).End(xlUp).Row
If DerLig > 1 Then WsC.Range(WsC.Range("A2"), WsC.Cells(DerLig, 2)).ClearContents
DerCol = WsS.Cells(1, Columns.Count).End(xlToLeft).Column
For Col = 1 To DerCol
If WsS.Cells(Rows.Count, Col).End(xlUp).Row > 1 Then
Set Dico = CreateObject("Scripting.dictionary")
For Each C In WsS.Range(WsS.Cells(2, Col), WsS.Cells(Rows.Count, Col).End(xlUp))
If Not Dico.Exists(C.Value) And C.Value <> "" Then
Dico.Add C.Value, C.Value
WsC.Range("A" & WsC.Range("A" & Rows.Count).End(xlUp).Row + 1) = CStr(Format(WsS.Cells(1, Col), "000"))
WsC.Range("B" & WsC.Range("A" & Rows.Count).End(xlUp).Row) = C.Value
End If
Next C
Set Dico = Nothing
Else
WsC.Range("A" & WsC.Range("A" & Rows.Count).End(xlUp).Row + 1) = CStr(Format(WsS.Cells(1, Col), "000"))
End If
Next Col
Set WsC = Nothing: Set WsS = Nothing
End Sub
A+