Lancement automatique d'une Function (module VBA)

sebgatz

XLDnaute Nouveau
Bonjour,


Je suis en train de créer un outil (Access lié avec Excel) et je dois mettre en place une gestion des droits utilisateurs. J'ai vu qu'il y avait un add-in Access qui pemettait de le faire mais je trouve ca assez pénible car les droits sont ouverts par table et/ou requête, ce qui m'oblige à créer une multitude de table/requête.

J'ai opté pour une solution de contournement en déportant cette gestion de droits admin dans Excel (lieux de lancement des requêtes via ADODB). Je vais monter des listes en cascade en fonction du username windows.

Pour ce faire j'ai trouvé la macro, enfin la fonction suivante. Je précise car ma question est comment faire en sorte qu'elle se lance à chaque ouverture de fichier (avec une macro c'est simple il suffit d'ajouter Workbook_Open() ) mais là j'avoue sécher (je suis loin d'être bon en VBA)


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

Function UserName() As String
Dim sName As String * 256
Dim cChars As Long
cChars = 256
If GetUserName(sName, cChars) Then
UserName = Left$(sName, cChars - 1)
End If
End Function


Merci à tous pour vos réponses.

Cdt
 
Dernière édition:

jmps

Nous a quitté
Repose en paix
Re : Lancement automatique d'une Function (module VBA)

Bonjour sebgatz,

Une fonction se contente de retourner une valeur.
Tu peux l'utiliser dans une cellule par exemple :
=UserName() te donnera le nom de l'utilisateur dans cette cellule.

Une fonction ne s'exécute pas comme un Sub lors d'un évènement.
En revanche tu peux adapter ton code pour que VBA appelle la fonction comme ceci :
Code:
Public Utilisateur As String

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

Function UserName() As String
Dim sName As String * 256
Dim cChars As Long
cChars = 256
If GetUserName(sName, cChars) Then
UserName = Left$(sName, cChars - 1)
End If
End Function

Public Sub NomUtilisateur()
    Utilisateur = UserName
    MsgBox Utilisateur
End Sub
 
G

Guest

Guest
Re : Lancement automatique d'une Function (module VBA)

Bonjour,

Si j'ai bien compris ta demande, voici un classeur avec un module de classe de niveau application.

Ouvre le, rien ne se passe
Ouvre un classeur existant, un message est affiché avec le Windows UserName
Ouvre un nouveau classeur, idem.

Tu peux lui mettre sa propriété IsAddin à True et l'enregistrer sous .xlam, il sera invisible à l'utilisateur.
Telle quelle l'Api GetUserName ne fonctionnera pas avec les versions office installées en 64bits

A+
 

sebgatz

XLDnaute Nouveau
Re : Lancement automatique d'une Function (module VBA)

Merci à vous deux pour vos réponses.

Je devrais pouvoir trouver mon bonheur dans vos code en les adaptant un peu car j'ai besoin que le username soit inscrit dans une cellule (et non pas dans une dialogbox)
 
G

Guest

Guest
Re : Lancement automatique d'une Function (module VBA)

Re,

Pour l'écrire en Feuil1.A1 de tout nouveau classeur ou à l'ouverture d'un classeur quelconque (le classeur xlApp étant ouvert), dans le module clsApp :

Code:
Private Sub ExcelApp_NewWorkbook(ByVal Wb As Workbook)
    If Wb.FullName <> ThisWorkbook.FullName Then
         Wb.Sheets(1).Range("A1") = WinUserName
    End If
End Sub
Private Sub ExcelApp_WorkbookOpen(ByVal Wb As Workbook)
    If Wb.FullName <> ThisWorkbook.FullName Then
         Wb.Sheets(1).Range("A1") = WinUserName
    End If
End Sub

A+
 

sebgatz

XLDnaute Nouveau
Re : Lancement automatique d'une Function (module VBA)

bon j'ai galéré mais j'ai trouvé, merci à tous (en fait c'était tout con)



Sub username()

Sheets("Feuil1").Range("A1") = Environ("UserName")

End Sub
 
Dernière édition:

sebgatz

XLDnaute Nouveau
Re : Lancement automatique d'une Function (module VBA)

C'est de ma faute, j'ai mal exprimé mon besoin... c'etait à l'ouverture DU fichier et non pas de fichiers :rolleyes:

J'ai donc modifié comme suit:

Private Sub Workbook_Open()

Sheets("Feuil1").Range("A1") = Environ("UserName")

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 955
Membres
103 989
dernier inscrit
jralonso