Option Explicit 'oblige à déclarer toutes les variables
Private OS As Worksheet 'déclare la variable OS (Onglet Source)
Private TS As ListObject 'déclare la variable TS (Tableau Source)
Private OD As Worksheet 'déclare la variable OD (Onglet Destination)
Private TD As ListObject 'déclare la variable TD (Tableau Destination)
Sub Actualiser()
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Integer 'déclare la variable I (Incrément)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Call Effacer 'lance la procédure [Effacer]
Set OS = Worksheets("Audit") 'définit l'onglet OS
Set TS = OS.ListObjects("Tableau") 'définit la tableau stucturé TS
Set OD = Worksheets("Rapport") 'définit l'onglet OD
Set TD = OD.ListObjects("Tableau3") 'définit la tableau stucturé TD
For I = 1 To TS.ListRows.Count 'boucle sur toutes les lignes I du TS
'condition "si la cellule ligne I plus ligne des en-têtes de TS, colonne A de l'onglet OS est égale à 1
If OS.Cells(I + TS.HeaderRowRange.Row, "A") = 1 Then
Set R = TD.ListColumns(4).Range.Find("") 'définit la recherche R (recherche du vide dans la colonne 4 de TD)
If R Is Nothing Or TD.ListRows.Count = 0 Then 'si aucune occurrence n'est trouvée ou si TD ne contient pas encore de ligne
TD.ListRows.Add 'ajoute une ligne à TD
LI = TD.ListRows.Count 'définit la ligne LI (dernière ligne de TD)
Else 'sinon (au moins une occurrence est trouvé)
LI = R.Row - TD.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée mois la ligne des en-têtes de TD)
End If 'fin de la condition
'récupères dans la ligne LI colonnes 4 à 9 de TD, les données lignes 7 à 12 de TS
TD.DataBodyRange(LI, 4).Resize(1, 6).Value = TS.DataBodyRange(I, 7).Resize(1, 6).Value
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
Sub Effacer()
Dim I As Byte 'déclare la variable I (Incrément)
Set OD = Worksheets("Rapport") 'définit l'onglet OD
Set TD = OD.ListObjects("Tableau3") 'définit la tableau stucturé TD
For I = 4 To 9 'boucle sur les colonne 4 à 9
TD.DataBodyRange.Columns(I).ClearContents 'efface dans TD les données de la colonne de la boucle
Next I 'prochaine colonne de la boucle
End Sub