Private Sub CommandButton1_Click()
Dim P As Range, Q As Range, Prc&, Qrc&, R As Range, S As Range
Set P = [A1].CurrentRegion: Prc = P.Rows.Count - 1
Set Q = [G1].CurrentRegion: Qrc = Q.Rows.Count - 1
If Prc * Qrc = 0 Then Exit Sub 'si un tableau est vide
Set P = P.Offset(1).Resize(Prc)
Set Q = Q.Offset(1).Resize(Qrc)
Application.ScreenUpdating = False
P.Copy Q(Qrc + 1, 1): Set R = Q(Qrc + 1, 1).Resize(Prc, P.Columns.Count)
Q.Copy P(Prc + 1, 1): Set S = P(Prc + 1, 1).Resize(Qrc, Q.Columns.Count)
P.EntireColumn.RemoveDuplicates Array(1, 3, 4)
Q.EntireColumn.RemoveDuplicates Array(1, 3, 4)
R.Cut P(Prc + Qrc + 1, 1): S.Cut Q(Prc + 1, 1)
P.Resize(Prc + Qrc).Delete xlUp: Q.Delete xlUp
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub