Question
Attente de fin d'exécution EXCEL
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 8 ans 1 mois #25313
par Toper
Powershell: la vie est belle
Attente de fin d'exécution EXCEL a été créé 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 ?
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 ?
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 8 ans 1 mois #25316
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
Salut,
gregmurf écrit:
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 ?
gregmurf écrit:
Pour moi, difficile à dire.Bonjour,à tous,
est-ce qu'avec ce code
La seconde exécution attendra la fin de l'exécution du premier Excel ?
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.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 8 ans 1 mois #25351
par Toper
Powershell: la vie est belle
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]
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.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 8 ans 1 mois #25352
par xyz
Tutoriels PowerShell
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 :
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.
L'enchaînement de tes macros pourrait se faire sans avoir à clore l'instance de l'application.Remarks
You cannot use named arguments with this method. Arguments must be passed by position.
The Run method returns whatever the called macro returns.
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.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 8 ans 1 semaine #25391
par Toper
Powershell: la vie est belle
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]
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.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 8 ans 1 semaine #25392
par xyz
Tutoriels PowerShell
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 ?
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.038 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Attente de fin d'exécution EXCEL