Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2010, 17h44   #1
Invité régulier
 
Inscription : juillet 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 25
Points : 7
Points : 7
Par défaut Utiliser dans un état le résultat d'une sub ou d'une function

Bonjour à tous,
J'ai trouvé dans la faq une fonction permettant de récupérer le nom de la session:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Private Const MAX_COMPUTERNAME_LENGTH As Long = 31
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetUserName Lib "advapi32.dll" Alias _
         "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
 
  '--Déterminer le nom de la machine
Private Function recherche_name() As String
Dim dwLen As Long
Dim strString As String
Dim strUserName As String
    dwLen = MAX_COMPUTERNAME_LENGTH + 1
    strString = String(dwLen, "X")
    strUserName = String(100, Chr$(0))
    GetComputerName strString, dwLen
    GetUserName strUserName, 100
    strUserName = Left$(strUserName, InStr(strUserName, Chr$(0)) - 1)
txt_ip.Value = strUserName
    strString = Left(strString, dwLen)
    recherche_name = strString
End Function
et j'ai trouvé aussi une sub qui fait la même chose:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
 
Public Utilisateur As String
'l'api doit être obligatoirement déclarée dans un module
Public Sub RecupUser()
Dim Ch As String
Dim a As Long
Dim b As Long
 
a = 199
Ch = String$(200, 0)
b = GetUserName(Ch, a)
If b <> 0 Then Utilisateur = Left$(Ch, a) Else Utilisateur = ""
MsgBox LCase(Utilisateur)
 
End Sub
et je suis un peu perdu: si j'exécute la sub, j'ai bien le nom de la session qui s'affiche dans un MsgBox, donc ça marche. Mais je ne vois pas comment je peux récupérer le nom pour l'utiliser, p.ex., dans un état.

Divisons les questions:
1) la fonction de la faq, il est dit qu'elle doit être après , mais txt_ip.Value n'a pas été défini explicitement.

2) Quand je veux utiliser le nom de la session dans un état, j'utilise le Générateur d'expression pour retrouver les noms des fonctions, mais recherche_name() n'y figure pas.

3) Dans le 2ème exemple, je ne comprends pas pourquoi il faut utiliser une Sub() à la place d'une Function et pourquoi je ne peux pas mettre à la place Function RecupUser().

Cette Sub n'ayant pas d'argument, comment puis-je récupérer le nom de la session qui se trouve dans la variable Utilisateur?

Ou encore, pour reformuler, comment faire entrer la valeur de la variable Utilisateur dans un champ (calculé) de ma base de données?

Toutes ces questions se recoupent, je le vois bien, mais j'ai un souci de transfert de VBA vers Access.

Merci d'avance.
Olivier
oplaut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 18h34   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 445
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 445
Points : 7 517
Points : 7 517
Une sub ne retourne pas de résultat, elle exécute un certain nombre d'instructions.

Une function retourne un résultat donc pour ton rapport il va falloir utiliser la function recherche_name().

Le problème avec ta fonction c'est qu'elle est Private, c-à-d qu'elle n'est visible que dans le module où elle est déclarée. Ceci est un epratique recommandé pour une déclaration initiale. Dans ton cas tu souhaites l'utiliser en dehors du module donc Il faut qu'elle soit public pour être visible de tous les objets de la BD.

Code :
Public Function recherche_name() As String
pour l'utiliser

Version plus simple pour le même résultat :

qui est natif à Access et ne nécessite aucune programmation supplémentaire.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 00h27   #3
Invité régulier
 
Inscription : juillet 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 25
Points : 7
Points : 7
Formidable, j'ai compris. En tout cas ça marche!

A noter toutefois que
fournira le nom de l'ordinateur

alors que
fournit le Username de la session.

Merci beaucoup.
Olivier
oplaut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 18h25   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 445
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 445
Points : 7 517
Points : 7 517
Code :
=Environ("ComputerName")
Voilà pour le nom de la machine.

Pour voir toutes les variables d'environnement :
  • Ouvrir une fenêtre dos
  • Taper SET[Enter]

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h38.


 
 
 
 
Partenaires

Hébergement Web