Je ne suis guère convaincu de l'intérêt de ce doublonnage plutôt que d'avoir une base unique... mais ce n'est pas long à écrire, alors :
Sub MaJ()
Dim ws As Worksheet, PlgC As Range, LO As ListObject, n%, nn%
Set LO = ActiveSheet.ListObjects(1)
Set PlgC = LO.DataBodyRange
PlgC.Rows(1).ClearContents
If PlgC.Rows.Count > 1 Then PlgC.Offset(1).EntireRow.Delete
Set PlgC = LO.DataBodyRange: n = 1
Application.ScreenUpdating = False
For Each ws In Worksheets
Select Case ws.Name
Case "Compilation"
Case Else
With ws.ListObjects(1).DataBodyRange
nn = .Rows.Count
PlgC.Rows(n).Resize(nn).Value = .Value
n = n + nn
End With
End Select
Next ws
End Sub
J'avais conseillé de supprimer les lignes vides des tableaux ! C'est moi qui ai dû le réaliser. Il conviendra de ne pas réitérer en en rajoutant à nouveau !
Par contre ce sera un clic sur un bouton pour mettre à jour. Un automatisme sur Change déclencherait la procédure à tout bout de champ, sur Activate d'une façon qui ne serait pas forcément justifiée, il vaut mieux donc qu'elle soit déclenchée volontairement lorsqu'on aura besoin de la réaliser.
Cordialement.