Bonjour à tous,
Vois ceci :
Option Explicit
Sub ventile()
Dim a, i As Long, j As Long, dico As Object
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1
a = Sheets("Données Initiales").[b1].CurrentRegion.Value
For i = 2 To UBound(a, 1)
If Not dico.exists(a(i, 2)) Then
Set dico(a(i, 2)) = CreateObject("Scripting.Dictionary")
'dico(a(i, 2)).CompareMode = 1
End If
dico(a(i, 2))(a(i, 1)) = a(i, 3)
Next
Application.ScreenUpdating = False
With Sheets("objectif final").[b1].CurrentRegion
With .Offset(2, 2).Resize(.Rows.Count - 2, .Columns.Count - 2)
.ClearContents
.NumberFormat = " #,##0"
End With
For i = 3 To .Rows.Count
If dico.exists(.Cells(i, 2).Value) Then
For j = 3 To .Columns.Count
If dico(.Cells(i, 2).Value).exists(.Cells(2, j).Value) Then
.Cells(i, j).Value = dico(.Cells(i, 2).Value)(.Cells(2, j).Value)
End If
Next
End If
Next
End With
Application.ScreenUpdating = True
End Sub
On pourrait aussi utiliser Application.Match
klin89