Comment identifier le user actif d'un fichier

  • Initiateur de la discussion Initiateur de la discussion Patrick
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

Patrick

Guest
Bonjour à tous

QQ'un sait il comment, dans un réseau LAN, on peut identifier par une macro l'utilisateur qui est actif dans un fichier Excel?
 
Salut Baroude et Patrick

Directement par une macro, non je ne sais pas faire... Et surtout je ne pense pas que celà soit possible à ma connaissance. (celà m'aurait grandement simplifié la vie !!!)

En ce qui concerne Application.Username, oui ça retourne ce qui a été enregistré par l'utilisateur dans Menu => Option => Onglet Général... (donc pas fiable le User Peut Changer son ID)... Et çà ne peut être lu qu'en local, pas à distance.

Mais il y des astuces que j'utilise pour contourner ce problème.

En voici une qui me permet même de savoir le temps d'utilisation du fichier en plus du UserName :

Conditions :
Les Fichiers partagés ne sont ouverts qu'avec une Interface User : "CommandBoard.xls" ou un "Personnal.xls" dans le XLStart qui contient les macros nécessaires... (Mes Users ne savent même pas où se trouvent les fichiers partagés, on peut même les protéger à l'ouverture par passworld qui ne serait connu que par la macro pour éviter tout risque..)

Donc à l'ouverture de ce classeur CommandBoard.xls on peut faire écrire le nom du user...

Pour avoir le nom du User (le vrai celui du log-in en réseau) il faut utiliser cette API API (Application Programming Interface ) livrée en standard avec Sample.xls, qui quant à elle garantie de retourner le Log-in Name du User Connecté en Réseau.

Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

Sub Get_User_Name()

Dim lpBuff As String * 25
Dim ret As Long, UserName As String
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
Sheets("Interface").Range("F6").Value = UserName

End Sub

Exemple :
Le ClasseurCommandBoard = Contient l'API ci dessus et le(s) bouton(s) d'ouverture des classeurs partagés avec la macro ci dessous...
Le ClasseurX.xls = Ce fameux fichier que l'on doit utiliser à plusieurs
Le UserTracker.xls = Un fichier de Registre dans le réseau.

Procédure :
Dans le CommandBoard.xls la macro qui ouvre le fichier partagé
va ouvrir le UserTracker et écrire le nom du User en cours (en utilisant "Get_User_Name"... dans la même macro tu sauves et tu fermes UserTracker...

Le Code
Option Explicit
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next
filenum = FreeFile()
Open filename For Input Lock Read As #filenum
Close filenum
errnum = Err
On Error GoTo 0
Select Case errnum
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
Error errnum
End Select
End Function

Sub CallDemands()
UserFormBanksDemands.Show
End Sub


Sub CallDemand()
Dim User As String
Dim Temps As String
Application.ScreenUpdating = False
If IsFileOpen("I:\Commun Tools\ClasseurX.xls") Then
Workbooks.Open "I:\Commun Tools\UserTrackers.xls"
User = Sheets("Program").Range("B2")
Temps = Sheets("Program").Range("D2")
Workbooks("UserTrackers.xls").Close False

MsgBox "ClasseurX Program is already in use !" & _
Chr(13) & Chr(10) & "By " & User & _
Chr(13) & Chr(10) & "Since " & Format(Temps, "HH:MM") & _
Chr(13) & Chr(10) & _
Chr(13) & Chr(10) & " Please Try latter" & _
Chr(13) & Chr(10) & _
Chr(13) & Chr(10) & "Thank You 🙂", _
vbOKOnly + vbCritical, "PROGRAM NOT AVAILABLE"

Else
Workbooks.Open "I:\Commun Tools\ClasseurX.xls"
Workbooks.Open "I:\Commun Tools\UserTrackers.xls"
With Sheets("Program")
.Range("B2") = Workbooks("CommandBoard.xls").Sheets("Interface").Range("F6")
.Range("C2") = Format(Now, "DD/MM/YY")
.Range("D2") = Format(Now, "HH:MM:SS")
End With
Workbooks("UserTrackers.xls").Close True
End If
Application.ScreenUpdating = True

End Sub

Pour la petite histoire, ceci et l'aboutissement d'un travail commun que j'ai fait avec l'aide de Frédérique Sigonneau, Thierry Rural et El-Joker du MPFE... (voir le début de cette astuce sur Disciplus : http://disciplus.simplex.free.fr/xl/repertoires.htm#partagéouvert )

En espérant que celà puisse t'orienter vers une solution...

Bonne Fin de Journée
@+Thierry
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
211
  • Question Question
Microsoft 365 Problème macro
Réponses
4
Affichages
318
Réponses
5
Affichages
162
Réponses
10
Affichages
184
Réponses
4
Affichages
199
Réponses
5
Affichages
496
Retour