Question Attente de fin d'exécution EXCEL

Plus d'informations
il y a 8 ans 1 mois #25313 par Toper
Bonjour,à tous,
est-ce qu'avec ce code:
[code:1]$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()
[/code:1]
La seconde exécution attendra la fin de l'exécution du premier Excel ?

:huh:

Powershell: la vie est belle :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #25316 par xyz
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #25351 par Toper
Réponse de Toper sur le sujet Re:Attente de fin d'exécution EXCEL
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:1]\"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE\" /R /cmd/Execution_Batch \"c:\dossier\macro1.xlsm\"
set fichiers=\"blabla1*.pdf\"
forfiles /p %racine% /m %fichiers% /D -%nbjours% /s /c \"cmd /c @FILE @FDATE\"
forfiles /p %racine% /m %fichiers% /D -%nbjours% /s /c \"cmd /c del @FILE\"
\"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE\" /R /cmd/Execution_Batch \"c:\dossier\macro2.xlsm\"
set fichiers=\"blabla2*.pdf\"
forfiles /p %racine% /m %fichiers% /D -%nbjours% /s /c \"cmd /c @FILE @FDATE\"
forfiles /p %racine% /m %fichiers% /D -%nbjours% /s /c \"cmd /c del @FILE\"
[/code:1]

Que j'ai transformé en:
[code:1] $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
}
[/code:1]

Powershell: la vie est belle :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 mois #25352 par xyz
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 semaine #25391 par Toper
Réponse de Toper sur le sujet Re:Attente de fin d'exécution EXCEL
Bonjour,
quelqu'un saurait pourquoi powershell ne veut pas de
[code:1]$workbook.close()
[/code:1]
ou même
[code:1]$workbook.close($false)
[/code:1] ?

Il me dit [code:1]Échec lors de l’appel de la méthode, car [System.__ComObject] ne contient pas de méthode nommée « close ».[/code:1]
:(

Powershell: la vie est belle :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 1 semaine #25392 par xyz
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
Salut,
dans un premier temps vérifie si le contenu de ta variable référence bien un objet Workbook.

Quel est le contexte d'appel de ton objet COM ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.046 secondes
Propulsé par Kunena