Flash info

"Those who forget to script are doomed to repeat their work."

Jeffery Hicks (PowerShell MVP)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
gregmurf
Utilisateur

PowerShelleur Confirmé
Messages: 116
graphgraph
Karma: 0  
Attente de fin d'exécution EXCEL - 13/04/18 11:01 Bonjour,à tous,
est-ce qu'avec ce code:
Code:

 $excel = new-object -comobject excel.application     $filePath "\\serveur\partage\fichier1.xlsm"     $workbook $excel.Workbooks.Open($FilePath)     $excel.Visible $true     $worksheet $workbook.worksheets.item(1)     Write-Host "Running macro in excel to scrub data."     $excel.Run("Execution_Batch")     $workbook.close()     $excel.quit()     $excel = new-object -comobject excel.application     $filePath "\\serveur\partage\fichier2.xlsm"     $workbook $excel.Workbooks.Open($FilePath)     $excel.Visible $true     $worksheet $workbook.worksheets.item(1)     Write-Host "Running macro in excel to scrub data."     $excel.Run("Execution_Batch")     $workbook.close()     $excel.quit()


La seconde exécution attendra la fin de l'exécution du premier Excel ?

Powershell: la vie est belle
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5437
graph
Karma: 198  
Re:Attente de fin d'exécution EXCEL - 16/04/18 20:49 Salut,
gregmurf écrit:
Bonjour,à tous,
est-ce qu'avec ce code
La seconde exécution attendra la fin de l'exécution du premier Excel ?

Pour moi, difficile à dire.
L'objet COM est peut être encore en mémoire car ici sa libération n'est pas forcée.
L'instance pourrait être la même, mais le classeur fermé.

Le mieux est de tester, temps que je n'ai pas, et vérifier si l'ID du process (et ou l'instance COM ?) est identique.

Quel risque comptes-tu éviter ici ?
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
gregmurf
Utilisateur

PowerShelleur Confirmé
Messages: 116
graphgraph
Karma: 0  
Re:Attente de fin d'exécution EXCEL - 25/04/18 12:11 Bonjour et merci,
en fait, je dois lancer plusieurs macro, mais pour lancer la seconde par exemple, il faut que la première ait fini de tourner.

Le code batch etait:
Code:

 "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" //cmd/Execution_Batch "c:\dossier\macro1.xlsm" set fichiers="blabla1*.pdf" forfiles /%racine% /%fichiers% /-%nbjours% //"cmd /c @FILE @FDATE"  forfiles /%racine% /%fichiers% /-%nbjours% //"cmd /c del @FILE"  "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" //cmd/Execution_Batch "c:\dossier\macro2.xlsm" set fichiers="blabla2*.pdf" forfiles /%racine% /%fichiers% /-%nbjours% //"cmd /c @FILE @FDATE"  forfiles /%racine% /%fichiers% /-%nbjours% //"cmd /c del @FILE" 



Que j'ai transformé en:
Code:

     $excel = new-object -comobject excel.application     $filePath "c:\dossier\macro1.xlsm"     $workbook $excel.Workbooks.Open($FilePath)     $excel.Visible $False     $worksheet $workbook.worksheets.item(1)     $excel.Run("Execution_Batch")     $workbook.close()     $excel.quit()     if ((Get-ChildItem -path $path -Recurse -Include "blabla1*.pdf" -Force Where-Object { ((Get-Date) - $_.LastWriteTime).totaldays -gt 1 }) -ne $null)         {          Remove-Item -path $path -Recurse -Include "blabla1*.pdf" -Force      }     $excel = new-object -comobject excel.application     $filePath "c:\dossier\macro2.xlsm"     $workbook $excel.Workbooks.Open($FilePath)     $excel.Visible $False     $worksheet $workbook.worksheets.item(1)     $excel.Run("Execution_Batch")     $workbook.close()     $excel.quit()     if ((Get-ChildItem -path $path -Recurse -Include "blabla2*.pdf" -Force Where-Object { ((Get-Date) - $_.LastWriteTime).totaldays -gt 1 }) -ne $null)         {          Remove-Item -path $path -Recurse -Include "blabla2*.pdf" -Force      }

Powershell: la vie est belle
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5437
graph
Karma: 198  
Re:Attente de fin d'exécution EXCEL - 25/04/18 18:28 On peut supposer que le méthode Run est synchrone :

Remarks

You cannot use named arguments with this method. Arguments must be passed by position.

The Run method returns whatever the called macro returns.

L'enchaînement de tes macros pourrait se faire sans avoir à clore l'instance de l'application.

Pour t'en assurer crée des macros de test contenant une création de fichier + une attente (si ça existe).
Ainsi tu peux contrôler l'heure de création et l'enchainement.
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
© 2018 PowerShell-Scripting.com