Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim I As Integer 'déclare la variable I(Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TSF() As Variant 'déclare la variable TSF (Tableau des Stock Fin)
Set O = Worksheets("EXPORT") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
K = 1 'initialise la variable K
For I = 2 To NL 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 5) = "Stock fin" Then 'condition : si la donnée ligne I colonne 5 de TV (=> colonne E) vaut "Stock fin"
ReDim Preserve TSF(1 To 2, 1 To K) 'redimensionne le tableau TSF (2 lignes, K colonnes)
TSF(1, K) = TV(I, 7) 'récupère la valeur en colonne 7 (=> colonne G) dans la ligne 1
TSF(2, K) = CStr(TV(I, 13)) 'récupère la référence en colonne 13 (=> colonne 13) dans la ligne 2
K = K + 1 'initialise la variable K
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
For J = 1 To UBound(TSF, 2) 'boucle 1 : sur toutes les colonnes J du tableau TSF
For I = NL To 2 Step -1 'boucle 2 : inversée sur toutes les lignes I du tableau des valeurs TV (de la dernière à la seconde)
If TV(I, 13) = TSF(2, J) Then 'condition 1 : si la donnée en colonne M (référence) est égale à la ligne 2 du tableau TSF
If TSF(1, J) = 0 Then 'condition 2 : si la valeur ligne 1 du tableau TSF est égale à zéro
O.Rows(I).Delete 'supprime la ligne de boucle 2
Else 'sinon (condition 2)
O.Cells(I, "Q") = TSF(1, J) 'revnvoie la valeur ligne 1 du tableau TSF dans la cellule ligne I colonne Q
End If 'fin de la condition 2
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 2
Next J 'prochaine colonne de la boucle 1
O.Columns(17).NumberFormat = "0.000" 'formate la colonne Q
End Sub