Bonjour les amis du Forum,

Je m'interrogeais sur le processus à suivre pour sommer 2 tableaux structurés.

Une méthode consisterait à utiliser les variables ... Tableau

Soit
Au préalable, acquérir le code qui aboutit à la sommation de 2 variables tableau
Affecter une première variable tableau au premier tableau structuré, puis une seconde variable au second tableau.
Sommer les 2 variables tableau
Reverser ce tableau dans le tableau structuré final (celui-ci ayant été vidé au préalable)

Ce qui donne

Pour la fonction de concaténation de 2 variables tableau

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Function ArrayPlusNew(ArrDep As Variant, Plus As Variant)
 
'ajoute l'array Plus à l'array ArrDep
'l'array d'arrivée est un nouvel Array
 
Dim ArrFinal
Dim i As Integer, j As Integer, k As Integer
 
k = 1
ReDim ArrFinal(1 To UBound(ArrDep, 1), 1 To UBound(ArrDep, 2) + UBound(Plus, 2))
For i = 1 To UBound(ArrDep, 1)
        For j = 1 To UBound(ArrDep, 2)
                ArrFinal(i, j) = ArrDep(i, j)
        Next j
        For j = UBound(ArrDep, 2) + 1 To UBound(ArrFinal, 2)
                ArrFinal(i, j) = Plus(i, k)
                k = k + 1
        Next j
        k = 1
Next i
 
ArrayPlusNew = ArrFinal
 
End Function
Pour la procédure

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Option Explicit
 
Sub ConcatTabloStruc()
 
Dim Tblo1() As Variant, Tblo2() As Variant, TbloTot() As Variant
Dim Tblo As Variant, tb As Variant
 
'Vider le tableau de concaténation initial
Worksheets("Feuil3").Range("ConcatTablo").ListObject.DataBodyRange.Delete
 
'Pour sommer 2 Arrays, il est nécessaire que la 1ère dimension soit identique
'D'où le nombre de colonnes en 1ère dimension
With WorksheetFunction
        Tblo1 = .Transpose(Worksheets("Feuil1").Range("FirstTablo").Value)
        Tblo2 = .Transpose(Worksheets("Feuil2").Range("ScndTablo").Value)
        'Cellules vides de départ
        TbloTot = .Transpose(Worksheets("Feuil3").Range("A50000:B50000").Value)
End With
 
'Constitution d'un tableau de tableaux pour effectuer la boucle
'et sommer un à un les tableaux à partir du 2ème sur le 1er
Tblo = Array(Tblo1, Tblo2)
For Each tb In Tblo
        TbloTot = ArrayPlusNew(tb, TbloTot)
Next
 
'Suppression de la dernière ligne vide initialement TbloTot
ReDim Preserve TbloTot(1 To 2, 1 To UBound(TbloTot, 2) - 1)
 
Worksheets("Feuil3").Range("A2").Resize(UBound(TbloTot, 2), UBound(TbloTot, 1)).Value = WorksheetFunction.Transpose(TbloTot)
 
'Variables Tableau vidées
Erase Tblo1
Erase Tblo2
Erase TbloTot
 
MsgBox _
        Prompt:="La nouvelle concaténation contient" & Chr(13) & _
                                            Worksheets("Feuil3").Range("ConcatTablo").ListObject.DataBodyRange.Rows.Count & " enregistrements.", _
        Buttons:=vbInformation, _
        Title:="Résultat"
 
End Sub
Code testé.
(En fait, il s'agit, pour mon développement, de 3 fichiers différents ayant la même structure. Et je suis viscéralement opposé aux classeurs partagés.)

A noter.
Le processus est adaptable à 3, 4, 5, et plus tableaux structurés.

Je voulais vous faire part de cette proposition en attendant, bien entendu, vos judicieuses remarques.
Il pourrait y avoir en effet d'autres processus envisageables.
A vous lire donc.

Bon après-midi à tous.