Aide en ligne personnalisée dans une application Microsoft Access

Logo_Microsoft_Access_2013

Cet article a pour but d’expliquer l’intégration d’un fichier d’aide en ligne personnalisé dans une application Access. Cette aide en ligne contextuelle va permettre de remplacer les manuels d’utilisateurs au format papier.
L’intérêt est de permettre à l’utilisateur de pouvoir appuyer sur la touche 'F1' du clavier lorsqu’il souhaite avoir de l’aide sur l’utilisation de l’application. De plus en fonction du formulaire sélectionné, on va pouvoir ouvrir le chapitre correspondant dans l’aide en ligne.

Création du fichier d'aide en ligne 

La première chose à faire est de créer le fichier d’aide au format CHM (Microsoft HTML compilés). Ici on utilise le logiciel HelpNDoc qui est gratuit et facile à utiliser pour générer le fichier d’aide (MonAide.chm).
Après avoir téléchargé et installé HelpNDoc, on lance l’application et on peut créer les différents chapitres de l’aide :

HND1

Chaque chapitre est identifié par un libellé (ID d’aide) et un numéro (Contexte d’aide) :

HND2

On clique sur le bouton 'Générer l’aide' pour créer le fichier 'MonAide.chm' :

HND3

Pour obtenir l’énumération des chapitres, on clique sur 'Générer l’aide > Visual Basic module > Visual Basic Enums' :

HND4

Cette énumération va nous servir dans Access pour venir se placer sur le bon chapitre de l’aide en ligne.

Intégration du fichier d'aide en ligne dans Microsoft Access

Dans Access, on crée un nouveau module : Aide

Option Compare Database
Option Explicit

‘Handler du fichier d’aide
Public hwndHelp As Variant

‘Enumération des chapitres de l’aide en ligne (généré automatiquement via HelpNDoc)
Public Enum eHelp_MonAide
  HELP_Bienvenue = 1
  HELP_Sommaire = 2
  HELP_Presentation = 3
  HELP_Recherche = 4
  HELP_Icone = 5
  HELP_Equipement = 6
  HELP_Dossier = 7
  HELP_Ouverture = 8
  HELP_Photos = 9
  HELP_Cloture = 10
  HELP_Export = 11
  HELP_Reglesgestion = 12
  HELP_Role = 13
  HELP_Delais = 14
  HELP_Basedocumentaire = 15
  HELP_Referentiel = 16
  HELP_Localagent = 17
  HELP_Localordures = 18
  HELP_Procedure = 19
End Enum

'Fonction permettant d'appeler le fichier d'aide
Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _
(ByVal hwndCaller As Long, ByVal pszFile As String, _
ByVal uCommand As Long, ByVal dwData As Long) As Long

‘Fonctions utilisées pour fermer le fichier d’aide
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

‘Procédure qui permet de fermer le fichier d’aide. A appeler lors de la fermeture de l’application Access
Sub TerminateProcByHwnd(ByVal hwnd As Long)
Const PROCESS_ALL_ACCESS = &H1F0FFF
Dim ThreadIDX As Long
Dim PROCESSIDX As Long
Dim EXCODE As Long
Dim PROCESS As Long
ThreadIDX = GetWindowThreadProcessId(hwnd, PROCESSIDX)
PROCESS = OpenProcess(PROCESS_ALL_ACCESS, 0, PROCESSIDX)
Call GetExitCodeProcess(PROCESS, EXCODE)
Call TerminateProcess(PROCESS, EXCODE)
Call CloseHandle(PROCESS)
End Sub

‘Procédure qui permet d’afficher le fichier d’aide. En fonction du nom du formulaire, on affiche le chapitre correspondant.
Sub Contexte_Aide(MyFormName As String)
Dim MyContextID, HH_HELP_CONTEXT As Long
Dim MyHelpFile As String

MyHelpFile = " C:\Fic_win\MonAide.chm"

    'Contexte d'aide
    HH_HELP_CONTEXT = &HF

    Select Case MyFormName

        Case "MENU"
            MyContextID = eHelp_MonAide.HELP_Bienvenue

        Case "DOSSIER"
            MyContextID = eHelp_MonAide.HELP_Dossier

        Case "RECHERCHE"
            MyContextID = eHelp_MonAide.HELP_Recherche

        Case "EXPORT"
            MyContextID = eHelp_MonAide.HELP_Export

        Case Else
            MyContextID = eHelp_MonAide.HELP_Sommaire

    End Select

    hwndHelp = HtmlHelp(Application.hWndAccessApp, MyHelpFile, HH_HELP_CONTEXT, MyContextID)

End Sub
Aide

Au niveau des formulaires l’ouverture du fichier d’aide se fait sur l’événement 'Sur touche appuyée' :

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    If KeyCode = vbKeyF1 Then
        Call Contexte_Aide(Me.Name)
        KeyCode = 0
    End If

End Sub

Pour terminer, il faut bien penser à fermer le fichier d’aide en ligne lors de la fermeture de l’application Access :

If Nz(hwndHelp, "") <> "" Then
      Call TerminateProcByHwnd(hwndHelp)
End If

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.