Re,
Bon voilà... L'erreur que j'ai faite hier c'est de vouloir faire le calcul à chaque changement dans l'onglet Manifeste. Il me fallait prendre en compte une éventuelle erreur de l'utilisateur qui pouvait sélectionner d'abord "Tomate" puis se ravisait et finalement prenait "Fraise". Bref je m'était barré dans plus qu'une usine à gaz....
Mais comme la nuit porte conseil (dit-on), je me suis réveillé avec comme solution de faire les calculs à l'activation de l'onglet Codes.
Du coup, plus besoin de formules, juste les calculs qui se font quant tu sélectionnes cet onglet. Si tu modifies Manifeste les calculs se referont en revenant dans Codes...
Finalement ce n'était pas compliqué du tout. Le code :
Private Sub Worksheet_Activate()
Dim PM As Range 'déclare la variable PM (Plage Manifeste)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim OD As Worksheet 'déclare la variable OD (Onglet Données)
Dim OM As Worksheet 'déclare la variable OC (Onglet Code)
Dim TC As Variant 'déclare la variable TC (Tableau des Codes)
Dim TSC As Variant 'déclare la variable TSC (Tableau des Sommes des Codes)
Set OM = Worksheets("Manifeste") 'définit l'onglet codes OM
Set OD = Worksheets("Données") 'définit l'onglet données OD
Set PM = OM.Range("A11,A14,A17,A20,A23,A26") 'définit la plage PM
TC = Range("A25").CurrentRegion 'définit le tableau des codes TC
ReDim TSC(UBound(TC, 1)) 'redimensionne le tableau des sommes des codes TSC
For Each CEL In PM 'boucle 1 : sur toutes les cellules CEL de la plage PM
For I = 1 To UBound(TC, 1) 'boucle 2 : sur tous les codes de la colonne 1 du tableau des codes TC
If CEL.Value = TC(I, 1) Then 'si le code de la cellule CEL est égal au code du tableau des codes TC(I,1)
'la valeur TSC(I) du tableau de la somme des codes est égale à elle même plus
'(la masse en colonne M de l'onglet "Données" correspondant au numéro de série, multipliée par la quantité en
'colonne H de Manifeste) - si plusieurs codes identiques la somme sera faite
TSC(I) = TSC(I) + OD.Columns(1).Find(CEL.Offset(2, 0).Value, , xlValues, xlWhole).Offset(0, 12) * CEL.Offset(0, 7).Value
Cells(I + 24, "H").Value = IIf(TSC(I) = 0, "", TSC(I)) 'renvoie le total dans la cellule ligne I+24 colonne "H" de l'onglet "Codes"
End If 'fin de la condition
Next I 'prochain code de la boucle 2
Next CEL 'prochaine cellule de la boucle 1
End Sub
J'avais oublié de te préciser qu'en supprimant le Numéro de Série ou la Désignation d'un Bloc, ça effaçait le bloc entier. J'ai modifié le code du bouton EFFACER LES DONNEES, en VBA la règle d'or est d'éviter auntant que possible les Select...
Le fichier v06 :