Developpez.com - Rubrique Access

Le Club des Développeurs et IT Pro

Access: créer un journal des sessions d'utilisateurs d'une base Access

Un tutoriel de Denis Hulo

Le 2020-07-22 16:31:10, par User, Rédacteur/Modérateur
Bonjour à tous,

Je vous présente un nouveau tutoriel en complément du précédent (créer un journal d'activité des utilisateurs) :

Créer un journal des sessions utilisateurs

Je souhaite dans celui-ci expliquer comment enregistrer les sessions ou périodes d'activité des utilisateurs pour ensuite estimer le total des heures effectuées par mois par l'employé,
ou encore pour savoir qui est connecté à un moment donné.

« En informatique et en télécommunication, une session est une période délimitée pendant laquelle un appareil informatique est en communication et réalise des opérations au service d’un client - un usager, un logiciel ou un autre appareil. »

Dans un précédent article, j’ai essayé d’expliquer comment créer un journal d'activité des utilisateurs.
L’objectif est maintenant d’apprendre à créer un journal des sessions utilisateurs, dans lequel on enregistre uniquement la période d’activité de l’utilisateur de la base.
Bonne lecture
  Discussion forum
8 commentaires
  • Pierre Fauconnier
    Responsable Office & Excel
    Merci Denis pour ce nouveau tuto
  • nico84
    Expert confirmé
    Bonjour,

    J'ai déjà ça (sur des bases similaires), malheureusement beaucoup d'utilisateurs ne se déconnectent pas en partant
    Une idée pour savoir qui travaille vraiment ?

    En attendant mieux je force la déconnexion le soir grâce à une routine dans la fenêtre cachée :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Form_Timer() 'fermeture automatique à 23h01
    If Not Mode_debug Then On Error GoTo err
    100 If Not Mode_admin Then
    110   If TimeValue(Now()) >= TimeValue("23:00:00") Then
            'comme tout le monde va se faire virer je l'écris une fois pour toutes
    111     cnx.Execute "UPDATE parametres set users=0 WHERE ligne=1", dbFailOnError 
    112     cnx.Execute "UPDATE personnel set nb_log=0 where nb_log>0", dbFailOnError 
            'procédure de fermeture habituelle avec écriture dans le journal
    113     Call Form_menu.quitte_Click 
    114   ElseIf TimeValue(Now()) >= TimeValue("22:55:00") Then
    116     DoCmd.OpenForm "choix", , , , , , "FERMETURE AUTOMATIQUE DANS 5'"
        End If: End If
        Exit Sub
    err: Call message("Erreur " & err.Number & "/" & Erl & " dans ac_log.timer : " & err.description)
    End Sub
  • User
    Rédacteur/Modérateur
    Bonjour Nico,

    et merci pour ton commentaire.

    Comme je le mentionne au début le journal des sessions va en complément du journal d'activité, mais entre la théorie et la pratique...

    Pour répondre à ta question, j'imagine de mettre sur le timer du formulaire en arrière plan (F_Session) le code de la faq pour détecter l'inactivité de l'utilisateur et déclencher alors la fermeture de l'application :

    https://access.developpez.com/faq/?page=Forms#inactifUti

    Avec en cas d'inactivité un :

    Code :
    DoCmd.Quit()
    Pour le moment je n'ai rien de mieux.

    Cdlt,
  • User
    Rédacteur/Modérateur
    Envoyé par Pierre Fauconnier
    Merci Denis pour ce nouveau tuto
    Pas de quoi

    On croit toujours avoir épuisé tous les sujets, mais au bout du compte on trouve toujours une nouvelle idée à développer
  • Ric500
    Membre éprouvé
    Bonjour à tous !

    @User
    Merci pour ce tuto que je vais me dépêcher de regarder avec soin !

    @nico84
    J'avais effectivement le même souci avec une application traçant l'activité des utilisateurs dont certains trouvaient malin de quitter l'appli par la croix.
    J'ai pu y palier grâce au forum où j'ai trouvé ce module qui permet d'inactiver ou ré-activer cette croix à volonté:

    Dans un module:
    Code :
    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
    Option Compare Database
    
    Private Declare Function GetSystemMenu Lib "user32" _
            (ByVal hWnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function RemoveMenu Lib "user32" _
            (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Public Const SC_CLOSE = &HF060&
    Public Const MF_BYCOMMAND = &H0&
    
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
     
    Public Sub DesacFermeture()
        Dim hSysMenu As Long
         
        hSysMenu = GetSystemMenu(Application.hWndAccessApp, False)
        RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
     
    End Sub
    
    
    Public Sub ReactiveFermeture()
        Dim hSysMenu As Long
        hSysMenu = GetSystemMenu(Application.hWndAccessApp, True)
        DrawMenuBar hSysMenu
    End Sub
    Si çà peut résoudre ton souci...
  • nico84
    Expert confirmé
    Envoyé par Ric500
    J'ai pu y palier grâce au forum où j'ai trouvé ce module qui permet d'inactiver ou ré-activer cette croix à volonté:
    Merci Ric j'ai déjà désactivé la croix, ce n'est pas suffisant car certains utilisateurs ont pour habitude de fermer avec un clic droit [fermer la fenêtre] sur l'icone dans la barre d'outils
    Ceci dit la procédure form_close de ma fenêtre cachée les voit partir quand même

    Le souci c'est ceux qui partent le soir sans arrêter l'application
  • User
    Rédacteur/Modérateur
    Envoyé par Ric500
    Bonjour à tous !

    @User
    Merci pour ce tuto que je vais me dépêcher de regarder avec soin !

    @nico84
    J'avais effectivement le même souci avec une application traçant l'activité des utilisateurs dont certains trouvaient malin de quitter l'appli par la croix.
    J'ai pu y palier grâce au forum où j'ai trouvé ce module qui permet d'inactiver ou ré-activer cette croix à volonté:

    Dans un module:
    Code :
    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
    Option Compare Database
    
    Private Declare Function GetSystemMenu Lib "user32" _
            (ByVal hWnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function RemoveMenu Lib "user32" _
            (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Public Const SC_CLOSE = &HF060&
    Public Const MF_BYCOMMAND = &H0&
    
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
     
    Public Sub DesacFermeture()
        Dim hSysMenu As Long
         
        hSysMenu = GetSystemMenu(Application.hWndAccessApp, False)
        RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
     
    End Sub
    
    
    Public Sub ReactiveFermeture()
        Dim hSysMenu As Long
        hSysMenu = GetSystemMenu(Application.hWndAccessApp, True)
        DrawMenuBar hSysMenu
    End Sub
    Si çà peut résoudre ton souci...
    Merci Ric pour cette idée intéressante

    C'est en effet une possibilité, dans mon cas j'utilise un formulaire en arrière plan, ouvert durant toute la session avec une procédure sur fermeture, peut-être plus facile à mettre en place pour les débutants, à voir.

    Cordialement,
  • Pierre Fauconnier
    Responsable Office & Excel
    Envoyé par User
    Dans mon cas j'utilise un formulaire en arrière plan, ouvert durant toute la session avec une procédure sur fermeture, peut-être plus facile à mettre en place pour les débutants, à voir.
    +1. Ca évite les API