IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récuperer username Windows - déclaration de dll


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Points : 48
    Points
    48
    Par défaut Récuperer username Windows - déclaration de dll
    Bonjour,

    Je suis en train de modifier un fichier qui gère les pointages de mon équipe sur les projets sur lesquels ils travaillent
    _____Un fichier par projet.
    _____Certaines personnes de mon équipe, mais pas toutes, doivent renseigner les heures passées sur telle ou telle tache
    _____chacun a son onglet pour pointer)

    Je souhaiterais qu'au démarrage, seul l'onglet de la personne qui ouvre le fichier s'affiche. (a la fermeture, tous les onglets de pointage se masquent automatiquement)

    J'ai donc récupéré un code pour obtenir le username windows et je le comparerai au nom renseigné dans l'onglet (a la main, à l'initialisation du fichier en début de projet).
    Sauf que ce code ne fonctionne pas.
    il bloque a Space$

    "Erreur de compilation - Projet ou bibliothèque introuvable


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Declare Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
     
     
     
    Sub getNetLogonID()
    ' Get logonID (WNetGetUser Lib "mpr.dll" must be declared).
    Dim nSize As Long, rtn
    Dim LanID$
    nSize = 150
    LanID$ = Space$(nSize)
    rtn = WNetGetUser("", LanID$, nSize)
    logonID$ = RTrim$(LanID$)
    logonID$ = Left$(logonID$, Len(logonID$) - 1)
    logonID$ = LCase$(logonID$)
     MsgBox "Network logonID is " & logonID & ".", 64
    End Sub

    Lorsque je copie/colle ce code dans un fichier vierge, cela fonctionne sans probleme.
    Mais la, bug.

    Vous savez d'ou ca vient? Je vous mets mon fichier ci-dessous.
    FSE.xls

    Par avance, merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Essaie avec ceci
    Nom = Environ("username")
    MPi²

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    bonjour
    met ca plutot dans le module "thisworkbook"

    ca fait exactement ce que tu veux tout seul
    et ca empêche même l'utilisateur de le faire manuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Sh As Worksheet
    For Each Sh In ThisWorkbook.Sheets
    Sh.Visible = False
    Next
    End Sub
    Private Sub Workbook_Open()
    Dim Sh As Worksheet
    MsgBox " Bonjour " & Environ("username")
    For Each Sh In ThisWorkbook.Sheets
    Sh.Visible = False
    If Sh.Name = Environ("username") Then Sh.Visible = True
    Next
    End Sub
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name <> Environ("username") Then
    MsgBox "vous n'avez pas le droit de modifier cet onglet "
    Sh.Visible = False
    End Sub
    correction on a pas la possibilité de rendre tout les sheets invibles il faut au moins en laisser un alors

    toujour dans le module "thisworkbook" met ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Private Sub Workbook_Open()
    Dim Sh As Worksheet
    MsgBox " Bonjour " & Environ("username")
    For Each Sh In ThisWorkbook.Sheets
    If Sh.Name = Environ("username") Then
    Sh.Visible = True
    Else
    Sh.Visible = False
    End If
    Next
    End Sub
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name <> Environ("username") Then
    MsgBox "vous n'avez pas le droit de modifier cet onglet "
    with Sheets (Environ("username"))
    .Visible = True
    .Activate
    End With
    Sh.Visible = False
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Écriture condensée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Sh In ThisWorkbook.Sheets
        Sh.Visible = Sh.Name = Environ("username")
    Next Sh
    ça suppose bien évidement qu'une feuille nommée par l'username existe.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    j'ai repris ton code avec l'appi mas mes confrères ont raison avec Environ("username")!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub getNetLogonID()
    ' Get logonID (WNetGetUser Lib "mpr.dll" must be declared).
    Dim nSize As Long, rtn
    Dim LanID$
    Dim S As Integer
    For S = 2 To Sheets.Count 'tu ne peux pas masquer toutes les feuilles
                              'je te conseille un page d'accueil!
    Sheets(S).Visible = False
    Next
    nSize = 150
    LanID$ = Space$(nSize)
    rtn = WNetGetUser("", LanID$, nSize)
    logonID$ = RTrim$(LanID$)
    logonID$ = Left$(logonID$, Len(logonID$) - 1)
    logonID$ = LCase$(logonID$)
     MsgBox "Network logonID is " & logonID & ".", 64
     Sheets(logonID).Visible = True
    End Sub

Discussions similaires

  1. [windows] charger une dll (avec classe)
    Par superpok dans le forum Windows
    Réponses: 11
    Dernier message: 09/09/2007, 11h15
  2. Récupérer %username% Windows
    Par licorne dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/10/2006, 13h44
  3. Identification utilisant le username windows
    Par j_bolduc dans le forum ASP
    Réponses: 3
    Dernier message: 13/09/2005, 17h19
  4. Réponses: 5
    Dernier message: 01/07/2005, 14h56
  5. [Windows]utiliser une dll c# en java
    Par dude666 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 01/07/2005, 02h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo