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 semaine #25399
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:Attente de fin d'exécution EXCEL
Comment fais-je pour vérifier cela ?
Et qu'entends-tu par contexte d'appel ?
Désolé pour ces questions.........
Et qu'entends-tu par contexte d'appel ?
Désolé pour ces questions.........
Powershell: la vie est belle
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 #25401
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:Attente de fin d'exécution EXCEL
J'ai une autre question: est-ce que le fait de ne lancer qu'une seule fois Excel, puis lancer une à une les macros ne serait pas mieux que d'ouvrir Excel, lancer la marco, le fermer, le réouvrir, etc... ?
Comme ça:
[code:1]$excel = new-object -comobject excel.application
$PathMacro1 = \"dossier\Macro1.xlsm\"
$workbook = $excel.Workbooks.Open($PathMacro1)
$excel.Visible = $False
$excel.Run(\"Execution_Batch\"«»)
$PathMacro2 = \"dossier\Macro2.xlsm\"
$workbook = $excel.Workbooks.Open($PathMacro2)
$excel.Run(\"Execution_Batch\"«»)
[/code:1]
Comme ça:
[code:1]$excel = new-object -comobject excel.application
$PathMacro1 = \"dossier\Macro1.xlsm\"
$workbook = $excel.Workbooks.Open($PathMacro1)
$excel.Visible = $False
$excel.Run(\"Execution_Batch\"«»)
$PathMacro2 = \"dossier\Macro2.xlsm\"
$workbook = $excel.Workbooks.Open($PathMacro2)
$excel.Run(\"Execution_Batch\"«»)
[/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 #25402
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
gregmurf écrit:

Je regarde comment différencier/retrouver le ClsID
gregmurf écrit:
gregmurf écrit:
Bonne questionComment fais-je pour vérifier cela ?
Je regarde comment différencier/retrouver le ClsID
gregmurf écrit:
Session utilisateur vs tâche planifiée avec un compte de service par exemple.Et qu'entends-tu par contexte d'appel ?
gregmurf écrit:
C'est fort probable ,mais je n'ai pas plus d'arguments que ça.Faut testerJ'ai une autre question: est-ce que le fait de ne lancer qu'une seule fois Excel, puis lancer une à une les macros ne serait pas mieux que d'ouvrir Excel, lancer la macro, le fermer, le réouvrir, etc... ?
Tutoriels PowerShell
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 6 jours #25403
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
Pour retrouver le type de l'objet COM :
[code:1]
$workbook.pstypenames
#System.__ComObject#{000208da-0000-0000-c000-000000000046}
#System.__ComObject
#System.MarshalByRefObject
#System.Object
[/code:1]
[code:1]
$workbook.pstypenames
#System.__ComObject#{000208da-0000-0000-c000-000000000046}
#System.__ComObject
#System.MarshalByRefObject
#System.Object
[/code:1]
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 7 ans 11 mois #25413
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:Attente de fin d'exécution EXCEL
Bonjour,
étant débutant, je ne sais pas trop quoi faire avec ça....
J'ai revu mon script pour qu'il n'ouvre excel qu'une fois, qu'il exécute les macros à la suite, et qu'il le ferme à la fin.
Mais le problème est qu'excel reste dans les processus...
J'ai essayé ceci
[code:1] $excel = new-object -comobject excel.application
$filePath = \"chemin_vers_la_macro\macro.xlsm\"
$workbook = $excel.Workbooks.Open($FilePath)
$excel.Visible = $false
$worksheet = $workbook.worksheets.item(1)
$excel.Run(\"Execution_Batch\"«»)
$excel.quit()
while( [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)){}[/code:1]
Mais... toujours mon petit processus excel.
étant débutant, je ne sais pas trop quoi faire avec ça....
J'ai revu mon script pour qu'il n'ouvre excel qu'une fois, qu'il exécute les macros à la suite, et qu'il le ferme à la fin.
Mais le problème est qu'excel reste dans les processus...
J'ai essayé ceci
[code:1] $excel = new-object -comobject excel.application
$filePath = \"chemin_vers_la_macro\macro.xlsm\"
$workbook = $excel.Workbooks.Open($FilePath)
$excel.Visible = $false
$worksheet = $workbook.worksheets.item(1)
$excel.Run(\"Execution_Batch\"«»)
$excel.quit()
while( [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)){}[/code:1]
Mais... toujours mon petit processus 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 7 ans 11 mois #25416
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
gregmurf écrit:
Un exemple :
[code:1]
$excel = new-object -com Excel.Application
$classeurSource=\"$PWD\Test.xls\"
$MonClasseur = $excel.Workbooks.Open($classeurSource)
#Les deux appels suivant provoquent une erreur
$MonClasseur.Worksheets[1]
$MonClasseur.Worksheets(1)
#Accéde a la première feuille XL
$MonClasseur.Worksheets.Item(1)
$Excel.Quit()
#Force la libération des ressources
$null=[System.Runtime.InteropServices.Marshal::ReleaseComObject($MonClasseur)]
$null=[System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()
[/code:1]
On peut aussi affecter $null aux objets qui ne sont plus utilisés (sauf l'objet primaire), mais c'est parfois insuffisant.
COM garde un compteur de références des objets créés, Il faut donc fermer/supprimer chaque objet COM que tu crées une fois que tu ne l'utilises plus. Sinon la référence reste active et 'empêche' la libération de l'objet COM.Mais... toujours mon petit processus excel.
Un exemple :
[code:1]
$excel = new-object -com Excel.Application
$classeurSource=\"$PWD\Test.xls\"
$MonClasseur = $excel.Workbooks.Open($classeurSource)
#Les deux appels suivant provoquent une erreur
$MonClasseur.Worksheets[1]
$MonClasseur.Worksheets(1)
#Accéde a la première feuille XL
$MonClasseur.Worksheets.Item(1)
$Excel.Quit()
#Force la libération des ressources
$null=[System.Runtime.InteropServices.Marshal::ReleaseComObject($MonClasseur)]
$null=[System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()
[/code:1]
On peut aussi affecter $null aux objets qui ne sont plus utilisés (sauf l'objet primaire), mais c'est parfois insuffisant.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.041 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Attente de fin d'exécution EXCEL