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

Applications et Fichiers

4 réponses
Avatar
Patrick
Bonjour,

Est-il possible, en VBA, de lister les applications ouvertes sur un
ordinateur et, le cas échéant, les fichiers ouverts dans ces applications ?

Voici mon but : Je ne veux pas qu'un utilisateur puisse ouvrir plusieurs
fois le même fichier Excel (ce fichier est en fait un programme partagé).
Comme le fichier est en lecture seule sur le réseau, il n'y aura pas de
message si le fichier est déjà utilisé. Par contre, si il est possible de
vérifier que sur son ordinateur il n'y a pas d'autre Excel d'ouvert ou, si un
autre Excel est ouvert et que le fameux fichier n'y est pas ouvert, alors je
laisserai l'utilisateur l'ouvrir.

Merci pour votre aide.

--
Patrick

4 réponses

Avatar
Patrice Henrio
Oui c'est possible.

Sub OuvrirXLS(Fichier As String)
Dim wbk As Workbook, Trouvé As Boolean

Trouvé = False
For Each wbk In Workbooks
Trouvé = (wbk.Name = Fichier)
If Trouvé Then Exit For
Next
If Not Trouvé Then Workbooks.Open Filename:=CHEMINXLS & Fichier
End Sub

Il est possible aussi de définir une macro Auto_Open qui vérifie que le
fichier n'est pas déjà ouvert.



"Patrick" a écrit dans le message de
news:
Bonjour,

Est-il possible, en VBA, de lister les applications ouvertes sur un
ordinateur et, le cas échéant, les fichiers ouverts dans ces applications
?

Voici mon but : Je ne veux pas qu'un utilisateur puisse ouvrir plusieurs
fois le même fichier Excel (ce fichier est en fait un programme partagé).
Comme le fichier est en lecture seule sur le réseau, il n'y aura pas de
message si le fichier est déjà utilisé. Par contre, si il est possible de
vérifier que sur son ordinateur il n'y a pas d'autre Excel d'ouvert ou, si
un
autre Excel est ouvert et que le fameux fichier n'y est pas ouvert, alors
je
laisserai l'utilisateur l'ouvrir.

Merci pour votre aide.

--
Patrick


Avatar
Patrick
Bonjour,

Merci pour ta réponse. Mais il me semble que le code que tu as mis liste les
fichiers ouverts dans le Excel où est exécutée la macro. En ce qui me
concerne, j'aimerais savoir si le fichier est ouvert dans une autre instance
de Excel sur le même ordinateur.

Dans une macro auto_open, comment peut-on savoir si le fichier est déjà
ouvert ?

Merci beaucoup pour ton aide.

--
Patrick


"Patrice Henrio" wrote:

Oui c'est possible.

Sub OuvrirXLS(Fichier As String)
Dim wbk As Workbook, Trouvé As Boolean

Trouvé = False
For Each wbk In Workbooks
Trouvé = (wbk.Name = Fichier)
If Trouvé Then Exit For
Next
If Not Trouvé Then Workbooks.Open Filename:=CHEMINXLS & Fichier
End Sub

Il est possible aussi de définir une macro Auto_Open qui vérifie que le
fichier n'est pas déjà ouvert.



"Patrick" a écrit dans le message de
news:
> Bonjour,
>
> Est-il possible, en VBA, de lister les applications ouvertes sur un
> ordinateur et, le cas échéant, les fichiers ouverts dans ces applications
> ?
>
> Voici mon but : Je ne veux pas qu'un utilisateur puisse ouvrir plusieurs
> fois le même fichier Excel (ce fichier est en fait un programme partagé).
> Comme le fichier est en lecture seule sur le réseau, il n'y aura pas de
> message si le fichier est déjà utilisé. Par contre, si il est possible de
> vérifier que sur son ordinateur il n'y a pas d'autre Excel d'ouvert ou, si
> un
> autre Excel est ouvert et que le fameux fichier n'y est pas ouvert, alors
> je
> laisserai l'utilisateur l'ouvrir.
>
> Merci pour votre aide.
>
> --
> Patrick





Avatar
Patrice Henrio
Effectivement.

Dans ce cas il faut faire la même chose mais pour chaque instance de Excel
ouverte. Il faut donc lister les programmes ouverts, vérifier s'il s'agit
d'Excel et dans ce cas appliquer la routine.

Je crois, de mémoire, qu'il y a une fonction (peut-être une API) qui liste
les programmes ouverts.

Sinon une solution
dans une macro auto_open tu vas écrire un fichier texte indiquant qu'on a
ouvert le fichier Excel en question, par exemple à la racine de C:, un
fichier Présent.txt dans lequel on écrit "ouvert". Lors de la fermeture une
autre macro efface ce fichier (ou écrit "fermé"). Bien évidemment à
l'ouverture on teste le fichier Présent.txt, s'il est absent ou que son
contenu est "fermé" cela signifie qu'il n'y pas d'instance du fichier Excel
ouvert et cela quel que soit l'application Excel qui l'a ouvert.


"Patrick" a écrit dans le message de
news:
Bonjour,

Merci pour ta réponse. Mais il me semble que le code que tu as mis liste
les
fichiers ouverts dans le Excel où est exécutée la macro. En ce qui me
concerne, j'aimerais savoir si le fichier est ouvert dans une autre
instance
de Excel sur le même ordinateur.

Dans une macro auto_open, comment peut-on savoir si le fichier est déjà
ouvert ?

Merci beaucoup pour ton aide.

--
Patrick


"Patrice Henrio" wrote:

Oui c'est possible.

Sub OuvrirXLS(Fichier As String)
Dim wbk As Workbook, Trouvé As Boolean

Trouvé = False
For Each wbk In Workbooks
Trouvé = (wbk.Name = Fichier)
If Trouvé Then Exit For
Next
If Not Trouvé Then Workbooks.Open Filename:=CHEMINXLS & Fichier
End Sub

Il est possible aussi de définir une macro Auto_Open qui vérifie que le
fichier n'est pas déjà ouvert.



"Patrick" a écrit dans le message de
news:
> Bonjour,
>
> Est-il possible, en VBA, de lister les applications ouvertes sur un
> ordinateur et, le cas échéant, les fichiers ouverts dans ces
> applications
> ?
>
> Voici mon but : Je ne veux pas qu'un utilisateur puisse ouvrir
> plusieurs
> fois le même fichier Excel (ce fichier est en fait un programme
> partagé).
> Comme le fichier est en lecture seule sur le réseau, il n'y aura pas de
> message si le fichier est déjà utilisé. Par contre, si il est possible
> de
> vérifier que sur son ordinateur il n'y a pas d'autre Excel d'ouvert ou,
> si
> un
> autre Excel est ouvert et que le fameux fichier n'y est pas ouvert,
> alors
> je
> laisserai l'utilisateur l'ouvrir.
>
> Merci pour votre aide.
>
> --
> Patrick







Avatar
Patrice Henrio
Cependant un inconvénient de la méthode : si une coupure de courant
intempestive a lieu, on ne peut plus rouvrir le fichier. peut-être un
message prévenant l'utilisateur et lui donnant le choix de l'ouvrir quand
même ?

"Patrice Henrio" a écrit dans le message de
news:
Effectivement.

Dans ce cas il faut faire la même chose mais pour chaque instance de Excel
ouverte. Il faut donc lister les programmes ouverts, vérifier s'il s'agit
d'Excel et dans ce cas appliquer la routine.

Je crois, de mémoire, qu'il y a une fonction (peut-être une API) qui liste
les programmes ouverts.

Sinon une solution
dans une macro auto_open tu vas écrire un fichier texte indiquant qu'on a
ouvert le fichier Excel en question, par exemple à la racine de C:, un
fichier Présent.txt dans lequel on écrit "ouvert". Lors de la fermeture
une autre macro efface ce fichier (ou écrit "fermé"). Bien évidemment à
l'ouverture on teste le fichier Présent.txt, s'il est absent ou que son
contenu est "fermé" cela signifie qu'il n'y pas d'instance du fichier
Excel ouvert et cela quel que soit l'application Excel qui l'a ouvert.


"Patrick" a écrit dans le message de
news:
Bonjour,

Merci pour ta réponse. Mais il me semble que le code que tu as mis liste
les
fichiers ouverts dans le Excel où est exécutée la macro. En ce qui me
concerne, j'aimerais savoir si le fichier est ouvert dans une autre
instance
de Excel sur le même ordinateur.

Dans une macro auto_open, comment peut-on savoir si le fichier est déjà
ouvert ?

Merci beaucoup pour ton aide.

--
Patrick


"Patrice Henrio" wrote:

Oui c'est possible.

Sub OuvrirXLS(Fichier As String)
Dim wbk As Workbook, Trouvé As Boolean

Trouvé = False
For Each wbk In Workbooks
Trouvé = (wbk.Name = Fichier)
If Trouvé Then Exit For
Next
If Not Trouvé Then Workbooks.Open Filename:=CHEMINXLS & Fichier
End Sub

Il est possible aussi de définir une macro Auto_Open qui vérifie que le
fichier n'est pas déjà ouvert.



"Patrick" a écrit dans le message de
news:
> Bonjour,
>
> Est-il possible, en VBA, de lister les applications ouvertes sur un
> ordinateur et, le cas échéant, les fichiers ouverts dans ces
> applications
> ?
>
> Voici mon but : Je ne veux pas qu'un utilisateur puisse ouvrir
> plusieurs
> fois le même fichier Excel (ce fichier est en fait un programme
> partagé).
> Comme le fichier est en lecture seule sur le réseau, il n'y aura pas
> de
> message si le fichier est déjà utilisé. Par contre, si il est possible
> de
> vérifier que sur son ordinateur il n'y a pas d'autre Excel d'ouvert
> ou, si
> un
> autre Excel est ouvert et que le fameux fichier n'y est pas ouvert,
> alors
> je
> laisserai l'utilisateur l'ouvrir.
>
> Merci pour votre aide.
>
> --
> Patrick