Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TS As ListObject 'déclare la variale TS (Tableau structuré Source)
Dim OD As Worksheet 'déclare la variale OD (Onglet Destination)
Dim TD As ListObject 'déclare la variale TD (Tableau structuré Destination)
Dim PL As Range 'déclare la variable PL (Plage)
Dim I As Integer 'déclare la variable I (Incrément)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim R As Range 'déclare la variale R (Recherche)
Dim LI As Integer 'déclare la variale LI (LIgne)
Set OS = Worksheets("Base Effectifs") 'définit l'onglet source OS
Set TS = OS.ListObjects(1) 'définit le tableau structuré source TS
Set OD = Worksheets("Archives") 'définit l'onglet destination OD
Set TD = OD.ListObjects(1) 'définit le tableau structuré destination TD
Set PL = OS.Range("A1") 'initialise la plage PL
For I = 1 To TS.ListRows.Count 'boucle sur toutes les lignes I du tableau structuré TS
If TS.DataBodyRange(I, 38) <> "" Then 'condition : si la cellule ligne I colonne 38 des données de TS n'est pa vide
'définit la plage PL (si PL ne contient qu'une seule cellue, la ligne, sinon l'union de PL et de la ligne)
Set PL = IIf(PL.Cells.Count = 1, TS.DataBodyRange.Rows(I), Application.Union(PL, TS.DataBodyRange.Rows(I)))
NL = NL + 1 'incrémente NL
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
TD.Resize TD.Range.Resize(TD.ListRows.Count + NL, TD.ListColumns.Count) 'redimensionne le tableau structuré source TS
Set R = TD.DataBodyRange.Columns(1).Find("") 'définit la recherche R (recherche du vide dans la première colonne du tableau structuré destination)
If R Is Nothing Then 'si ocune occurrence trouvée
TD.ListRows.Add 'ajoute une ligne au tableau structuré destination
LI = TD.ListRows.Count 'définit la ligne LI
Else 'sinon (au moins une occurrence trouvée)
LI = R.Row - TD.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée - la ligne des en-têtes))
End If 'fin de la condition
PL.Copy TD.DataBodyRange(LI, 1) 'copy la plage PL et la colle dans LI
PL.Delete 'supprime la plage PL
End Sub