@echo off setlocal enabledelayedexpansion :: ======================================== :: Étape 1 : Définition des chemins :: ======================================== set "DATA_DIR=D:\Caisse\Tache_Powerautomate\Extraction_GRC_interaction" rem chemin ou se trouve mon fichier excel set "SQL_SCRIPT=D:\Caisse\Tache_Powerautomate\Batch_Importation\GRC_interaction\Sql_import_inter.sql" rem chemin ou se trouve mon sql, on ne s'en occupe Pas set "CSV_DIR=%DATA_DIR%\csv" rem chemin vers mon repertoire csv if not exist "%CSV_DIR%" mkdir "%CSV_DIR%" :: ======================================== :: Étape 2 : Recherche du dernier fichier source :: ======================================== set "LATEST_ORIGINAL_FILE=" rem je recherche le dernier fichier , tout es ok ici for /f "delims=" %%F in ('dir /b /a:-d /o-d "%DATA_DIR%\Extraction*Hebdo_20??-??-??_??-??.xlsx" 2^>nul') do ( set "LATEST_ORIGINAL_FILE=%%F" goto :found_file ) echo Aucun fichier correspondant trouvé dans %DATA_DIR% exit /b 1 :found_file echo Fichier original détecté : "!LATEST_ORIGINAL_FILE!" :: ======================================== :: Étape 3 : Renommage du fichier (avec suppression si existant) :: ======================================== rem Remplacement des espaces uniquement set "RENAMED_FILE=!LATEST_ORIGINAL_FILE: =_!" if /I not "!LATEST_ORIGINAL_FILE!"=="!RENAMED_FILE!" ( if exist "%DATA_DIR%\!RENAMED_FILE!" ( echo Le fichier renommé existe déjà, suppression de "!RENAMED_FILE!" del /f /q "%DATA_DIR%\!RENAMED_FILE!" if errorlevel 1 ( echo ERREUR : Impossible de supprimer le fichier existant "!RENAMED_FILE!" exit /b 1 ) ) echo Tentative de renommage : "!LATEST_ORIGINAL_FILE!" --> "!RENAMED_FILE!" ren "%DATA_DIR%\!LATEST_ORIGINAL_FILE!" "!RENAMED_FILE!" if errorlevel 1 ( echo ERREUR : Impossible de renommer le fichier. exit /b 1 ) set "LATEST_ORIGINAL_FILE=!RENAMED_FILE!" ) else ( echo Pas besoin de renommer, nom déjà correct. ) set "FULL_RENAMED_PATH=%DATA_DIR%\!LATEST_ORIGINAL_FILE!" :: ======================================== :: Étape 3 bis : Fermeture des processus Excel orphelins :: ======================================== echo Fermeture éventuelle des processus Excel orphelins... taskkill /IM excel.exe /F >nul 2>&1 :: ======================================== :: Étape 4 : Conversion XLSX en CSV via conversion.ps1 :: ======================================== rem probleme ici, le traitement est trop long set "CSV_FILE=!LATEST_ORIGINAL_FILE:.xlsx=.csv!" set "CSV_PATH=%CSV_DIR%\!CSV_FILE!" echo Conversion de "!FULL_RENAMED_PATH!" en CSV "!CSV_PATH!" pushd "%DATA_DIR%" powershell.exe -NoProfile -ExecutionPolicy Bypass -File "D:\Caisse\Tache_Powerautomate\Batch_Importation\GRC_interaction\conversion_inter.ps1" -excelFilePath "!FULL_RENAMED_PATH!" -csvFilePath "!CSV_PATH!" if errorlevel 1 ( echo ERREUR : Conversion en CSV échouée. popd exit /b 1 ) popd echo Conversion en CSV terminée. timeout /t 3 /nobreak >nul :: ======================================== :: Étape 4 bis : Attente que le fichier CSV soit libéré :: ======================================== echo Attente que le fichier CSV "!CSV_PATH!" soit libéré... set /a retry=0 :wait_loop ( >>"!CSV_PATH!" ( rem test ouverture écriture ) ) 2>nul || ( set /a retry+=1 if !retry! GEQ 10 ( echo ERREUR : Le fichier CSV est verrouillé après 10 tentatives. exit /b 1 ) timeout /t 1 >nul goto :wait_loop ) echo Fichier CSV libéré. echo Fermeture éventuelle des processus Excel orphelins... taskkill /IM excel.exe /F >nul 2>&1 :: ======================================== :: Étape 5 : Conversion en UTF-8 :: ======================================== set "FICHIER_ORIG_PATH=!CSV_PATH!" set "TMP_UTF8_FILE=%CSV_DIR%\tmp_utf8.csv" set "FICHIER_UTF8_PATH=!CSV_PATH!" echo Conversion en UTF-8 du fichier : !CSV_FILE! powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^ "try { Get-Content -Path '!FICHIER_ORIG_PATH!' -Raw | Set-Content -Path '!TMP_UTF8_FILE!' -Encoding UTF8 } catch { exit 1 }" if errorlevel 1 ( echo ERREUR : La conversion UTF-8 via PowerShell a échoué. exit /b 1 ) if exist "!TMP_UTF8_FILE!" ( del /f /q "!FICHIER_ORIG_PATH!" ren "!TMP_UTF8_FILE!" "!CSV_FILE!" echo Conversion UTF-8 réussie : !FICHIER_UTF8_PATH! ) else ( echo ERREUR : Le fichier UTF-8 temporaire n'a pas été créé. Le fichier original est conservé. exit /b 1 ) :: ======================================== :: Étape 6 : Exécution du script SQL :: ======================================== rem tout es ok suite du traitement, mais là tout es ok timeout /t 5 /nobreak >nul