Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fermer des classeurs Excel générés par macro VBA

4 réponses
Avatar
TDF
Bonjour,
J'ai une grosse macro VBA qui génère 7 classeurs XL à partir de données
venant de 7 autres classeurs XL. Normalement, elle supprime par l'instruction
Kill ces 7 autres fichiers xls au fur et à mesure qu'elle les a utilisés.
Mais quand elle se plante, il reste des classeurs ouverts (mais non visibles)
dont on peut voir les sessions Excel ouvertes dans le gestionnaire de taches
Windows. Dans ce cas, si je relance la macro, elle plante sur l'instruction
Kill (erreur 70 : Permission refusée) car l'instruction Kill essaie de
supprimer un classeur qui est encore ouvert en mémoire.
Je cherche un moyen de tester au début de la macro si un ou pls de ces
classeurs sont encore ouverts pour les fermer et poursuivre.
Or, l'instruction GetObject ne fonctionne pas (d'après l'aide en ligne) sur
des classeurs générés par macro.
Comment faire ?

Merci pour votre aide.

4 réponses

Avatar
Daniel
Bonjour.
On Error resume next
workbooks("toto.xls").close
Kill "toto.xls"
etc..
Daniel
"TDF" a écrit dans le message de news:

Bonjour,
J'ai une grosse macro VBA qui génère 7 classeurs XL à partir de données
venant de 7 autres classeurs XL. Normalement, elle supprime par
l'instruction
Kill ces 7 autres fichiers xls au fur et à mesure qu'elle les a utilisés.
Mais quand elle se plante, il reste des classeurs ouverts (mais non
visibles)
dont on peut voir les sessions Excel ouvertes dans le gestionnaire de
taches
Windows. Dans ce cas, si je relance la macro, elle plante sur
l'instruction
Kill (erreur 70 : Permission refusée) car l'instruction Kill essaie de
supprimer un classeur qui est encore ouvert en mémoire.
Je cherche un moyen de tester au début de la macro si un ou pls de ces
classeurs sont encore ouverts pour les fermer et poursuivre.
Or, l'instruction GetObject ne fonctionne pas (d'après l'aide en ligne)
sur
des classeurs générés par macro.
Comment faire ?

Merci pour votre aide.


Avatar
Youky
On error Goto gestionErr

'Cet exemple montre comment fermer tous les classeurs à l'exception de
celui de l'exemple.

Sub gestionErr()For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
w.Close savechanges:úlse
End If
Next wEnd subYouky"TDF" a écrit dans le
message de news:
Bonjour,
J'ai une grosse macro VBA qui génère 7 classeurs XL à partir de données
venant de 7 autres classeurs XL. Normalement, elle supprime par
l'instruction
Kill ces 7 autres fichiers xls au fur et à mesure qu'elle les a utilisés.
Mais quand elle se plante, il reste des classeurs ouverts (mais non
visibles)
dont on peut voir les sessions Excel ouvertes dans le gestionnaire de
taches
Windows. Dans ce cas, si je relance la macro, elle plante sur
l'instruction
Kill (erreur 70 : Permission refusée) car l'instruction Kill essaie de
supprimer un classeur qui est encore ouvert en mémoire.
Je cherche un moyen de tester au début de la macro si un ou pls de ces
classeurs sont encore ouverts pour les fermer et poursuivre.
Or, l'instruction GetObject ne fonctionne pas (d'après l'aide en ligne)
sur
des classeurs générés par macro.
Comment faire ?

Merci pour votre aide.


Avatar
TDF
Merci Daniel et Youki (réponse suivante)

J'ai testé, mais ce n'est pas ça que je cherche.
Le soucis, c'est que une ou pls sessions XL ont été ouvertes par la macro
lors de la 1ère exécution de la macro.
Ces sessions ont chacune un classeur ouvert (dont je connais les noms et
emplacements).
Il s'agit de trouver ces sessions ouvertes dans Windows, et de les fermer.
Pour info, cette macro est lancée par une machine qui fait tourner en meme
temps jusqu'à 5 requetes BO. Si la requete se plante, et donc plante la macro
encapsulée dedans, la machine peut la relancer 5 fois.
Mais c'est le plantage quasi assuré si un classeur est resté ouvert dans une
session XL précédante, et que la macro tente de le supprimer par un Kill
(erreur 70 : permission refusée).
Je ne vois pas comment, par programmation, détecter ces sessions XL et les
fermer (sans enregistrer le classeur qu'elles contiennent -> pas nécessaire).


Bonjour.
On Error resume next
workbooks("toto.xls").close
Kill "toto.xls"
etc..
Daniel
"TDF" a écrit dans le message de news:

Bonjour,
J'ai une grosse macro VBA qui génère 7 classeurs XL à partir de données
venant de 7 autres classeurs XL. Normalement, elle supprime par
l'instruction
Kill ces 7 autres fichiers xls au fur et à mesure qu'elle les a utilisés.
Mais quand elle se plante, il reste des classeurs ouverts (mais non
visibles)
dont on peut voir les sessions Excel ouvertes dans le gestionnaire de
taches
Windows. Dans ce cas, si je relance la macro, elle plante sur
l'instruction
Kill (erreur 70 : Permission refusée) car l'instruction Kill essaie de
supprimer un classeur qui est encore ouvert en mémoire.
Je cherche un moyen de tester au début de la macro si un ou pls de ces
classeurs sont encore ouverts pour les fermer et poursuivre.
Or, l'instruction GetObject ne fonctionne pas (d'après l'aide en ligne)
sur
des classeurs générés par macro.
Comment faire ?

Merci pour votre aide.







Avatar
Youky
Si dans ta macro tu utilises CreateObject il serait préférable de le
remplacer par GetObject
exemple
Set AppXls = GetObject(, "Excel.Application")

voir dans l'aide aussi à Usercontrol
Youky


"TDF" a écrit dans le message de news:

Merci Daniel et Youki (réponse suivante)

J'ai testé, mais ce n'est pas ça que je cherche.
Le soucis, c'est que une ou pls sessions XL ont été ouvertes par la macro
lors de la 1ère exécution de la macro.
Ces sessions ont chacune un classeur ouvert (dont je connais les noms et
emplacements).
Il s'agit de trouver ces sessions ouvertes dans Windows, et de les fermer.
Pour info, cette macro est lancée par une machine qui fait tourner en meme
temps jusqu'à 5 requetes BO. Si la requete se plante, et donc plante la
macro
encapsulée dedans, la machine peut la relancer 5 fois.
Mais c'est le plantage quasi assuré si un classeur est resté ouvert dans
une
session XL précédante, et que la macro tente de le supprimer par un Kill
(erreur 70 : permission refusée).
Je ne vois pas comment, par programmation, détecter ces sessions XL et les
fermer (sans enregistrer le classeur qu'elles contiennent -> pas
nécessaire).


Bonjour.
On Error resume next
workbooks("toto.xls").close
Kill "toto.xls"
etc..
Daniel
"TDF" a écrit dans le message de news:

Bonjour,
J'ai une grosse macro VBA qui génère 7 classeurs XL à partir de données
venant de 7 autres classeurs XL. Normalement, elle supprime par
l'instruction
Kill ces 7 autres fichiers xls au fur et à mesure qu'elle les a
utilisés.
Mais quand elle se plante, il reste des classeurs ouverts (mais non
visibles)
dont on peut voir les sessions Excel ouvertes dans le gestionnaire de
taches
Windows. Dans ce cas, si je relance la macro, elle plante sur
l'instruction
Kill (erreur 70 : Permission refusée) car l'instruction Kill essaie de
supprimer un classeur qui est encore ouvert en mémoire.
Je cherche un moyen de tester au début de la macro si un ou pls de ces
classeurs sont encore ouverts pour les fermer et poursuivre.
Or, l'instruction GetObject ne fonctionne pas (d'après l'aide en ligne)
sur
des classeurs générés par macro.
Comment faire ?

Merci pour votre aide.