Compiler deux tableaux

goloom92

XLDnaute Nouveau
Bonsoir tout le monde,

Je cherche a compiler en VBA (pas en TCD) deux tableaux présents sur deux fichiers séparés.

Le classeur A contient en colonne A des rubriques et en colonne B des montants pour l'année en cours.

Le classeur B et formaté exactement de la même façon mais il concerne l'année précédente.

Ces classeurs peuvent inclure jusqu'à 50 000 lignes chacun voir plus.

A noter que des rubriques peuvent être présentes en N et pas en N-1 et inversement.

Je cherche à compiler les deux tableaux de la façon suivante et réaliser des totaux pour chacune des rubriques.

Rubriques / Montant N / Montant N-1

Travaux / 10 000 € / 0
Voiture / 1 000€ / 500€
...

Pouvez vous m'aider à créer ce code ?

Un énorme merci d'avance,
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Avec ça ça ne plante plus :
VB:
C = Détail(0) * 3 + 5
1ère source : Détail(0) = 0 —› C = 0 * 3 + 5 = 5 soit la colonne E, "Montant N 1"
2nde source: Détail(0) = 1 —› C = 1 * 3 + 5 = 8 soit la colonne H, "Montant N-1 1"

Rappel du commentaire guide d'utilisation :
Function TableUnique(ParamArray TP() As Variant) As Variant()
Rem. —— Renvoie un tableau unique où sont empilés l'un derrière l'autre plusieurs tableaux de
' diverses sources. La seconde dimension des différents tableaux doit commencer à 1.
' Cependant dans le tableau résultant elle commencera à 0,
' l'élément 0 restituant le numéro d'ordre de la source, la 1ère étant 0.
La fonction Gigogne respecte cette base du tableau, et la reporte dans les collections de lignes, de sorte qu'il existe donc un Détail(0)
 
Dernière édition:

KIM

XLDnaute Accro
Bonjour Dranreb,
Bonjour le fil, et le Forum,
Maintenant que j'ai trouvé comment compiler tableaux (2 onglets) avec 4 col de références et 3 col de montants.
1- Comment rajouter 3 autres colonnes qui sont la différence des montants de chaque colonne des années N et N-1 ?

2- J'ai voulu rajouter 1 col par année pour le nombre de rubrique par OP/DP/SIT/RUB
et ensuite rajouter 4 colonnes supplémentaire qui me donnent la différence par colonne des années N et N-1.
Pour rajouter une col par année : C = Détail(0) * 4 + 5
et dans la boucle For Each Détail In RUB.Co j'ai rajouté
T(L, C + 3) = RUB.Count: Next Détail, RUB, SIT, DP, OP
RUB.count me donne un nombre très différent du nombre de lignes réel

J'ai fait beaucoup d'essais mais aucun résultat correct.
Merci de ton aide
KIM
Sub CompilTab()
Dim DP As SsGr, SIT As SsGr, OP As SsGr, RUB As SsGr, Détail, T(1 To 100, 1 To 15), L As Long, C As Long
For Each OP In Gigogne(TableUnique(PlgUti(Feuil2.[A2]), PlgUti(Feuil3.[A2])), 3, 1, 2, 4)
For Each DP In OP.Co
For Each SIT In DP.Co
For Each RUB In SIT.Co
' For Each RUB In SIT.Co
L = L + 1
T(L, 1) = OP.Id
T(L, 2) = DP.Id
T(L, 3) = SIT.Id
T(L, 4) = RUB.Id
For Each Détail In RUB.Co
'1ère source : Détail(0) = 0 —› C = 0 * 3 + 5 = 5 soit la colonne E, "Montant N 1"
'2nde source: Détail(0) = 1 —› C = 1 * 3 + 5 = 8 soit la colonne H, "Montant N-1 1"
C = Détail(0) * 4 + 5
T(L, C) = T(L, C) + Détail(5)
T(L, C + 1) = T(L, C + 1) + Détail(6)
T(L, C + 2) = T(L, C + 2) + Détail(7)
T(L, C + 3) = RUB.Count: Next Détail, RUB, SIT, DP, OP
Feuil1.[A5].Resize(100, 15).Value = T
End Sub
 

Pièces jointes

  • GigogneGoloom92_KimV21.xlsm
    74.4 KB · Affichages: 32

Dranreb

XLDnaute Barbatruc
Bonjour.
Dès qu'on veut autre chose que le nombre total d'éléments d'un .Co de SsGr, il faut le calculer soi même. Là RUB.Count ne peut donner que le nombre de lignes des deux sources attachées à un RUB. Donc il faut à la place T(L, C + 3) = T(L, C + 3) + 1

Pour les différences on peut ajouter des instructions qui les calculent dans T, mais le plus simple serait peut être de mettre juste avant la End Sub :
VB:
Feuil1.[M5].Resize(L, 3).FormulaR1C1 = "=RC[-8]-RC[-4]"
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16