Extraire le nom de la personne qui a ouvert un fichier
Bonjour,
J'ai créé un fichier d'encodage que chaque utilisateur par table d'emballage ouvre chaque matin et lorsqu'il cloture sa journée, via le code il ouvre le fichier global dans lequel sont copiées ses données.
Lorsqu'il compile ses données et s'il ouvre le fichier global et que celui ci est déjà utilisé (il ouvre donc le fichier en read only), j'ai mis un message pour qu'il demande qu'on ferme le fichier afin qu'il puisse recommencer l'opération.
If Workbooks("NEW.xlsx").ReadOnly = True Then
If MsgBox("Le fichier global est déjà ouvert par un autre utilisateur, demandez de fermer et réessayer", vbOKOnly + vbCritical) = vbOK Then
Application.DisplayAlerts = False
Workbooks("NEW.xlsx").Close
Workbooks(noMfichierpickpack).Activate
UF_MAIL.Showj'aimerai que le nom de "l'utilisateur" du fichier apparaisse dans le message afin que l'on ne doive pas chercher qui bloque.
J'ai déjà utilisé les "application.username" ainsi que " "environ("USERNAME")", mais ca m'affiche toujours mon nom. J'ai trouvé sur d'autres forums la possibilité d'inscrire le nom de celui qui ouvre le fichier global à l'ouverture et tester quand on l'ouvre en readonly mais ca m'oblige à une sauvegarde du fichier global à chaque ouverture et passer le fichier global en Xlsm. donc je voudrai eviter de travailler dans ce fichier global.
Je voudrai pouvoir récupérer le nom de l'utilisateur comme ci dessous
Merci pour votre aide
bav
Xavier
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Lorsqu'un classeur est ouvert en lecture seule, le nom de l'utilisateur n'est pas stocké et donc la propriété "UserStatus" n'est pas disponible.
Pour éviter la sauvegarde du fichier global, le plus simple est d'utiliser un fichier texte supplémentaire dans lequel sera stocké le nom de l'utilisateur qui aura ouvert le classeur en mise à jour.
Bonjour thev,
Merci pour ton retour.
Je me suis peut être mal exprimé
Lorsqu'un classeur est ouvert en lecture seule, le nom de l'utilisateur n'est pas stocké et donc la propriété "UserStatus" n'est pas disponible
Le fichier "global" que les opérateurs doivent ouvrir via le code pour y injecter leur donnees n'est jamais ouvert en lecture seule. Le problème c'est que d'autres personnes peuvent l'avoir ouvert "normalement" pour consultation ou pour des extractions de données et qu'il soit malheureusement resté ouvert sur leur poste au moment où l'opérateur veut clôturer sa journée et à besoin d'y accéder pour qu'il puisse y sauvegarder ses données du jour.
Je ne connais pas la propriété userstatus
Merci pour ton aide
Bat
Xavier
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
A partir du moment où le fichier n'est pas partagé, une seule personne peut l'ouvrir en mise à jour.
Lorsque le fichier est ouvert en mise à jour, exécuter cette procédure :
Sub maj_user()
Dim fso As Object, fichier As Object, nom_fichier As String, nom_user As String
Dim tb ()
'----- récupération nom utilisateur ----------------------------
tb = ThisWorkbook.UserStatus: nom_user = tb(1, 1)
'// stockage nom utilisateur dans fichier texte : user.csv -----
Set fso = CreateObject("Scripting.FileSystemObject")
nom_fichier = ThisWorkbook.Path & "\" & "user.csv"
'----- suppression fichier user.csv ----------------------------
If fso.FileExists(nom_fichier) Then fso.DeleteFile nom_fichier
'----- création fichier user.csv ----------------------------
fso.CreateTextFile nom_fichier
Set fichier = fso.OpenTextFile(nom_fichier, ForWriting)
fichier.WriteLine (nom_user): fichier.Close
End SubLorsque le fichier est ouvert en lecture, exécuter cette procédure :
Sub affichage_user()
Dim fso As Object, fichier As Object, nom_fichier As String, nom_user As String
Set fso = CreateObject("Scripting.FileSystemObject")
nom_fichier = ThisWorkbook.Path & "\" & "user.csv"
Set fichier = fso.OpenTextFile(nom_fichier, ForReading)
nom_user = fichier.ReadLine: fichier.Close
MsgBox " Fichier verrouillé par " & nom_user
End Sub