Question Attente de fin d'exécution EXCEL

Plus d'informations
il y a 8 ans 1 semaine #25399 par Toper
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.........

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 #25401 par Toper
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]

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 #25402 par xyz
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
gregmurf écrit:

Comment fais-je pour vérifier cela ?

Bonne question :-)
Je regarde comment différencier/retrouver le ClsID
gregmurf écrit:

Et qu'entends-tu par contexte d'appel ?

Session utilisateur vs tâche planifiée avec un compte de service par exemple.

gregmurf écrit:

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 macro, le fermer, le réouvrir, etc... ?

C'est fort probable ,mais je n'ai pas plus d'arguments que ça.Faut tester :P

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 6 jours #25403 par xyz
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]

Tutoriels PowerShell

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

Plus d'informations
il y a 7 ans 11 mois #25413 par Toper
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.

Powershell: la vie est belle :)

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

Plus d'informations
il y a 7 ans 11 mois #25416 par xyz
Réponse de xyz sur le sujet Re:Attente de fin d'exécution EXCEL
gregmurf écrit:

Mais... toujours mon petit processus excel.

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.
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
Propulsé par Kunena