Détecter fermeture de session windows

XceSs

XLDnaute Nouveau
Bonjour, j'aimerai savoir s'il est possible et s'il y a une façon vba de détecter la fermeture de windows afin de fermer les classeurs ouverts.

Merci de votre aide
 

XceSs

XLDnaute Nouveau
Re : Détecter fermeture de session windows

Bonjour, même avec ceci quand je ferme la session et que le classeur en question est ouvert j'ai toujours un message demandant si je veux enregistrer les modifications...

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Application.DisplayAlerts = False
 ActiveWorkbook.Saved = True
 If Application.Workbooks.Count = 1 Then
  Application.Quit
 End If
end sub
 

david84

XLDnaute Barbatruc
Re : Détecter fermeture de session windows

Bonjour,
salut Michel,
quand je ferme la session et que le classeur en question est ouvert j'ai toujours un message demandant si je veux enregistrer les modifications...
Pourrais-tu expliquer concrètement ton problème ? Si tu travailles sur un fichier Excel c'est bien qu'une session Windows est ouverte non ? Si tu veux fermer ta session Windows il est normal que Windows veuille fermer le fichier et te demande si tu veux enregistrer les modifications, non ? Donc quel est le cas de figure que tu aimerais gérer à partir d'Excel ?
A+
 

XceSs

XLDnaute Nouveau
Re : Détecter fermeture de session windows

Bonsoir, en fait j'ai fais un classeur excel avec des userforms, boutons avec des liens, raccourcis, répertoire téléphonique etc... Ce classeur est ouvert par tous les utilisateurs du service ou je taff, chaque utilisateur est authentifié par son login de session windows. Ce classeur me permet aussi de savoir qui est connecté (via un autre classeur) par un fichier créé à l'ouverture sur un disque dur réseau. Si les utilisateurs ferment le classeur avec la croix ou le bouton de fermeture, le fichier en question est détruit et ne ils sont plus connectés. Malheureusement, certains utilisateurs ferment leur session windows sans fermer le classeur et de ce fait ne se sont pas déconnectés car le fichier n'est pas détruit.

Cdt.
 

david84

XLDnaute Barbatruc
Re : Détecter fermeture de session windows

Bonsoir,
j'ai fais un classeur excel avec des userforms, boutons avec des liens, raccourcis, répertoire téléphonique etc... Ce classeur est ouvert par tous les utilisateurs du service ou je taff.
J'en conclus que ce classeur est placé sur le réseau, est-ce cela ?
Donc n'importe qui peut y accéder ?
chaque utilisateur est authentifié par son login de session windows
Le login sert à quoi exactement ? Quel rôle jour-t-il ?
Si les utilisateurs ferment le classeur avec la croix ou le bouton de fermeture, le fichier en question est détruit et ne ils sont plus connectés.
Ils ne sont plus connectés à quoi ? Au réseau ?
Mais si tu nous expliquais concrètement quel est le but de toute cette opération ?
Tu veux arriver à quel résultat au juste ?
A+
 

XceSs

XLDnaute Nouveau
Re : Détecter fermeture de session windows

Bonsoir, ce classeur(1) est effectivement placé sur le réseau et tous les utilisateurs de celui-ci y ont accès. Quand les utilisateurs ouvrent le classeur(1) cela créer un fichier texte dans un répertoire avec leur login de session windows pour nom de fichier. Tant que ce fichier texte existe je peux leur envoyer des messages via un autre classeur(2) où s'affiche la liste des personnes ayant le classeur(1) ouvert. Normalement quand un utilisateur ferme le classeur(1), le fichier texte correspondant à son login est détruit et je ne peux donc plus lui envoyer de message avec le classeur(2) mais quand celui-ci ferme la session windows sans fermer le classeur(1) via un bouton ou la croix, le fichier texte n'est pas détruit, c'est ça mon problème car de ce fait l'utilisateur apparaît toujours comme dans la liste du classeur(2)...
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Détecter fermeture de session windows

Bonsoir,
Bon, si j'ai bien compris, ton but est de pouvoir communiquer avec les différentes personnes qui ont ouvert le fichier Excel placé sur le réseau et le seul moyen que tu aies trouvé pour repérer les personnes en question a été de créer pour chacun d'eux un fichier texte placé dans un répertoire dans lequel est noté leur login.
Le but de cette manœuvre est donc uniquement de pouvoir repérer quels sont les personnes utilisant ce fichier Excel à un instant T, n'est ce pas ?

Dans ce cas le fait de passer par la création de ce fichier texte ne serait peut-être pas la solution la plus adaptée.

Mais avant de réfléchir à d'autres solutions éventuelles (se passer de ce fichier texte), le problème auquel tu sembles te heurter est que ce fichier n'est pas détruit à la fermeture d'Excel lorsque l'utilisateur ferme Windows sans fermer auparavant le fichier Excel.
As-tu fais des tests de ton côté ?
Dans ce cas de figure :
- Quel est le message délivré par Windows ?
- Quel est le code que tu utilises pour détruire ce fichier texte et dans quel événement est-il appelé ?

Questions subsidiaires histoire de mieux comprendre : de quelles informations as-tu besoin de récolter pour pouvoir communiquer avec ces personnes sur le réseau ? Uniquement leur Login ? Tu parles bien de communiquer au sens "échanger des informations" ou simplement l'objectif est uniquement de savoir qui est en train d'utiliser ce fichier ?
A+
 

XceSs

XLDnaute Nouveau
Re : Détecter fermeture de session windows

Le but est effectivement de repérer qu'elles sont les personnes utilisant le fichier classeur(1) à l'instant T.
En fait il y a que la personne qui a le classeur(2) qui peut envoyer un message aux utilisateurs du classeur(1), le fichier texte créé me permet de voir si l'utilisateur est connecté et d'écrire un message ds celui-ci pour lui transmettre.

En testant, je ferme la session de windows sans fermer le classeur, j'ai le message me demandant si je veux enregistrer les modifications alors quand le fermant normalement aucun message

Le code est le suivant :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 StopMessageIndiv
 Dim Fichier As String
 Fichier = Feuil2.Range("UTILISATEURSPCIP").Value & Feuil2.Range("AGENTIDENTIFIANT").Value & ".txt"
 If Dir(Fichier, vbNormal) <> "" Then
  Kill Fichier
 End If
 Application.DisplayAlerts = False
 ActiveWorkbook.Saved = True
 If Application.Workbooks.Count = 1 Then
  Application.Quit
 End If
End Sub
 

david84

XLDnaute Barbatruc
Re : Détecter fermeture de session windows

Bonjour,
d'après ce que je comprends, tu as besoin de ce fichier Texte.
J'avais dans l'idée de te suggérer de passer par l'utilisation du Ce lien n'existe plus que tu peux piloter en passant par Excel pour voir s'il n'y avait pas moyen de régler ton problème mais même si c'est un super outil (le plus adapté à la gestion des ordinateurs réseau je pense), explorons des pistes peut-être plus "évidentes" pour toi avant éventuellement de faire appel à la grosse artillerie.
Je t'encourage néanmoins à étudier cet outil car il peut t'ouvrir bien des perspectives-indépendamment de ton problème actuel- (cf. ce Ce lien n'existe plus parmi d'autres).

Sinon j'ai créé un fichier Texte sur mon bureau et j'ai testé ton code en le laçant non pas à partir de l'événement Before_Close mais Deactivate et lorsque je ferme la session Windows sans fermer mon fichier Excel le fichier Texte est détruit.
Le problème est que si tu ouvres un autre classeur, le fichier est également détruit (logique).
La parade serait éventuellement de ne lancer le code que lorsque le nombre de classeur ouvert est égale à 1
Code:
If Application.Workbooks.Count = 1 Then ...
et bien sûr le fichier Texte n'est pas détruit lorsque 2 fichier Excel sont ouverts et que tu passes de l'un à l'autre mais le problème est que si la session Windows est fermée le code n'est plus lancée !
Bref c'est peut-être une idée à explorer...ou pas (j'essaie de te donner des pistes de réflexion, à toi de voir ce que tu peux en faire).

Une autre idée plus alambiquée serait d'utiliser la méthode Application.OnTime :
- une macro placée dans le classeur(2) (appelons-le "classeur administrateur") et lancée à intervalle régulier via Application.OnTime permettrait de détruire l'ensemble des fichiers Texte du dossier qui les contient.
- du côté des classeurs "utilisateurs" un code de création de ce fichier Texte est lancé également à intervalle régulier (toujours via Application.OnTime).
Donc puisque le dossier comportant les différents fichiers Texte est vidé et "réactualisé" à intervalle régulier, seuls les fichiers Excel encore ouverts peuvent à nouveau le créer. Cela devrait te permettre de savoir dans un laps de temps restant à définir quels sont les fichiers Excel encore actifs.

Là encore c'est juste une piste de réflexion à étudier...et à abandonner si elle mène à la construction d'une usine à gaz.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 499
Messages
2 088 999
Membres
104 001
dernier inscrit
dessinbecm