Bonjour,
Essayez ceci, la formule est créée à partir d'une fonction personnalisée.
Formule en E8:
=stock([@PRODUITS];VENTE!A4;Tableau3[[#En-têtes];[BB monge]:[PAIN SND BAGEL]])
le code de la fonction personnalisée:
Function Stock(produit As String, article As String, produits As Range) As Variant
Dim f1 As Worksheet, f2 As Worksheet
Dim Tbl As ListObject, Tb2 As ListObject
Dim Col_Index As Long, Lig_Index As Long
Dim Cell_Val As Variant
Dim r As ListRow
On Error GoTo GestionErreur
' Références aux feuilles
Set f1 = Sheets("FICHE TECHNIQUE")
Set f2 = Sheets("VENTE")
' Références aux tableaux
Set Tbl = f1.ListObjects("Tableau3")
Set Tb2 = f2.ListObjects("Tableau6")
Col_Index = Tbl.ListColumns(produit).Index ' Trouver le N° de la colonne (Index) de la colonne correspondant au produit dans Tableau3
Lig_Index = -1
For Each r In Tb2.ListRows ' pour chaque ligne du Tableau6
If r.Range.Cells(1, 1).Value = article Then ' Trouver le N° de la ligne (Index) correspondant à l'article dans Tableau6
Lig_Index = r.Index 'relevé du N° de ligne
Exit For
End If
Next r
If Lig_Index = -1 Then GoTo GestionErreur 'si aucune ligne trouvée, on sort
' Obtenir la valeur à l’intersection ligne/colonne
Stock = 0 'initialisation du stock à 0
Cell_Val = Tbl.DataBodyRange.Cells(Lig_Index, Col_Index).Value 'on retient la valeur de la cellule correspondant à l'intersection de la ligne et de la colonne
If IsNumeric(Cell_Val) Then Stock = Stock + Cell_Val ' si la valeur est numérique, on l'ajoute au stock
Exit Function
GestionErreur:
Stock = "pas trouvé" 'message affiché dans la cellule si l'article n'est pas trouvé
End Function
le fichier:
Cdlt