Je travaille actuellement sur un tableau d’investissements structuré ‹ TbMontantInvesti › et j’ai besoin d’aide pour remplir les trois dernières colonnes de ce tableau. Le résultat attendu pour les colonnes 10, 11 et 12 est illustré dans le fichier exemple joint.
Pourriez-vous m’aider à traiter les données et effectuer les calculs nécessaires pour obtenir les résultats attendus ?
Bonsoir,
<Je ne vais pas répondre ce soir, peut-être demain>
ID Catégorie serait un identifiant? (sinon, il risque d’y avoir des milliers de ID_InvestisseursDate, ainsi que les 2 autres colonnes…)
Et c’est bien date par date?
@ te relire demain (peut-être, selon les JO)
Sub Atlas()
Dim LO, aA, aOut, Dict
Set Dict = CreateObject("scripting.dictionary")
Dict.comparemode = vbTextCompare
Set LO = Range("TbMontantInvesti").ListObject
aA = LO.DataBodyRange.Value2
ReDim aOut(1 To UBound(aA), 1 To 3) 'matrice resultat
For i = 1 To UBound(aA) 'boucler les lignes 1
Dict.RemoveAll 'vider le dictionaire
For j = 1 To UBound(aA) 'boucler les lignes 2
If aA(j, 4) <= aA(i, 4) Then Dict(aA(j, 2)) = Dict(aA(j, 2)) + aA(j, 5) 'cumul par investisseur
Next
aOut(i, 1) = Join(Dict.keys, ";") 'string avec les IDs des investisseurs
x = Dict.items 'matrice avec les montants
aOut(i, 2) = Join(x, ";") 'string avec les cumuls des investisseurs
som = WorksheetFunction.Sum(x) 'la somme
s = ""
For j = 0 To UBound(x)
s = s & ";" & Format(x(j) / som, "0.00") 'proportion de chaqu'un
Next
aOut(i, 3) = Mid(s, 2) 'string avec la proportion de chaqu'un
Next
Range("TbMontantInvesti[ID_InvestisseursDate]").Resize(, 3).Value = aOut
End Sub