![]() |
|
Forum
|
|
|
#2 (permalink) |
|
Super Moderator
Date d'inscription: février 2005
Localisation: Rennes
Version Excel : Excel 2000 (PC)
Messages: 8 225
|
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
__________________
Pascal(Visitez mon Blog Photo)Vous pouvez devenir "Supporter XLD", plus de renseignements ICI |
|
|
|
|
|
#3 (permalink) |
|
XLDnaute Impliqué
|
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 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
__________________
Toutes les bonnes idées ne sont pas dans la même tête. |
|
|
|
|
|
#4 (permalink) |
|
XLDnaute Impliqué
|
Salut Pascal
PS.: AU passage pour ceux que ça intéresse les API, vous trouverez à cette adresse tout ce qui va bien ![]() http://www.andreavb.com/API_List.html Re Bonne soirée
__________________
Toutes les bonnes idées ne sont pas dans la même tête. |
|
|
|
|
|
#5 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 099
|
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 Cadeau => Utilitaire Special Excel Download... 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... |
|
|
|
|
|
#6 (permalink) |
|
XLDnaute Impliqué
|
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
__________________
Toutes les bonnes idées ne sont pas dans la même tête. |
|
|
|
|
|
#7 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
|
#8 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 750
|
bonjour Christian , Pascal , MrExcel et @+Thierry
dans l'exemple j'ai utilisé une demo de @+Thierry http://www.excel-downloads.com/html/...4783_74783.htm 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 |
|
|
|
|
|
#9 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 750
|
rebonjour
pour completer la procedure , il faudra juste ajouter une option pour ne pas effectuer d'enregistrement dans le fichier texte , lorsque les autres utilisateurs ouvrent le classeur en lecture seule ... bonne soiree MichelXld |
|
|
|
|
|
#10 (permalink) |
|
Super Moderator
Date d'inscription: février 2005
Localisation: Rennes
Version Excel : Excel 2000 (PC)
Messages: 8 225
|
Oups
Excuse j'étais à coté de la plaque M'enfin Michel te donne une solution dont je me sers également car bien pratique de savoir qui touche à certains fichiers Bonne soirée
__________________
Pascal(Visitez mon Blog Photo)Vous pouvez devenir "Supporter XLD", plus de renseignements ICI |
|
|
|
|
|
#11 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 750
|
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 |
|
|
|
|
|
#12 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 750
|
re re re bonsoir
une fois de plus , j'ai été trop vite .... il faut bien entendu enlever l'apostrophe devant la ligne : Private Declare Function GetUserName ... toutes mes excuses bonne soiree MichelXld |
|
|
|
|
|
#13 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
|
#14 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: février 2005
Messages: 3 099
|
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 USF-VBA-Protected-WorkBook.zip 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 Spy_Watching_You.zip Maintenant je pense que tu as de quoi faire... ![]() Bonne Soirée @+Thierry |
|
|
|
|
|
#15 (permalink) | |
|
XLDnaute Nouveau
Date d'inscription: janvier 2006
Localisation: St Priest
Version Excel : Excel 2000 (PC)
Messages: 28
|
_Thierry écrit:
Citation:
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. |
|
|
|
|
|
| ANNONCES | ||
![]() |
| Liens sociaux |
| Outils de la discussion | |
|
|