Juste ! Désolé les couts au M2 n'étaient pas ceux que vous aviez postés ici --> https://forum.excel-pratique.com/s/goto/988536
Là j'ai ce que vous venez de me poster
Voici le code à tester
Sub Maj()
Dim cel As Range, c As Range
Dim Lig As Integer
Dim Prem
Dim WSListe As Worksheet, WSBdd As Worksheet
Set WSListe = Worksheets("Listes")
Set WSBdd = Worksheets("Bdd")
For Each cel In WSListe.ListObjects("T_Matiere").ListColumns(1).DataBodyRange
With WSBdd.ListObjects("T_Bdd").ListColumns(14).DataBodyRange
Set c = .Find(cel, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Prem = c.Address
Do
If Range(c.Address).Offset(0, -4) = cel.Offset(0, 1) And Range(c.Address).Offset(0, -3) = cel.Offset(0, 2) Then
Lig = c.Row - 1
With WSBdd.ListObjects("T_Bdd").DataBodyRange
'(((longueur x largeur)/1000000) x coût de revient)x Qte
.item(Lig, 21) = ((((.item(Lig, 12) * .item(Lig, 13)) / 1000000) * WSListe.Range(cel.Address).Offset(0, 4)) * .item(Lig, 9)) + (WSListe.Range(cel.Address).Offset(0, 5) * .item(Lig, 9))
End With
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> Prem
End If
End With
Next cel
End Sub
Le code balaye sur base des données présentes dans la feuille Listes
Vous pouvez mettre cela dans un nouveau Module. le code pourras servir à remettre tout à jour