Bonsoir,
Sub Reconciliation()
Dim T(), da As Object, db As Object, k, itm, n%, nr%, i%
Set da = CreateObject("Scripting.Dictionary")
Set db = CreateObject("Scripting.Dictionary")
With ActiveSheet
na = .Cells(.Rows.Count, 4).End(xlUp).Row
For i = 3 To na
k = .Cells(i, 4)
itm = .Cells(i, 1) & "|" & .Cells(i, 2) & "|" & .Cells(i, 3)
da(k) = itm
Next i
nb = .Cells(.Rows.Count, 3).End(xlUp).Row
For i = 3 To nb
k = .Cells(i, 8)
If da.exists(k) Then
da.Remove (k)
Else
itm = .Cells(i, 6) & "|" & .Cells(i, 7)
db(k) = itm
End If
Next i
End With
With Worksheets("Feuil2")
.UsedRange.Offset(2).ClearContents
n = da.Count
If n > 0 Then
ReDim T(n - 1, 3)
For Each k In da.keys
itm = Split(da(k), "|")
For i = 0 To 2
T(nr, i) = itm(i)
Next i
T(nr, 3) = k: nr = nr + 1
Next k
.Range("A3").Resize(n, 4).Value = T
.Range("D3").Resize(n).NumberFormat = "#,##0.00"
End If
n = db.Count: nr = 0
If n > 0 Then
ReDim T(n - 1, 2)
For Each k In db.keys
itm = Split(db(k), "|")
For i = 0 To 1
T(nr, i) = itm(i)
Next i
T(nr, 2) = k: nr = nr + 1
Next k
.Range("F3").Resize(n, 3).Value = T
.Range("H3").Resize(n).NumberFormat = "#,##0.00"
End If
End With
End Sub
C'est la même méthode, la procédure étant juste réaménagée pour la récupération des données supplémentaires. On reconstitue un tableau à la fin, avant affectation, ce qui n'était pas nécessaire dans le cas précédent.
A voir si cela convient...
Je dois tout de même appeler ton attention sur un risque d'anomalie liée à cette méthode : si des montants identiques sont susceptibles de figurer dans une même colonne de montants, les doublons sont éliminés, et seul le dernier sera conservé.
Toutefois, la réconciliation elle-même, ne s'appuyant que sur des montants, fait courir un risque comparable...
A toi d'examiner cet aspect de la question et voir si des mesures spécifiques ne devraient pas être étudiées...
Cordialement.