Re à tous,
Un autre cheminement, j'ai employé la méthode Remove du dictionnaire.
Je n"ai pas géré le dernier point.
A tester sur une copie de ton fichier
Option Explicit
Sub update()
Dim a, e, w, i As Long, dico As Object
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1
a = Sheets("Mouvements").Range("a1").CurrentRegion.Value
For i = 2 To UBound(a, 1)
If Not dico.exists(a(i, 3)) Then
dico(a(i, 3)) = VBA.Array(a(i, 3), a(i, 4), a(i, 5), a(i, 6), a(i, 7))
Else
w = dico(a(i, 3))
w(3) = w(3) + a(i, 6): w(4) = w(4) + a(i, 7)
dico(a(i, 3)) = w
End If
Next
For Each e In Array("Actions", "OPCVM")
a = Sheets(e).Range("a8").CurrentRegion.Value
For i = 1 To UBound(a, 1)
If dico.exists(a(i, 1)) Then
a(i, 4) = a(i, 4) + dico(a(i, 1))(3)
a(i, 5) = a(i, 5) + dico(a(i, 1))(4)
dico.Remove a(i, 1)
End If
Next
Sheets(e).Range("a8").Resize(UBound(a, 1), UBound(a, 2)).Value = a
If dico.Count Then
For i = 0 To dico.Count - 1
If dico.items()(i)(1) Like e & "*" Then
Sheets(e).Range("a" & Rows.Count).End(xlUp)(2) _
.Resize(1, UBound(dico.items()(i), 1) + 1).Value = dico.items()(i)
End If
Next
End If
Next
Set dico = Nothing
End Sub
klin89