OVH Cloud OVH Cloud

Excel VBA et aide en ligne

4 réponses
Avatar
Claudio
Hi all,
pour un fichiers xls contenat une grosse macro, j'ai=20
associ=E9 un fichier d'aide en ligne (.chm).
Pour chaque userform concern=E9e, j'ai associ=E9 un=20
HelpContextId, comme indiqu=E9 dans la doc.
En principe, lorsque je presse F1, =E7=E0 devrait m'afficher=20
qqch, mais balle peau ...

Manquerait-il qqch ou bien la v=E9rit=E9 est-elle ailleurs ?

D'avance merci

Claudio

4 réponses

Avatar
Michel Pierron
Bonsoir Claudio;
As-tu bien renseigné le nom du fichier d'aide associé à ton projet dans les
propriétés du projet ?
Cela ne fonctionne qu'avec des fichiers d'aide .hlp et non pas des fichiers
d'aide .chm !!!
Tu pourrais t' en sortir en ajoutant un bouton d'aide qui exécuterait
l'affichage de l'aide au moyen d'une fonction API comme dans l'exemple
suivant:
(J'ai mis les 2 possibilités .chm et .hlp, tu feras le ménage...)

Option Explicit
Private Declare Function FindWindow& Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)
'// Fichiers d'aide .hlp
Private Declare Function WinHelp& Lib "user32.dll" Alias "WinHelpA" _
(ByVal hWndMain&, ByVal lpHelpFile$, ByVal uCommand&, dwData As Any)
'// Fichiers d'aide .chm
Private Declare Function HtmlHelp& Lib "hhctrl.ocx" Alias "HtmlHelpA" _
(ByVal hwndCaller&, ByVal pszFile$, ByVal uCommand&, dwData As Any)
'// Pour info, constantes .chm:
'Const HH_DISPLAY_TOPIC = &H0
'Const HH_SET_WIN_TYPE = &H4
'Const HH_GET_WIN_TYPE = &H5
'Const HH_GET_WIN_HANDLE = &H6
' Display string resource ID or text in a popupwin.
'Const HH_DISPLAY_TEXT_POPUP = &HE
' Display mapped numeric value in dwdata
'Const HH_HELP_CONTEXT = &HF
' Text pop-up help, similar to WinHelp's HELP_CONTEXTMENU
'Const HH_TP_HELP_CONTEXTMENU = &H10
' Text pop-up help, similar to WinHelp's HELP_WM_HELP
'Const HH_TP_HELP_WM_HELP = &H11

Sub AidePerso()
' Affiche le sommaire de l'aide
ShowChm "c:Retten.chm"
'ShowHelp "c:Retten.hlp"
' Affiche une rubrique particulière de l'aide
'ShowChm "c:Retten.chm", 1010
'ShowHelp "c:Retten.hlp", 1010
End Sub

Sub ShowChm(ChmFile$, Optional idx& = 0)
Dim hWnd&
hWnd = FindWindow(vbNullString, Application.Caption)
Call HtmlHelp(hWnd, ChmFile, &H0, ByVal idx)
End Sub

Sub ShowHlp(HlpFile$, Optional idx& = 0)
Dim i&, hWnd&
If idx Then i& = &H1 Else i& = &H3
hWnd = FindWindow(vbNullString, Application.Caption)
Call WinHelp(hWnd, HlpFile, i, ByVal idx)
End Sub

MP

"Claudio" a écrit dans le message de
news:382501c48f79$68f72a60$
Hi all,
pour un fichiers xls contenat une grosse macro, j'ai
associé un fichier d'aide en ligne (.chm).
Pour chaque userform concernée, j'ai associé un
HelpContextId, comme indiqué dans la doc.
En principe, lorsque je presse F1, çà devrait m'afficher
qqch, mais balle peau ...

Manquerait-il qqch ou bien la vérité est-elle ailleurs ?

D'avance merci

Claudio
Avatar
Claudio
Merci beaucoup pour la rapidité et la précision de la
réponse.

Pour ce qui est du .chm, étant donné qu'XL le propose dans
les types de fichiers à associer, je pensais que ce serait
OK.

J'avais essayé d'associer du code ;
pas de soucis pour ajouter une ligne de menu qui pointe
sur la première page de l'aide.

Par contre, je ne sais pas comment faire pour appeler la
page d'aide associée à un écran particulier sans ajouter
de bouton à la userform (je connais le code, avec le
ContextId, mais je n'arrive pas à l'associer à l'appui sur
la touche "F1").

Si tu as une idée ...

Claudio
-----Message d'origine-----
Bonsoir Claudio;
As-tu bien renseigné le nom du fichier d'aide associé à
ton projet dans les

propriétés du projet ?
Cela ne fonctionne qu'avec des fichiers d'aide .hlp et
non pas des fichiers

d'aide .chm !!!
Tu pourrais t' en sortir en ajoutant un bouton d'aide qui
exécuterait

l'affichage de l'aide au moyen d'une fonction API comme
dans l'exemple

suivant:
(J'ai mis les 2 possibilités .chm et .hlp, tu feras le
ménage...)


Option Explicit
Private Declare Function FindWindow& Lib "user32"
Alias "FindWindowA" _

(ByVal lpClassName$, ByVal lpWindowName$)
'// Fichiers d'aide .hlp
Private Declare Function WinHelp& Lib "user32.dll"
Alias "WinHelpA" _

(ByVal hWndMain&, ByVal lpHelpFile$, ByVal uCommand&,
dwData As Any)

'// Fichiers d'aide .chm
Private Declare Function HtmlHelp& Lib "hhctrl.ocx"
Alias "HtmlHelpA" _

(ByVal hwndCaller&, ByVal pszFile$, ByVal uCommand&,
dwData As Any)

'// Pour info, constantes .chm:
'Const HH_DISPLAY_TOPIC = &H0
'Const HH_SET_WIN_TYPE = &H4
'Const HH_GET_WIN_TYPE = &H5
'Const HH_GET_WIN_HANDLE = &H6
' Display string resource ID or text in a popupwin.
'Const HH_DISPLAY_TEXT_POPUP = &HE
' Display mapped numeric value in dwdata
'Const HH_HELP_CONTEXT = &HF
' Text pop-up help, similar to WinHelp's HELP_CONTEXTMENU
'Const HH_TP_HELP_CONTEXTMENU = &H10
' Text pop-up help, similar to WinHelp's HELP_WM_HELP
'Const HH_TP_HELP_WM_HELP = &H11

Sub AidePerso()
' Affiche le sommaire de l'aide
ShowChm "c:Retten.chm"
'ShowHelp "c:Retten.hlp"
' Affiche une rubrique particulière de l'aide
'ShowChm "c:Retten.chm", 1010
'ShowHelp "c:Retten.hlp", 1010
End Sub

Sub ShowChm(ChmFile$, Optional idx& = 0)
Dim hWnd&
hWnd = FindWindow(vbNullString, Application.Caption)
Call HtmlHelp(hWnd, ChmFile, &H0, ByVal idx)
End Sub

Sub ShowHlp(HlpFile$, Optional idx& = 0)
Dim i&, hWnd&
If idx Then i& = &H1 Else i& = &H3
hWnd = FindWindow(vbNullString, Application.Caption)
Call WinHelp(hWnd, HlpFile, i, ByVal idx)
End Sub

MP

"Claudio" a écrit
dans le message de

news:382501c48f79$68f72a60$
Hi all,
pour un fichiers xls contenat une grosse macro, j'ai
associé un fichier d'aide en ligne (.chm).
Pour chaque userform concernée, j'ai associé un
HelpContextId, comme indiqué dans la doc.
En principe, lorsque je presse F1, çà devrait m'afficher
qqch, mais balle peau ...

Manquerait-il qqch ou bien la vérité est-elle ailleurs ?

D'avance merci

Claudio


.



Avatar
Michel Pierron
Bonjour Claudio;
Autant pour moi, tu as la possibilité d'utiliser les fichiers d'aide .chm
2 façons de faire:
1 - En dur avec le mode Création
Dans le menu Outils / Propriétés de VBAProject, renseigne le champ "Nom du fichier
d'aide" au moyen du browser associé en choisissant HtmlHelp (*.chm) comme type de
fichier.
Renseigner les propriétés de ton UserForm:
HelpContextID (Ton numéro de contexte à afficher lors de l'appui sur la touche F1)
WhatsThisHelp (Mettre à True)
Si tu souhaites des aides particulières pour les contrôles, tu peux renseigner la
propriété HelpContextID de chaque contrôle accessible à l'utilisateur (l'appui sur
F1 lorsque le contrôle à le focus affichera le numéro de rubrique indiqué) et même
utiliser le bouton en forme de point d'interrogation à coté de la croix de
fermeture en mettant la propriété WhatsThisButton de to UserForm à True.

2 - Par programmation
Mettre la propriété WhatsThisHelp de ton UserForm à True en mode création car
cette propriété est en lecture seule et ne peut être modifiée en mode exécution.
Private Sub UserForm_Initialize()
Const MyHelp$ = "C:ExcelHelpvbSample.chm"
Application.ThisWorkbook.VBProject.HelpFile = MyHelp
Application.ThisWorkbook.VBProject.HelpContextID = 0
Me.HelpContextID = 3000
End Sub

MP

"Claudio" a écrit dans le message de
news:3eac01c48ff6$f0c16730$
Merci beaucoup pour la rapidité et la précision de la
réponse.

Pour ce qui est du .chm, étant donné qu'XL le propose dans
les types de fichiers à associer, je pensais que ce serait
OK.

J'avais essayé d'associer du code ;
pas de soucis pour ajouter une ligne de menu qui pointe
sur la première page de l'aide.

Par contre, je ne sais pas comment faire pour appeler la
page d'aide associée à un écran particulier sans ajouter
de bouton à la userform (je connais le code, avec le
ContextId, mais je n'arrive pas à l'associer à l'appui sur
la touche "F1").

Si tu as une idée ...

Claudio
-----Message d'origine-----
Bonsoir Claudio;
As-tu bien renseigné le nom du fichier d'aide associé à
ton projet dans les

propriétés du projet ?
Cela ne fonctionne qu'avec des fichiers d'aide .hlp et
non pas des fichiers

d'aide .chm !!!
Tu pourrais t' en sortir en ajoutant un bouton d'aide qui
exécuterait

l'affichage de l'aide au moyen d'une fonction API comme
dans l'exemple

suivant:
(J'ai mis les 2 possibilités .chm et .hlp, tu feras le
ménage...)


Option Explicit
Private Declare Function FindWindow& Lib "user32"
Alias "FindWindowA" _

(ByVal lpClassName$, ByVal lpWindowName$)
'// Fichiers d'aide .hlp
Private Declare Function WinHelp& Lib "user32.dll"
Alias "WinHelpA" _

(ByVal hWndMain&, ByVal lpHelpFile$, ByVal uCommand&,
dwData As Any)

'// Fichiers d'aide .chm
Private Declare Function HtmlHelp& Lib "hhctrl.ocx"
Alias "HtmlHelpA" _

(ByVal hwndCaller&, ByVal pszFile$, ByVal uCommand&,
dwData As Any)

'// Pour info, constantes .chm:
'Const HH_DISPLAY_TOPIC = &H0
'Const HH_SET_WIN_TYPE = &H4
'Const HH_GET_WIN_TYPE = &H5
'Const HH_GET_WIN_HANDLE = &H6
' Display string resource ID or text in a popupwin.
'Const HH_DISPLAY_TEXT_POPUP = &HE
' Display mapped numeric value in dwdata
'Const HH_HELP_CONTEXT = &HF
' Text pop-up help, similar to WinHelp's HELP_CONTEXTMENU
'Const HH_TP_HELP_CONTEXTMENU = &H10
' Text pop-up help, similar to WinHelp's HELP_WM_HELP
'Const HH_TP_HELP_WM_HELP = &H11

Sub AidePerso()
' Affiche le sommaire de l'aide
ShowChm "c:Retten.chm"
'ShowHelp "c:Retten.hlp"
' Affiche une rubrique particulière de l'aide
'ShowChm "c:Retten.chm", 1010
'ShowHelp "c:Retten.hlp", 1010
End Sub

Sub ShowChm(ChmFile$, Optional idx& = 0)
Dim hWnd&
hWnd = FindWindow(vbNullString, Application.Caption)
Call HtmlHelp(hWnd, ChmFile, &H0, ByVal idx)
End Sub

Sub ShowHlp(HlpFile$, Optional idx& = 0)
Dim i&, hWnd&
If idx Then i& = &H1 Else i& = &H3
hWnd = FindWindow(vbNullString, Application.Caption)
Call WinHelp(hWnd, HlpFile, i, ByVal idx)
End Sub

MP

"Claudio" a écrit
dans le message de

news:382501c48f79$68f72a60$
Hi all,
pour un fichiers xls contenat une grosse macro, j'ai
associé un fichier d'aide en ligne (.chm).
Pour chaque userform concernée, j'ai associé un
HelpContextId, comme indiqué dans la doc.
En principe, lorsque je presse F1, çà devrait m'afficher
qqch, mais balle peau ...

Manquerait-il qqch ou bien la vérité est-elle ailleurs ?

D'avance merci

Claudio


.



Avatar
Claudio
Merci Michel,

l'accès aux différents contextes depuis chaque fenêtre
fonctionne désormais correctement ; suffisait de mettre
WhatsThisHelp à true.

Pour l'accès depuis le menu, je vais ajouter une ligne qui
exécutera une proc similaire à la tienne et qui affichera
la première page de l'aide.

@+

Claudio
-----Message d'origine-----
Bonjour Claudio;
Autant pour moi, tu as la possibilité d'utiliser les
fichiers d'aide .chm

2 façons de faire:
1 - En dur avec le mode Création
Dans le menu Outils / Propriétés de VBAProject, renseigne
le champ "Nom du fichier

d'aide" au moyen du browser associé en choisissant
HtmlHelp (*.chm) comme type de

fichier.
Renseigner les propriétés de ton UserForm:
HelpContextID (Ton numéro de contexte à afficher lors de
l'appui sur la touche F1)

WhatsThisHelp (Mettre à True)
Si tu souhaites des aides particulières pour les
contrôles, tu peux renseigner la

propriété HelpContextID de chaque contrôle accessible à
l'utilisateur (l'appui sur

F1 lorsque le contrôle à le focus affichera le numéro de
rubrique indiqué) et même

utiliser le bouton en forme de point d'interrogation à
coté de la croix de

fermeture en mettant la propriété WhatsThisButton de to
UserForm à True.


2 - Par programmation
Mettre la propriété WhatsThisHelp de ton UserForm à True
en mode création car

cette propriété est en lecture seule et ne peut être
modifiée en mode exécution.

Private Sub UserForm_Initialize()
Const MyHelp$ = "C:ExcelHelpvbSample.chm"
Application.ThisWorkbook.VBProject.HelpFile = MyHelp
Application.ThisWorkbook.VBProject.HelpContextID = 0
Me.HelpContextID = 3000
End Sub

MP

"Claudio" a écrit
dans le message de

news:3eac01c48ff6$f0c16730$
Merci beaucoup pour la rapidité et la précision de la
réponse.

Pour ce qui est du .chm, étant donné qu'XL le propose dans
les types de fichiers à associer, je pensais que ce serait
OK.

J'avais essayé d'associer du code ;
pas de soucis pour ajouter une ligne de menu qui pointe
sur la première page de l'aide.

Par contre, je ne sais pas comment faire pour appeler la
page d'aide associée à un écran particulier sans ajouter
de bouton à la userform (je connais le code, avec le
ContextId, mais je n'arrive pas à l'associer à l'appui sur
la touche "F1").

Si tu as une idée ...

Claudio
-----Message d'origine-----
Bonsoir Claudio;
As-tu bien renseigné le nom du fichier d'aide associé à
ton projet dans les

propriétés du projet ?
Cela ne fonctionne qu'avec des fichiers d'aide .hlp et
non pas des fichiers

d'aide .chm !!!
Tu pourrais t' en sortir en ajoutant un bouton d'aide qui
exécuterait

l'affichage de l'aide au moyen d'une fonction API comme
dans l'exemple

suivant:
(J'ai mis les 2 possibilités .chm et .hlp, tu feras le
ménage...)


Option Explicit
Private Declare Function FindWindow& Lib "user32"
Alias "FindWindowA" _

(ByVal lpClassName$, ByVal lpWindowName$)
'// Fichiers d'aide .hlp
Private Declare Function WinHelp& Lib "user32.dll"
Alias "WinHelpA" _

(ByVal hWndMain&, ByVal lpHelpFile$, ByVal uCommand&,
dwData As Any)

'// Fichiers d'aide .chm
Private Declare Function HtmlHelp& Lib "hhctrl.ocx"
Alias "HtmlHelpA" _

(ByVal hwndCaller&, ByVal pszFile$, ByVal uCommand&,
dwData As Any)

'// Pour info, constantes .chm:
'Const HH_DISPLAY_TOPIC = &H0
'Const HH_SET_WIN_TYPE = &H4
'Const HH_GET_WIN_TYPE = &H5
'Const HH_GET_WIN_HANDLE = &H6
' Display string resource ID or text in a popupwin.
'Const HH_DISPLAY_TEXT_POPUP = &HE
' Display mapped numeric value in dwdata
'Const HH_HELP_CONTEXT = &HF
' Text pop-up help, similar to WinHelp's HELP_CONTEXTMENU
'Const HH_TP_HELP_CONTEXTMENU = &H10
' Text pop-up help, similar to WinHelp's HELP_WM_HELP
'Const HH_TP_HELP_WM_HELP = &H11

Sub AidePerso()
' Affiche le sommaire de l'aide
ShowChm "c:Retten.chm"
'ShowHelp "c:Retten.hlp"
' Affiche une rubrique particulière de l'aide
'ShowChm "c:Retten.chm", 1010
'ShowHelp "c:Retten.hlp", 1010
End Sub

Sub ShowChm(ChmFile$, Optional idx& = 0)
Dim hWnd&
hWnd = FindWindow(vbNullString, Application.Caption)
Call HtmlHelp(hWnd, ChmFile, &H0, ByVal idx)
End Sub

Sub ShowHlp(HlpFile$, Optional idx& = 0)
Dim i&, hWnd&
If idx Then i& = &H1 Else i& = &H3
hWnd = FindWindow(vbNullString, Application.Caption)
Call WinHelp(hWnd, HlpFile, i, ByVal idx)
End Sub

MP

"Claudio" a écrit
dans le message de

news:382501c48f79$68f72a60$
Hi all,
pour un fichiers xls contenat une grosse macro, j'ai
associé un fichier d'aide en ligne (.chm).
Pour chaque userform concernée, j'ai associé un
HelpContextId, comme indiqué dans la doc.
En principe, lorsque je presse F1, çà devrait m'afficher
qqch, mais balle peau ...

Manquerait-il qqch ou bien la vérité est-elle ailleurs ?

D'avance merci

Claudio


.




.