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 :

[VBA-E] récupérer nom utilisateur fichier en lecture seule


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Points : 181
    Points
    181
    Par défaut [VBA-E] récupérer nom utilisateur fichier en lecture seule
    Bonjour,

    je reprends ce sujet qui a été résolu
    http://www.developpez.net/forums/sho...d.php?t=260195
    Je suis également intéressé par le sujet...
    Dans le cas d'une utilisation d'un fichier par plusieurs utilisateurs, le sujet précédent propose une solution pour tester si le fichier est déjà utilisé ou non par un autre utilisateur.
    En plus de savoir si le fichier est utilisé ou pas, comment faire pour savoir qui l'utilise ?
    En mode de fonctionnement classique, si on ouvre un fichier déjà utilisé par quelqu'un, la boite de dialogue nous indique : "le fichier bidule.xls est verrouillé pour modification par "Toto.Dupont"" où "toto.dupont" est le login de l'utilisateur.

    Comment récupérer cette info ?

    Merci

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    J'espère que ce lien pourra t'aider

    http://msdn2.microsoft.com/en-us/lib...ffice.11).aspx


    michel

  3. #3
    Membre habitué Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Points : 181
    Points
    181
    Par défaut
    OK, j'ai regardé le lien avec le "userstatus", mais d'après ce que j'ai compris, ça sert plus genre à surveiller qui a modifié le fichier quand . Pour mon cas, vba me signale qu'il est impossible d'accéder au document (celui dont je veux savoir qui est dessus en ce moment) car il est en lecture seule.
    Retour à la case départ donc...

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Une autre solution pourrait consister à enregistrer dans un fichier .txt, en réseau, le nom des utilisateurs qui ont ouvert/fermé le classeur partagé. Et tu peux ensuite consulter ce fichier par macro pour savoir qui l'utilise.



    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Option Explicit
     
    '-------------------------------
    'dans le module objet ThisWorkbook du classeur partagé.
    Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
        (ByVal lpBuffer As String, nSize As Long) As Long
     
     
    'La procédure enregistre dans le fichier texte, le nom de l'utilisateur et la date
    'd'ouverture du classeur.
    Private Sub Workbook_Open()
        Dim lpBuff As String * 25
        Dim Ret As Long
        Dim UserName As String, strInfos As String, Chemin As String
     
        If ThisWorkbook.ReadOnly = True Then Exit Sub
     
        Ret = GetUserName(lpBuff, 25)
        UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
     
        'adaptez le chemin du fichier txt en réseau
        Chemin = "x:\log.txt"
     
        strInfos = "Ouvert le : " & vbTab & Format(Now, "dd/mm/yyyy hh:mm:ss") & _
            vbTab & "par : " & vbTab & UserName
     
        Open Chemin For Append As #1
            Print #1, strInfos
        Close
    End Sub
     
     
    'La procédure enregistre dans le fichier texte, le nom de l'utilisateur et la date
    'de fermeture du classeur.
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim lpBuff As String * 25
        Dim Ret As Long
        Dim UserName As String, strInfos As String, Chemin As String
     
        If ThisWorkbook.ReadOnly = False Then
            Ret = GetUserName(lpBuff, 25)
            UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
     
           'adaptez le chemin du fichier txt en réseau
            Chemin = "x:\log.txt"
     
            strInfos = "Fermé le " & vbTab & Format(Now, "dd/mm/yyyy hh:mm:ss") & _
                vbTab & "Par : " & vbTab & UserName
     
            Open Chemin For Append As #1
                Print #1, strInfos
            Close
        End If
    End Sub
     
    '-----------------------------------------------------


    Pour consulter le statut du classeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'A placer dans un autre classeur (ou crér une macro complémentaire)
    Sub StatutConnection_Classeur()
        Dim Ligne As String
     
        'adaptez le chemin du fichier txt en réseau
        Open "x:\log.txt" For Input As #1
     
        Do While Not EOF(1)
            Line Input #1, Ligne
            Loop
        Close
     
        MsgBox "Statut: " & vbCrLf & Ligne
    End Sub

    Le seul impératif, les utilisateurs ne doivent pas désactiver les macros lors de l'ouverture du classseur en réseau.



    michel

  5. #5
    Membre habitué Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Points : 181
    Points
    181
    Par défaut
    Merci pour cette info, c'est clair que ça devrait résoudre le problème. Pour l'instant je me contente de signaler que la macro vient d'ouvrir un fichier en lecture seule. Ca fait un peu beaucoup de code pour juste proposer à l'utilisateur du fichier de savoir qui l'a actuellement ouvert.
    Merci quand même pour cette astuce

  6. #6
    Membre habitué Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Points : 181
    Points
    181
    Par défaut
    OK j'ai trouvé une solution plus courte qui implique deux lignes de code dans chaque fichier (celui qui est à ouvrir (appelons le A.xls) et celui qui lui demande de s'ouvrir (appelons le B.xls))
    Dans le classeur A, j'associe à l'ouverture du classeur en écriture le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ActiveWorkbook.ReadOnly = False Then
        ActiveWorkbook.Save
    End If
    Dans le classeur B, je rajoute à ma procédure d'ouverture de fichier les lignes suivantes (juste après l'ouverture du classeur A) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ActiveWorkbook.ReadOnly = True Then
        MsgBox "Le fichier NomDuFichier est déjà utilisé par " & _
            Workbooks("A.xls").BuiltinDocumentProperties(7).Value
        Exit Sub
    End If
    Le BuiltinDocumentProperties(7) me donne le login de la dernière personne à avoir sauvegardé. Donc vu qu'il y a une sauvegarde automatique à l'ouverture du fichier, si la personne est encore dessus, hop j'ai son nom.
    Je me demande juste si la sauvegarde auto en ouverture de fichier ne me causerait pas des soucis, mais je crois pas

    Voilà voilà, merci pour ton aide SilkyRoad

Discussions similaires

  1. [Débutant] Récupérer nom utilisateur fichier réseau
    Par Markast dans le forum C#
    Réponses: 4
    Dernier message: 19/06/2012, 16h51
  2. [VBA-E] Récupération Nom de fichier
    Par trihanhcie dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 02/03/2007, 13h53
  3. [VBA-E] Recherche nom de fichier
    Par Farelga dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/01/2007, 09h26
  4. [VBA-E]Fenetre fichier en lecture seule actuellement disponible
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 07/01/2007, 21h18
  5. [VBA-E]Récupérer chemin du fichier de données d'un graphique
    Par pimouss76 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/03/2006, 14h41

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