Bonsoir Jean-Eric, vic
Vic, la conception de ton classeur te mène tout droit vers la catastrophe.
Mais bon pour l'exercice :
Option Explicit
Sub test()
Dim a, i As Long, rng As Range, dico As Object
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1
a = Sheets("Stocks").Range("a1").CurrentRegion.Value
For i = 3 To UBound(a, 1)
If a(i, 1) <> 0 Then
dico(a(i, 1)) = VBA.Array(a(i, 2), a(i, 3), a(i, 4))
End If
Next
With Sheets("Données")
Set rng = .Range("a3", .Range("a" & Rows.Count).End(xlUp))
rng.Sort key1:=.Cells(1), order1:=xlAscending, Header:=xlNo
End With
With Sheets("Stocks").Range("a1").CurrentRegion
For i = 3 To .Rows.Count
If .Cells(i, 1).Value <> 0 Then
.Cells(i, 2).Resize(, 3).Value = dico(.Cells(i, 1).Value)
End If
Next
End With
Set dico = Nothing
End Sub
Je m'arrêterai là
Vu qu'il y a plusieurs feuilles, il faudrait opérer via un dictionnaire parent et un dictionnaire enfant.
Si quelqu'un avait une autre solution à proposer, je suis preneur
S'il te plait enlève la pseudo-macro événementielle dans le ThisWorkbook de ton classeur joint
klin89