Fichier log.txt à l'ouverture d'un fichier Excel

Bonjour à toutes et à tous

J’ai un code VBA qui exporte sur un fichier .txt la date, l’heure et le nom de l’utilisateur qui a ouvert et fermé un fichier Excel. Ce code fonctionne très bien quand le fichier est en lecture seule (If ThisWorkbook.ReadOnly = False Then Exit Sub). Si j’adapte le code pour l’ouvrir en écriture, ça fonctionne aussi (If ThisWorkbook.ReadOnly = True Then Exit Sub).

Je n’arrive pas à utiliser ces deux codes au même temps. J’aimerais avoir le log .txt si les utilisateurs ouvrent le fichier en lecture seule ou en écriture (pour ceux qui ont le mot de passe).

Le fichier est en annexe (mot de passe : sigma)

Merci pour votre aide

41test-rw.xlsm (14.51 Ko)

Bonjour,

supprime le test

Option Explicit

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

' L E C T U R E - OUVERTURE

Private Sub Workbook_Open()
    Dim lpBuff As String * 25
    Dim Ret As Long
    Dim UserName As String, strInfos As String, Chemin As String, MASTER As String

    'If ThisWorkbook.ReadOnly = False Then Exit Sub
         MASTER = ThisWorkbook.Name
         Ret = GetUserName(lpBuff, 25)
         UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

    Chemin = "C:\TEMP\LOG\LOG_" & MASTER & ".txt"

    strInfos = "Ouvert le (lecture) : " & 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

' L E C T U R E - FERMETURE

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, MASTER As String

    'If ThisWorkbook.ReadOnly = True Then
        MASTER = ThisWorkbook.Name
        Ret = GetUserName(lpBuff, 25)
        UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

    Chemin = "C:\TEMP\LOG\LOG_" & MASTER & ".txt"

    strInfos = "Fermé  le (lecture) : " & 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

BOnjour,

tu ne dois avoir qu'un seul Private Sub Workbook_Open() idem pour before close.

Donc ton premier if avec option lecture seule puis un "else" avec ta condition pour ouverture en écriture

Merci beaucoup à vous deux!

@Xmenpl: Pourrais tu stp me donner un exemple ou mettre le Else? Je n'arrive pas à le placer correctement entre la lecture seule et l'écriture. Merci

Merci beaucoup à vous deux!

@Xmenpl: Pourrais tu stp me donner un exemple ou mettre le Else? Je n'arrive pas à le placer correctement entre la lecture seule et l'écriture. Merci

D'ordinaire quand la condition 1 est terminée donc juste avant un "end if"

' L E C T U R E - OUVERTURE READ ONLY OR NOT

Private Sub Workbook_Open()
    Dim lpBuff As String * 25
    Dim Ret As Long
    Dim UserName As String, strInfos As String, Chemin As String, MASTER As String

    If ThisWorkbook.ReadOnly = False Then Exit Sub
         MASTER = ThisWorkbook.Name
         Ret = GetUserName(lpBuff, 25)
         UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

    Chemin = "C:\TEMP\LOG\LOG_" & MASTER & ".txt"

    strInfos = "Ouvert le (lecture) : " & vbTab & Format(Now, "dd/mm/yyyy hh:mm:ss") & _
        vbTab & "par : " & vbTab & UserName

    Open Chemin For Append As #1
        Print #1, strInfos
    Close
'*********************

     Else
    MASTER = ThisWorkbook.Name
    Ret = GetUserName(lpBuff, 25)
    UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

    Chemin = "C:\TEMP\LOG\LOG_" & MASTER & ".txt"

    strInfos = "Ouvert le (ecriture) : " & 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

Merci pour ta réponse mais ça ne marche pas!

"Erreur de compilation: Else sans If"

Merci pour ta réponse mais ça ne marche pas!

"Erreur de compilation: Else sans If"

Oui en relisant le code je viens de voir

If ThisWorkbook.ReadOnly = False Then Exit Sub

il faut formuler autrement pour ne pas sortir du sub

If ThisWorkbook.ReadOnly = True Then ......

else ....

Tu as fais très fort, ça marche nickel . Grand merci

Tu as fais très fort, ça marche nickel . Grand merci

De rien c'est ton code ; j'ai juste apporté un " else "

Rechercher des sujets similaires à "fichier log txt ouverture"