﻿Option Explicit

Public Sub recalcul()
'Déclaration des variables
Dim wbk_stock As Workbook, wbk_Commande As Workbook, wbk_OF As Workbook
Dim fichierStock_Path As String, fichierCommande_Path As String, fichierOF_Path As String
Dim tab_StockFichier() As String, tab_CommandeFichier() As String, tab_OFFichier() As String, date_moisPrec As String
Dim derniere_ligne_Commande As Long, derniere_ligne_Stock As Long, derniere_ligne_OF As Long
Dim I As Long
Dim t As Single

    t = Timer

    With Application
        .DisplayStatusBar = False
        .StatusBar = "Traitement en cours..."
        .DisplayAlerts = False
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
    End With

    With ThisWorkbook
        'on nettoie les résultats
        With .Sheets(2)
            .Cells(3, 3).Resize(, 12).ClearContents
            .Cells(5, 3).Resize(, 12).ClearContents
            .Cells(6, 3).Resize(, 12).ClearContents
            For I = 1 To 12
            date_moisPrec = Format(DateSerial(Year(Date), Month(Date) - 2 + I, 1), "mmm-yyyy")
            .Cells(2, I + 2) = date_moisPrec
        Next
        End With
        With .Sheets(4)
            .Cells(3, 3).Resize(, 12).ClearContents
            .Cells(5, 3).Resize(, 12).ClearContents
            .Cells(6, 3).Resize(, 12).ClearContents
        End With
        With .Sheets(8)
            .Cells(3, 3).Resize(, 12).ClearContents
            .Cells(5, 3).Resize(, 12).ClearContents
            .Cells(6, 3).Resize(, 12).ClearContents
        End With
        'On  récupère les chemin des fichiers
        fichierCommande_Path = .Sheets("Param. syst").Range("C3")
        fichierStock_Path = .Sheets("Param. syst").Range("C2")
        fichierOF_Path = .Sheets("Param. syst").Range("C5")
    End With

    'On commence par mettre les mois par rapport a celui d'ojd
    mois_Glissant_Tenons

    'ouvrir le Fichier Commande
    Set wbk_Commande = Workbooks.Open(fichierCommande_Path)

    'On récupere les colonnes
    'On met ces données dans un tableau
    With wbk_Commande.Sheets("VTS_PIC")
        derniere_ligne_Commande = .Cells(Rows.Count, 1).End(xlUp).Row - 2
        'Array x lignes et 5 colonnes
        ReDim tab_CommandeFichier(derniere_ligne_Commande, 5)
        For I = 0 To derniere_ligne_Commande
            tab_CommandeFichier(I, 0) = .Range("B" & I + 2).Value
            tab_CommandeFichier(I, 1) = .Range("M" & I + 2).Value
            tab_CommandeFichier(I, 2) = .Range("AA" & I + 2).Value
            tab_CommandeFichier(I, 3) = .Range("D" & I + 2).Value
            tab_CommandeFichier(I, 4) = .Range("A" & I + 2).Value
        Next
    End With
    'on ferme le fichier
    wbk_Commande.Close

    'ouvrir le Fichier Stock
    Set wbk_stock = Workbooks.Open(fichierStock_Path)
    'On récupere les colonnes
    'On met ces données dans un tableau
    With wbk_stock.Sheets("STK_PIC")
        derniere_ligne_Stock = .Cells(Rows.Count, 1).End(xlUp).Row - 2
        'Array x lignes et 7 colonnes
        ReDim tab_StockFichier(derniere_ligne_Stock, 7)
        For I = 0 To derniere_ligne_Stock
            tab_StockFichier(I, 0) = .Range("I" & I + 2).Value
            tab_StockFichier(I, 1) = .Range("T" & I + 2).Value
            tab_StockFichier(I, 2) = .Range("Z" & I + 2).Value
            tab_StockFichier(I, 3) = .Range("AA" & I + 2).Value
            tab_StockFichier(I, 4) = .Range("AB" & I + 2).Value
            tab_StockFichier(I, 5) = .Range("AC" & I + 2).Value
            tab_StockFichier(I, 6) = .Range("C" & I + 2).Value
        Next
    End With
    'on ferme le fichier
    wbk_stock.Close

    'ouvrir le Fichier OF
    Set wbk_OF = Workbooks.Open(fichierOF_Path)
    'On récupere les colonnes
    'On met ces données dans un tableau1
    With wbk_OF.Sheets("OF_PIC")
        derniere_ligne_OF = .Cells(Rows.Count, 1).End(xlUp).Row - 2
        'Array x lignes et 6 colonnes
        ReDim tab_OFFichier(derniere_ligne_OF, 6)
        For I = 0 To derniere_ligne_OF
            tab_OFFichier(I, 0) = .Range("A" & I + 2).Value
            tab_OFFichier(I, 1) = .Range("B" & I + 2).Value
            tab_OFFichier(I, 2) = .Range("E" & I + 2).Value
            tab_OFFichier(I, 3) = .Range("F" & I + 2).Value
            tab_OFFichier(I, 4) = .Range("L" & I + 2).Value
            tab_OFFichier(I, 5) = .Range("N" & I + 2).Value
        Next
    End With
    'on ferme le fichier
    wbk_OF.Close

    'Calcul
    '...

    With Application
        .Calculation = xlCalculationAutomatic
        .DisplayStatusBar = False
        .EnableEvents = True
    End With
    
    'Temps d'exécution
    MsgBox "Temps d'exécution : " & Format(Timer - t, "0.00") & " seconde(s)"
    'Message de fin
    MsgBox "Calcul réalisé !"

End Sub
 