Comment identifier le user actif d'un fichier

  • Initiateur de la discussion Patrick
  • Date de début
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?
 
@

@+Thierry

Guest
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
 

Discussions similaires

Réponses
2
Affichages
350
Réponses
12
Affichages
239

Statistiques des forums

Discussions
314 653
Messages
2 111 579
Membres
111 207
dernier inscrit
max008