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

VBA Savoir si un fichier donné est en fenêtre

7 réponses
Avatar
Adrien Delcour
Bonjour =E0 tous.
Je fais une macro qui ouvre un fichier sans le mettre en=20
fen=EAtre (elle utilise donc l'instruction Open et non la=20
m=E9thode Open de Documents). Si ce fichier est en fen=EAtre
au moment o=F9 la macro est lanc=E9e, je crois qu'il y aura un=20
message d'erreur ("fichier utilis=E9 par un autre=20
processus"). Je voudrais donc que la macro v=E9rifie d'abord=20
si le fichier en question n'est pas en fen=EAtre. Le=20
probl=E8me est que les noms de fichiers associ=E9s aux=20
fen=EAtres pr=E9sentent une certaine ambigu=EFt=E9, en ce sens que=20
si deux fichiers diff=E9rents ont le m=EAme petit nom, c'est=20
ce m=EAme petit nom qui est associ=E9 aux deux fen=EAtres. On=20
peut =E9videmment rendre actifs tour =E0 tour tous les=20
fichiers en fen=EAtre et, =E0 chaque fois, v=E9rifier si le nom=20
complet du document actif est celui du fichier =E0 traiter,=20
mais cela me semble in=E9l=E9gant. On peut se limiter =E0 rendre=20
actifs le fichiers en fen=EAtre qui ont le m=EAme petit nom=20
que le fichier =E0 traiter, mais cela aussi me semble=20
in=E9l=E9gant. N'y a-t-il pas une fonction qui permet de=20
savoir imm=E9diatement si un fichier donn=E9 (et non un=20
fichier de m=EAme petit nom) est en fen=EAtre ? Merci d'avance.

7 réponses

Avatar
Pascal Engelmajer
Salut,
le plus simple c'est précisément d'utiliser l'erreur avec, par exemple, un
On Error Goto ...Resume
lors de la tentative d'ouverture
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Adrien Delcour" a écrit dans le
message de news: 094d01c3c482$0f7934a0$
Bonjour à tous.
Je fais une macro qui ouvre un fichier sans le mettre en
fenêtre (elle utilise donc l'instruction Open et non la
méthode Open de Documents). Si ce fichier est en fenêtre
au moment où la macro est lancée, je crois qu'il y aura un
message d'erreur ("fichier utilisé par un autre
processus"). Je voudrais donc que la macro vérifie d'abord
si le fichier en question n'est pas en fenêtre. Le
problème est que les noms de fichiers associés aux
fenêtres présentent une certaine ambiguïté, en ce sens que
si deux fichiers différents ont le même petit nom, c'est
ce même petit nom qui est associé aux deux fenêtres. On
peut évidemment rendre actifs tour à tour tous les
fichiers en fenêtre et, à chaque fois, vérifier si le nom
complet du document actif est celui du fichier à traiter,
mais cela me semble inélégant. On peut se limiter à rendre
actifs le fichiers en fenêtre qui ont le même petit nom
que le fichier à traiter, mais cela aussi me semble
inélégant. N'y a-t-il pas une fonction qui permet de
savoir immédiatement si un fichier donné (et non un
fichier de même petit nom) est en fenêtre ? Merci d'avance.
Avatar
Merci Pascal.
J'évite les gestions d'erreur parce que je préfère envoyer
à l'utilisateur un message diagnostiquant l'erreur de la
façon la plus précise possible, mais apparemment, il n'y a
rien de mieux dans ce cas.
Encore merci.
-----Message d'origine-----
Salut,
le plus simple c'est précisément d'utiliser l'erreur
avec, par exemple, un

On Error Goto ...Resume
lors de la tentative d'ouverture
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait
pas ou il va."

Sénèque.
http://www.ilyapa.net/excel
"Adrien Delcour" a
écrit dans le

message de news: 094d01c3c482$0f7934a0$
Bonjour à tous.
Je fais une macro qui ouvre un fichier sans le mettre en
fenêtre (elle utilise donc l'instruction Open et non la
méthode Open de Documents). Si ce fichier est en fenêtre
au moment où la macro est lancée, je crois qu'il y aura un
message d'erreur ("fichier utilisé par un autre
processus"). Je voudrais donc que la macro vérifie d'abord
si le fichier en question n'est pas en fenêtre. Le
problème est que les noms de fichiers associés aux
fenêtres présentent une certaine ambiguïté, en ce sens que
si deux fichiers différents ont le même petit nom, c'est
ce même petit nom qui est associé aux deux fenêtres. On
peut évidemment rendre actifs tour à tour tous les
fichiers en fenêtre et, à chaque fois, vérifier si le nom
complet du document actif est celui du fichier à traiter,
mais cela me semble inélégant. On peut se limiter à rendre
actifs le fichiers en fenêtre qui ont le même petit nom
que le fichier à traiter, mais cela aussi me semble
inélégant. N'y a-t-il pas une fonction qui permet de
savoir immédiatement si un fichier donné (et non un
fichier de même petit nom) est en fenêtre ? Merci
d'avance.



.



Avatar
Geo
Bonsoir ,


Merci Pascal.
J'évite les gestions d'erreur parce que je préfère envoyer
à l'utilisateur un message diagnostiquant l'erreur de la
façon la plus précise possible,


Ce n'est pas à proprement parler une erreur dans ce cas, c'est plutôt
un passage en force.
Il n'y a qu'une ligne concernée si j'ai bien compris
et après tu reprends la gestion normale des erreurs

mais apparemment, il n'y a rien de mieux dans ce cas.


C'est le plus simple en tous cas.

--

A+

Avatar
Adrien Delcour
Merci Geo.
Vous confirmez que la bonne solution est le On Error GoTo.
Je ferai sans doute envoyer le message système, en lui
ajoutant quelque chose comme "Le fichier untel ne serait-
il pas en fenêtre ?" (à moins que On Error GoTo ne
permette un diagnostic plus précis, je vais essayer de
chercher cela comme un grand). Encore merci.
-----Message d'origine-----
Bonsoir ,


Merci Pascal.
J'évite les gestions d'erreur parce que je préfère
envoyer


à l'utilisateur un message diagnostiquant l'erreur de la
façon la plus précise possible,


Ce n'est pas à proprement parler une erreur dans ce cas,
c'est plutôt

un passage en force.
Il n'y a qu'une ligne concernée si j'ai bien compris
et après tu reprends la gestion normale des erreurs

mais apparemment, il n'y a rien de mieux dans ce cas.


C'est le plus simple en tous cas.

--

A+

.




Avatar
Geo
Bonsoir Adrien,


Merci Geo.
Vous confirmez que la bonne solution est le On Error GoTo.


Oui et non

perso je mettrais un "on error resume next" avant l'instruction,
et un "on error go to 0" après pour reprendre un gestion complète des
erreurs,
c'est ce que j'ai appelé le passage en force
et je suppose que c'est ce que Pascal avait à l'esprit.

Je ferai sans doute envoyer le message système, en lui
ajoutant quelque chose comme "Le fichier untel ne serait-
il pas en fenêtre ?"


Si vous préférez avertir l'utilisateur, autant regarder si une fenêtre
a le nom du document.
en utilisant l'objet Windows, on doit y arriver,
ceci dit, le pb risque de se poser en amont car si le document est
déjà ouvert, c'est à l'open que ça risque de coincer.

--

Geo de la douce Touraine (France)

Avatar
Adrien Delcour
Merci Geo.
Je pensais vous avoir remercié, mais en regardant s'il y a
encore eu des suites à mon message, je ne vois pas de
réponse.
J'avais peut-être fait une fauuse manoeuvre.
-----Message d'origine-----
Bonsoir ,


Merci Pascal.
J'évite les gestions d'erreur parce que je préfère
envoyer


à l'utilisateur un message diagnostiquant l'erreur de la
façon la plus précise possible,


Ce n'est pas à proprement parler une erreur dans ce cas,
c'est plutôt

un passage en force.
Il n'y a qu'une ligne concernée si j'ai bien compris
et après tu reprends la gestion normale des erreurs

mais apparemment, il n'y a rien de mieux dans ce cas.


C'est le plus simple en tous cas.

--

A+

.




Avatar
Geo
Bonsoir Adrien ,


Merci Geo.
Je pensais vous avoir remercié, mais en regardant s'il y a
encore eu des suites à mon message, je ne vois pas de
réponse.
J'avais peut-être fait une fauuse manouvre.


C'est le problème avec l'accès aux forums par le site internet,
la mise à jour n'est pas simultanée
elle n'est pas toujours faite,
on ne retrouve pas facilement.
D'ailleurs j'ai continué aussi.

Quand on la possibilité il vaut mieux utiliser un outil
spécifiquement fait pour le courrier et les forums,
au hasard pour PC, par ordre d'utilisation sur ce forum (Merci JieL) :
Microsoft Outlook Express
Mozilla
Forte Agent
MesNews