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

VBA Access Discussion :

fichier d'aide en .chm et ID context


Sujet :

VBA Access

  1. #1
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut fichier d'aide en .chm et ID context
    bonjour,

    malgré les nombreux post et le forum je n'arrive pas à faire en sorte d'ouvrir mon fichier d'aide en . chm à la rubrique correspondante.

    j'ai édité mon fichier d'aide avec HelpNDoc. il affiche bien l'ID context de chaque page que j'ai remis dans l'onglet propriété "context aide" du formulaire ou du controle (bouton) que j'utilise pour ouvrir l'aide.

    voici le module que j'utilise pour lancer l'aide
    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
    Option Compare Database
     
    Option Explicit
     
    Private Const HH_DISPLAY_TOPIC = &H0
    Private Const HH_HELP_CONTEXT = &HF
     
    Private 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
    Public Sub Show(NewFile As String, Optional WindowPane As String, Optional ContextID)
    Dim Fichier As String
        Fichier = NewFile
     
        If Len(WindowPane) Then
            Fichier = Trim(Fichier) & ">" & Trim(WindowPane)
        End If
     
        If IsMissing(ContextID) Then
            Call HtmlHelp(0, Fichier, HH_DISPLAY_TOPIC, ByVal 0&)
        Else
            Call HtmlHelp(0, Fichier, HH_HELP_CONTEXT, ContextID)
        End If
    End Sub
    Public Function AppelAide()
        Dim Dossier As String
        Dossier = CurrentProject.Path
        If FileExists("Aide.chm", "C:\Program Files\gestion SEGPA demo") = True Then
            Dossier = "C:\Program Files\gestion SEGPA demo" & "\" & "Aide.chm"
            Chelp.Show (Dossier)
            Else
                MsgBox "le fichier d'aide spécifié n'a pas été trouvé", vbCritical, "Mon application"
        End If
    End Function
     
    Public Function FileExists(Fichier$, Optional Dossier) As Boolean
        With Application.FileSearch
            .FileName = Fichier
            If IsMissing(Dossier) = False Then
                .LookIn = Dossier
            Else
                .LookIn = CurDir()
            End If
            .SearchSubFolders = False
            .Execute
            If .FoundFiles.Count > 0 Then
                FileExists = True
            Else
                FileExists = False
            End If
        End With
    End Function
    je l'ance l'aide avec la commande
    peut etre ai je mal compris le code.... et il manquerai quelquechose ??

    enfin ca fait un moment que je parcours le forum et d'autres sites mais je n'ai rien trouvé pour le moment

    merci de votre aide

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    Je n'ai pas compris quel était exactement ton souci.
    Dans la fonction AppelAide() cette ligne est suspecte
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
            Chelp.Show (Dossier)
    Essaie
    A+

  3. #3
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    merci pour ta réponse je vais essayer ton idée

    mon problème c'est que j'aimerais que mon fichier d'aide s'ouvre sur une page particulière en fonction de l'endroit où on l'appelle (je sais pas si je suis tres clair....)


    formulaire d'accueil........> aide sur l'accueil

    formulaire stage.............> aide sur le stage

    un dessin vaut mieux qu'un long discours...

    merci pour vos idées.

  4. #4
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    a priori ca ne change rien l'un ou l'aure marche aussi bien....

  5. #5
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonsoir,

    a priori ca ne change rien l'un ou l'aure marche aussi bien....
    Mais quel est ton soucis alors ?

    Domi2

  6. #6
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    Je n'ai pas de problème pour lancer le fichier d'aide


    J'ai un probleme pour paramétrer l'ouverture de l'aide à un endroit precis.

    Je ne veux pas que l'aide s'ouvre sur la page d'accueil si je suis sur la page des stages....

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Pour ouvrir une rubrique particulière par code
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ContextID As Long
    ContextID = 200
    Show Dossier, "", ContextID

    Pour ouvrir l'aide contextuelle avec la touche F1 (sans code) :

    Propriétés au niveau formulaire
    Fichier Aide : C:\Program Files\gestion SEGPA demo\Aide.chm
    Contexte Aide : le numéro du Context ID par défaut

    Propriétés au niveau des contrôles du formulaire
    Contexte Aide : le numéro de Context ID pour ce contrôle

    Avec ton exemple:
    Formulaire d'accueil........> aide sur l'accueil (ex: context ID 100)
    Propriétés formulaire
    Fichier Aide : C:\Program Files\gestion SEGPA demo\Aide.chm
    Contexte Aide : 100

    formulaire stage.............> aide sur le stage (ex: context ID 200)
    Propriétés formulaire
    Fichier Aide : C:\Program Files\gestion SEGPA demo\Aide.chm
    Contexte Aide : 200

    En espérant avoir compris
    A+

  8. #8
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    hello

    a ça y est je me suis fait comprendre

    La derniere solution ne marche pas chez moi j'avais déjà essayé mais sans succé....

    Par contre la premiere marche à merveille.
    Pour l'accés par la touche F1 j'ai fait une macro "autokeys"

    Le probleme maintenant c'est de récupérer la valeur de "contextID" de mon formulaire dans la variable. Dans ton exemple elle est fixe.

    J'ai essayé avec "me.quelquechose" mais je n'ai pas trouvé le terme qui correspond à contextID.

    Si t'as une solution merci de m'en faire part. En attendant je continue à chercher

  9. #9
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Pour un formulaire utilise la propriété HelpContextId
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.HelpContextId
    'ou encore
    Forms![Nom du formulaire].HelpContextId

    La propriété HelpFile du formulaire te donnes le fichier d'aide si tu l'a renseigné dans le formulaire.

    A+

  10. #10
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    super c'est ce que je voulais

    mais dans mon module ça ne marche pas

    Je pense qu'il ne sais pas à quoi cela correspond quand c'est appeler dans le module
    Alors j'ai une idée, dis moi si je suis sur la bonne voie stp

    Je vais mettre dans une variable public le nom du formulaire à partir duquel j'appelle la fonction pour ensuite prendre le contextID de ce formuliare.....


    Est ce que cette méthode marche si j'appuie sur F1 (peut etre en premant le contexID du formulaire actif quand j'appuie sur F1)....

    voila mes quelques pistes de reflexion.
    Si il y a mieux je prends aussi.....

    merci beaucoup de ton aide

  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Je suis un peu sur ce problème aussi... J'ai fait quelque recherches et j'en suis là de mes réflexions...

    La macro AutoKeys = Ok

    Par contre, l'utilisation de la touche F1 ne semble pas être une vraiment bonne idée, dans la mesure ou c'est la touche réservée à l'aide Office... a vérifier.

    La propriété HelpcontextId semble poser quelques problèmes suivant les versions...

    Ce que je désire, c'est pouvoir paramètrer également le nom du fichier. J'ai vérifié, il semble qu'on ne puisse pas utiliser un chemin relatif dans la propriété Fichier aide du formulaire.

    Ce que je me propose de faire...

    D'abord, dans le fichier d'aide créer une page "Pas d'aide disponible", avec par exemple l'Id à définie à 9999.

    Ensuite dans un module :

    1) Définir le chemin complet du fichier d'aide
    2) Vérifier l'existence de celui-ci
    3) si ok, on passe le chemin dans une variable, sinon message erreur
    4) On commence par vérifier que la propriété HelpContextId du contôle actif. Si elle n'est pas Null et plus grande que zéro, on passe le no de contexte dans une variable. Sinon :
    5) On vérifie la propriété HelpContextId du formulaire actif. Si elle n'est pas Null et plus grande que zéro, on assigne le numéro à la variable. Sinon :
    6) On assigne le contexte par défaut (par ex. 9999) à la variable
    7) On appelle la fonction qui va bien pour ouvrir le fichier d'aide en passant les deux variables.

    Pas testé, mais je pense que ça devrait le faire. Ci après, le code utilisé pour récupérer les no de contexte d'aide (formulaire actif et contrôle actif).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function AfficherAide()
     
        Dim lngContext As Long
     
        lngContext = Screen.ActiveForm.Properties("HelpcontextId")
     
        MsgBox lngContext
     
        lngContext = Screen.ActiveForm.ActiveControl.Properties("HelpcontextId")
     
        MsgBox lngContext
     
    End Function
    En espérant t'aider...

    Domi2

    P.-S. Je suis attentivement la discussion. Si j'ai le temps d'avancer un peu, je posterais la suite de mon code.

  12. #12
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    j'ai trouvé une partie de solution

    j'ai donc fait une variable public dans laquelle je stoque la valeur de contextID de mon formulaire avant d'appeller ma fonction
    ca marche mais seulement lorsque je passe par un bouton du formulaire

    Par contre cette méthode ne marche pas du tout avec la touche F1
    peut etre que mon idée de prendre la valeur contextid du formulaire actif à partir du module est plus intéressante......

  13. #13
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    ok ça marche bien merci pour ton bout de code je te fait un post avec le contenu de mon module qui correspond à ce que tu as décrit.

    par contre je n'utilise pas de page au cas ou il n'y a pas de contextID. Je prefère basculer sur la page d'accueil de l'aide

  14. #14
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    par contre je n'utilise pas de page au cas ou il n'y a pas de contextID. Je prefère basculer sur la page d'accueil de l'aide
    Oui, du moment qu'on a pas de contexte d'aide défini, on affiche ce qu'on veut... La rubrique "Pas d'aide disponible", c'est une idée comme ça.

    Domi2

  15. #15
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 263
    Points
    263
    Par défaut
    la solution

    créer un module nommé Chelp

    dans lequel vous coller ce code:
    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
    57
    58
    Option Compare Database
     
    Option Explicit
     
    Private Const HH_DISPLAY_TOPIC = &H0
    Private Const HH_HELP_CONTEXT = &HF
     
    Private 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
    Public Sub Show(NewFile As String, Optional WindowPane As String, Optional contextID)
    Dim Fichier As String
        Fichier = NewFile
     
        If Len(WindowPane) Then
            Fichier = Trim(Fichier) & ">" & Trim(WindowPane)
        End If
     
        If IsMissing(contextID) Then
            Call HtmlHelp(0, Fichier, HH_DISPLAY_TOPIC, ByVal 0&)
        Else
            Call HtmlHelp(0, Fichier, HH_HELP_CONTEXT, contextID)
        End If
    End Sub
    Public Function AppelAide()
        Dim Dossier As String
        Dim lgcontext As Long
     
        lngcontext = Screen.ActiveForm.Properties("HelpcontextId")
     
        Dossier = CurrentProject.Path
        If FileExists("Aide.chm", "C:\Program Files\gestion SEGPA demo") = True Then
            Dossier = "C:\Program Files\gestion SEGPA demo" & "\" & "Aide.chm"
            Chelp.Show (Dossier), , lngcontext
            Else
                MsgBox "le fichier d'aide spécifié n'a pas été trouvé", vbCritical, "Mon application"
        End If
    End Function
     
    Public Function FileExists(Fichier$, Optional Dossier) As Boolean
        With Application.FileSearch
            .FileName = Fichier
            If IsMissing(Dossier) = False Then
                .LookIn = Dossier
            Else
                .LookIn = CurDir()
            End If
            .SearchSubFolders = False
            .Execute
            If .FoundFiles.Count > 0 Then
                FileExists = True
            Else
                FileExists = False
            End If
        End With
    End Function
    Pensez à changer le nom et l'adresse du fichier selon vos paramètres dans ces 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If FileExists("Aide.chm", "C:\Program Files\gestion SEGPA demo") = True Then
            Dossier = "C:\Program Files\gestion SEGPA demo" & "\" & "Aide.chm"

    créer une macro autokeys
    avec nom de macro : {F1} (la colonne nom de macro n'est pas forcément affichée par défaut....)
    action: executer code
    code: appelaide

    vous pouvez aussi rajouter des boutons sur vos formulaires avec ce code:
    Pour que le fichier d'aide s'ouvre à l'endroit voulu vous devez renseigner dans les propriétés du formulaire, dans l'onglet autre, la propriété context aide en fonction de l'idcontext de votre fichier d'aide.

    le nom du fichier d'aide n'est pas obligatoire puisqu'il est défini dans le premier module

    Voila je crois que c'est tout

    pour créer votre fichier d'aide je vous conseille helpNdoc..... gratuit pour une utilisation perso

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] attribué un fichier d'aide perso .chm à une base ACCESS
    Par Marlen dans le forum VBA Access
    Réponses: 17
    Dernier message: 03/07/2012, 18h17
  2. Tutoriel "Créer un Fichier d'aide de type .chm"
    Par Claude l'ancien dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2006, 10h46
  3. Réponses: 11
    Dernier message: 04/01/2006, 18h32
  4. Lire et décoder un fichier d'aide CHM
    Par bob2553 dans le forum Outils
    Réponses: 6
    Dernier message: 22/06/2005, 20h21
  5. Réponses: 3
    Dernier message: 09/06/2005, 18h19

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