@echo off chcp 1252 >nul setlocal EnableExtensions REM ===================== PARAMS GENERAUX ===================== set "ROOT=C:\Users\miche\PycharmProjects\Ratio_Inventaires" set "PROD_DIR=%ROOT%\Excel\prod" set "SHEET_NAME=Tableau de bord" set "CELL_ADDR=U1" REM ===================== CHOIX APPLI ========================= REM Usage : maj_prod_ratio.bat CUISINE ou maj_prod_ratio.bat RESTAURATION set "APP=%~1" if /I "%APP%"=="CUISINE" ( set "BASE_NAME=Ratio_Cuisine" ) else if /I "%APP%"=="RESTAURATION" ( set "BASE_NAME=Ratio_Restauration" ) else ( echo. echo Usage: %~n0 CUISINE^|RESTAURATION echo Exemple: %~n0 CUISINE endlocal & exit /b 1 ) set "DEV_XLSM=%ROOT%\Excel\dev\%BASE_NAME%_dev.xlsm" set "PROD_XLSM=%PROD_DIR%\%BASE_NAME%.xlsm" set "VERSION_TXT=%ROOT%\Excel\dev\%BASE_NAME%_VERSION.txt" echo. echo === Application : %APP% (%BASE_NAME%) ===================== echo. echo === [1/4] Prep ============================================ if not exist "%PROD_DIR%" md "%PROD_DIR%" if not exist "%DEV_XLSM%" goto ERR_NO_DEV if not exist "%VERSION_TXT%" ( >"%VERSION_TXT%" echo 1.0.0 echo [INFO] %BASE_NAME%_VERSION.txt created with 1.0.0 ) for /f %%i in ('powershell -NoProfile -Command "(Get-Date).ToString('yyyy_MM_dd')"') do set "DATESTAMP=%%i" set "ARCHIVE_FILE=%PROD_DIR%\%BASE_NAME%_%DATESTAMP%.xlsm" echo. echo === [2/4] Lire VERSION.txt et maj cellule ================== for /f "usebackq delims=" %%v in ("%VERSION_TXT%") do set "NEW_VER=%%v" set "NEW_VER=%NEW_VER: =%" if "%NEW_VER%"=="" goto ERR_EMPTY_VER echo Version: %NEW_VER% REM Mise a jour de la cellule dans DEV via VBS (macros & evenements OFF) cscript //nologo "%ROOT%\Scripts\set_cell_silent.vbs" "%DEV_XLSM%" "%SHEET_NAME%" "%CELL_ADDR%" "%NEW_VER%" if errorlevel 1 goto U1_FAIL echo [OK] %CELL_ADDR% updated on DEV: %NEW_VER% goto AFTER_U1 :U1_FAIL echo [WARN] %CELL_ADDR% update failed on DEV (continuing). :AFTER_U1 echo. echo === [3/4] Backup PROD et purge archives =================== if not exist "%PROD_XLSM%" goto NO_BACKUP echo Backup -> "%ARCHIVE_FILE%" copy /Y "%PROD_XLSM%" "%ARCHIVE_FILE%" >nul goto AFTER_BACKUP :NO_BACKUP echo Pas de PROD a sauvegarder. :AFTER_BACKUP REM Garder uniquement les 5 dernières archives powershell -NoProfile -Command "Get-ChildItem -LiteralPath '%PROD_DIR%' -Filter '%BASE_NAME%_20*_??_??.xlsm' | Sort-Object LastWriteTime -Descending | Select-Object -Skip 5 | Remove-Item -Force -ErrorAction SilentlyContinue" echo. echo === [4/4] Copier DEV -> PROD ============================== copy /Y "%DEV_XLSM%" "%PROD_XLSM%" if errorlevel 1 goto ERR_COPY >"%PROD_DIR%\%BASE_NAME%_VERSION.txt" echo %NEW_VER% echo. echo [OK] Termine pour %APP% : echo Version : %NEW_VER% echo PROD : "%PROD_XLSM%" echo VERSION : "%PROD_DIR%\%BASE_NAME%_VERSION.txt" echo. endlocal & exit /b 0 REM ===================== ERRORS =============================== :ERR_NO_DEV echo [ERROR] DEV file not found: "%DEV_XLSM%" endlocal & exit /b 1 :ERR_EMPTY_VER echo [ERROR] "%VERSION_TXT%" is empty. Put a version like 1.8.3 and rerun. endlocal & exit /b 1 :ERR_COPY echo [ERROR] Copy DEV -> PROD failed. endlocal & exit /b 1