Bureautique Valid XHTML 1.1Cette page est conforme à la norme CSS!Mise à jour 04-2010
SOMMAIRE

Présentation
Excel
Access
Outlook
Fichiers d'aide
Télécharger les exemples

PRESENTATIONRetour en haut de page


Cette page présente des outils destinés à améliorer et automatiser la bureautique Microsoft Office.
  • Excel,
  • Word,
  • Access,
  • Outlook
Un chapitre est aussi consacré aux fichiers d'aide Windows (extension chm), fournis avec de nombreux logiciels, et que l'on peut créer soi-même.

Les caractéristiques principales de la suite sont :
  • la communication entre les divers outils de la suite,
  • les macros en langage VBA.
Le VBA, langage dérivé du basic, est décliné dans chaque outil de la suite; seuls changent les objets intégrés auxquels on peut accéder par programme : classeur, feuille de calcul, graphe pour excel, document pour word, boîtes mail, calendrier pour outlook...
Les différents outils peuvent facilement communiquer entre eux :
  • Access, par exemple, peut commander Excel de manière transparente; on peut ainsi bénéficier de la puissance de ce dernier pour réaliser automatiquement des graphiques à partir de données gérées dans Access.
  • Excel peut déclencher, à partir des données contenues dans ses feuilles, la mise à jour et l'impression de documents Word.


Le VBS, langage de script similaire, remplace avantageusement les antiques commandes dos dans des fichiers .bat
Il peut d'ailleurs aussi piloter la suite Office.

EXCELRetour en haut de page

Excel est l'outil bureautique le plus célèbre et peut-être le plus utilisé de la suite.
Ses fonctions intégrées sont nombreuses, dont beaucoup peu connues ou peu maîtrisées.

Ci-dessous quelques astuces, faisant appel à ces fonctions intégrées ou à des macros en VBA.

Feuille multilingue

Il est assez facile de réaliser une feuille multilingue en utilisant la fonction DECALER.
Celle-ci permet de spécifier non pas une cellule fixe, mais une cellule de base, à laquelle on ajoute un décalage (en ligne ou colonne), qui peut être obtenu par n'importe quel moyen de calcul approprié.

Ainsi, dans une partie (cachée) on dispose de la traduction des différents termes de la feuille en diverses langues.
L'utilisation judicieuse de boutons radio de sélection calcule un décalage en nombre de colonnes (0 pour le français, 1 pour l'anglais, ...)
Les termes visibles de la feuille font appel à ces termes cachés, en y ajoutant le décalage voulu.

Voir le fichier multilingue.xls

Graphe variable

Un problème souvent rencontré est que l'ajout de données dans une feuille ne redimensionne pas automatiquement le graphe, ou au contraire, si l'on a prévu une cellule vide, augmente la taille de celui-ci sans fin.

Une solution est de copier dans une feuille annexe les données que l'on veut afficher, si possible de manière automatique, sans utiliser de VBA.

L'exemple fourni présente la méthode.
Il s'agit de représenter la collecte quotidienne de l'espace disque de l'AS400, dont on veut visualiser les 30 derniers jours.
Les données de base sont dans une feuille mesures, les données à représenter dans une feuille data.
La solution est de créer dans cette feuille une colonne qui donne le n° de ligne des 30 dernières données de la feuille de base.
A partir de ces n° de ligne, la fonction INDIRECT recherche les valeurs dans la feuille de base.
Les n° de lignes sont identifiés à partir de la dernière ligne de données, devant laquelle on procède aux insertions de nouvelles données.

Voir le fichier graphe.xls

Recherche en tableaux

A de nombreuses reprises, il est nécessaire de recouper les informations d'un classeur, en réalisant des recherches sur les différentes feuilles.

L'exemple présenté ici opère de plusieurs manières, en utilisant les fonctions RECHERCHEV, RECHERCHEH, EQUIV et INDIRECT.

Voir le fichier recherche_tableau.xls

ACCESSRetour en haut de page

Access constitue la base de données de la suite Office.
Il s'agit d'une base de données simple d'utilisation, accessible à plusieurs niveaux, allant d'une utilisation de base, un peu à l'image des feuilles excel, à une programmation complète à base de formulaires personnalisés, en passant par la génération de formulaires et la création graphique de requêtes. Elle permet aussi de se connecter facilement, via ODBC, à d'autres SGBD, tout en conservant sa simplicité d'utilisation.
Ses performances sont réduites vis à vis d'autres SGBD, tant sur le plan des volumes qu'elle peut traiter (une table de 100.000 lignes semble une limite), que sur les fonctionnalités (triggers, journalisation, etc...), ou encore sa robustesse.

Cependant, pour nombre d'applications ayant à traiter des volumes moyens de données, elle présente l'avantage d'être rapide à maquetter et assez simple à programmer. On peut même y réaliser de la programmation objet, quoique limitée (pas d'héritage ...).

Ci-dessous quelques exemples d'applications.

Documentation d'applications

La documentation native d'access peut pêcher par sa "rusticité".
Cet outil permet d'obtenir des listes et des fichiers adaptés à une documentation concise et claire.
Après avoir choisi la base à analyser, à travers un formulaire nommé Documentation, il offre plusieurs fonctions :
  • Création des descriptions de table : liste la définition des tables et de leurs champs, ainsi que leurs index. La définition des champs (ou colonnes) est extraite des fichiers systèmes cachés (nom commençant par "msys") présents dans chaque base.
  • Une fois la création effectuée, on peut accéder à 3 listes : les tables et leurs champs, les index des tables et la création de fichiers de scripts sql permettant la création des tables et des index (fichiers outils_req.txt et outils_idx.txt).
  • Liste des objets de la base : dresse la liste des tables, des formulaires, des requêtes, des états, des macros, des modules de code
  • Liste des préfixes et du dictionnaire.
    Ces outils sont spécifiques à la conception de mes bases de données. Par exemple, le champ "nom du client" s'appelle tout simplement "nom". Même chose pour le nom d'un fournisseur. Ce sont là des champs référencés (virtuellement car Access n'offre pas cette possibilité) dans un dictionnaire, afin de conserver une cohérence entre les diverses tables.
    En revanche, afin de clarifier la distinction, on adjoint aux noms des champs un préfixe (par exemple CL pour les clients, FO pour les fournisseurs).
    Les listes obtenues ne sont que des aides à la conception de la base, Access n'offrant aucune fonctionnalité automatique à ce sujet.
  • Les deux dernières fonctions exportent le code VBA des formulaires et des modules de code dans des fichiers excel (outils_code.xls et outils_modules.xls), pour réaliser par exemple des analyses croisées.
Voir le fichier outils.mdb

OUTLOOKRetour en haut de page

Outlook, comme les autres outils d'Office, peut être automatisé à base de macros, qui permettent d'accéder à de nombreuses fonctionnalités du produit (mails, notes, contacts ...).

Le code des macros est contenu dans un seul fichier, nommé vbaproject.otm, situé le répertoire de l'utilisateur dans le dossier application data/microsoft/outlook.
L'installation sur un poste doit donc se faire par copier/coller du code dans ce fichier.

Ci-dessous quelques lignes de code permettant de réaliser diverses fonctions.

Envoi de mail avec pièces jointes

Sub envoi_mail()

    '*** Définir les objets nécessaires
    Dim ol As Outlook.Application
    Dim ns As Outlook.NameSpace
    
    Dim mesmails As Outlook.Items
    Dim monmail As Outlook.MailItem
    Dim monbody

    Dim myattachments As Outlook.Attachments
    Dim dest As Outlook.Recipient
    
    '*** Définir l'application outlook
    Set ol = CreateObject("Outlook.Application")
    Set ns = ol.GetNamespace("MAPI")
    
    ' ... et le dossier d'envoi des mails (Envoyés)
    Set mesmails = ns.GetDefaultFolder(olFolderOutbox).Items
    
    '*** Créer le mail
    '	... vierge
    Set monmail = mesmails.Add(olMailItem)
    
    ' ... le compléter
    monmail.Subject = "Sujet du mail"
    
    monbody = "Bonjour," & vbCrLf & vbCrLf
    monbody = monbody & "Voici le fichier ....." & vbCrLf & vbCrLf
    monbody = monbody & "Cordialement," & vbCrLf & "Didier JACQUEMART" & vbCrLf        
    monbody = monbody & "Tel 01....." & vbCrLf
    monmail.Body = monbody
    
    Set myattachments = monmail.Attachments
    myattachments.Add ("S:\....\fichier.xls")
    
    ' ... ajouter les destinataires
    Set dest = monmail.Recipients.Add("philippe.aaaa@b.fr")
    dest.Type = olTo
    Set dest = monmail.Recipients.Add("jean-marie.bbbb@b.fr")
    dest.Type = olTo
    ' ... en copie
    Set dest = monmail.Recipients.Add("nadia.cccc@b.fr")
    dest.Type = olCC
    
    '*** Visualiser et envoyer
    monmail.Display:' afficher le mail avant envoi (facultatif)
    monmail.Send
    
End Sub

Recherche de contact

Cette procédure recherche un contact par numéro de téléphone et par nom de famille.
Elle fournit, via une activation d'excel par outlook pour illustrer la communication entre applications, le détail des propriétés du contact trouvé (fichier contact_outlook.xls dans le téléchargement).

Attention : la procédure accède aux contacts locaux et non à ceux stockés sur le serveur.

Sub recherche_contact()
    
    '*** Définir les objets nécessaires
    Dim myContacts As Outlook.Items
    Dim myItems As Outlook.Items
    Dim myItem As Outlook.ContactItem
    
    '*** Définir l'application outlook
    Set ol = CreateObject("Outlook.Application")
    Set ns = ol.GetNamespace("MAPI")
    
    '*** Recherche d'un contact sur n° de téléphone bureau
    Set myContacts = ns.GetDefaultFolder(olfoldercontacts).Items
    Set myItems = myContacts.Restrict("[BusinessTelephoneNumber] = '(01) 02 03 04 05'")
    For Each myItem In myItems
        If (myItem.Class = olcontact) Then
            MsgBox myItem.LastName & ": " & myItem.BusinessTelephoneNumber, , "Sur n° téléphone"
        End If
    Next

    '*** Recherche d'un contact sur son nom
    Set myItems = myContacts.Restrict("[lastname] = 'ROBERT'")
    For Each myItem In myItems
        If (myItem.Class = olcontact) Then
            MsgBox myItem.FullName & ": " & myItem.BusinessTelephoneNumber, , "Sur nom"
            cre_excel myItem:' copier les propriétés du contact dans un fichier excel
        End If
    Next

End Sub



Sub cre_excel(pmi)

    Dim xl
    Dim cl
    Dim i
    
    '*** Ouvrir excel et un classeur vierge
    Set xl = CreateObject("excel.Application")
    Set cl = xl.workbooks.Add
	xl.Visible = True

	'*** Recopier toutes les propriétés du contact dans la feuille
	For i = 0 To pmi.ItemProperties.Count - 1
        xl.cells(i + 1, 1) = pmi.ItemProperties.Item(i).Name
        On Error Resume Next
        xl.cells(i + 1, 2) = "Erreur de conversion"
        xl.cells(i + 1, 2) = pmi.ItemProperties.Item(i).Value
        On Error GoTo 0
    Next i
    
    '*** Fermer le classeur et excel
    cl.Close
    xl.Close

End Sub

Gestion des notes (post-it)

Quelques exemples de manipulation des notes jaunes.

Sub liste_notes()

    Dim mesnotes As Outlook.Items
    Dim manote As Outlook.NoteItem
    Dim ff As Outlook.MAPIFolder
    
    Set ol = CreateObject("Outlook.Application")
    Set ns = ol.GetNamespace("MAPI")
    
    '*** Lister les notes
    Set mesnotes = ns.GetDefaultFolder(olfoldernotes).Items
    For Each manote In mesnotes
        If (manote.Class = olNote) Then
            MsgBox manote.Subject & vbCrLf & manote.Body
        End If
    Next
    
    '*** Accès à une note particulière
    Set manote = mesnotes(2)
    manote.Body = UCase(manote.Body)
    manote.Display
    MsgBox manote.Subject
    manote.Close oldiscard
  
    '*** Création/suppression d'une note
    Set manote = mesnotes.Add(olnoteitem)
    manote.Body = "Création" + vbCrLf + "de note par add"
    manote.Display
    manote.Delete
  
    '*** Affichage du dossier des notes
    Set ff = ns.GetDefaultFolder(olfoldernotes)
    ff.Display
    MsgBox "Onglet des notes affiché"
    ff.GetExplorer.Close
    
End Sub

Fichiers d'aideRetour en haut de page

Windows met en oeuvre l'aide intégrée dans les logiciels sous forme de fichier d'extension .chm.
Un outil (graphique) fourni par Microsoft (htmlhelp.exe) permet de définir, au sein d'un projet, les différents fichiers nécessaires :
  • les pages d'aide, au format html,
  • le sommaire du fichier, organisé en arborescence extension hhc),
  • le dictionnaire des termes (extension hhk),
  • les caractéristiques du projet (extension hhp : fenetres, options, emplacement ...
Tous ces fichiers sont de simples fichiers texte que l'on peut créer par n'importe quel moyen.
Les fichiers sont compilés ensemble et le résultat est un fichier d'aide de taille très réduite par rapport aux données initiales.
Ci-dessous un comparatif de taille des documents :
 WordHtmlChm
Texte pur408 Ko117 Ko40 Ko
Texte plus images11.200 Ko2.390 Ko1.764 Ko

Les fichiers html sont obtenus par word, en sauvegardant le fichier en format html.

L'outil peut être utilisé de 2 manières :
  • en batch, en appelant directement le compilateur d'aide (hhc.exe),
  • en interactif, en appelant l'interface graphique (hhw.exe). Cette dernière est associée automatiquement aux fichiers d'extension hhp.
Voir l'aide fournie avec le logiciel pour le fonctionnement détaillé des diverses options. Ses fonctionnalités sont plus étendues que les simples exemples présentés ici. On peut ajouter des scripts au fichier d'aide, des fenêtres popup ...


Création automatique de fichiers

Cet exemple crée un catalogue à partir d'une base de données (ici access). Il pourrait l'être à partir de fichiers excel ou autres.
Le code est écrit en html/javascript pour la page d'accueil, et en VBS pour le traitement, lequel peut être lancé directement, sans l'interface graphique du navigateur internet.

La base de données représente une bibliothèque simplifiée, dont les livres sont définis par leur titre, leur auteur et le type de littérature.
L'objet est de créer un catalogue, composé ainsi :
  • le sommaire présente une arborescence type - auteurs pour ce type,
  • une page par type/auteur donnant la liste des livres concernés
Le programme génère automatiquement les pages par type/auteur, ainsi que le sommaire.
Ensuite la compilation est lancée et le résultat affiché.

Le principe est le suivant : le code html des pages à créer est distribué au travers de différents fichiers, où les variables sont identifiées par des mots-clés débutant par un $. Lors de la lecture des données de la base, les variables sont remplacées par les valeurs réelles.

Voir le détail des fichiers téléchargés pour l'utilisation de chacun. Le programme vbs est largement commenté.

Création manuelle d'aide

Cet exemple crée l'aide associée à un logiciel.

Dans ce cas, les fichiers constituant l'aide sont constitués sous Word, en sauvegardant en format page web filtrée. Quelques exemples sont fournis.
Les autres caractéristiques sont gérées via l'outil de conception.
On y retrouve les fichiers hhp (projet) et hhc (sommaire).
Le fichier hhc est similaire à celui généré automatiquement dans l'exemple précédent.
Le fichier de projet lui, est plus complexe, car il permet d'intégrer une aide contextuelle dans le logiciel utilisateur destinataire.

Sa structure est la suivante :
[OPTIONS]
Compatibility=1.1 or later
Compiled file=tractions.chm
Contents file=tractions.hhc
Default Window=w1
Default topic=Introduction.htm
Display compile progress=No
Full-text search=Yes
Language=0x40c Français (France)
Title=Aide tractions interPF

[WINDOWS]
w1="Aide tractions interPF","tractions.hhc",,"Introduction.htm","Introduction.htm",,,,,0x42120,,0x304e,,,,,,,,0

[FILES]
parametres.htm
extractions.htm
form_Import - mouvements interPF.htm
...

[ALIAS]
IDH_extractions=extractions.htm
IDH_importinterpf_charg=form_Import - mouvements interPF_charg.htm
IDH_parametres=parametres.htm
...

[MAP]
#include tractions.h

[INFOTYPES]

La section [FILES] liste les fichiers html intégrés dans l'aide.
La section [ALIAS] crée des liens avec les pages html. Il semble que leur nom doive commencer par IDH_.
La section [MAP] intègre un fichier qui définit les valeurs d'appel de ces liens, à partir du logiciel utilisateur.

Le logiciel utilisateur est ici constitué sous access. Dans les propriétés de chaque formulaire concerné, on définit le nom du fichier d'aide (tractions.chm) et le n° de la rubrique d'aide (issu de tractions.h) qui sera appelée par la touche d'aide.

Le fichier des valeurs d'appel (tractions.h) donne les équivalences entre les rubriques d'aide et leur n° d'appel dans le logiciel utilisateur.
#define IDH_parametres 100
#define IDH_importinterpf_charg 220
#define IDH_extractions 400
...