Re : Créer une Function
Bonjour
C'était très bien expliqué sur le site de Laurent Longre, site qui est hélas en rade depuis un bon moment. Laurent m'a autorisé il y a déjà un bon moment à mettre une copie de son site sur Excelabo mais je n'ai toujours pas eu le temps de m'en occuper...
Mais de toutes façons ses explications étaient pour une version antérieure à 2003. Sur 2007 et +, je ne pense pas que la méthode reste valable.
Voici (sans les images...) le texte de Laurent :
Le fichier d'aide décrit ici est celui qui accompagne la macro complémentaire etiquettes.xla, macro qui permet d'ajouter des étiquettes sur les points d'un graphe.
Le fichier d'aide
Il existe deux formats de fichier d'aide :
- Le format
HLP est l'ancien format utilisé sous Windows 3 et Windows 95. Il est basé sur des pages d'aide au format RTF. Il présente encore quelques avantages, en particulier son chargement très rapide, mais il n'évolue plus depuis quelques années et offre un éventail de possibilités plutôt réduit.
- Le format
CHM est utilisé universellement depuis Windows 98 et repose sur des pages d'aide écrites en HTML. C'est le format retenu ici.
Il existe beaucoup de compilateurs d'aide au format CHM. Celui que j'utilise est
HTML Help Workshop, téléchargeable gratuitement
sur le site Microsoft.
Voici les grandes lignes de ce qu'il faut savoir pour créer un nouveau fichier d'aide avec HTML Help Workshop ("HHW") et pour l'utiliser à partir de notre application. Pour plus de détails, voir la documentation fournie.
Tous les fichiers utilisés pour fabriquer l'aide de la macro Etiquettes sont dans le dossier "Fichier d'aide".
Création des pages HTML et du fichier projet
Avant de créer le fichier d'aide proprement dit, il faut créer les rubriques d'aide. Ce sont simplement des pages HTML classiques, que vous pouvez composer avec n'importe quel éditeur approprié. La seule précaution à prendre est de bien insérer un titre sur chaque page (balise
<TITLE>). Ces titres seront utilisés par HHW pour identifier les pages, et éventuellement pour l'index de l'aide.
Le fichier d'aide de la macro Etiquettes contient trois pages HTML : Sommaire.htm, Etiquettes.htm et Repère.htm, que vous pouvez éditer avec Frontpage, par exemple.
HHW rassemble toutes les informations nécessaires pour créer le fichier d'aide dans un fichier projet, d'extension
HHP (pour notre macro c'est le fichier
Etiquettes.hhp). Pour créer le fichier projet, à partir de HHW :
- Aller dans le menu File => New
- Sélectionner Project cliquer sur Suivant
- Donner l'emplacement et le nom du fichier projet
- Indiquer les types de fichiers déjà existants à inclure (ne cocher ici que HTML Files)
- Cliquer sur Suivant, et ensuite sur Add pour ajouter les pages d'aide HTML déjà créées
- Cliquer sur Terminer
La fenêtre principale de HHW se présente ainsi :
L'onglet
Project contient toutes les informations sur le contenu du fichier d'aide et sur son apparence (type de fenêtre, boutons etc.) L'onglet
Contents permet de construire le sommaire (fichier d'extension
HHC) et l'onglet
Index de créer un index (fichier
HHK). Le projet d'aide de la macro Etiquettes contient un sommaire (fichier
Etiquettes.hhc) mais pas de fichier d'index.
Le fichier projet est en fait un simple fichier texte constitué de différentes sections, un peu comme un fichier INI, dont le contenu est affiché à gauche.
La barre d'outils à gauche de l'onglet
Project permet de modifier le contenu du projet :
| Modifier les options du projet |
| Ajouter ou supprimer des pages d'aide |
| Modifier l'aspect de la fenêtre
Créer des identificateurs pour lier les pages d'aide à l'application
|
| |
| Voir la source du fichier HTML sélectionné |
| Sauvegarder le projet |
| Sauvegarder et compiler le projet |
Une fois toutes les pages d'aide HTML ajoutées au projet, il suffit de définir la page s'affichant par défaut (cliquer sur et sélectionner la page dans la liste déroulante
Default de l'onglet
Files) et de compiler le projet pour obtenir déjà un fichier d'aide CHM opérationnel.
Création du sommaire
Pour fabriquer un sommaire, allez dans l'onglet
Contents. Vous pouvez ajouter des chapitres ("headings") par l'icône ou des pages par l'icône . Pour modifier après-coup un chapitre ou une page, cliquer sur et sur pour le supprimer.
Les icônes présentant des flèches permettent de déplacer les chapitres ou les pages (par exemple décaler une page vers le début du sommaire, ou extraire une page d'un chapitre etc.)
Quand on clique sur l'icône d'ajout de page, la boîte de dialogue suivante est affichée :
- Saisir le titre dans la zone Entry title
- Cliquer sur Add..., sélectionner la page HTML liée à ce sujet et valider.
La liste des pages ne contient pas les noms des fichiers HTML, mais leurs titres, correspondant aux balises
<TITLE>. D'où l'importance de bien choisir le texte affiché dans ces balises.
La sélection d'une page n'est pas nécessaire pour les chapitres, mais il vaut mieux en prévoir une.
Liaison entre le fichier d'aide et l'application
Pour que la macro puisse afficher une page du fichier d'aide, par exemple par clic sur un bouton "Aide" ou par appui sur la touche F1, deux nouvelles manipulation est nécessaire : il faut associer les fichiers HTML à des alias et créer une liste d'identificateurs de contexte ("Context ID").
1) Création des alias
Il faut tout d'abord créer des alias pour les différentes pages HTML contenues par le fichier d'aide. Un alias est une simple chaîne de caractères identifiant un fichier HTML. Cliquer sur l'icône et activer l'onglet
Alias. La boîte de dialogue suivante s'affiche :
Cliquer sur
Add, Edit ou
Remove pour respectivement ajouter, modifier ou supprimer un alias.
Les alias se présentent toujours sous la forme : Alias=Nom_fichier.htm. Pour plus de clarté, on préfixe souvent les alias par "
IDH_" mais ça n'a rien d'obligatoire. Quand vous cliquez sur
Add, tapez le nom de l'alias dans la zone de texte et sélectionnez le fichier correspondant dans la liste déroulante.
2) Création des identificateurs de contexte
Les identificateurs de contexte sont de simples nombres associés aux différentes pages d'aide, et plus précisément à leurs alias. Ce sont ces nombres qui vont être utilisés par VBA pour afficher une page particulière du fichier d'aide.
On peut définir ces nombres directement dans la section
[MAP] du fichier projet, ou les définir dans un fichier texte d'extension
.h (voir le fichier Etiquettes.h). Le contenu de ce fichier texte doit se présenter sous cette forme :
#define Alias1 Identificateur1
#define Alias2 Identificateur2
etc.
Le fichier d'aide de la macro Etiquettes contient trois pages HTML, Sommaire.htm, Etiquettes.htm et Repère.htm, dont j'ai défini les alias ainsi :
IDH_Sommaire=Sommaire.htm
IDH_Etiquettes=Etiquettes.htm
IDH_Repère=Repère.htm
J'ai décidé d'associer ces pages d'aide respectivement aux identificateurs 100, 200 et 300 (ce choix est totalement arbitraire). Le fichier
Etiquettes.h contient donc :
#define IDH_Sommaire 100
#define IDH_Etiquettes 200
#define IDH_Repère 300
Pour inclure le fichier
Etiquettes.h dans le projet :
- Cliquer sur l'icône de l'onglet Project
- Dans l'onglet Map, cliquer sur Header file...
- Sélectionner le fichier .h et valider
- Recompiler le projet
Appeler une page d'aide à partir de VBA
La boîte de dialogues
usfEtiquettes contient un bouton "
Aide" destiné à afficher la page Etiquettes.htm du fichier d'aide. Sous VBA, une page d'aide s'affiche par la méthode
Application.Help, dont la syntaxe est :
Application.Help HelpFile, HelpContextID L'argument
HelpContextID représente l'identificateur contextuel de la page à afficher. Comme nous avons choisi l'identificateur 200 (voir paragraphe précédent), notre page d'aide sera affichée par cette simple instruction :
Private Sub ShowHelp() Application.Help ThisWorkbook.Path & "\Etiquettes.chm", 200 End Sub Private Sub btnAide_Click() ShowHelp End Sub
Réagir à la touche F1
Le UserForm
usfEtiquettes est fait de telle sorte que le contrôle
RefEdit1 conserve toujours le focus tant que la boîte de dialogue n'est pas fermée. Pour que l'application affiche la page d'aide quand l'utilisateur appuie sur F1, on peut donc utiliser sa procédure événementielle
KeyDown et comparer la touche activée au code de la touche F1 (112) :
Private Sub RefEdit1_KeyDown(KeyCode As Integer, ByVal Shift As Integer) If KeyCode = 112 Then ShowHelp End Sub Dans des UserForm plus complexes comportant davantage de contrôles, il faudra compléter de la même manière toutes les procédures
KeyDown de ces contrôles.