Option Explicit 'oblige à déclarere toutes les variables
Sub Macro1()
Dim OB As Worksheet 'déclare la variable OB (Onglet Base)
Dim ORe(1 To 3) As Worksheet 'déclare la tableau de 3 variables (ORe(1) à ORe(3))
Dim TB As ListObject 'déclare la variable TB (Tableu structué Base)
Dim T2 As ListObject 'déclare la variable T2 (Tableau Structuré 2)
Dim T3 As ListObject 'déclare la variable T3 (Tableau Structuré 3)
Dim T4 As ListObject 'déclare la variable T4 (Tableau Structuré 4)
Dim I As Integer 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (LIgne)
Set OB = Worksheets("Base") 'définit l'onglet base OB
For I = 1 To 3 'boucle sur 3 éléments
Set ORe(I) = Worksheets("Resultat (" & I & ")") 'définit l'onglet Ore(I) de la boucle
Next I 'prochain élément de la boucle
Set TB = OB.ListObjects(1) 'définit le tableau structuré TB
Set T2 = ORe(1).ListObjects(1) 'définit le tableau structuré T2
Set T3 = ORe(2).ListObjects(1) 'définit le tableau structuré T3
Set T4 = ORe(3).ListObjects(1) 'définit le tableau structuré T4
For I = 1 To TB.ListRows.Count 'boucle sur toutes les lignes I du tableau structuré TB
Select Case Left(TB.DataBodyRange(I, 1), 3) 'agit en fonction des 3 premiers caractères du Nº de compte de la boucle
Case "205" 'cas 205
Set R = T2.ListColumns(1).Range.Find("") 'définit la recherche R (recherche du vide dans la colonne 1 de T2)
If R Is Nothing Or T2.ListRows Is Nothing Then 'condition : si aucune occurrence trouvée ou si T2 n'a pas encore de ligne
T2.ListRows.Add , True 'ajoute une ligne en décalant le total vers le bas
LI = T2.ListRows.Count 'définit la ligne LI
Else 'sinon (au moins une occurrence trouvée)
LI = R.Row - T2.HeaderRowRange.Row 'définit la ligne LI de la première occurrence trouvée - la ligne des en-têtes de T2
End If 'fin de la condition
T2.DataBodyRange(LI, 1) = TB.DataBodyRange(I, 1) 'récupère le Nº de compte
T2.DataBodyRange(LI, 2) = TB.DataBodyRange(I, 2) 'récupère le libellé
T2.DataBodyRange(LI, 3) = TB.DataBodyRange(I, 5) 'récupère le solde
Case "300" To "399" 'cas 300 à 399
Set R = T3.ListColumns(1).Range.Find("") 'définit la recherche R (recherche du vide dans la colonne 1 de T3)
If R Is Nothing Or T3.ListRows Is Nothing Then 'condition : si aucune occurrence trouvée ou si T3 n'a pas encore de ligne
T3.ListRows.Add , True 'ajoute une ligne en décalant le total vers le bas
LI = T3.ListRows.Count 'définit la ligne LI
Else 'sinon (au moins une occurrence trouvée)
LI = R.Row - T3.HeaderRowRange.Row 'définit la ligne LI de la première occurrence trouvée - la ligne des en-têtes de T3
End If 'fin de la condition
T3.DataBodyRange(LI, 1) = TB.DataBodyRange(I, 1) 'récupère le Nº de compte
T3.DataBodyRange(LI, 2) = TB.DataBodyRange(I, 2)
T3.DataBodyRange(LI, 3) = TB.DataBodyRange(I, 5)
Case "440" To "449"
Set R = T4.ListColumns(1).Range.Find("") 'définit la recherche R (recherche du vide dans la colonne 1 de T4)
If R Is Nothing Or T4.ListRows Is Nothing Then 'condition : si aucune occurrence trouvée ou si T4 n'a pas encore de ligne
T4.ListRows.Add , True 'ajoute une ligne en décalant le total vers le bas
LI = T4.ListRows.Count 'définit la ligne LI
Else 'sinon (au moins une occurrence trouvée)
LI = R.Row - T4.HeaderRowRange.Row 'définit la ligne LI de la première occurrence trouvée - la ligne des en-têtes de T4
End If 'fin de la condition
T4.DataBodyRange(LI, 1) = TB.DataBodyRange(I, 1) 'récupère le Nº de compte
T4.DataBodyRange(LI, 2) = TB.DataBodyRange(I, 2) 'récupère le libellé
T4.DataBodyRange(LI, 3) = TB.DataBodyRange(I, 5) 'récupère le solde
End Select 'fin de l 'action en fonction des 3 premiers caractères du Nº de compte de la boucle
Next I 'prochaine ligne de la boucle
End Sub