connaitre le username en reseau

  • Initiateur de la discussion christian
  • Date de début
C

christian

Guest
bonjour à tous,

quelqu'un connait-il une fonction qui pourrait me renvoyer le nom de l'utilisateur en réseau chez qui le fichier est ouvert.
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Un code récupéré sur ce forum dont je me sers souvent

Code:
Public UserName As String

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
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

End Sub

Bonne soirée
 

Jam

XLDnaute Accro
Salut Christian,

Bon faut avoir recours aux API de windows...nan, t'inquiète c'est pas compliqué:

En entête de module tu saisis ça:
Code:
Private Declare Function GetUserName Lib 'advapi32.dll' Alias 'GetUserNameA' (ByVal lpBuffer As String, nSize As Long) As Long
Puis dans la procédure suivante:
Code:
Sub NomUtilisateur()
    'Create a buffer
    strUserName = String(100, Chr$(0))
    'Get the username
    GetUserName strUserName, 100
    'strip the rest of the buffer
    strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
    MsgBox 'Hello ' + strUserName
End Sub

Bonne soirée
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir MrXXL, Pascal, Christian

Et sans courir le net.... Pour ce genre d'API et bien d'autres 'Barbatrucs'

       Sur votre Propre Disque Dûr !!!

Vi vi !!! lol

Faites donc une recherche à 'Sample.xls'....


Plein de trucs à découvrir là dedans ....

j'en avais parlé à l'époque (le 10-Nov-02 15:03)
dans ce fil Lien supprimé

Un utilitaire qui avait lancé un engouement pour les Utilitaires XLD au point que David a créé une rubrique 'XLD Goodies'

Enfin voilà tout est dans 'Sample.xls' sur votre disque dûr !!!

...Encore dispo sous Office XP, je viens de regarder sur une autre machine...

Alors bonne découverte, pour une fois que Micro$oft vous fait un cadeau...

Bonne Soirée
@+Thierry

PS si vous ne le trouvez pas je le mettrai en ligne en FTP...
 

Jam

XLDnaute Accro
Salut _Thierry,

Certes Sample.xls est fort sympathique et présente de bonne base mais trouver une API bien costaute c'est pas là qu'on la trouvera ;)

J'viens de soumettre un lien (pour ceux que ça intéresse) d'un p'tit soft gratos (mais plus maintenu - dommage) qui te donne 668 API et l'exemple qui va bien avec + divers utilitaires.

Le lien sera dispo dès que David l'aura validé.

Bonne nuit
 
C

christian

Guest
bonsoir à tous,

j'ai testé les 2 propositions

Celle de Pascal renvoie mon username
Celle de MrExcel renvoie hello

Je ne sais pas s'il faut les adapter dans ma procédure ou si ma question n'est pas claire. Je me permet de la reformuler. Il s'agit de tester si le fichier exemple.xls est ouvert en réseau et si oui par quel utilisateur.

bonne soirée
 

MichelXld

XLDnaute Barbatruc
bonjour Christian , Pascal , MrExcel et @+Thierry


dans l'exemple j'ai utilisé une demo de @+Thierry

Lien supprimé


dans le classeur en réseau tu inseres ces procedures ( au niveau de ThisWorkbook )
la macro va enregistrer dans un fichier texte toutes les ouvertures et fermetures du classeur ,en indiquant l'heure et le nom de l'utilisateur


Code:
Private Declare Function GetUserName Lib 'advapi32.dll' Alias 'GetUserNameA' _
(ByVal lpBuffer As String, _
nSize As Long) As Long

'Spy Opening/Closing @Thierry
Private Sub Workbook_Open()
Dim lpBuff As String * 25
Dim ret As Long
Dim UserName As String, Spy As String, ThePath
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

ThePath = 'J:\\Spy.txt' ' à adapter au réseau

Spy = 'Open on : ' & vbTab & Format(Now, 'DD/MM/YYYY HH:MM:SS') & _
vbTab & 'User Name : ' & vbTab & UserName

Open ThePath For Append As #1
Print #1, Spy
Close

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lpBuff As String * 25
Dim ret As Long
Dim UserName As String, Spy As String, ThePath
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

ThePath = 'J:\\Spy.txt' ' à adapter au réseau

Spy = 'Close on : ' & vbTab & Format(Now, 'DD/MM/YYYY HH:MM:SS') & _
vbTab & 'User Name : ' & vbTab & UserName

Open ThePath For Append As #1
Print #1, Spy
Close

End Sub


ensuite , quand tu souhaites connaitre la situation du classeur ( ouvert ou fermé ) tu lances cette macro


Code:
Sub controleClasseurReseau()
Dim Valeur As String

' chemin à adapter au réseau
Open 'J:\\Spy.txt' For Input As #1

Do While Not EOF(1)
Line Input #1, Valeur
Loop
Close

MsgBox 'historique utilisation classeur :' & vbLf & Valeur
End Sub


j'espere que çà pourra t'aider

bonne soiree
MichelXld
 

MichelXld

XLDnaute Barbatruc
rebonsoir

ci joint les procédures modifiées , en tenant comptes des ouvertures en lecture seule


dans le classeur en réseau
Code:
'http://www.excel-downloads.com/html/French/forum/messages/1_74783_74783.htm
'Private Declare Function GetUserName Lib 'advapi32.dll' Alias 'GetUserNameA' _
(ByVal lpBuffer As String, _
nSize As Long) As Long

'Spy Opening/Closing @Thierry
Private Sub Workbook_Open()
Dim lpBuff As String * 25
Dim ret As Long
Dim UserName As String, Spy As String, ThePath

If ThisWorkbook.ReadOnly = True Then Exit Sub

ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

ThePath = 'J:\\Spy.txt' ' à adapter au réseau

Spy = 'Open on : ' & vbTab & Format(Now, 'DD/MM/YYYY HH:MM:SS') & _
vbTab & 'User Name : ' & vbTab & UserName

Open ThePath For Append As #1
Print #1, Spy
Close

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lpBuff As String * 25
Dim ret As Long
Dim UserName As String, Spy As String, ThePath

If ThisWorkbook.ReadOnly = False Then

    ret = GetUserName(lpBuff, 25)
    UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
    
    ThePath = 'J:\\Spy.txt' ' à adapter au réseau
    
    Spy = 'Close on : ' & vbTab & Format(Now, 'DD/MM/YYYY HH:MM:SS') & _
    vbTab & 'User Name : ' & vbTab & UserName
    
    Open ThePath For Append As #1
    Print #1, Spy
    Close

End If
End Sub


pour la vérification
Code:
Sub controleClasseurReseau()
Dim Valeur As String

' chemin à adapter au réseau
Open 'J:\\Spy.txt' For Input As #1

Do While Not EOF(1)
Line Input #1, Valeur
Loop
Close

MsgBox 'historique utilisation classeur :' & vbLf & Valeur
End Sub


bonne soiree
MichelXld
 
C

christian

Guest
bonsoir à tous,

Tout d'abord, merci de votre aide car c'est pas toujours évident le vba.
j'ai essayé cette procédure (qui fonctionne très bien) et il me vient quelques questions:

1° Si les macros sont désactivées à l'ouverture du fichier, il y aura des problèmes.Peut-on forcer l'ouverture du fichier avec les macros activées.

2° Toujours sur le même principe, à savoir qui utilise le fichier en réseau. Est-il possible d'écrire et de lire les renseignements liés à l'ouverture / fermeture du classeur dans une feuille masquée du classeur en question car je dois adapter la procédure sur beaucoup de classeurs.

3° Est-il possible d'ajouter une colonne qui indique si le fichier a été modifié.

Bonne soirée
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Christian, Michel, Pascal, le Fil, le Forum


1) Pour ta question 'macros sont désactivées'... Peut on forcer les macros au démarrage ? non, ou alors pas par code VBA, puisque c'est logique. Comment un macro VBA va pouvoir fonctionner pour forcer l'ouverture avec Macro désactivée... C'est le serpent qui se mord la queue ! ou l'Oeuf et la Poule si tu préfères...

Ici une astuce pour ce genre de dilême, car la solution de mettre le Niveau de Sécurité VBA au plus Faible n'est pas vraiment recommandée si par malheur les utilisateurs ouvrent des fichiers de provenances douteuses, mais on peut envisager une méthode simple qui consiste à s'appuyer sur une macro évènementielle d'ouverture pour donner accès à l'interface de commandes... Si les macros ne sont pas activées, alors l'utilisateur se trouve sur une page lui indiquant que sans macro celà ne fonctionne pas...

Démo Téléchargeable Lien supprimé


2) Pour ta question 'feuille masquée du classeur '... La solution que mes deux compères utilisent et qu'ils t'ont proposée, est ce qu'il y a de plus simple, un Fichier TXT de LOG en réseau, il offre tout plein d'avantages... Crois moi, avant d'avoir divulgué ce moyen sur le Forum, je l'ai mis à l'épreuve, les feuilles cachées pour un Log, c'est du bricolage et difficile de maintenance.


3) Pour ta question 'si le fichier a été modifié'...Savoir si le fichier a été sauvé est chose facile, maintenant savoir si il a été réellement modifié, huum c'est une autre paire de manches, on pourrait voir la taille en octet à l'ouverture et à la fermeture, mais ce n'est pas trop fiable... Non là c'est plus compliqué, peut-être qu'il faudrait un 'Spy' dans le fichier lui-même, mais c'est très lourd à mettre en place...Surtout en réseau comme je précise en réponse 2)...

Démo Téléchargeable Lien supprimé

Maintenant je pense que tu as de quoi faire...

Bonne Soirée
@+Thierry
 

Syntaxerror

XLDnaute Junior
_Thierry écrit:
Bonsoir MrXXL, Pascal, Christian

Et sans courir le net.... Pour ce genre d'API et bien d'autres 'Barbatrucs'

       Sur votre Propre Disque Dûr !!!

Vi vi !!! lol

Faites donc une recherche à 'Sample.xls'....


Plein de trucs à découvrir là dedans ....

j'en avais parlé à l'époque (le 10-Nov-02 15:03)
dans ce fil Lien supprimé

Un utilitaire qui avait lancé un engouement pour les Utilitaires XLD au point que David a créé une rubrique 'XLD Goodies'

Enfin voilà tout est dans 'Sample.xls' sur votre disque dûr !!!

...Encore dispo sous Office XP, je viens de regarder sur une autre machine...

Alors bonne découverte, pour une fois que Micro$oft vous fait un cadeau...

Bonne Soirée
@+Thierry

PS si vous ne le trouvez pas je le mettrai en ligne en FTP...
Salut Thierry !
Ce petit cadeau est fort sympathique en effe.
Quand j'ouvre Sample.xls et que j'execute la procedure Get_user_name, ca marche !!! J'obtient bien le nom de l'utilisateur réseau. Par contre lorsque j'exporte et importe le module dans mon projet,Il y'a erreur de compilation car le Projet ou la bibliothèque rest introuvable. La routine se bloque sur Chrqui fait partie de la bibliothèque VBA (VBE6.DLL ?) qui a priori est bien coché.

voilà j'espère que que quelqu'un voudra bien éclairer ma lanterne.
 

Discussions similaires

Réponses
0
Affichages
125
Réponses
3
Affichages
296

Statistiques des forums

Discussions
311 540
Messages
2 080 523
Membres
101 234
dernier inscrit
Layani89