Param( [string]$excelFilePath, [string]$csvFilePath ) $logFile = "$PSScriptRoot\conversion_debug.log" Add-Content -Path $logFile -Value "------" Add-Content -Path $logFile -Value "Début du script : $(Get-Date)" Add-Content -Path $logFile -Value "Fichier Excel : $excelFilePath" Add-Content -Path $logFile -Value "Fichier CSV cible : $csvFilePath" try { $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false Add-Content -Path $logFile -Value "Excel COM lancé..." $workbook = $excel.Workbooks.Open($excelFilePath) Add-Content -Path $logFile -Value "Classeur ouvert." $worksheet = $workbook.Sheets.Item(1) $usedRange = $worksheet.UsedRange $rowCount = $usedRange.Rows.Count $colCount = $usedRange.Columns.Count Add-Content -Path $logFile -Value "Range détecté : $rowCount lignes, $colCount colonnes" $csvLines = @() for ($row = 1; $row -le $rowCount; $row++) { $fields = @() for ($col = 1; $col -le $colCount; $col++) { $cell = $worksheet.Cells.Item($row, $col).Text $fields += $cell } $csvLines += ($fields -join ';') if ($row % 100 -eq 0) { Add-Content -Path $logFile -Value "Ligne $row traitée" } } $csvLines | Out-File -FilePath $csvFilePath -Encoding UTF8 Add-Content -Path $logFile -Value "Fichier CSV généré." $workbook.Close($false) $excel.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null [GC]::Collect() [GC]::WaitForPendingFinalizers() Add-Content -Path $logFile -Value "Fin du script sans erreur." } catch { Add-Content -Path $logFile -Value "ERREUR : $_" exit 1 }