Vous êtes sur la page 1sur 646

Microsoft®

EXCEL 2003
VBA
Curtis Frye
Wayne S. Freeze
et Felicia K. Buckingham

Adapté de l’anglais par :


Véronique Campillo
Véronique Warion
et Emmanuelle Burr
Les programmes figurant dans ce livre, et éventuellement sur la disquette ou le CD-ROM
d’accompagnement, sont fournis gracieusement sous forme de code source, à titre d’illustration.
Ils sont fournis en l’état sans garantie aucune quant à leur fonctionnement une fois compilés,
assemblés ou interprétés dans le cadre d’une utilisation professionnelle ou commerciale. Ils
peuvent nécessiter des adaptations et modifications dépendant de la configuration utilisée.
Microsoft Press ne pourra en aucun cas être tenu responsable des préjudices ou dommages de
quelque nature que ce soit pouvant résulter de l’utilisation de ces programmes.
Tous les efforts ont été faits pour fournir dans ce livre une information complète et exacte à la
date de la parution. Néanmoins, Microsoft Press n’assume de responsabilités ni pour son
utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes qui
pourraient résulter de cette utilisation.

Microsoft Internet Explorer, Windows et Excel sont soit des marques déposées, soit des
marques de Microsoft Corporation aux États-Unis ou/et d’autres pays.

Copyright 2005 by Microsoft Corporation.

Original English language edition Copyright © 2004 by Curtis Frye, Wayne S. Freeze and Felicia
K. Buckingham. All rights published by arrangement with the original publisher, Microsoft
Press, a division of Microsoft Corporation, Redmond, Washington, U.S.A.

Titre U.S. : MICROSOFT OFFICE EXCEL 2003 PROGRAMMING, INSIDE OUT


ISBN U.S. : 0 7356 1985 9

Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l’auteur


ou de ses ayants droit ou ayants cause est illicite selon le Code de la propriété intellectuelle
(Art L 122-4) et constitue une contrefaçon réprimée par le Code pénal. • Seules sont autorisées (Art
L 122-5) les copies ou reproductions strictement réservées à l’usage privé du copiste et non destinées
à une utilisation collective, ainsi que les analyses et courtes citations justifiées par le caractère
critique, pédagogique ou d’information de l’œuvre à laquelle elles sont incorporées, sous réserve,
toutefois, du respect des dispositions des articles L 122-10 à L 122-12 du même Code,
relatives à la reproduction par reprographie.

Édition et diffusion : Dunod


Distribution : Interforum
Traduction : Véronique Campillo, Véronique Warion, Emmanuelle Burr
Mise en page : IID
ISBN : 978 2 10 055217 7
Sommaire
À propos de ce livre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .i
Exigences d’équipement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .i
Support technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .i
Conventions et signalétique de ce livre . . . . . . . . . . . . . . . . . . . . . .iii
Conventions de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii
Conventions visuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii

Partie 1
Préliminaires
Chapitre 1
Les nouveautés d’Excel 2003 3
Utilisation des fonctions statistiques optimisées . . . . . . . . . . . . 3
Création de documents intelligents . . . . . . . . . . . . . . . . . . . . . . 6
Création d’espaces de travail intelligents . . . . . . . . . . . . . . . . . . 7
Mise en œuvre de la gestion des droits
relatifs à l’information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Comparaison de classeurs côte à côte . . . . . . . . . . . . . . . . . . . 8
Utilisation du volet Recherche . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Exploitation des fonctionnalités XML étendues . . . . . . . . . . . . . 10
Créer des listes Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Mapper des données Excel avec des schémas XML . . . . . 12
Publier des feuilles de calcul avec
les Compléments Office 2003 . . . . . . . . . . . . . . . . . . . . . 13
Chapitre 2
Tour d’horizon 15
Classeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Feuilles de calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Cellules et plages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
L’interface Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Formules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Partie 2
Visual Basic pour Applications
Chapitre 3
Exploration de Visual Basic
pour Applications 29
Tour d’horizon de la programmation
orientée objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

i
Sommaire
Méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Événements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Collections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Le travail avec les macros. . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Enregistrer et afficher des macros . . . . . . . . . . . . . . . . . . 33
Exécuter une macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Déboguer une macro . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Mettre en œuvre la sécurité des macros
et des signatures numériques . . . . . . . . . . . . . . . . . . . . . 40
Chapitre 4
Démarrage de la programmation VBA 47
Introduction à Visual Basic Editor . . . . . . . . . . . . . . . . . . . . . . 47
Ouvrir Visual Basic Editor . . . . . . . . . . . . . . . . . . . . . . . . 47
Tour d’horizon de Visual Basic Editor . . . . . . . . . . . . . . . . 48
Personnaliser Visual Basic Editor . . . . . . . . . . . . . . . . . . 55
Gestion des fenêtres Code . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Gérer les fenêtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Ajouter du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Notes sur le style de programmation
et la lisibilité du code . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Développement de projets avec l’Explorateur de projets . . . . . . 62
Créer des modules VBA . . . . . . . . . . . . . . . . . . . . . . . . . 62
Supprimer des modules VBA . . . . . . . . . . . . . . . . . . . . . . 63
Copier des modules entre projets . . . . . . . . . . . . . . . . . . 64
Déclaration des variables, constantes et types de données . . . . 64
Déclarer des variables . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Définir les types de données . . . . . . . . . . . . . . . . . . . . . . 65
Définir les constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Gérer les chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Gérer les dates et les heures . . . . . . . . . . . . . . . . . . . . . 67
Gérer les variables Variant et convertir
des types de données . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Portée et durée de vie des variables . . . . . . . . . . . . . . . . 69
Assignation de valeurs aux variables . . . . . . . . . . . . . . . . . . . . 71
Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Créer un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Créer des tableaux multidimensionnels . . . . . . . . . . . . . . 73
Création de tableaux dynamiques . . . . . . . . . . . . . . . . . . . . . . 73
Écriture à l’écran et acceptation des entrées utilisateur . . . . . . 74
Créer une boîte de message . . . . . . . . . . . . . . . . . . . . . . 75
Créer une boîte de saisie . . . . . . . . . . . . . . . . . . . . . . . . 79
Définition de variables objet . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Création de types de données personnalisés . . . . . . . . . . . . . . 81
Commande With…End With . . . . . . . . . . . . . . . . . . . . . . 82
Contrôle de la progression du programme . . . . . . . . . . . . . . . . 82
Instructions de sélection. . . . . . . . . . . . . . . . . . . . . . . . . 82

ii
Sommaire
Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Instruction GoTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Chapitre 5
Création de procédures Sub et Function 95
Définition de procédures Sub . . . . . . . . . . . . . . . . . . . . . . . . . 95
Définir la portée d’une procédure Sub . . . . . . . . . . . . . . 101
Exécuter une procédure Sub à partir
d’une autre procédure . . . . . . . . . . . . . . . . . . . . . . . . . 103
Conserver les valeurs entre les appels de procédure . . . 108
Définition de procédures Function . . . . . . . . . . . . . . . . . . . . . 109
Créer une procédure Function . . . . . . . . . . . . . . . . . . . . 110
Exécuter des procédures Function . . . . . . . . . . . . . . . . . 111
Passer des arguments aux procédures. . . . . . . . . . . . . . 112
Passer des arguments nommés . . . . . . . . . . . . . . . . . . 114
Organisez votre réussite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Partie 3
Le modèle d’objet Excel
Chapitre 6
L’objet Application 119
Introduction à l’objet Application . . . . . . . . . . . . . . . . . . . . . . 120
Propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Chapitre 7
Classeurs et feuilles de calcul 143
La collection Workbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Créer de nouveaux classeurs . . . . . . . . . . . . . . . . . . . . 143
Ouvrir des classeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Enregistrer des classeurs . . . . . . . . . . . . . . . . . . . . . . . 149
Propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Imprimer et prévisualiser les classeurs . . . . . . . . . . . . . 162
Les collections Sheets et Worksheets . . . . . . . . . . . . . . . . . . 164
Propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Méthodes des feuilles de calcul . . . . . . . . . . . . . . . . . . 172
Chapitre 8
Plages et cellules 179
Manipulations de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Localiser la plage active . . . . . . . . . . . . . . . . . . . . . . . . 179
Sélectionner une plage . . . . . . . . . . . . . . . . . . . . . . . . . 180

iii
Sommaire
Référencement des plages . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Référencer les plages de la feuille de calcul active . . . . . 184
Référencer les plages d’une feuille de calcul inactive . . . 185
Référencer les cellules d’une plage . . . . . . . . . . . . . . . . 185
Référencer des cellules avec la propriété Offset . . . . . . . 185
Définir une plage avec la propriété Cells. . . . . . . . . . . . . 189
Référencer des colonnes et des lignes. . . . . . . . . . . . . . 190
Référencer des groupes de cellules non contiguës . . . . . 190
Manipulation de groupes de cellules . . . . . . . . . . . . . . . . . . . 190
Dimensionner les cellules par programmation . . . . . . . . 190
Lier de deux plages . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Détecter les cellules vides . . . . . . . . . . . . . . . . . . . . . . 192
Plages nommées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Définir une plage nommée . . . . . . . . . . . . . . . . . . . . . . 194
Styles de notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Noms de plages réservés . . . . . . . . . . . . . . . . . . . . . . . 199
Copier des données entre des plages
et des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Validation des données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

Partie 4
Fonctions VBA avancées
Chapitre 9
Manipulation des données avec VBA 211
Texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Déterminer si la valeur d’une cellule est du texte . . . . . . 212
Préparer les données de chaîne pour le traitement . . . . . 214
Déterminer le nombre de caractères d’une chaîne . . . . . 215
Concaténer le texte de plusieurs cellules
ou variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Retourner le premier ou le dernier
caractère d’une chaîne . . . . . . . . . . . . . . . . . . . . . . . . . 219
Retourner des caractères arbitraires d’une chaîne . . . . . 221
Retrouver une chaîne au sein d’une autre chaîne . . . . . . 221
Nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Analyse des données . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Calculs financiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Dates et heures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Numéros de série des dates et des heures . . . . . . . . . . 233
Fonctions de date et d’heure. . . . . . . . . . . . . . . . . . . . . 234
Chapitre 10
Mise en forme d’objets Excel 239
Constantes et palette de couleurs Excel . . . . . . . . . . . . . . . . 239
Palette de couleur Excel standard . . . . . . . . . . . . . . . . . 244
La palette de couleurs Excel et le web . . . . . . . . . . . . . . 247

iv
Sommaire
Éléments de la feuille de calcul . . . . . . . . . . . . . . . . . . . . . . . 250
Polices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Cellules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Bordures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Chapitre 11
Création de macros complémentaires et de
compléments COM 259
Présentation des macros complémentaires . . . . . . . . . . . . . . 259
Boîte de dialogue Macro complémentaire. . . . . . . . . . . . . . . . 260
Installer une macro complémentaire . . . . . . . . . . . . . . . 261
Décharger une macro complémentaire . . . . . . . . . . . . . . 261
Création de macros complémentaires Excel . . . . . . . . . . . . . . 262
Créer une macro complémentaire . . . . . . . . . . . . . . . . . 262
Enregistrer la macro complémentaire . . . . . . . . . . . . . . . 263
Installer la macro complémentaire . . . . . . . . . . . . . . . . . 263
Collection AddIns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Tour d’horizon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
L’objet AddIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Création de compléments d’automatisation et COM . . . . . . . . 267
Interface IDTExtensibility2 . . . . . . . . . . . . . . . . . . . . . . . 268
Clés du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Construction d’un complément d’automatisation
avec Visual Basic 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Concevoir le complément . . . . . . . . . . . . . . . . . . . . . . . 271
Entrées du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Génération d’un complément COM
avec Visual Basic .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Exécuter l’assistant du complément partagé . . . . . . . . . 277
Modifier le modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Installer le complément . . . . . . . . . . . . . . . . . . . . . . . . 281
Chapitre 12
Événements 285
Activation et désactivation des événements . . . . . . . . . . . . . . 286
Événements Workbook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Événement Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Événement Activate . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Événement Newsheet . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Événement BeforeSave . . . . . . . . . . . . . . . . . . . . . . . . . 291
Événement Deactivate . . . . . . . . . . . . . . . . . . . . . . . . . 292
Événement BeforePrint . . . . . . . . . . . . . . . . . . . . . . . . . 292
Événement BeforeClose . . . . . . . . . . . . . . . . . . . . . . . . 293
Événements Worksheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Événement Change. . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Événement SelectionChange . . . . . . . . . . . . . . . . . . . . . 297
Événement BeforeRightClick . . . . . . . . . . . . . . . . . . . . . 297

v
Sommaire
Événements Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Affiner la surveillance de l’événement Application . . . . . . 299
Détecter si un classeur est ouvert . . . . . . . . . . . . . . . . . 300
Chapitre 13
Manipulation des fichiers 303
Localisation des fichiers externes . . . . . . . . . . . . . . . . . . . . . 303
Retourner tous les fichiers . . . . . . . . . . . . . . . . . . . . . . 304
Limiter la recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Retrouver des fichiers avec la boîte
de dialogue FileDialog. . . . . . . . . . . . . . . . . . . . . . . . . . 314
Écriture dans un fichier externe . . . . . . . . . . . . . . . . . . . . . . . 317
Lecture dans un fichier externe . . . . . . . . . . . . . . . . . . . . . . . 319
Recherche d’une valeur dans un fichier . . . . . . . . . . . . . . . . . 320
Chapitre 14
Développement de modules de classes 323
Qu’est-ce qu’un objet ?. . . . . . . . . . . . . . . . . . . . . . . . . 323
Qu’est-ce qu’une classe ?. . . . . . . . . . . . . . . . . . . . . . . 323
Que sont les propriétés ? . . . . . . . . . . . . . . . . . . . . . . . 324
Que sont les méthodes ? . . . . . . . . . . . . . . . . . . . . . . . 324
Que sont les événements ? . . . . . . . . . . . . . . . . . . . . . 324
Introduction aux modules de classe. . . . . . . . . . . . . . . . . . . . 325
Accéder aux objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Déclarer des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Objets et Nothing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Objets avec plusieurs variables objet . . . . . . . . . . . . . . . 327
Propriétés, méthodes et événements. . . . . . . . . . . . . . . . . . . 328
Propriétés, méthodes et événements :
Public ou Private ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Événements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Construction d’une classe . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Créer un module de classe . . . . . . . . . . . . . . . . . . . . . . 329
Définir les propriétés simples . . . . . . . . . . . . . . . . . . . . 330
Définir les routines de propriété . . . . . . . . . . . . . . . . . . 331
Définir des méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Définir des événements . . . . . . . . . . . . . . . . . . . . . . . . 334
Définir des variables, sous-routines
et fonctions privées . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Événements spéciaux pour les classes . . . . . . . . . . . . . 335
Résoudre des références . . . . . . . . . . . . . . . . . . . . . . . 336
Conception pratique d’une classe . . . . . . . . . . . . . . . . . . . . . 336
Une classe simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Étendre une classe simple . . . . . . . . . . . . . . . . . . . . . . 337

vi
Sommaire
Une classe de collection . . . . . . . . . . . . . . . . . . . . . . . . 338
Une classe avec des règles de métier . . . . . . . . . . . . . . 341

Partie 5
Manipulation des objets Excel
Chapitre 15
Graphiques 345
Tour d’horizon des graphiques . . . . . . . . . . . . . . . . . . . . . . . . 345
Créer des graphiques incorporés ou
des feuilles de graphique . . . . . . . . . . . . . . . . . . . . . . . 346
Définition du modèle d'objet Chart. . . . . . . . . . . . . . . . . 350
Manipulation des graphiques . . . . . . . . . . . . . . . . . . . . . . . . 351
Activer un graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Désactiver un graphique . . . . . . . . . . . . . . . . . . . . . . . . 354
Modifier une série de données . . . . . . . . . . . . . . . . . . . 355
Modifier un graphique pour utiliser
les données d’un tableau . . . . . . . . . . . . . . . . . . . . . . . 358
Définir les étiquettes du graphique . . . . . . . . . . . . . . . . 359
Mettre un graphique en forme . . . . . . . . . . . . . . . . . . . . 361
Modifier tous les graphiques d’un classeur . . . . . . . . . . 363
Imprimer des graphiques . . . . . . . . . . . . . . . . . . . . . . . 363
Réflexions sur la programmation des graphiques . . . . . . . . . . 364
Chapitre 16
Tableaux et graphiques croisés dynamiques 367
Tableaux et graphiques croisés dynamiques . . . . . . . . . . . . . . 367
Introduction aux tableaux croisés dynamiques . . . . . . . . 367
Créer un tableau croisé dynamique avec
l’Assistant Tableau et graphique croisés dynamiques . . . 370
Introduction aux graphiques croisés dynamiques . . . . . . 371
Créer un graphique croisé dynamique avec
l’Assistant Tableau et graphique croisés dynamiques . . . 372
Bases de données OLAP. . . . . . . . . . . . . . . . . . . . . . . . 373
Objets des tableaux croisés dynamiques . . . . . . . . . . . . . . . . 374
Collection PivotTables . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Objet PivotTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Collection PivotCaches . . . . . . . . . . . . . . . . . . . . . . . . . 378
Objet PivotCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Objets PivotField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Objet PivotItem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Programmation de tableaux croisés dynamiques. . . . . . . . . . . 384
Créer un tableau croisé dynamique . . . . . . . . . . . . . . . . 384
Créer un graphique croisé dynamique . . . . . . . . . . . . . . 386
Manipulation par programmation des tableaux
croisés dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Faire pivoter un tableau croisé dynamique . . . . . . . . . . . 387

vii
Sommaire
Réinitialiser la position d’origine . . . . . . . . . . . . . . . . . . 389
Enregistrer et restaurer des positions . . . . . . . . . . . . . . 389
Chapitre 17
Barres de commandes 393
Identification des différentes parties
du système de menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Collection CommandBars . . . . . . . . . . . . . . . . . . . . . . . 394
Objets CommandBar. . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Lister les objets CommandBar. . . . . . . . . . . . . . . . . . . . 398
Ajouter une barre de commandes flottante . . . . . . . . . . . 399
Supprimer une barre de commandes . . . . . . . . . . . . . . . 400
Contrôles des barres de commandes. . . . . . . . . . . . . . . . . . . 400
Collection CommandBarControls . . . . . . . . . . . . . . . . . . 400
Objet CommandBarControl . . . . . . . . . . . . . . . . . . . . . . 402
Contrôles de boutons . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Créer des barres d'outils . . . . . . . . . . . . . . . . . . . . . . . 406
Contrôles de zone de liste modifiable . . . . . . . . . . . . . . 407
Utiliser une zone de liste modifiable . . . . . . . . . . . . . . . 408
Contrôles de menu contextuel . . . . . . . . . . . . . . . . . . . . 409
Afficher un menu contextuel . . . . . . . . . . . . . . . . . . . . . 409
Ajouter des éléments à un menu existant. . . . . . . . . . . . 411
Chapitre 18
Personnalisation des boîtes de dialogue 413
Affichage des boîtes de dialogue existantes . . . . . . . . . . . . . . 414
Modification des boîtes de dialogue existantes. . . . . . . . . . . . 418
Explorer la collection Dialogs. . . . . . . . . . . . . . . . . . . . . 419
Passer des arguments aux boîtes
de dialogue existantes . . . . . . . . . . . . . . . . . . . . . . . . . 423
Planification avec des boîtes de dialogue . . . . . . . . . . . . . . . . 424
Chapitre 19
Création de feuilles UserForm 425
Création d’une feuille UserForm . . . . . . . . . . . . . . . . . . . . . . 425
Ajouter un objet UserForm. . . . . . . . . . . . . . . . . . . . . . . 425
Concevoir un objet UserForm. . . . . . . . . . . . . . . . . . . . . 426
Modifier un objet UserForm . . . . . . . . . . . . . . . . . . . . . . 427
Propriétés d’un objet UserForm . . . . . . . . . . . . . . . . . . . 428
Afficher un objet UserForm . . . . . . . . . . . . . . . . . . . . . . 429
Contrôles UserForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Programmer les contrôles . . . . . . . . . . . . . . . . . . . . . . . 431
Propriétés, méthodes et événements. . . . . . . . . . . . . . . 432
Contrôle Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Contrôle CommandButton . . . . . . . . . . . . . . . . . . . . . . . 435
Contrôle TextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Contrôle CheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437

viii
Sommaire
Contrôle ToggleButton. . . . . . . . . . . . . . . . . . . . . . . . . . 438
Contrôle SpinButton . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Contrôle Frame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Contrôle OptionButton . . . . . . . . . . . . . . . . . . . . . . . . . 440
Contrôle Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Contrôle ScrollBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Contrôle ListBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Contrôle ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Contrôle RefEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Contrôle TabStrip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Contrôle Multipage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Chapitre 20
Création de feuilles UserForm avancées 449
Récupération de l’information . . . . . . . . . . . . . . . . . . . . . . . . 449
Tour d’horizon de l’application . . . . . . . . . . . . . . . . . . . . 449
Concevoir une feuille . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Afficher les données . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Parcourir la feuille de calcul . . . . . . . . . . . . . . . . . . . . . 456
Modifier les données . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Ajouter des données. . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Valider les données . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Afficher la feuille UserForm . . . . . . . . . . . . . . . . . . . . . . 462
Conception d’un assistant à plusieurs étapes . . . . . . . . . . . . 463
Tour d’horizon de l’application . . . . . . . . . . . . . . . . . . . . 463
Gérer les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Construire la feuille UserForm . . . . . . . . . . . . . . . . . . . . 466
Parcourir les pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Collecter les options de l’assistant . . . . . . . . . . . . . . . . 469
Synthétiser les options . . . . . . . . . . . . . . . . . . . . . . . . . 472
Exécuter l’assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

Partie 6
Excel et le monde extérieur :
une collaboration simplifiée
Chapitre 21
Excel et les autres applications Office 477
Démarrage d’une autre application . . . . . . . . . . . . . . . . . . . . 477
Activation d’une autre application . . . . . . . . . . . . . . . . . . . . . 481
Liaisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Liaison dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Liaison statique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Interaction avec d’autres applications Office. . . . . . . . . . . . . . 487
Ouvrir un document dans Word . . . . . . . . . . . . . . . . . . . 490
Accéder à un document Word actif. . . . . . . . . . . . . . . . . 492

ix
Sommaire
Créer un nouveau document Word . . . . . . . . . . . . . . . . . 493
Contrôler Excel à partir d’autres applications Office . . . . 495
Conjugaison des talents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Chapitre 22
Excel et SQL 499
Comparaison des tableurs et des bases de données . . . . . . . 499
Concepts essentiels des bases de données. . . . . . . . . . 500
Clés de base de données . . . . . . . . . . . . . . . . . . . . . . . 501
Accéder aux bases de données à partir d’Excel . . . . . . . 502
Manipulation des bases de données avec SQL . . . . . . . . . . . . 503
L’instruction Select. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Instructions Select simples . . . . . . . . . . . . . . . . . . . . . . 504
Extraire des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Trier les lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
Utilisation de plusieurs tables . . . . . . . . . . . . . . . . . . . . 508
Fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
L’instruction Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Utiliser l’instruction Insert. . . . . . . . . . . . . . . . . . . . . . . 511
L’instruction Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
L’instruction Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
Chapitre 23
Introduction à ADO 515
Le modèle d'objet ADO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Utiliser le modèle d'objet ADO. . . . . . . . . . . . . . . . . . . . 516
L’objet Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Principales propriétés et méthodes
de l’objet Connection . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Se connecter à différents systèmes
de gestion de base de données . . . . . . . . . . . . . . . . . . 519
Utiliser la collection Errors . . . . . . . . . . . . . . . . . . . . . . 520
Utiliser l’objet Error. . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
L’objet Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Principales propriétés et méthodes de l’objet Command . 522
Utiliser la collection Parameters . . . . . . . . . . . . . . . . . . 523
Utiliser l’objet Parameter . . . . . . . . . . . . . . . . . . . . . . . 524
L’objet Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Principales propriétés et méthodes de l’objet Recordset . 525
Utiliser la collection Fields . . . . . . . . . . . . . . . . . . . . . . 529
Utiliser l’objet Field. . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Chapitre 24
Programme Excel Query 531
Tour d’horizon du programme Excel Query . . . . . . . . . . . 531
Configurer le projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Initialiser le programme . . . . . . . . . . . . . . . . . . . . . . . . 533

x
Sommaire
Terminer le programme . . . . . . . . . . . . . . . . . . . . . . . . . 535
Connexion à une base de données . . . . . . . . . . . . . . . . . . . . 535
Initialiser la feuille DBInfo . . . . . . . . . . . . . . . . . . . . . . . 537
Changer les fournisseurs de la base de données . . . . . . 538
Sélectionner l’authentification Windows . . . . . . . . . . . . . 538
Enregistrer les informations . . . . . . . . . . . . . . . . . . . . . 539
Édition d’une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Exécution d’une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
Récupérer les informations . . . . . . . . . . . . . . . . . . . . . . 542
Construire une chaîne de connexion . . . . . . . . . . . . . . . 543
Récupérer la requête . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Exécuter une requête . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Copier des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Utilisation du programme Excel Query . . . . . . . . . . . . . . . . . . 550
Configurer les informations de connexion . . . . . . . . . . . . 550
Saisir une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Exécuter la requête . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Chapitre 25
Excel et le web 553
HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Enregistrer une feuille de calcul en tant
que page web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Publier une feuille de calcul sur le web. . . . . . . . . . . . . . 557
Des pages web interactives. . . . . . . . . . . . . . . . . . . . . . 560
Exploitation de l'Internet comme source de données . . . . . . . 562
Ouvrir des pages web en tant que classeurs . . . . . . . . . 563
Utiliser les requêtes Web . . . . . . . . . . . . . . . . . . . . . . . 564
Analyser les pages web à la recherche
d’informations spécifiques . . . . . . . . . . . . . . . . . . . . . . 567
Exploitation de l'Internet pour publier des résultats . . . . . . . . 568
Configurer un serveur web. . . . . . . . . . . . . . . . . . . . . . . 568
Enregistrer des feuilles de calcul
en tant que pages web . . . . . . . . . . . . . . . . . . . . . . . . . 569
Ajouter l’interactivité avec les composants Web . . . . . . . 570
Communiquer avec un serveur web . . . . . . . . . . . . . . . . 572
Exploitation des solutions Internet avec Excel. . . . . . . . . . . . . 573
Chapitre 26
Excel et XML 575
Introduction aux listes de données . . . . . . . . . . . . . . . . . . . . 575
Créer des listes de données par programmation. . . . . . . 577
Création de schémas XML . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Création de fichiers de données XML . . . . . . . . . . . . . . . . . . . 585
Ajout manuel de XML à un classeur . . . . . . . . . . . . . . . . . . . . 587
Importer manuellement des données XML . . . . . . . . . . . 589
Ajout de XML à une feuille de calcul par programmation . . . . . 590

xi
Sommaire
Mapper un schéma sur une feuille de calcul
par programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Mapper des éléments de schéma sur des cellules
avec XPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594

Index 601

xii
À propos de ce livre

Les exemples ayant servi à la réalisation de ce livre ont été publiés en ligne sur le
site web de Dunod, que vous trouverez à l’adresse www.dunod.fr. Lancez une
recherche sur le titre du présent ouvrage (Excel 2003 VBA) pour accéder à ces
contenus.

Exigences d’équipement
Voici les exigences minimales d’équipement informatique pour exécuter les
exercices de ce livre :
● Microsoft Windows XP ou version ultérieure, ou Windows 2000 Professio-
nal avec le service pack 3 ou version ultérieure
● Processeur 266 MHz ou plus, compatible Pentium
● RAM 64 Mo (mégaoctets)
● Lecteur de CD-ROM 8X ou vitesse supérieure
● Carte son et haut-parleurs compatibles Microsoft Windows
● Microsoft Internet Explorer 5.01 ou version ultérieure
● Souris Microsoft ou autre périphérique de pointage compatible

Remarque Ces exigences sont des minima. Pour exploiter certains complé-
ments mis à disposition sur le site web en accompagnement de ce livre, vous
devrez pouvoir disposer d’un matériel plus performant. Prenez connaissance
des pré-requis indiqués pour chaque complément ou outil dans la page de télé-
chargement.

Support technique
Malgré tous les soins apportés à la réalisation de cet ouvrage et de son contenu
d’accompagnement, il se peut que des erreurs nous aient échappées et nous vous
invitons à nous en faire part (en anglais) à l’adresse www.microsoft.com/mspress/
support/.
Pour vous relier directement à la Base de connaissances Microsoft afin d’y poser
une question précise, rendez-vous sur le site www.microsoft.com/mspress/sup-
port/search.asp.
Pour de plus amples informations concernant Windows XP, consultez le Support
technique Microsoft sur le web à l’adresse support.microsoft.com/.

i
Conventions et signalétique
de ce livre
Dans ce livre, nous avons adopté un certain nombre de conventions de texte et de
mise en forme destinées à faciliter la prise de connaissance des informations qu’il
contient.

Conventions de texte
Convention Signification
Commandes de menu abrégées Pour des raisons pratiques, ce livre décrit les procédures
de manière abrégée. Par exemple, « Cliquez sur Outils,
Suivi des modifications, Afficher les modifications »
signifie que vous devez cliquer sur le menu Outils, puis
pointer sur Suivi des modifications et cliquer sur la
commande Afficher les modifications.
Caractères gras Les caractères gras sont employés pour indiquer le texte
à saisir au clavier.
Capitalisation Les premières lettres des noms de menus, boîtes de
dialogue, options et commandes sont en majuscules.
Exemple : la boîte de dialogue Enregistrer sous.
Caractères en italique Les italiques sont utilisés pour les termes nouveaux.
Signe plus (+) dans le texte Les raccourcis clavier sont indiqués par un signe plus (+)
séparant deux noms de touches. Par exemple,
CTRL+ALT+SUPPR signifie que vous devez appuyer
simultanément sur les touches CTRL, ALT et SUPPR.

Conventions visuelles
Au Quotidien
Cet encadré vous donne un exemple du type de contenu que vous serez sus-
ceptible d’y rencontrer à la lecture de cet ouvrage.

Nous vous livrons ici des informations approfondies sur ce qui se passe au
niveau du logiciel, comment fonctionne une caractéristique et ce qu’elle fait.
Vous y trouverez des astuces et des solutions pratiques pour gérer les problè-
mes logiciels.

iii
Microsoft Excel 2003 VBA

Astuce Les astuces contiennent des informations utiles, permettant de


gagner du temps, ou des procédures alternatives liées à la tâche décrite par
ailleurs.

Dépannage
Cet encadré vous donne un exemple type de dépannage.

Recherchez ces encadrés pour trouver des solutions à des problèmes couram-
ment rencontrés. Ils sont placés à proximité des descriptions ou procédures
susceptibles de nécessiter un dépannage.

Des références croisées vous renvoient à d’autres parties du livre pour des informations
supplémentaires concernant les sujets abordés.

Attention Ces rubriques identifient les problèmes auxquels vous devez être
attentif pendant la réalisation d’une tâche ou que vous devez résoudre avant
de l’accomplir

Remarque Les remarques contiennent un complément d’information quant à


la tâche en cours de description.

Encadré
Ces encadrés simples vous donnent des informations annexes sur le sujet
abordé. Vous en apprendrez plus en matière de technologie ou de fonctionna-
lité.

iv
Partie 1
Préliminaires
1 Les nouveautés d’Excel 2003 3

2 Tour d’horizon 15

1
Partie 1 : Préliminaires

Chapitre 1
Les nouveautés
d’Excel 2003
Utilisation des fonctions Mise en œuvre de la gestion des
statistiques optimisées . . . . . . . . . 3 droits relatifs à l’information. . . . . 7
Création de documents Comparaison de classeurs
intelligents . . . . . . . . . . . . . . . . . . . 6 côte à côte . . . . . . . . . . . . . . . . . . 8
Création d’espaces de travail Utilisation du volet Recherche . . . 8
intelligents . . . . . . . . . . . . . . . . . . . 7 Exploitation des fonctionnalités
XML étendues . . . . . . . . . . . . . . . 10

Microsoft Excel existe depuis 1985, il n’est donc pas étonnant que les éléments de
base des feuilles de calculs du programme soient restés similaires. Ceci dit, il est
toujours possible d’améliorer un produit et Microsoft Office Excel 2003 bénéfice
d’une palette de fonctionnalités nouvelles qui rendent la collecte et le transfert
des données, ainsi que la collaboration, bien plus efficaces que dans les versions
antérieures. L’essentiel des améliorations apportées à Excel 2003 repose sur l’uti-
lisation de XML (Extensible Markup Language), un système de balisage textuel
souple qui permet de décrire le contenu d’une feuille de calcul de façon que les
données qu’elle contient puissent être gérées automatiquement et non pas
manuellement. Cela vous permet de gagner du temps et d’éviter les inévitables
erreurs associées à la saisie ou aux copies multiples de données. Excel 2003 inclut
également une suite de fonctions statistiques améliorées, qui sont beaucoup plus
précises que dans les versions antérieures du programme.

Utilisation des fonctions statistiques


optimisées
La plupart des utilisateurs d’Excel n’iront jamais au-delà de quelques formules
relativement simples, associées à des mises en forme standards, pour présenter
des informations commerciales et financières. Mais les scientifiques, les univer-
sitaires et certains experts travaillant en entreprise ont besoin de ces fonctions
statistiques avancées et de fonctions leur apportant une grande précision.
L’équipe des programmeurs Excel a modifié la manière dont le programme cal-
cule les résultats et ce, pour un grand nombre de fonctions statistiques. Cela a
permis d’optimiser la précision des résultats et de les rendre nettement plus inté-
ressants pour les utilisateurs avancés. Le tableau 1.1 vous donne la liste de ces
fonctions optimisées et les décrit une à une.

3
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA

Tableau 1-1. Fonctions statistiques améliorées


Chapitre 1

LOI.BINOMIALE Détermine la probabilité qu’un nombre défini de tentatives


vrai/faux, où chaque tentative a une chance égale de
générer un résultat vrai ou faux, donne exactement un
nombre spécifié de réussites (par exemple, exactement cinq
lancers de pièce sur dix vont donner un résultat de cinq
faces).
KHIDEUX.INVERSE Trouve la valeur qui se rapproche le plus du résultat d’une
distribution khi-deux.
INTERVALLE.CONFIANCE Retourne une valeur que vous pouvez employer pour
construire un intervalle de confiance pour une moyenne de
population.
CRITERE.LOI.BINOMIALE Détermine à quel moment le nombre d’échecs dans une
série de tentatives vrai/faux excède un critère (par exemple,
plus de 5 pour cent d’ampoules fabriquées ne fonctionnent
pas).
BDECARTYPE Estime l’écart-type des valeurs d’une colonne en ne prenant
en considération que les valeurs correspondant à un critère.
BDECARTYPEP Calcule l’écart-type des valeurs d’une colonne à partir de
toutes les valeurs présentes dans la colonne.
BDVAR Estime la variance des valeurs d’une colonne ou d’une liste
en ne prenant en considération que les valeurs
correspondant à un critère.
BDVARP Calcule la variance des valeurs d’une colonne à partir de
toutes les valeurs présentes dans la colonne.
INVERSE.LOI.F Retourne la valeur qui générerait un résultat cible à partir
d’un test F (test de variabilité entre deux jeux de données).
PREVISION Calcule les valeurs futures en fonction d’une série de
valeurs temporelles existantes.
LOI.GAMMA.INVERSE Retourne la valeur que générerait un résultat donné à
l’issue d’un jeu de données présentant une distribution
gamma (c’est-à-dire biaisée).
CROISSANCE Prédit la croissance exponentielle d’une série de données.
LOI.HYPERGEOMETRIQUE Retourne la probabilité de sélectionner un nombre exact
d’un type donné d’éléments à partir d’un jeu d’objets
mélangé. Par exemple, il y a 20 billes dans une boîte, dont
6 sont rouges. Si vous choisissez trois billes, quelle est
votre probabilité de récupérer exactement une bille rouge ?
ORDONNEE.ORIGINE Calcule le point auquel une droite va entrer en intersection
avec l’axe des y.

4
Partie 1 : Préliminaires

Les nouveautés d’Excel 2003

Tableau 1-1. Fonctions statistiques améliorées (Suite)

Chapitre 1
DROITEREG Génère une ligne qui correspond au plus près à un jeu de
données en générant un tableau de valeurs bidimensionnel
pour décrire la ligne.
LOGREG Génère une courbe qui correspond au plus près à un jeu de
données en générant un tableau de valeurs bidimensionnel
pour décrire la courbe.
LOI.LOGNORMALE.INVERSE Retourne le logarithme inverse d’une valeur dans une
distribution.
LOI.LOGNORMALE Retourne le nombre d’écarts-types duquel une valeur
s’éloigne de la moyenne dans une distribution logarithmique
normale.
LOI.BINOMIALE.NEGATIVE Retourne la probabilité qu’un nombre donné d’échecs se
produise avant un nombre donné de réussites dans une
distribution binomiale.
LOI.NORMALE Retourne le nombre d’écarts-types duquel une valeur
s’éloigne de la moyenne dans une distribution normale.
LOI.NORMALE.INVERSE Retourne une valeur reflétant la probabilité qu’une valeur
aléatoirement choisie dans une distribution se situe au
dessus de ladite valeur dans la distribution.
LOI.NORMALE.STANDARD Retourne une distribution normale standard, avec une
moyenne de 0 et un écart-type de 1.
LOI.NORMALE.STANDARD.IN Retourne une valeur reflétant la probabilité qu’une valeur
VERSE aléatoirement choisie dans une distribution normale
standard se situe au dessus de ladite valeur dans la
distribution.
PEARSON Retourne une valeur reflétant la force de la relation linéaire
entre deux jeux de données.
POISSON Retourne la probabilité de survenue d’un certain nombre
d’événements, compte tenu d’une distribution Poisson.
ALEA Génère une valeur aléatoire.
COEFFICIENT.DETERMINATIO Retourne le carré du coefficient Pearson de deux jeux de
N valeurs.
PENTE Retourne l’inclinaison d’une ligne.
ECARTYPE Évalue l’écart-type d’un jeu de données numériques à partir
d’un échantillon des données.
STDEVA Évalue l’écart-type d’un jeu de données (qui peut inclure du
texte et des valeurs vrai/faux) à partir d’un échantillon des
données.
ECARTYPEP Calcule l’étart-type d’un jeu de données numériques.
STDEVPA Calcule l’écart-type d’un jeu de données (qui peut inclure du
texte et des valeurs vrai/faux).

5
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA

Tableau 1-1. Fonctions statistiques améliorées (Suite)


Chapitre 1

ERREUR.TYPE.XY Retourne l’erreur-type prévisible pour la valeur y pour


chaque valeur x d’une régression.
LOI.STUDENT.INVERSE Retourne une valeur T en fonction d’une probabilité établie
et de degrés de liberté.
TENDANCE Retourne des valeurs ventilées sur une ligne de tendance.
VAR Évalue la variance d’un échantillon de données.
VAR.P Calcule la variance d’une population de données.
VARPA Calcule la variance d’une population de données, qui peut
inclure du texte et des valeurs vrai/faux.
TEST.Z Retourne la probabilité que la moyenne d’un échantillon de
données soit supérieure à la moyenne observée des don-
nées du jeu.

Création de documents intelligents


Les classeurs Excel ont toujours été doués d’interaction avec les autres docu-
ments Office, mais ces interactions sont restées quelque peu limitées. Si la créa-
tion de liens avec des données du web ou d’autres documents Office sont des
aptitudes intéressantes, le classeur Excel n’en était pas moins un bloc de données
isolé. Avec Office 2003, les documents intelligents sont des documents Office qui
possèdent des métadonnées (des données qui informent le document sur ce qu’il
est). Les métadonnées sont des informations qui indiquent comment les données
s’insèrent dans un processus métier, permettant au document d’effectuer des
actions programmées en fonction du contexte.
Prenons un exemple. Vous travaillez dans une société de services techniques qui
utilise un modèle Excel pour suivre le temps passé sur chaque projet. Vous allez
sans doute créer un nouveau classeur (avec une feuille de calcul) en début de
semaine, l’enregistrer avec vos informations d’identification, et le compléter avec
le temps travaillé à la fin de chaque journée. Ensuite, arrivé à la fin de la semaine,
vous enregistrez le classeur dans un dossier en réseau ou l’envoyez par courriel à
votre responsable administratif. Par différence, les documents intelligents con-
tiennent du code capable de compléter les informations relatives à votre « carte
de pointage » et à la façon dont votre temps de travail s’ajuste au processus de
l’activité. Lorsque vous créez un nouveau classeur « carte de pointage », Excel
vous reconnaît et complète vos informations personnelles (nom, numéro
d’employé, projets, etc.). Puis lorsque vous avez terminé votre travail de la
semaine, le document intelligent affiche un bouton qui vous permet d’envoyer le
classeur à la prochaine étape du processus. Et en ce qui vous concerne, peu
importe le mécanisme employé pour relayer les données. Celles-ci peuvent aller
se placer dans une base de données, être enregistrées dans une feuille de calcul
quelque part sur le réseau, être incorporées aux données d’un serveur BizTalk
chargé du suivi des flux d’activité, ou être envoyées en pièce jointe d’un message
Outlook adressé à votre responsable administratif.

6
Partie 1 : Préliminaires

Les nouveautés d’Excel 2003

Création d’espaces de travail intelligents

Chapitre 1
Le nombre de documents nécessitant l’intervention de plusieurs personnes aug-
mente jour après jour. Par exemple, lorsque vous estimez le coût d’un important
projet, vous avez besoin d’informations de tous les membres de votre équipe
pour déterminer les produits et les composants à prendre en considération. Sans
parler de la somme des tâches administratives qu’il vous faut fournir pour gérer
le projet en interne. Le partage et la fusion de classeurs permettent de récupérer
les informations éparses, mais ce sont des tâches épineuses. Il suffit que l’un de
vos collaborateurs ajoute ou modifie son mot de passe sur son exemplaire du
classeur pour que vous ne puissiez plus inclure ses modifications dans la fusion.
Or si vous exploitez Excel 2003 en conjonction avec Microsoft Windows Share-
Point Services, vous pouvez optimiser le processus de coopération, de modifica-
tion et de vérification des classeurs en créant un espace de travail intelligent. Un
espace de travail intelligent est un espace de travail virtuel créé sur un site Share-
Point. Il permet aux personnes munies du droit d’accès au classeur de travailler
sur une copie de celui-ci sur le serveur SharePoint ou sur une copie locale
qu’elles peuvent actualiser en ajoutant les changements survenus au niveau de
l’exemplaire principal stocké dans l’espace de travail. Une fois que vous avez créé
l’espace de travail et donné à chacun des membres de votre équipe l’accès à cette
portion du site, ceux-ci pourront travailler sur le même exemplaire du classeur.
Toute modification enregistrée dans un exemplaire quelconque du document
devient disponible pour chaque membre de l’équipe. Si les modifications créent
des conflits, vous-même, en tant qu’administrateur, pouvez trancher quant aux
changements à valider. Vous pouvez également vous servir du volet Espace de
travail partagé pour créer et administrer l’espace de travail intelligent.

Remarque On peut utiliser les espaces de travail intelligents avec Microsoft


Office Word 2003, Excel 2003, PowerPoint 2003 et Visio 2003.

Mise en œuvre de la gestion des droits


relatifs à l’information
Dans le domaine du numérique, l’un des problèmes les plus difficiles à résoudre
est celui de la surveillance de l’accès aux informations. Les mots de passe, les
comptes et autres restrictions d’accès permettent de décider des personnes habi-
litées à lire les fichiers d’un ordinateur ou d’un réseau, mais une fois qu’un fichier
non protégé a quitté son périmètre de sécurité, n’importe qui peut le copier et le
diffuser à sa guise. Les nouvelles fonctionnalités IRM (Information Rights Mana-
gement, gestion des droits relatifs à l’information) d’Office 2003 permettent de
préserver la confidentialité de vos informations en limitant les personnes habili-
tées à voir et modifier vos fichiers. Par ailleurs, les administrateurs réseau peu-
vent créer des stratégies qui vous permettent de définir des permissions au
niveau des utilisateurs pour limiter l’accès aux contenus. Ainsi, les utilisateurs
qui d’une manière ou d’une autre, parviennent à mettre la main sur des copies

7
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA


non autorisées de vos fichiers ne parviendront pas pour autant à jeter un œil sur
votre budget prévisionnel de l’année prochaine. Les utilisateurs autorisés mais
Chapitre 1

qui ne disposent pas encore d’Office 2003 ou version ultérieure sur leur ordina-
teur pourront exploiter les visionneuses de fichiers pour lire les documents, mais
ils ne pourront pas les modifier.

Remarque IRM (Information Rights Management) n’est disponible que dans


Microsoft Office Professional Edition 2003, Word 2003, Excel 2003 et Power-
Point 2003.

Comparaison de classeurs côte à côte


Une autre fonctionnalité intéressante d’Excel 2003 consiste à pouvoir faire défi-
ler deux fenêtres simultanément de manière à pouvoir en comparer les contenus.
À mesure que vous faites défiler les cellules de données, des motifs apparaissent
qui vous permettent souvent de relever des différences à l’œil nu. Ces différences
deviennent encore plus visibles lorsque vous utilisez les formats conditionnels
ou le suivi des modifications pour afficher les cellules de données dans un format
différent de celui du reste des données. Pour activer cette nouvelle fonction, il
vous suffit d’ouvrir deux classeurs à comparer et de cliquer sur Fenêtre, Compa-
rer en côte à côte avec.

Utilisation du volet Recherche


Excel 2003 comporte également plusieurs outils supplémentaires de recherche
qui vous aident à trouver des informations en provenance de nombreuses sour-
ces différentes. Affichez le volet Recherche en cliquant sur Affichage, Volet Office
et si nécessaire, en cliquant sur Autres volets Office (en haut du volet des tâches)
puis sur Rechercher. Une fois que vous avez affiché le volet Recherche, vous pou-
vez taper un mot ou un groupe de mots dans la zone Rechercher. Il est également
possible de sélectionner des ouvrages de référence. Ensuite, cliquez sur le bouton
Démarrer la recherche (la flèche verte à droite de la zone de recherche) pour affi-
cher les informations trouvées. La figure 1.1 présente le volet Recherche avec une
sélection d’ouvrages de référence que vous pouvez consulter.

8
Partie 1 : Préliminaires

Les nouveautés d’Excel 2003

Chapitre 1
f01pr01.eps

Figure 1-1. Vous pouvez rechercher des synonymes, des mots dans une
encyclopédie et traduire des mots en langues étrangères à l’aide des outils du
volet Recherche.

Astuce Rechercher le contenu d’une cellule


Pour lancer une recherche sur le contenu d’une cellule dans les ouvrages de
référence du volet Recherche, maintenez enfoncée la touche ALT et cliquez sur
la cellule contenant le texte voulu.

Au bas du volet Recherche, cliquez sur les liens pour actualiser les outils de
recherche installés sur votre ordinateur, comme les thésaurus et les dictionnaires.
Vous disposez également d’un lien vers Office Marketplace. Office Marketplace
est une ressource du site web de Microsoft qui recense tous les services par abon-
nement vers lesquels vous pouvez vous tourner lorsque les informations du volet
Recherche ne vous apportent pas ce dont vous avez besoin. Parmi ces ressources,
vous trouverez la eLibrary, qui vous donne accès à 13 millions de documents
multimédias, dont des photographies et des cartes, qui sont collectées dans les
journaux publiés à travers le monde entier, ainsi que plus de 450 000 profils
d’entreprise extraits de la collection Thomson Company Profiles. Y sont recen-
sées 300 000 sociétés nord-américaines. Vous y trouverez également des compa-
ratifs par secteur d’activité, des informations concernant les parts de marché, les
classements, ainsi que des actualités extraites de plus de 2 500 périodiques diffé-
rents.

9
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA

Exploitation des fonctionnalités XML


Chapitre 1

étendues
Le changement le plus notable d’Excel 2003 est sans doute la prise en charge
optimisée de XML (Extensible Markup Language). À la différence du langage
HTML (Hypertext Markup Language), qui permet de décrire l’apparence des
données sur le web, XML permet de décrire la structure des données. Par exem-
ple, un tableau HTML contenant les résultats des ventes d’une société est parfai-
tement compréhensible par toute personne qui l’observerait avec attention. Mais
le serveur qui présente ces données et le client qui les réceptionne pour le compte
de son utilisateur sont des machines qui n’ont pas la moindre idée du type de
données transmis. Or avec un fichier XML, les machines deviennent capables de
reconnaître qu’elles transportent des données de ventes et partant de là, les
gèrent de la manière appropriée. XML est pris en charge depuis Excel 2002, mais
on ne pouvait qu’ouvrir et enregistrer des classeurs au format Feuille de calcul
XML. C’était intéressant, mais loin de constituer une aptitude pleine et entière.

Remarque Toutes les fonctionnalités nouvelles décrites dans cette section


sont disponibles uniquement dans Microsoft Office 2003 Édition Profession-
nelle. Les utilisateurs des autres éditions peuvent seulement enregistrer et
ouvrir des classeurs XML, comme c’était déjà le cas dans Excel 2002.

Créer des listes Excel


De nombreux outils avancés d’Excel fonctionnent sur des listes, qui sont des pla-
ges de cellules étalées sur une ou plusieurs colonnes et dans lesquelles chaque
colonne prend un intitulé. Dans Excel 2002 et versions antérieures, les listes
étaient un peu hasardeuses lorsqu’il s’agissait de générer des tableaux croisés
dynamiques, de trier des données ou de créer un filtre automatique. Vous cli-
quiez sur une cellule quelconque de la plage et choisissiez l’élément de menu cor-
respondant à ce que vous vouliez faire. Si Excel ne parvenait pas à déterminer des
limites de plage, qu’il n’identifiait pas un intitulé dans l’une ou l’autre colonne, le
résultat était bancal. Avec Excel 2003, les listes sont devenues des entités bien
définies que vous créez en choisissant Données, Liste, Créer une liste. Les com-
mandes de la boîte de dialogue Créer une liste vous permettent de définir la zone
occupée par la liste.

Remarque Si vous sélectionnez les cellules de votre liste avant d’effectuer


cette opération, la plage apparaît automatiquement dans la boîte de dialogue.

Lorsque vous créez une liste, il se passe plusieurs choses.


● Une bordure apparaît autour de la liste. Vous pouvez faire glisser cette bor-
dure pour redimensionner la liste.

10
Partie 1 : Préliminaires

Les nouveautés d’Excel 2003


● Les contrôles de filtrage automatique apparaissent dans les cellules
d’intitulé ; vous pouvez vous en servir pour sélectionner les modalités

Chapitre 1
d’affichage des données dans la liste.
● Une ligne d’insertion apparaît, matérialisée par un astérisque. Comme
dans une table Access ou un formulaire de saisie Excel, vous pouvez com-
pléter la ligne d’insertion et appuyer sur ENTRÉE pour ajouter les données
au reste de la liste et générer une nouvelle ligne d’insertion.
● La barre d’outils Liste apparaît ; elle contient des boutons utiles pour la
gestion des listes.
● Vous avez la possibilité d’afficher une ligne de total au bas de la liste en cli-
quant sur le bouton Afficher/Masquer la ligne Total dans la barre d’outils
Liste. L’opération par défaut effectuée dans la ligne de total consiste à faire
la somme du contenu de la colonne, mais vous pouvez cliquer dans
n’importe quelle cellule de la ligne de total pour lui appliquer d’autres opé-
rations.
Une fois la liste créée (comme dans l’exemple de la figure 1.2), vous pouvez tra-
vailler sur la liste en tant qu’entité propre au sein de votre feuille de calcul. Par
exemple, vous pouvez filtrer les données, créer un tableau croisé dynamique ou
ajouter de nouvelles lignes à la liste. Quelle que soit la tâche choisie, Excel décale
le contenu de la feuille de calcul situé autour de la liste afin de faire de la place à
la nouvelle entrée (comme par exemple en ajoutant une ligne vierge après la sai-
sie d’une nouvelle ligne). Si vous travaillez en réseau avec SharePoint Services,
vous pouvez publier la liste sur le serveur, actualiser les données de la liste en uti-
lisant l’exemplaire publié sur le site SharePoint ou modifier un exemplaire de la
liste sur un ordinateur non connecté au réseau et intégrer les modifications lors
de la reconnexion. Les outils de validation des données plus avancés de Share-
Point sont également à votre disposition pour limiter les types de données que
vous –ou vos collaborateurs– pouvez saisir dans les listes publiées. Dans Excel,
vous pouvez obliger les utilisateurs à saisir des données numériques, mais sur un
serveur SharePoint, vous pouvez être encore plus spécifique quant aux types de
données, en obligeant les utilisateurs à ne saisir, par exemple, que des valeurs
entières.

11
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA


Chapitre 1

Figure 1-2. Les listes de données optimisent votre capacité à créer et afficher
des collections de données dans Excel 2003.

Mapper des données Excel avec des schémas XML


Les structures de données XML sont définies dans un schéma, qui est stocké dans
Excel dans un fichier .xsd. Le code XML qui suit montre comment vous pouvez
construire un schéma partiel pour stocker des données d’article.

Ce code XML n’est pas une macro que vous pouvez exécuter avec l’Éditeur Microsoft
Visual Basic. Il se contente de décrire un produit possédant trois attributs.

<xs:complexType name="productType">
<xs:sequence>
<xs:element name="productId" type="xs:string" />
<xs:element name="productName" type="xs:string" />
<xs:element name="priceEach" type="xs:decimal" />
</xs:sequence>
</xs:complexType>

Ce schéma indique à Excel d’identifier trois éléments de données pour une struc-
ture de données appelée productType : productId, productName et priceEach. La
déclaration complexType nomme la structure de données, tandis que les déclara-
tions de définition des éléments vous donnent le nom des éléments et le type de
données attendu (dans ce cas, il s’agit d’une chaîne ou d’une valeur décimale).
En outre, la déclaration <xs:sequence> indique à Excel d’identifier les éléments
exactement dans cet ordre à chaque fois.

12
Partie 1 : Préliminaires

Les nouveautés d’Excel 2003

Publier des feuilles de calcul avec les Compléments


Office 2003

Chapitre 1
Techniquement, les Compléments Office 2003 font partie de la suite Office et pas
seulement d’Excel 2003. Ils incluent plusieurs composants permettant de publier
des pages web capables de se comporter comme des feuilles de calcul. Ils permet-
tent de publier sur le web des feuilles de calcul, des graphiques et des bases de
données. Un autre composant, le Data Access Component, présente des fonctions
d’accès à des bases de données pour les listes.

13
Partie 1 : Préliminaires

Chapitre 2
Tour d’horizon
Classeurs . . . . . . . . . . . . . . . . . . . 15 L’interface Excel . . . . . . . . . . . . . 20
Feuilles de calcul . . . . . . . . . . . . . 16 Formules . . . . . . . . . . . . . . . . . . . 24
Cellules et plages. . . . . . . . . . . . . 18

Si la programmation dans Microsoft Office Excel 2003 vous intéresse, vous maî-
trisez probablement la disposition de base d’un classeur Excel et manipulez avec
aisance les classeurs, feuilles de calcul, données et formules.
Mais, si la création de scénarios n’a plus de secret pour vous, si vous connaissez
le nombre de couleurs utilisables dans un classeur Excel et si vous savez com-
ment Excel vous assiste dans la création des formules, n’hésitez pas à lire directe-
ment le chapitre suivant.

Classeurs
Le classeur constitue l’unité de base de l’organisation dans Excel. Dans la hiérar-
chie Microsoft Office, un classeur Excel est l’équivalent d’un document Word,
d’une base de données Access ou d’une présentation PowerPoint. À l’instar des
sections dans les documents, des tables dans les bases de données et des diapora-
mas dans les présentations, les classeurs Excel hébergent un ensemble de feuilles
qui contiennent des données ainsi que d’autres objets Excel. Excel 2003 supporte
les quatre types de feuilles suivants, mais vous exploiterez essentiellement les
deux premiers :
● Feuilles de calcul ;
● Feuilles de graphique ;

● Feuilles de macros Excel 4.0 (également appelées fichiers XML) ;

● Feuilles de dialogue Excel 5.0 (une méthode pour créer une boîte de dialo-
gue personnalisée).
Il n’est plus possible de créer des fichiers XML ou des feuilles de dialogue, mais
Excel 2003 permet d’ouvrir des fichiers Excel 4.0 ou 5.0 sans aucune perte de
fonctionnalité. Si vous travaillez dans une entreprise qui exploite les mêmes clas-
seurs de base depuis longtemps, la capacité de Excel 2003 à travailler avec
d’anciens fichiers atténue la transition entre les anciens et les nouveaux classeurs.
Les nouveaux classeurs Excel contiennent par défaut trois feuilles de calcul. Pour
modifier cette valeur, dans le menu Outils, choisissez Options, cliquez sur

15
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA


l’onglet Général et tapez une valeur dans la zone Nombre de feuilles de calcul par
nouveau classeur.

Astuce Limitez le nombre de feuilles de calcul à une.


Si vous prévoyez de créer un nombre important de modèles (un modèle étant
un classeur contenant une seule feuille de calcul), optez pour une feuille de
calcul par classeur par défaut jusqu’à ce que vous ayez terminé la création des
modèles.

Pour parcourir les feuilles de calcul d’un classeur, servez-vous des commandes
Chapitre 2

de la barre d’onglets qui se trouve dans l’angle inférieur gauche de la fenêtre


Excel. Chaque feuille de calcul possède son propre onglet (intitulés Feuil1, Feuil2
et Feuil3, par défaut). Cliquez sur un onglet pour afficher la feuille correspon-
dante. Si vous cliquez droit sur un onglet, vous affichez un menu contextuel
hébergeant les commandes pour insérer une nouvelle feuille, renommer ou sup-
primer la feuille sélectionnée, déplacer ou copier des feuilles ou modifier la cou-
leur de l’onglet de la feuille sélectionnée. La possibilité de modifier la couleur de
l’onglet, introduite dans Excel 2002, offre un moyen pratique pour désigner une
feuille à laquelle vous avez apporté des modifications, mettre en évidence une
feuille par rapport à une autre (pour une feuille récapitulative, par exemple) et
simplifier la navigation au sein du classeur.

Important Excel vous impose toutefois une limite de 56 couleurs par clas-
seur. Cette limite ne comprend pas les couleurs utilisées dans les graphiques
incorporés ou liés à un classeur : si vous devez afficher un graphique com-
plexe, comprenant plus de 56 couleurs, commencez par créer le graphique,
puis exportez-le avec sa légende dans un programme dédié et modifiez-le ainsi
que sa légende. Ensuite, affichez le graphique et sa légende dans des fichiers
graphiques séparés ou incorporez le nouveau fichier dans le classeur.

Feuilles de calcul
Des quatre types de base de feuilles présents dans Excel, les feuilles de calcul sont
de loin les plus couramment exploitées. Elles contiennent des cellules, organisées
en lignes et colonnes, où vous stockez les données et créez des formules pour
synthétiser ces données. Comme le montre le tableau 2.1, les feuilles de calcul
Excel possèdent au maximum 256 colonnes et 65 536 lignes. Si vous travaillez
avec des jeux de données plus importants, comme ceux générés par des expé-
riences scientifiques ou un système de suivi des transactions dans une entreprise
de vente intensive, vous serez contraint d’écrire les données dans un fichier texte
que vous diviserez en sections gérables ou d’utiliser une application plus puis-
sante, adaptée aux besoins de l’entreprise pour analyser les données.

16
Partie 1 : Préliminaires

Tour d’horizon

Tableau 2-1. Les feuilles de calcul Excel peuvent contenir


nombre de données, mais elles possèdent leurs limites
Attribut Limite
Nombre maximum de lignes 65 536
Nombre maximum de colonnes 256
Largeur de colonne 255 caractères
Hauteur de ligne 409 points
Nombre maximum de sauts de page 1000

Chapitre 2
Nombre maximum de scénarios Pas de maximum, mais le récapitulatif
des scénarios en affiche 251 au
maximum
Nombre maximum de changements de 32
cellule dans un scénario
Nombre maximum de changements de 200
cellule dans le Solveur

Le scénario, qui permet de définir des jeux de données alternatifs dans une feuille
de calcul, est sans nul doute l’une des fonctionnalités les moins exploitées dans
Excel. Comme vous avez pu le noter dans le tableau 2.1, chaque scénario peut
contenir jusqu’à 32 changements. Les scénarios possèdent plusieurs avantages :
ils sont rapides à définir (cliquez sur Outils, Gestionnaire de scénarios et servez-
vous des commandes de la boîte de dialogue illustrée par la figure 2.1) et permet-
tent de basculer entre différents jeux de données sans qu’il soit nécessaire de
créer une nouvelle feuille de calcul contenant les données théoriques. Si vous
créez une nouvelle feuille de calcul contenant 12 valeurs, dont trois changent, les
scénarios ne vous feront guère économiser de temps. En revanche, si vous tra-
vaillez sur une grande plage de valeurs (ou des combinaisons de valeurs) chan-
geantes et que vous ne voulez pas créer une feuille de calcul différente pour
chaque combinaison possible, vous pouvez créer un scénario pour chaque com-
binaison et basculer de l’un à l’autre au sein de la même feuille de calcul.

Figure 2-1. La boîte de dialogue Gestionnaire de scénarios permet de gérer et


de présente des jeux de données alternatifs.

17
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA

Si vous devez créer un scénario contenant plus de 32 changements, vous devrez créer un
nouveau classeur pour héberger les données.

Cellules et plages
Dans Excel, la cellule, formée par l’intersection d’une colonne et d’une ligne dans
une feuille de calcul, constitue le bas de la hiérarchie organisationnelle. Une cel-
lule contient une valeur ou une formule. Par défaut, Excel affiche le résultat de la
formule. Pour modifier ce paramètre, dans le menu Outils, cliquez sur Options
Chapitre 2

puis sur l’onglet Affichage et cochez la case Formules. Remarquez que la formule
s’affiche toujours dans la barre des formules, que les formules soient ou non affi-
chées dans les cellules. Optez pour l’un ou l’autre affichage en fonction de la pré-
sentation souhaitée.

Remarque Si vous optez pour l’affichage des formules en lieu et place de


leurs résultats, la barre d’outils Audit de formules s’affiche. Elle présente des
boutons qui permettent d’identifier les cellules utilisées dans les formules, de
visualiser les changements de valeurs dans les cellules spécifiques et de par-
courir les formules calcul après calcul pour éliminer toute erreur.

Une fois les données saisies, vous définissez leur mise en forme. La barre d’outils
Mise en forme, affichée par défaut, accueille une palette de boutons qui permet-
tent de modifier l’apparence de base des données, comme afficher le contenu de
la cellule en gras ou dans une police différence. Toutefois, pour bénéficier d’un
contrôle plus précis sur l’apparence des données, dans le menu Format, choisis-
sez Cellule pour afficher la boîte de dialogue de la figure 2.2. Dans la boîte de dia-
logue Format de cellule, vous modifiez l’orientation du texte dans la cellule,
ajustez la taille de la cellule au contenu existant sans déborder ou ajoutez des
bordures. Il est toutefois facile d’abuser de la mise en forme. Rappelez-vous tou-
jours que l’objectif d’une feuille de calcul Excel est de simplifier la lecture des
données et non de créer une œuvre d’art.

18
Partie 1 : Préliminaires

Tour d’horizon

Chapitre 2
Figure 2-2. Servez-vous des commandes de la boîte de dialogue Format de
cellule pour présenter vos données.

Vous pouvez traiter les cellules individuellement ou en groupes. Pour modifier la


mise en forme d’un groupe de cellules, il vous suffit de sélectionner les cellules et
d’effectuer les modifications. Pour utiliser les valeurs d’un groupe de cellules
dans une formule, vous procédez de manière similaire. Par exemple, vous tapez
la formule =SOMME() dans une cellule, placez le point d’insertion entre les
parenthèses puis sélectionnez les cellules à employer dans la formule. À mesure
que vous sélectionnez les cellules, les références des cellules sont insérées dans la
formule. Selon cet exemple, si vous sélectionnez les cellules C3 à C24, vous obte-
nez la formule =SOMME(C3:C24). En outre, à l’instar de Excel 2002, vous pou-
vez sélectionner un groupe de cellules non contiguës en maintenant enfoncée la
touche CTRL. Par exemple, si vous tapez =SOMME() dans une cellule, placez le
point d’insertion entre les parenthèses, sélectionnez les cellules C3 à C24, main-
tenez la touche CTRL enfoncée en sélectionnant la cellule C26, vous obtenez la
formule suivante =SOMME(C3:C24, C26).

Important Lorsque vous créez une formule, si vous appuyez sur la touche
ENTRÉE avant d’avoir terminer la formule, vous obtenez une erreur. Tapez
=SOMME( puis sélectionnez les cellules à inclure avant de taper la paren-
thèse fermante.

Lorsque vous travaillez avec un grand nombre de feuilles de calcul et de formules


ou si vous devez transmettre un classeur que vous avez créé à un collègue, il n’est
guère pratique d’utiliser les références de cellule pour désigner les valeurs
employées dans une formule. Au lieu de ces obscures références, créez des plages
nommées (souvent appelées simplement noms) pour simplifier la lecture des for-
mules. Par exemple, sur une feuille de calcul hébergeant les ventes de plusieurs
catégories de produits, vous pouvez créer une plage nommée par catégorie et
créer une formule comme =SOMME(Machines,Logiciel,Consultation) au lieu
de =SOMME(C3:C24,D3:D24,E3:E24).
La méthode la plus rapide pour créer une plage nommée consiste à sélectionner
les cellules de la plage, à cliquer sur la zone Nom, qui se trouve à l’extrémité gau-

19
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA


che de la barre de formule et à taper le nom de la plage (la zone Nom est la zone
de la barre de formule qui affiche l’adresse de la cellule sélectionnée).

Pour utiliser des plages existantes, dans le menu Insertion, choisissez Nom, Défi-
nir pour afficher la boîte de dialogue Définir un nom (voir figure 2.3), dans
laquelle vous pouvez ajouter ou supprimer des plages.
Chapitre 2

Figure 2-3. Utilisez la boîte de dialogue Définir un nom pour gérer vos plages
nommées.

Pour connaître les cellules qu’englobe la plage nommée, cliquez sur la flèche
orientée vers le bas qui se trouve à l’extrémité droite de la zone Nom et cliquez
sur le nom de la plage.

L’interface Excel
Un excellent tableur n’est d’aucune utilité si l’on ne trouve pas ce que l’on cher-
che. Les concepteurs d’Excel ont développé l’organisation et l’apparence de
l’interface Excel pour permettre aux utilisateurs de tirer profit au mieux de leurs
classeurs. La figure 2.4 montre la fenêtre Excel présentant les éléments clés de
l’interface Excel.

Au Quotidien
Au démarrage, Excel exploite le système de menus adaptatifs qui affiche uni-
quement les commandes les plus employées, ce qui vous oblige à survoler le
bas du menu avec le pointeur de la souris pour le développer dans son intégra-
lité. En théorie, l’idée est intéressante, mais pour la majorité des utilisateurs
qui ne maîtrisent pas le programme elle constitue plutôt un obstacle. Vous
pouvez, et devriez, désactiver le système de menus adaptatifs. Pour ce faire,
dans le menu Outils, choisissez Personnaliser et sur l’onglet Options, cochez
la case Toujours afficher les menus dans leur intégralité.

20
Partie 1 : Préliminaires

Tour d’horizon

Chapitre 2
Figure 2-4. L’interface Excel permet d’accéder rapidement aux diverses
fonctionnalités du programme.

Barre de titre. La barre de titre se trouve dans la partie supérieure de la fenêtre


Excel et présente le nom du programme (Microsoft Excel) suivi éventuel-
lement du nom du classeur actif. Si des restrictions d’accès s’appliquent au
classeur actif ou s’il est partagé, son nom est suivi d’une désignation entre
crochets. Si vous avez ouvert plusieurs copies du même classeur, le premier
nom est suivi de 1, le deuxième de 2 et ainsi de suite.
Bouton Sélectionner tout. Le bouton Sélectionner tout constitue l’outil de base
par excellence et se trouve à gauche de l’en-tête de la Colonne A et au-des-
sus de l’en-tête de la Ligne 1. Cliquez dessus pour sélectionner toutes les
cellules de la feuille de calcul.
Barres de commandes. Les barres de menus et les barres d’outils sont différen-
tes, mais elles fonctionnent de la même manière. Choisir la commande
Enregistrer du menu Fichier revient à cliquer sur le bouton Enregistrer de
la barre d’outils, alors pourquoi deux systèmes, en plus du raccourci cla-
vier CTRL+S ? Parce que chaque utilisateur a sa méthode favorite.
Barre de formule. Excel présente la formule de la cellule active dans la barre de
formule, la longue bande blanche qui se trouve au-dessus des en-têtes de
colonnes de la feuille de calcul. Si la cellule active ne contient pas de for-
mule, la barre de formule contient sa valeur. Pour masquer la barre de for-
mule, dans le menu Affichage, choisissez Barre de formule. Il s’agit d’une
commande bascule, autrement dit, vous cliquez pour l’activer et cliquez à
nouveau pour la désactiver.
Zone Nom. La zone Nom représente l’élément le plus polyvalent de l’interface
Excel. Si vous avez créé une plage nommée, comme nous l’avons décrit

21
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA


plus tôt dans ce chapitre, vous pouvez sélectionner une plage en cliquant
sur la flèche pointant vers le bas, qui se trouve à droite de la zone Nom et
cliquer sur le nom de votre choix pour la sélectionner (cette action encadre
les cellules de la plage nommée). Si vous n’avez pas sélectionné de plage
nommée, la zone Nom contient la référence de la cellule active (par exem-
ple, A1) ou la zone sélectionnée par glisser-déplacer. Par exemple, si vous
sélectionnez une zone de trois lignes par dix colonnes, la zone Nom affiche
3L × 10C jusqu’à ce que vous relâchiez le bouton de la souris, puis elle
indique la référence de la cellule qui se trouve dans l’angle supérieur gau-
che de la plage sélectionnée.
Chapitre 2

Remarque Il est intéressant de connaître les dimensions exactes de la zone


sélectionnée si vous devez coller un groupe de cellules provenant d’une autre
feuille de calcul dans la feuille de calcul actuelle.

Commandes de la fenêtre du programme. Les commandes de programme Win-


dows standard se trouvent dans la partie supérieure droite de la fenêtre
Excel : le bouton Réduire, le bouton Restaurer la fenêtre, le bouton Agran-
dir (qui s’affiche lorsque la fenêtre a été redimensionnée) et le bouton Fer-
mer.
Commandes de la fenêtre du classeur. Ces boutons fonctionnent exactement de
la même manière que les commandes de la fenêtre du programme, excep-
tés qu’ils affectent le classeur actif (la fenêtre Excel conserve la taille qu’elle
avait au moment où on a cliqué sur les boutons).
Zone Tapez une question. Cette zone constitue la méthode la plus rapide pour
rechercher des rubriques dans le système d’aide Excel. Tapez un mot ou
une phrase dans la zone Tapez une question et appuyez sur Entrée pour
afficher une liste de rubriques d’aide dans le volet Résultats de la recherche
qui se trouve à droite du classeur. Cliquez sur le nom d’une rubrique pour
l’afficher.
Volets Office. Introduits dans Excel 2002, les volets Office sont des interfaces
équipées de liens permettant d’effectuer les tâches courantes dans un cer-
tain nombre de domaines. Les volets Office s’affichent sur le bord droit de
la fenêtre Excel lorsque vous effectuez certaines tâches (par exemple, si
vous cliquez sur Fichier, Nouveau, vous affichez le volet Nouveau clas-
seur). Vous pouvez également afficher les volets Office par le biais du menu
Affichage en choisissant Volet Office. Voici les volets Office disponibles
dans Excel 2003 :
■ Image clipart. Ce volet propose des liens pour rechercher des clips
dans la Bibliothèque multimédia, permet d’organiser les clips enre-
gistrés et d’obtenir de l’aide sur des rubriques relatives aux clips.
■ Presse-papiers. Le volet Office Presse-papiers constitue le nouvel
emplacement du Presse-papiers Office. Il peut contenir jusqu’à
24 éléments copiés ou coupés.

22
Partie 1 : Préliminaires

Tour d’horizon
■ Récupération de document. Si Excel subit une défaillance alors
qu’un classeur est ouvert, le volet Office Récupération de document
s’affiche lorsque vous ouvrez à nouveau Excel. Vous pourrez choisir
entre récupérer les versions les plus récentes du classeur ou récupé-
rer le classeur avec la dernière Récupération automatique du fichier.
■ Mises à jour du document. Exploité avec les services SharePoint, ce
volet permet de gérer les modifications apportées aux classeurs pla-
cés dans un espace de travail partagé.
■ Accueil. Le volet Office Accueil héberge les liens permettant

Chapitre 2
d’ouvrir un fichier récemment employé, de créer un nouveau clas-
seur ou de se connecter au site web Microsoft Office Online.
■ Aide. Le volet Office Aide contient des liens vers les communautés
du support Microsoft, des informations d’aide, des formations
Microsoft Office et les nouveautés d’Excel 2003.
■ Nouveau classeur. Le volet Office Nouveau classeur permet d’utili-
ser les modèles pour créer un nouveau classeur, de rechercher des
modèles de classeurs sur votre ordinateur ou sur le site Microsoft
Office Online et de créer un classeur vide.
■ Rechercher. Le volet Office Rechercher contient des liens vers une
gamme d’outils de recherche permettant de localiser des mots et des
phrases. Il existe des dictionnaires et des dictionnaires de synony-
mes dans plusieurs langues, ainsi qu’un utilitaire de « traduction »
qui permet de trouver des termes correspondants en anglais, portu-
gais et italien entre autres.
■ Résultats de la recherche. Le volet Résultats de la recherche permet
d’effectuer une recherche dans le système d’aide, sur Micro-
soft.com, sur le site de support Office ou d’exploiter des outils de
recherche avec un mot ou une phrase que vous saisissez.
■ Espace de travail partagé. Le volet Office Espace de travail partagé,
qui fait également partie du nouveau support Excel 2003 pour les
services SharePoint, contient un ensemble de liens hypertexte que
vous pouvez exploiter pour créer et gérer des espaces de travail au
sein desquels vous et vos collègues pouvez collaborer sur un docu-
ment partagé.
■ Source XML. Le volet Office Source XML contient un ensemble
d’outils qui permettent d’assigner une structure XML à une feuille
de calcul pour que vous puissiez échanger des données XML avec
vos collègues et clients.
Barre d’onglets. La barre d’onglets contient un onglet par feuille de calcul. Pour
naviguer de feuille en feuille, servez-vous des flèches de la barre d’onglets ;
pour afficher une feuille en particulier ou modifier la couleur de l’onglet,
cliquez sur l’onglet.
Barre d’état. Comme l’indique son nom, la barre d’état Excel présente l’état du
programme. Elle indique si une sauvegarde ou une sauvegarde automati-

23
Partie 1 : Préliminaires

Microsoft Excel 2003 VBA


que est en cours, elle affiche le total en cours des valeurs des cellules sélec-
tionnées et vous indique, entre autres choses, si les majuscules sont
verrouillées, si le défilement est verrouillé et/ou si la touche VERR NUM est
active sur votre clavier.

Au Quotidien
La fonction opération récapitulative est quelque peu méconnue mais elle offre
une méthode fort pratique d’additionner rapidement quelques cellules de don-
nées dans Excel. Si vous sélectionnez plusieurs cellules, la barre d’état pré-
Chapitre 2

sente la somme des données dans une zone qui se trouve à gauche de
l’indicateur du verrouillage du pavé numérique. L’addition constitue l’opération
récapitulative par défaut. Pour changer ce paramètre, cliquez droit dans la
zone qui contient le résultat et, dans le menu contextuel, choisissez Moyenne,
Compteur, Chiffres (autrement dit, le nom de cellules dans la sélection qui con-
tiennent une valeur numérique), Maximum, Minimum ou Somme. Pour désac-
tiver la fonctionnalité, cliquez sur Aucun. Pour l’activer à nouveau, cliquez droit
dans la zone de la barre d’état et sélectionnez la nouvelle opération.

Formules
Excel est un programme de stockage des données extrêmement puissant, mais
son principal atout réside dans la synthèse des données. Il permet de créer des
formules qui exploitent et récapitulent les valeurs contenues dans les classeurs.
Les formules peuvent être simples, par exemple, afficher la valeur d’une cellule
dans une autre cellule (par exemple, =A1 affiche la valeur de la cellule A1 dans la
cellule qui héberge la formule) ou extrêmement complexes et contenir des don-
nées provenant de plusieurs milliers de cellules.
Dans Excel 2003, lorsque vous saisissez une formule dans une cellule, Excel
reconnaît la fonction et affiche les paramètres attendus sous la forme d’une info-
bulle d’argument. Par exemple, si vous saisissez =RECHERCHEV(, Excel affiche
une info-bulle d’argument contenant RECHERCHEV(valeur_cherchée;
table_matrice; no_index_col; [valeur_proche]). Le premier paramètre à saisir, la
désignation de la cellule ou la valeur de valeur_cherchée, apparaît en gras jusqu’à
ce que vous saisissiez le paramètre, suivi d’un point-virgule. Après avoir tapé le
point-virgule, qui indique que vous avez terminé de saisir la valeur du paramè-
tre, le nom du paramètre suivant s’affiche en gras.

Astuce Dans l’info-bulle d’argument qui s’affiche lorsque vous tapez une for-
mule, vous pouvez cliquer sur le nom d’un paramètre pour lequel vous avez
déjà saisi une valeur pour la modifier.

L’aide à la création de formules ne se limite toutefois pas aux info-bulles d’argu-


ment. Si vous n’êtes pas sûr de la fonction à employer pour générer un résultat,
dans le menu Insertion, choisissez fonction ou cliquez sur le bouton Insérer une

24
Partie 1 : Préliminaires

Tour d’horizon
fonction qui se trouve à l’extrême droite de la barre de formule pour afficher la
boîte de dialogue Insérer une fonction (voir figure 2.5). Cette boîte de dialogue
liste toutes les fonctions disponibles par catégorie et, si vous cliquez sur une
fonction, vous affichez une description de son action ainsi que les arguments
attendus. Si vous double-cliquez sur le nom de la formule, une boîte de dialogue
secondaire s’affiche pour vous aider à créer la formule pas à pas.

Chapitre 2
Figure 2-5. La boîte de dialogue Insérer une fonction permet de trouver une
fonction et vous guide dans le processus de création.

25
Partie 2
Visual Basic pour
Applications
3 Exploration de Visual Basic
pour Applications 29

4 Démarrage de
la programmation VBA 47

5 Création de procédures
Sub et Function 95

27
Partie 2 : Visual Basic pour Applications

Chapitre 3
Exploration de Visual Basic
pour Applications
Tour d’horizon de la Le travail avec les macros. . . . . . 33
programmation orientée objet. . . 29

Ce chapitre vous montre comment fonctionnent les macros dans le contexte de


Microsoft Office Excel 2003. La seconde partie de ce chapitre explique comment
enregistrer les macros, mais commençons par le commencement : que se passe-
t-il lorsque vous créez une macro ? Pour rester brefs, disons que VBA (Visual
Basic pour Applications) voit Excel comme une série d’objets qui ont des attri-
buts descriptifs et des actions qu’ils savent exécuter. Dans le chapitre 1, « Les
nouveautés d’Excel 2003 », vous avez découvert quelques éléments de base que
vous retrouverez lors de l’utilisation et la programmation d’Excel ; ce chapitre
poursuit l’analyse en vous montrant de quelle manière les langages de program-
mation orientés objet exposent leurs éléments, et comment manipuler ces objets
avec l’enregistreur de macros.

Tour d’horizon de la programmation


orientée objet
À la base, un programme informatique n’est autre qu’un jeu d’instructions
qu’un ordinateur exécute dans un ordre spécifié. Dans Excel, cet ordre peut
changer en fonction du contenu de la feuille de calcul sur laquelle travaille le pro-
gramme, mais il subsiste un principe fondamental des langages de
programmation : si vous alimentez un programme avec un même jeu de don-
nées, vous obtenez toujours le même résultat.
Les langages de programmation de première génération étaient procéduraux ; les
programmeurs concevaient un algorithme, ou procédure, que le programme
devait suivre, et définissaient des variables (sortes de conteneurs de valeurs) au
fur et à mesure de leur travail. À mesure que les programmes gagnaient en com-
plexité, il devenait de plus en plus important de pouvoir nommer les variables de
manière descriptive. S’il est aisé de créer une variable nommée prix pour stocker
le prix d’un produit mis en vente dans un magasin, il est difficile d’écrire un pro-
gramme extensible capable de conserver la trace de tous les prix dans le cadre
d’un stock en perpétuel changement. Car il faudrait créer une nouvelle variable
chaque fois que l’on veut commercialiser un nouveau produit. Or ce n’est pas
bien compliqué si cela se produit une ou deux fois par jour, mais si vous dévelop-

29
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


pez beaucoup de programmes et que vous voulez gagner du temps en créant du
code réutilisable, il vous faut organiser le code autour des éléments constitutifs de
votre environnement. Les programmeurs utilisant les langages procéduraux ten-
taient de résoudre le problème en représentant les éléments de leurs environne-
ments par des types de données abstraits. Ces derniers sont des ensembles de
caractéristiques et opérations qui reflètent les valeurs et les actions associées à
quelque chose que vous avez besoin de représenter dans un programme (un pro-
duit, par exemple). Par exemple, une jardinerie peut avoir un rayon couvert et
une pépinière et il est possible d’associer les produits commercialisés à l’empla-
cement qui leur correspond. Le type de donnée abstrait produit peut prendre des
valeurs reflétant son nom, sa catégorie, son prix, son fournisseur, une descrip-
tion et ainsi de suite. Il est cependant important de savoir que le fait de définir un
type de donnée abstrait pour représenter un produit ne crée pas d’emplacement
où conserver ses valeurs et les actions qui lui sont associées. Il vous faut en effet
créer une instance du type de donnée abstrait pour y stocker les données et les
actions associées à la nouvelle marque d’engrais que vous venez de mettre en
vente dans la partie couverte de votre jardinerie. Cette instance doit avoir un
identifiant unique au sein du système, comme par exemple produit001, et le pro-
Chapitre 3

gramme est censé savoir que le nom du produit, sa catégorie, son prix, sa des-
cription et son fournisseur sont autant d’éléments liés à ce produit spécifique.
Les types de données sont pratiques pour définir des jeux de variables dans un
programme, mais la structure sous-jacente des langages de programmation qui
travaillent avec des types de données abstraits reste procédurale car il peut exister
des routines résidant à l’extérieur des types abstraits. Avec un langage orienté
objet, tous les aspects de votre code sont basés sur les éléments de votre environ-
nement. Ces « éléments », on ne s’étonnera point qu’ils soient représentés par
des objets, et que toutes les actions et données soient encapsulées dans ces fameux
objets. Dans Excel, ces objets peuvent être des classeurs, des feuilles de calcul, des
plages de cellules, ou des fichiers externes. En règle générale, vous pouvez déve-
lopper un programme en vous penchant sur quatre aspects qui caractérisent les
objets :
● les propriétés ;
● les méthodes ;
● les événements ;
● les collections.

Propriétés
En un mot comme en cent, les propriétés sont des variables qui décrivent un
aspect de l’objet dans lequel elles se trouvent. Pour les objets Excel, le Nom
(Name) est une propriété courante ; elle détient la valeur d’identification que
vous ou Excel avez assigné aux classeurs, feuilles de calcul, plages de cellules, ou
objets autres. Si vous modifiez le nom d’une feuille de calcul, que ce soit par le
biais de code VBA ou en cliquant droit sur l’onglet de la feuille de calcul, puis en
cliquant sur Renommer, avant de modifier la valeur, vous apportez un change-

30
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications


ment à la valeur stockée dans la propriété Name. Il est des propriétés que vous
pouvez modifier directement (c’est le cas de Name). Mais pour d’autres proprié-
tés de classeur, vous devez entreprendre une action par le biais de l’interface
Excel (par exemple, protéger une plage de cellules) ou par le biais d’une méthode
(voir plus loin dans ce chapitre).
Dans VBA, on référence les propriétés dans un programme par une notation avec
point, où le nom de l’objet apparaît en première position, le nom de la propriété
vient ensuite et les deux composants sont séparés par un point. Par exemple,
pour modifier le nom d’une feuille de calcul, vous allez employer la propriété
Worksheet.Name. En modifiant le nom d’une feuille de calcul après avoir modifié
ou actualisé des cellules, vous faites en sorte que vous-même et vos collègues
sachent que les données sont désormais différentes et qu’elles nécessitent une
vérification avant que la feuille de calcul puisse rejoindre un ensemble de docu-
ments finalisés.

Méthodes

Chapitre 3
Une méthode est une action qu’un objet sait réaliser. Par exemple, vous savez sans
doute que la feuille de calcul affichée dans la fenêtre Excel est qualifiée de fenêtre
active. Dans Excel VBA, vous pouvez modifier la feuille de calcul sur laquelle
vous travaillez en invoquant la méthode Activate de la feuille de calcul cible. Une
fois que Activate s’exécute, la feuille de calcul concernée vient se placer au pre-
mier plan des feuilles de calcul actives de la fenêtre Excel et elle devient disponi-
ble pour être modifiée. Comme pour les propriétés, les méthodes sont désignées
au moyen d’une notation avec point. Pour recalculer toutes les formules d’une
feuille de calcul, par exemple, vous appellerez la méthode Worksheet.Calculate.

Événements
Tout comme une propriété est un attribut quantifiable d’un objet et une
méthode est une action qu’un objet sait entreprendre, un événement est une
action qu’un objet reconnaît comme ayant eu lieu. Voici quelques exemples
d’événements reconnus par Excel 2003 :
● Ouverture ou fermeture d’un classeur.
● Activation ou désactivation d’un classeur.
● Enregistrement d’un classeur.
● Sélection d’un graphique.
● Activation d’une touche du clavier (ou d’une combinaison de touches).
● Saisie d’une donnée dans une cellule.
● Recalcul d’une formule dans une feuille de calcul.
● Activation d’un lien hypertexte.

Excel est livré avec un certain nombre de gestionnaires d’événements, ou routi-


nes de code qui surveillent la survenue de certaines actions. Lorsque l’une de ces

31
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


actions a lieu et que vous avez indiqué à Excel ce que vous voulez qu’il fasse lors
de la survenue de l’événement correspondant, Excel exécute le code dans votre
gestionnaire d’événements. Par exemple, si après avoir créé un nouveau classeur,
vous souhaitez qu’Excel affiche tous les classeurs ouverts en cascade, vous pouvez
créer le gestionnaire d’événements suivant :

Private Sub App_NewWorkbook(ByVal Wb As Workbook)


Application.Windows.Arrange xlArrangeStyleCascade
End Sub

Ne vous souciez pas de savoir ce que fait chaque élément de la routine ; pour le
moment, voyez la deuxième ligne de code, qui indique à l’application Excel
d’organiser ses fenêtres en cascade. Le résultat est le même que si vous aviez cli-
qué sur Fenêtre, Réorganiser, Cascade dans l’interface Excel. Mais si vous souhai-
tez que l’action se reproduise chaque fois qu’un événement précis a lieu, vous
pouvez vous servir de VBA pour que cela se fasse sans intervention de votre part.

Collections
Chapitre 3

Le dernier élément de la programmation orientée objet que vous devez connaître


est la collection. Comme son nom l’indique, une collection est un groupe d’objets
du même type qui se trouvent à l’intérieur d’un autre objet. Par exemple, un
classeur contient une collection d’une ou plusieurs feuilles de calcul. Pour appli-
quer un changement à toutes les feuilles de calcul de votre classeur, vous pouvez
passer de l’une à l’autre pour les modifier par voie de programmation.
Si vous avez déjà fait de la programmation, vous connaissez déjà probablement
la boucle For…Next, qui permet de répéter un jeu d’instructions plusieurs fois
via du code semblable à la séquence qui suit et qui ajoute le chemin de dossier du
classeur actif à la section de droite du pied de page sur la première des trois
feuilles de calcul :

For i = 1 to 3
Worksheets(i).PageSetup.RightFooter = Path
Next i

Le problème de ce codage « en dur » (c’est-à-dire le fait s’assigner une valeur


définie) de la limite supérieure de la boucle For…Next est que cela vous oblige à
modifier le code chaque fois que vous ajoutez ou supprimez une feuille de calcul.
Ce n’est pas bien gênant si vous le faites une fois de temps en temps, mais si vous
gérez de grosses quantités de code, vous finirez inévitablement par oublier cette
modification, ce qui entraînera des erreurs qu’il vous faudra rectifier. Pire
encore, vous risquez de ne rien remarquer tant que votre correcteur n’aura pas
découvert que les 500 premiers exemplaires de votre rapport annuel sont mal
formatées. Imaginez qu’il vous appelle juste au moment où vous vous apprêtiez
à éteindre votre téléphone portable pour partir tranquille à la plage… Bien sûr,
vous pouvez écrire quelques lignes de code pour savoir combien de feuilles de
calcul se trouvent dans votre classeur, mais il y a plus simple : utiliser une boucle
For Each…Next. La boucle trouve le nombre d’objets d’une collection (le nom-

32
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications


bre d’objets d’un classeur), et passe d’une occurrence à l’autre. Dans cet exemple,
le code précédent serait écrit de la manière suivante.

For Each Wksht in Worksheets


Wksht.PageSetup.RightFooter = Path
Next Wksht

Au lieu d’incrémenter la valeur comme dans une boucle For…Next standard, on


se contente de rechercher le prochain membre de la collection Worksheets et
d’arrêter de boucler lorsqu’on n’en trouve plus.

Pour plus d’informations sur les boucles For…Next et For Each…Next, voir « Contrôle de
la progression du programme » dans le chapitre 4 « Démarrage de la programmation
VBA ».

Le travail avec les macros


L’avantage le plus évident des macros Excel est d’automatiser ainsi les tâches
répétitives. Les macros et Visual Basic pour Applications ne se réduisent pas à la

Chapitre 3
possibilité de répéter des actions sans intervention humaine, mais commençons
par là. Dans cette section, nous allons voir comment enregistrer des macros, les
exécuter selon la méthode la plus aisée pour vous, et exploiter les fonctionnalités
intégrées de sécurité des macros pour vous protéger des virus.

Enregistrer et afficher des macros


Rien de plus facile que d’enregistrer une macro dans Excel 2003 : vous cliquez
sur Outils, Macro, Nouvelle macro pour afficher la boîte de dialogue Enregistrer
une macro (voir figure 3.1).

Figure 3-1. La boîte de dialogue Enregistrer une macro présente une interface
de gestion des macros dans votre classeur.

Tapez le nom que vous voulez donner à la macro dans la zone Nom de la macro
et cliquez sur OK. La boîte de dialogue disparaît et est remplacée par la barre
d’outils Arrêter l’enregistrement.

Vous êtes en train d’enregistrer ! Exécutez les actions à inclure dans la macro, cli-
quez sur le bouton Arrêter l’enregistrement de la barre d’outils et votre macro est
prête à être utilisée. Comme pour tout effort de programmation, vous devez pré-

33
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


voir ce que vous voulez faire aussi efficacement et rapidement que possible.
N’hésitez pas à pratiquer de manière à vous assurer que vos actions génèrent le
résultat voulu.
Une fois l’enregistrement terminé, vous pouvez visualiser le code Excel VBA en
cliquant sur Outils, Macros, <nom_macro>, Modifier. La macro apparaît dans
l’Éditeur Visual Basic, comme dans la figure 3.2.

Remarque Vous en apprendrez plus sur l’Éditeur Visual Basic dans le chapi-
tre 4 « Démarrage de la programmation VBA ».
Chapitre 3

Figure 3-2. Observez le code de vos macros dans l’Éditeur Visual Basic.

Cette macro applique une mise en forme en gras et italique au contenu de la cel-
lule sélectionnée et à celui de la cellule H13. Cette macro présente une autre
particularité : elle était censée fonctionner pour la cellule active et pour celle éloi-
gnée de deux cellules sur la droite, mais en réalité, elle affecte la cellule active et la
cellule H13. Cela est dû au fait que l’enregistreur de macros a utilisé des référen-
ces absolues, qui reflètent les noms des cellules au cours de leur sélection, au lieu
des références relatives, qui reflètent les positions des cellules sélectionnées par
rapport à la cellule active au moment de l’enregistrement de la macro. Pour pas-
ser des références absolues aux références relatives, cliquez sur le bouton Réfé-
rences relatives dans la barre d’outils Arrêter l’enregistrement. La figure 3.3 vous
montre la même macro enregistrée avec des références relatives.

34
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications

Figure 3-3. Est enregistrée ici une macro plus souple, qui fonctionne sur
n’importe quel jeu de cellules sélectionnées au moment de l’enregistrement de
la macro.

Pour plus d’informations concernant la création de références relatives via la propriété


Offset, lisez la section « Référencement des plages » dans le chapitre 8 « Plages et

Chapitre 3
cellules ».

Exécuter une macro


Une fois que vous avez créé votre macro, vous pouvez l’exécuter à tout moment
en cliquant sur Outils, Macro, Macros, <nom_macro>, puis sur Exécuter. En
outre, dans la boîte de dialogue Macro, vous pouvez afficher les macros des
autres classeurs en cliquant sur la flèche adjacente à la zone Macros dans, et en
sélectionnant un classeur par son nom ou en choisissant l’option Tous les clas-
seurs ouverts, ce qui affiche toutes les macros des classeurs ouverts. Dans les
deux cas, les noms des macros affichés incluent le nom du classeur dans lequel la
macro est stockée.

Astuce Exécuter automatiquement des macros


Si vous souhaitez que la macro s’exécute chaque fois qu’un classeur donné
est ouvert, nommez-la Auto_Open.

Il existe plusieurs autres manières d’exécuter une macro dans Excel, mais elles
nécessitent l’assignation de la macro à une action que l’utilisateur puisse exécu-
ter. Voici ces actions :
● Appuyer sur une séquence de touches.
● Lier une macro à un bouton de barre d’outils.
● Lier une macro à un élément de menu.

Affecter une macro à une séquence clavier


Les utilisateurs qui préfèrent travailler avec les raccourcis clavier dans Excel
(comme par exemple CTRL+C pour copier) affecteront leurs macros à des

35
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


séquences effectuées au clavier. Il est important de savoir que si vous assignez
une macro à une séquence clavier déjà employée par ailleurs (par exemple
CTRL+S pour enregistrer un classeur), la nouvelle assignation prend la pré-
séance sur le comportement par défaut dans le classeur concerné.
Voici comment assigner une séquence clavier à une macro :
1 Cliquez sur Outils, Macro, Macros.
2 Dans la zone Nom de la macro, sélectionnez le nom de la macro à laquelle
assigner un raccourci clavier.
3 Cliquez sur Options.
4 Tapez une lettre dans la zone Touche de raccourci. Si vous tapez une lettre
minuscule, votre raccourci sera CTRL+lettre ; si vous tapez une majus-
cule, votre raccourci sera CTRL+MAJ+lettre.

Remarque La touche de raccourci doit être une lettre ; il n’est pas possible
de choisir un chiffre ou un caractère spécial comme le signe dollar ($) ou
l’esperluette (&).
Chapitre 3

5 Tapez une description de votre macro dans la zone Description.


6 Cliquez sur OK.
7 Cliquez sur Annuler.

Affecter une macro à un bouton de barre d’outils


Exécuter une macro à partir de la boîte de dialogue Macros est la manière
« intégrée » la plus aisée de procéder, mais lorsque vous vous déplacez tous azi-
muts dans une feuille de calcul, vous n’avez aucune envie de plonger dans le sys-
tème de menus pour ouvrir une boîte de dialogue, vous souvenir du nom de la
macro à exécuter, puis la lancer. Il est beaucoup plus simple d’assigner la macro
à un bouton de barre d’outils de manière à l’exécuter d’un simple clic de souris.
Il est possible d’ajouter un bouton à une barre d’outils existante, mais il est plus
judicieux de créer une nouvelle barre d’outils pour y accueillir les boutons de vos
macros. Si votre écran est réglé sur une résolution relativement basse afin de
réduire la fatigue oculaire, par exemple, il ne vous restera pas beaucoup de place
dans les barres d’outils existantes. Par ailleurs, si vous placez plusieurs boutons
de macros, vous risquez d’avoir du mal à sélectionner le bon bouton dans une
barre d’outils fortement « peuplée ». Si vous placez vos boutons dans une barre
d’outils de macros clairement nommée, vous gagnerez du temps et vous sou-
viendrez plus facilement des boutons de chaque macro.
Voici comment créer une nouvelle barre d’outils, y ajouter un bouton et assigner
une macro au bouton :
1 Cliquez sur Outils, Personnaliser. Puis, si nécessaire, cliquez sur l’onglet
Barres d’outils.

36
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications


2 Cliquez sur Nouvelle. Dans la zone Nom de la barre d’outils, tapez le nom
voulu et cliquez sur OK.

3 Dans la boîte de dialogue Personnaliser, cliquez sur l’onglet Commandes.


4 Dans la liste Catégories, cliquez sur Macros.
5 Faites glisser le bouton Bouton personnalisé vers la barre d’outils.
6 Dans la nouvelle barre d’outils, cliquez droit sur le bouton que vous venez
d’ajouter, cliquez dans la zone Nom, tapez le nom du bouton et appuyez
sur ENTRÉE.
7 Dans la nouvelle barre d’outils, cliquez droit sur le nouveau bouton et cli-
quez sur Affecter une macro.

Chapitre 3
8 Sélectionnez la macro à affecter au bouton et cliquez sur OK.
9 Dans la boîte de dialogue Personnaliser, cliquez sur Fermer.

Affecter une macro à un élément de menu


De même que vous pouvez créer des barres d’outils pour accueillir les boutons
d’exécution de vos macros, vous pouvez créer des menus personnalisés pour ser-
vir le même objectif. Du point de vue fonctionnel, les deux solutions sont équi-
valentes. Mais il existe deux arguments en faveur des menus : il reste
généralement assez de place dans la barre de menus pour y ajouter un élément.
De plus, comme les menus ne s’affichent que si vous les ouvrez, ils n’occupent
pas d’espace à l’écran comme c’est le cas des barres d’outils. Voici comment assi-
gner un élément de menu à une macro :
1 Cliquez sur Outils, Personnaliser. Si nécessaire, cliquez sur l’onglet Com-
mandes.
2 Dans la liste Catégories, cliquez sur Nouveau menu et faites-en glisser la
boîte vers l’extrémité droite de la barre de menus principale.
3 Cliquez droit sur le nouveau menu, puis sur Nom. Tapez le nom du nou-
veau menu et appuyez sur ENTRÉE.

37
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


4 Dans le volet Catégories de la boîte de dialogue Personnaliser, cliquez sur
Macros.
5 Dans la liste Commandes, faites glisser la commande Élément de menu
personnalisé vers l’en-tête du nouveau menu. Relâchez le bouton de la
souris une fois que vous avez placé le nouvel élément de menu dans la
boîte qui s’affiche sous l’intitulé de menu.
6 Dans le nouveau menu, cliquez droit sur Élement de menu personnalisé
et cliquez dans la zone Nom.
7 Tapez le nom voulu pour le menu et appuyez sur ENTRÉE.
8 Dans le nouveau menu, cliquez droit sur l’élément de menu que vous
venez de renommer et choisissez la commande Affecter une macro. Puis,
dans la boîte de dialogue du même nom, cliquez sur la macro à assigner à
l’élément de menu avant de cliquer sur OK.
9 Cliquez sur Fermer.

Déboguer une macro


Chapitre 3

La création et l’enregistrement de macros entraîne leur débogage, à savoir le pro-


cessus qui consiste à découvrir pourquoi votre code VBA ne fonctionne pas
comme il devrait. L’Éditeur Visual Basic vous donne quelques outils permettant
de tester vos macros. Le fait de vérifier le code instruction par instruction cons-
titue une option de débogage particulièrement intéressante.
1 Pour lancer le processus, cliquez sur Outils, Macro, Macros
<nom_macro>, Pas à pas détaillé dans Visual Basic Editor.
2 Dans la fenêtre de l’éditeur, appuyez sur F8 pour exécuter la prochaine
instruction de la macro. Comme le montre la figure 3.4, une flèche appa-
raît à côté de la prochaine instruction à exécuter et celle-ci se met en sur-
brillance.

38
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications

Figure 3-4. L’Éditeur Visual Basic la prochaine ligne de code qui sera
exécutée.

Chapitre 3
Par la suite, chaque fois que vous appuyez sur F8, vous exécutez l’étape en sur-
brillance de la macro et mettez en surbrillance la prochaine étape, le cas échéant.
Il existe d’autres méthodes pour vérifier l’exécution des macros. Le tableau 3.1
vous donne la liste de ces raccourcis clavier et décrit brièvement sa fonction.
Tableau 3-1. Raccourcis clavier pour exécuter des instructions
de macros dans Visual Basic Editor
Séquence Résultat
F5 Exécute le code de la macro.
F8 Exécute l’étape en surbrillance et déplace la surbrillance
vers la prochaine étape du code.
MAJ+F8 Saute l’étape en surbrillance et déplace la surbrillance vers
la prochaine étape du code.
CTRL+MAJ+F8 Arrête l’exécution du code de la macro.
CTRL+F8 Place le curseur dans le code de la macro ; appuyez sur
CTRL+F8 pour que l’éditeur exécute le code jusqu’à
l’emplacement du curseur.
MAJ+F9 Active un espion express pour suivre la valeur d’une variable
sélectionnée dans le code.
F9 Insère un point d’arrêt au niveau du curseur, ce qui permet
au code de s’exécuter jusqu’à ce point et de s’arrêter là.
CTRL+MAJ+F9 Supprime tous les points d’arrêt.
CTRL+F9 Identifie l’instruction sélectionnée comme prochaine
instruction à exécuter.

39
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Si votre macro s’exécute, mais qu’elle ne produit pas le résultat escompté, il est
particulièrement utile de placer le code de la macro dans une fenêtre et la feuille
de calcul dans une autre, et d’effectuer un débogage pas à pas du code, ligne par
ligne, en utilisant la touche F8. En sautant des étapes avec la combinaison
MAJ+F8, vous pouvez passer outre des instructions dont vous savez qu’elles ne
fonctionnent pas correctement. Si rien ne fonctionne et que vous voulez tout
arrêter avant la catastrophe, la combinaison CTRL+MAJ+F8 vous permet
d’arrêter l’exécution immédiatement. Ce faisant, vous n’annulez pas les étapes
qui se sont exécutées avant d’effectuer la combinaison, mais vous empêchez
l’exécution du restant du code.

Attention Lorsque vous exécutez une macro à plusieurs reprises, n’oubliez


pas d’annuler les changements que celle-ci a apportés à votre feuille de cal-
cul. Dans le cas contraire, vous ne verriez pas l’effet produit lors de la pro-
chaine exécution.

Par différence, un point d’arrêt est un point défini qui détermine la fin de la par-
tie de code à exécuter. Pour poursuivre au-delà du point d’arrêt, appuyez sur F5.
Chapitre 3

Comme le montre la figure 3.5, Visual Basic Editor indique la présence d’un
point d’arrêt en plaçant un point dans la barre verticale située le long de la bor-
dure gauche de la fenêtre de code et en affichant ce dernier en vidéo inverse.

Figure 3-5. Les points d’arrêt permettent d’exécuter le code jusqu’à un point
spécifique avant de poursuivre ligne par ligne.

Mettre en œuvre la sécurité des macros et des signatures


numériques
Les virus et autres formes de logiciels préjudiciables existent et vous ne devez pas
les ignorer lorsque vous travaillez avec des langages aussi puissants et souples que
VBA. Vous devez disposer d’un logiciel antivirus (ou deux) sur chacun de vos
ordinateurs ; il s’agit de votre première ligne de défense contre les virus macro

40
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications


(des virus écrits dans un langage de programmation de macros). Mais de nou-
veaux virus apparaissent régulièrement et il se peut que vos programmes de
détection ne reconnaissent pas les nouvelles menaces. Votre deuxième ligne de
défense, naturellement, dépend de votre méfiance quant aux fichiers que vous
recevez, attendus ou pas. Mais vous disposez d’une troisième ligne de défense, à
savoir les paramètres de sécurité des macros Excel.

Astuce Empêcher l’exécution automatique des macros


Si vous souhaitez qu’Excel démarre sans démarrer une macro à lancement
automatique, maintenez enfoncée la touche MAJ au démarrage du pro-
gramme.

Les paramètres de sécurité des macros d’Excel déterminent le niveau d’autorisa-


tion que vous souhaitez accorder aux macros s’exécutant sur votre ordinateur. Il
existe quatre réglages de sécurité pour les macros : Très élevée, Niveau de sécurité
élevée, Niveau de sécurité moyen, Niveau de sécurité faible, auxquels vous accé-
dez en cliquant sur Outils, Options, Sécurité, Sécurité des macros pour afficher

Chapitre 3
la boîte de dialogue Sécurité.
Le dernier niveau est à rayer de votre liste, même si vous avez installé sur votre
ordinateur un antivirus « blindé ». Un seul virus macro pénétrant dans votre sys-
tème, c’est déjà trop. Aucun logiciel ne peut savoir quels fichiers vous attendez ;
vous ne pouvez donc vous passer d’une intervention humaine active dans le pro-
cessus de sécurisation de votre ordinateur. Et l’humain, c’est vous.

Lorsque vous activez le niveau de sécurité moyen, Excel affiche une boîte de dia-
logue qui vous demande si vous voulez activer les macros chaque fois que vous
ouvrez un classeur qui en contient. En cliquant sur Activer les macros, vous
ouvrez le classeur et permettez l’exécution des macros dans le classeur. Cliquez
sur Désactiver les macros pour ouvrir le classeur sans autoriser l’exécution des
macros et cliquez sur Annuler pour ne pas ouvrir le classeur. Si vous travaillez
beaucoup sur les macros, que vous êtes la seule personne à utiliser votre ordina-
teur et que vous êtes certain de ne pas oublier de désactiver l’ouverture des
macros en cas de réception d’un fichier suspect, le réglage sur le niveau de sécu-

41
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


rité moyen convient. Si vous partagez votre ordinateur, ou que vous partez en
vacances et que vous ne voulez pas que l’on fasse n’importe quoi sur la machine,
alors n’oubliez pas de définir un niveau de sécurité élevé. Vous pourrez toujours
revenir à une sécurité moyenne à votre retour au bureau.

Introduction aux signatures numériques


Le mécanisme associé au niveau de sécurité élevé repose en partie sur l’usage des
signatures numériques, qui permettent de vérifier l’origine du code VBA associé à
un classeur. Une signature numérique est le résultat d’une opération basée sur les
techniques de cryptage à clé publique. Elle constitue une combinaison unique du
document ainsi signé et d’un fichier connu de vous seul, mais vous pouvez véri-
fier que vous êtes bel et bien à l’origine de la signature. L’aspect mathématique de
l’opération est complexe et repose sur des théories que seule une poignée de
chercheurs maîtrise vraiment. Mais voici un aperçu de ce qui se passe au cours
d’une opération de cryptage.
La première étape consiste à générer une clé qui sera employée pour crypter les
données en ajoutant les valeurs contenues dans la clé à celles qui constituent le
Chapitre 3

texte. Prenons un exemple simple : la clé est la lettre a et le mot à crypter est
kazoo. Si vous ajoutez « a », ou plutôt sa position en tant que première lettre de
l’alphabet, à chaque lettre du mot kazoo, vous décalez chaque lettre en lui subs-
tituant la suivante. Cela vous donne le mot crypté lbapp. La clé que vous générez,
en réalité, est beaucoup plus longue, et elle est découpée en deux portions : une
moitié publique et une moitié privée. La seconde, également appelée clé privée,
doit être gardée secrète. Vous n’avez à la partager avec personne et quiconque
vous demandant de la lui fournir serait à soupçonner d’avoir de mauvaises
intentions à votre égard. En revanche, vous devez diffuser la clé publique, en la
donnant à toute personne avec laquelle vous vous apprêtez à échanger des
fichiers signés numériquement. Avec le cryptage à clé publique, l’astuce est que
toute personne disposant d’une copie de votre clé publique peut vérifier qu’un
document que vous avez signé avec votre clé privée provient bien de vous et qu’il
n’a pas été modifié depuis que vous l’avez signé.
En fonction du logiciel de cryptage employé, vous aurez la possibilité d’utiliser
votre paire de clés publique-privée pour apposer votre signature numérique aux
classeurs et au code des macros que vous diffuserez sur le réseau interne. Le pro-
blème des clés qui ne sont pas distribuées à l’extérieur de votre organisation est
que toute personne se trouvant à l’extérieur de votre réseau ne pourra pas savoir
si votre signature est valide ou pas. Si vous avez besoin de travailler avec des par-
tenaires extérieurs à votre réseau d’entreprise, vous pouvez vous procurer un
certificat numérique auprès d’une société spécialisée. Un certificat numérique
est un fichier électronique qui vous identifie et contient des informations comme
le nom de votre organisation, l’autorité émettrice du certificat, votre adresse
courriel et votre pays, ainsi que la date d’expiration du certificat. Il détient une
copie de votre clé publique. Après avoir signé un document avec un certificat
numérique, toute personne désireuse de vérifier que le certificat employé pour
signer le document vous appartient bien, peut s’adresser au serveur de clés main-

42
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications


tenu par l’autorité de certification et vérifier la correspondance de la signature
avec votre clé publique.

Au Quotidien
Certificats numériques : vous pouvez même créer le vôtre

Vers la fin des années 1990, la concurrence était forte sur le marché de la cer-
tification numérique. Plusieurs sociétés se faisaient la guerre pour s’emparer
de la plus grosse part du gâteau. Début 2000, deux compagnies sont sorties
du lot : VeriSign et Thawte Consulting. En décembre 1999, VeriSign a mis fin à
toute concurrence en rachetant Thawte et désormais, les deux plus gros four-
nisseurs de certificats numériques se trouvent réunis dans une même corpo-
ration. V isitez les sites web http://www.verisign.com/ et http://
www.thawte.com/ pour vous faire une idée des produits et services qu’offrent
ces entreprises.

Thawte et VeriSign sont les leaders du marché, mais que cela ne vous empê-
che pas de prêter attention aux clauses de réserve qu’ils incluent dans leur

Chapitre 3
contrat standard. En effet, ces sociétés font de leur mieux pour procéder à la
vérification de l’identité des individus et des entreprises qui leur achètent des
certificats numériques. Mais en aucun cas elle ne garantissent que leurs
méthodes sont infaillibles et en fait, vous ne pourrez pas les attaquer si
quelqu’un parvient à contourner leurs procédures de vérification et à s’empa-
rer d’une fausse identité numérique.

Signature numérique des classeurs et des macros


Une fois muni de votre certificat numérique, vous pouvez signer un classeur en
cliquant sur Outils, Options, Sécurité, Signatures numériques, Ajouter, <nom-
certificat>, OK. Une fois que vous avez cliqué sur Ajouter, la boîte de dialogue
Sélectionner un certificat (voir figure 3.6) s’affiche, avec une liste des certificats
existants sur votre ordinateur. Vous pouvez alors cliquer sur le nom du certificat
avec lequel vous voulez signer le classeur (ou cliquer sur Afficher le certificat
pour voir les détails au cas où plusieurs de vos certificats auraient le même nom).
Cliquez sur OK pour signer votre classeur.

43
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Figure 3-6. La boîte de dialogue Sélectionner un certificat affiche les certificats


disponibles pour la signature numérique de vos classeurs.

Dans Visual Basic Editor, le processus est pratiquement le même. Pour signer le
code VBA associé à un classeur, cliquez sur Outils, Macro, Visual Basic Editor.
Dans l’éditeur, cliquez sur Outils, Signature électronique, Choisir,
<nom_certificat> et cliquez sur OK. À la différence de la boîte de dialogue Sélec-
tionner un certificat qui s’affiche lorsque vous voulez signer un classeur, la boîte
de dialogue Signature numérique qui s’affiche lorsque vous voulez signer du
Chapitre 3

code VBA vous permet d’utiliser un certificat qui a déjà expiré. Le fait d’afficher
les certificats arrivés à expiration n’est pas très judicieux. En effet, comme vous le
verrez dans la prochaine section, signer une macro avec un certificat périmé
équivaut à ne pas la signer du tout.

Remarque En testant cette fonctionnalité d’Excel, nous nous sommes aper-


çus que lorsque l’on affectait un certificat périmé à une macro, un avertisse-
ment s’affichait quelque deux minutes plus tard, indiquant qu’il y avait un
problème de certificat numérique et que la signature n’avait pas pu être accep-
tée. Il aurait été plus simple de ne pas afficher les certificats périmés, mais le
fait que le logiciel arrive à détecter la présence d’un problème avant que l’on
puisse diffuser le code constitue tout de même une solution acceptable.

Signatures numériques et réglage sur le niveau


de sécurité élevé
La section précédente nous conduit naturellement à aborder la question du
Niveau de sécurité élevé. Lorsqu’il est activé, Excel devient particulièrement
méfiant quant à l’exécution des macros. Si le logiciel ne reconnaît pas la source
qui a signé les macros dans le classeur que vous vous apprêtez à ouvrir, la routine
de sécurité vous demande si vous êtes d’accord pour faire confiance à la source
signataire de la macro ou désactive automatiquement les macros.
Vous pouvez ajouter une source approuvée à Excel en ouvrant le fichier qui con-
tient les macros signées numériquement en provenance du développeur que
vous voulez ajouter à la liste. Une boîte de dialogue d’avertissement de sécurité
s’affiche alors, indiquant que l’émetteur ne se trouve pas dans la liste approuvée.
Pour ajouter cet émetteur à la liste des sources approuvées, cochez la case Tou-

44
Partie 2 : Visual Basic pour Applications

Exploration de Visual Basic pour Applications


jours faire confiance aux macros provenant de cet éditeur et cliquez sur Activer
les macros.

Remarque Votre administrateur réseau a la possibilité d’empêcher les utili-


sateurs d’ajouter des sources à la liste des sources approuvées. Vous serez
peut-être obligé de le consulter avant de pouvoir ajouter des développeurs à
votre liste.

Dans un certain nombre de cas de figure, les signatures numériques et les macros
interagissent avec Excel lorsque le niveau de sécurité est défini à un niveau élevé.
Le tableau 3.2 reprend ces différentes situations et l’effet correspondant du
réglage Niveau de sécurité élevé.
Tableau 3-2. Comment Excel réagit à différents scénarios de
signature numérique avec un niveau de sécurité défini à élevé
Circonstance Réaction
La macro n’a pas de signature Excel désactive les macros et ouvre le

Chapitre 3
numérique. classeur.
La macro a une signature valide Excel active les macros et ouvre le
provenant d’une source classeur.
approuvée.
La macro a une signature valide Excel affiche les informations relatives au
provenant d’une source inconnue. certificat et si cette fonction n’a pas été
désactivée par l’administrateur réseau, il
vous demande si vous souhaitez approuver
la source et l’autorité de certification.
La macro a une signature non Excel désactive les macros et vous avertit
valide, indiquant que le fichier a de la présente éventuelle d’un virus.
peut-être été endommagé par un
virus.
La signature ne peut être vérifiée Excel désactive les macros et indique qu’il
car la clé publique est manquante n’a pas pu vérifier la signature.
ou ne peut être localisée sur un
serveur de clés.
La macro a été signée avec un Excel désactive les macros et indique que
certificat qui a expiré ou qui a été le certificat est non valide.
révoqué.

45
Partie 2 : Visual Basic pour Applications

Chapitre 4
Démarrage de la
programmation VBA
Introduction à Visual Création de tableaux
Basic Editor . . . . . . . . . . . . . . . . . 47 dynamiques. . . . . . . . . . . . . . . . . 73
Gestion des fenêtres Code . . . . . . 59 Écriture à l’écran et acceptation
Développement de projets avec des entrées utilisateur . . . . . . . . 74
l’Explorateur de projets . . . . . . . . 62 Définition de variables objet . . . . 81
Déclaration des variables, Création de types de données
constantes et types de données . 64 personnalisés . . . . . . . . . . . . . . . 81
Assignation de valeurs Contrôle de la progression du
aux variables . . . . . . . . . . . . . . . . 71 programme . . . . . . . . . . . . . . . . . 82
Tableaux . . . . . . . . . . . . . . . . . . . . 72 Gestion des erreurs . . . . . . . . . . . 91

Introduction à Visual Basic Editor


Visual Basic Editor est un outil puissant qui étend les capacités et la polyvalence
des macros bien au-delà du simple enregistrement d’actions. Pour comprendre
le fonctionnement de Visual Basic Editor, ce chapitre en examine toutes les
facettes : les différents composants, leur action et leur utilisation. Pour commen-
cer, nous allons étudier le langage Visual Basic pour Applications (VBA),
employé pour programmer toutes les macros.
Si vous n’avez jamais utilisé Visual Basic Editor auparavant, suivez ce chapitre du
début à la fin. En revanche, si vous connaissez déjà Visual Basic Editor, passez
directement aux sections qui vous intéressent.

Ouvrir Visual Basic Editor


À l’instar de la majorité des applications Windows, il existe plusieurs méthodes
pour ouvrir Visual Basic Editor. Dans le menu Outils, choisissez Macros, Visual
Basic Editor ou appuyez sur ALT+F11. Pour modifier ou afficher une macro spé-
cifique, dans le menu Outils, choisissez Macro, Macros pour afficher la boîte de
dialogue Macro. Dans cette boîte de dialogue, sélectionnez la macro de votre
choix et cliquez sur le bouton Modifier. Vous pouvez également ouvrir la boîte de
dialogue Macro en appuyant sur ALT+F8.

47
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Tour d’horizon de Visual Basic Editor


Lorsque vous ouvrez Visual Basic Editor, vous utilisez la fenêtre Explorateur de
projets pour travailler directement sur la macro de votre choix. Cette fenêtre pré-
sente tous les projets (groupes de code) et les macros qu’ils contiennent dans une
arborescence dont le fonctionnement est similaire à celui de l’arborescence de
l’Explorateur Windows. Le classeur sur lequel vous travaillez, ainsi que tout
autre classeur ou composant externe ouvert, constitue l’objet racine, ou objet de
base, de l’arborescence.
Les principaux éléments employés par les projets VBA sont stockés dans des dos-
siers séparés au sein du projet. Parmi ces éléments, on trouve des objets, que
nous avons étudiés au chapitre 3, des modules, qui contiennent le code de macro
associé à la feuille de calcul, des modules de classe, qui définissent les objets créés
pour le classeur (nous les détaillerons au chapitre 14) et des feuilles, que nous
étudierons au chapitre 19.
Dans l’exemple de la figure 4.1, le classeur est libellé VBAProject (Manipula-
tionsDateHeure.xls). Les trois feuilles de calcul qu’il contient (Feuil1, Feuil2 et
Feuil3), ainsi que le classeur (ThisWorkbook), se trouvent dans le dossier Micro-
soft Excel Objets. Toutes les macros programmées en VBA ou enregistrées se
trouvent également dans le dossier Modules. Les modules de classe et les feuilles
s’affichent respectivement dans un dossier Modules de classe ou Feuilles.
Chapitre 4

Figure 4-1. Visual Basic Editor organise les éléments de programmation pour
en simplifier la gestion.

Sous la fenêtre Explorateur de projets se trouve la fenêtre Propriétés qui sert à


examiner et à modifier les différentes propriétés relatives à l’objet sélectionné.
Dans les modules et les feuilles de calcul, la propriété Name est la seule disponi-

48
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


ble, bien que les feuilles de calcul possèdent d’autres propriétés, que l’on modifie
généralement dans les feuilles.

Attention La valeur de la propriété Name d’une feuille de calcul ou d’un clas-


seur n’est pas nécessairement la même que le nom du même objet au sein
d’Excel. Bien que les deux noms puissent sembler similaires en raison des
règles de nommage appliquées par défaut par Visual Basic Editor, il se peut
qu’ils soient différents en raison de la liaison qui les unit en interne pour assu-
rer que l’objet approprié est référencé. Les noms d’objets sont plus restrictifs.
Ils doivent, en effet, suivre les règles de nommage de Visual Basic pour Appli-
cations (pas d’espace, commencer par une lettre, pas de mot réservé et pas
plus de 31 caractères de long).

La fenêtre Code constitue la plus grande fenêtre de Visual Basic Editor. Sa partie
supérieure présente deux listes déroulantes (voir figure 4.2). La liste de gauche,
intitulée Objet, sert à sélectionner l’objet utilisé. Si vous travaillez uniquement
sur du code, la liste affiche l’objet par défaut Général. Dans la deuxième liste
déroulante, intitulée Procédure, vous sélectionnez des macros au sein du
module. À mesure que vous ajoutez et supprimez des macros du module, elles
sont également ajoutées et supprimées de la liste Procédure.

Chapitre 4

Figure 4-2. La fenêtre Code de Visual Basic Editor permet de choisir des objets
et des procédures.

Pour atteindre et sélectionner une macro, vous pouvez également parcourir la


liste déroulante Procédure avec les flèches Bas et Haut. En outre, la liste dérou-
lante Procédure s’actualise à mesure que vous vous déplacez au sein de la fenêtre
Code et place le point d’insertion dans la macro affichée.

49
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Dans le menu Insertion, cliquez sur UserForm pour remplacer la fenêtre Code
par la fenêtre UserForm (voir figure 4.3).

Pour plus d’informations sur l’utilisation des feuilles, reportez-vous au


chapitre 19 « Création de feuilles UserForm ».

Figure 4-3. L’éditeur de feuilles Visual Basic Editor s’affiche lorsque vous
Chapitre 4

passez de l’écriture de code VBA à la création de feuilles.

À l’instar de toute autre application Windows, Visual Basic Editor possède une
barre de menus et une barre d’outils donnant accès à de nombres fonctionnali-
tés. La majorité des options disponibles dans les menus Fichier, Édition, Fenêtre
et Aide sont similaires à celles des autres applications Windows. Le reste des
menus, cependant, contient des fonctionnalités dans Visual Basic Editor.

Menu Affichage
Le menu Affichage permet d’ouvrir et/ou d’atteindre une fenêtre spécifique au
sein de Visual Basic Editor. À partir de la fenêtre Visual Basic Editor, vous pouvez
ouvrir des fenêtres ou retourner à la fenêtre Excel. Le tableau 4.1 récapitule les
éléments du menu Affichage.

Tableau 4-1. Éléments de menu disponibles dans le menu


Affichage de Visual Basic Editor
Élément Description
Code Affiche ou active la fenêtre Code pour l’élément
sélectionné dans l’Explorateur de projets.

50
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Tableau 4-1. Éléments de menu disponibles dans le menu


Affichage de Visual Basic Editor (Suite)
Élément Description
Objet Affiche ou active l’objet sélectionné dans l’Explorateur de
projets.
Définition Affiche ou active la fenêtre Explorateur d’objets et affiche
l’entrée de l’élément sélectionné dans la fenêtre Code. Si
l’élément est une procédure ou une fonction, il affiche en
affiche le code.
Dernière position Renvoie le curseur au début de la dernière ligne de code
éditée.
Explorateur Affiche ou active la fenêtre Explorateur d’objets.
d’objets
Fenêtre Exécution Affiche ou active la fenêtre Exécution.
Fenêtre Variables Affiche ou active la fenêtre Variables locales.
locales
Fenêtre Espions Affiche ou active la fenêtre Espions.
Pile des appels Affiche ou active la boîte de dialogue Pile des appels.
Explorateur de Affiche ou active la fenêtre Explorateur de projets.
projets
Fenêtre Propriétés Affiche ou active la fenêtre Propriétés.
Boîte à outils Affiche ou active la Boîte à outils qui contient des objets
employés pour créer des formulaires utilisateur.

Chapitre 4
Ordre de tabulation Affiche ou active la boîte de dialogue Ordre de tabulation.
Barres d’outils Permet d’activer ou de désactiver les différentes barres
d’outils disponibles au sein de Visual Basic Editor, ainsi
que de les personnaliser.
Microsoft Excel Bascule dans le classeur actif et restaure l’affichage s’il a
été réduit.

Menu Insertion
Le menu Insertion permet d’insérer de nouvelles procédures, des modules ou
des feuilles au sein du projet. Le tableau 4.2 récapitule les éléments disponibles
dans le menu Insertion de Visual Basic Editor.
Tableau 4-2. Éléments de menu disponibles dans le menu
Insertion de Visual Basic Editor
Élément Description
Procédure Affiche la boîte de dialogue Ajouter une procédure qui
permet de construire l’instruction de déclaration d’une
nouvelle procédure au sein du module actif.
UserForm Insère une nouvelle feuille dans le projet en cours.

51
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Tableau 4-2. Éléments de menu disponibles dans le menu


Insertion de Visual Basic Editor (Suite)
Élément Description
Module Insère un nouveau module dans le projet en cours.
Module de classe Insère un nouveau module de classe dans le projet en
cours.
Fichier Affiche la boîte de dialogue Insérer un fichier pour vous
permettre d’importer un ficher texte (*.txt), un fichier
Basic (*.bas) ou un fichier classe (*.cls). Les fichiers
texte sont insérés dans la fenêtre Code, alors que les
fichiers Basic ou classe sont insérés dans le projet en
cours sous forme de modules ou de modules de classe
séparés.

Menu Format
Le menu Format contient les commandes de placement et de mise en forme des
objets dans les feuilles. Le tableau 4.3 récapitule les éléments du menu Format.
Tableau 4-3. Éléments de menu disponibles dans le menu
Format de Visual Basic Editor
Élément Description
Aligner Affiche le sous-menu Aligner qui permet d’aligner
plusieurs objets sur un bord commun.
Uniformiser la taille Affiche le sous-menu Uniformiser la taille qui permet de
Chapitre 4

donner la même largeur et/ou hauteur à deux objets.


Ajuster à la taille Redimensionne la hauteur et la largeur d’un objet de
sorte à l’adapter exactement.
Ajuster à la grille Redimensionne la hauteur et la largeur d’un objet de
sorte que ses bords se basent sur les lignes de la grille
les plus proches.
Espacement Affiche le sous-menu Espacement horizontal qui permet
horizontal d’ajuster l’espacement horizontal entre plusieurs objets.
Espacement vertical Affiche le sous-menu Espacement vertical qui permet
d’ajuster l’espacement vertical entre plusieurs objets.
Centrer sur la feuille Affiche le sous-menu Centrer sur la feuille qui permet de
centrer un objet horizontalement ou verticalement sur
une feuille.
Réorganiser les Affiche le sous-menu Réorganiser les boutons qui
boutons permet d’organiser les objets boutons de manière
régulière sur la partie inférieure ou le bord droit de la
feuille.
Grouper Crée un groupe avec les objets sélectionnés pour vous
permettre de les manipuler simultanément.

52
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Tableau 4-3. Éléments de menu disponibles dans le menu


Format de Visual Basic Editor (Suite)
Élément Description
Dissocier Dissocie des objets groupés.
Plan Affiche le sous-menu Plan qui permet d’organiser l’ordre
d’empilement des objets sur la feuille utilisateur.

Menu Débogage
Le menu Débogage propose plusieurs outils permettant de déboguer (tester)
l’exécution des procédures. Le tableau 4.4 récapitule les éléments du menu
Débogage.
Tableau 4-4. Éléments de menu disponibles dans le menu
Débogage de Visual Basic Editor
Élément Description
Compiler Compile le code du projet sélectionné. Identifié dans le
menu par Compiler <NomProjet>.
Pas à pas détaillé Permet de parcourir le code ligne par ligne. Chaque
ligne est mise en surbrillance avant d’être exécutée.
Pas à pas principal Permet d’exécuter une procédure complète. Cette
commande est intéressante si la procédure en cours
appelle une deuxième procédure : inutile de localiser la
deuxième procédure.

Chapitre 4
Pas à pas sortant Permet d’exécuter tout le code restant dans la
procédure en cours. Cette commande s’arrête lorsque
toutes les lignes ont été exécutées.
Exécuter jusqu’au Permet d’exécuter le code jusqu’à la ligne où se trouve
curseur le curseur.
Ajouter un espion Affiche la boîte de dialogue Ajouter un espion dans
laquelle vous ajoutez les variables ou les expressions à
surveiller.
Modifier un espion Affiche la boîte de dialogue Modifier un espion qui sert
à modifier les variables ou les expressions que vous
surveillez.
Espion express Affiche la boîte de dialogue Espion express qui contient
la valeur de la variable ou de l’expression sélectionnée
dans la fenêtre Code. Vous pouvez également survoler
la variable ou l’expression avec la souris pour afficher
la valeur dans une info-bulle d’argument.

53
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Tableau 4-4. Éléments de menu disponibles dans le menu


Débogage de Visual Basic Editor (Suite)
Élément Description
Basculer le point Permet de créer un point d’arrêt sur la ligne de code en
d’arrêt cours. L’exécution est suspendue dès qu’elle rencontre
un point d’arrêt. Si la ligne en cours contient déjà un
point d’arrêt, cette commande l’annule. Voici une
alternative pour créer des points d’arrêt : placez la
souris sur le bord à gauche du code (de sorte que le
pointeur prenne la forme d’une flèche pointant vers
l’angle supérieur gauche) et double-cliquez.
Effacer tous les Permet d’effacer tous les points d’arrêt au sein du
points d’arrêt module de code.
Définir l’instruction Permet de définir la prochaine ligne de code à exécuter.
suivante
Afficher l’instruction Permet de passer rapidement à la ligne de code à
suivante exécuter suivante. Cette commande est intéressante si
vous parcourez le code et souhaitez revenir rapidement
à ligne de code exécutable suivante.

Menu Exécution
Le menu Exécution contient plusieurs commandes qui permettent d’exécuter le
code et d’afficher les feuilles. Le tableau 4.5 récapitule les éléments du menu Exé-
cution.
Chapitre 4

Tableau 4-5. Éléments de menu disponibles dans le menu


Exécution de Visual Basic Editor
Élément Description
Exécuter Sub/ Commence l’exécution de la procédure ou de la feuille en
UserForm cours. Si rien n’est sélectionné, la boîte de dialogue Macros
s’affiche pour vous permettre de sélectionner la procédure à
exécuter. Lorsqu’une procédure se trouve en mode Arrêt,
cette commande est remplacée par Continuer pour vous
permettre d’en poursuivre l’exécution normale.
Arrêt Permet d’arrêter l’exécution de la procédure et place le code
en mode Arrêt.
Réinitialiser Permet de réinitialiser toutes les variables du modules et de
vider la Pile des appels.
Mode Création Permet d’activer et de désactiver le mode Création pour la
procédure.

54
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Menu Outils
Le menu Outils propose des commandes permettant d’exécuter des procédures,
d’ajouter des références à des procédures externes, de définir les options de
Visual Basic Editor, de définir les propriétés du projet en cours et de signer
numériquement le projet. Le tableau 4.6 récapitule les éléments du menu Outils.
Tableau 4-6. Éléments de menu disponibles dans le menu Outils
de Visual Basic Editor
Élément Description
Références Affiche la boîte de dialogue Références du projet en cours
qui permet de spécifier les bibliothèques d’objets et autres
projets VBA auxquels le projet doit pouvoir accéder.
Contrôles Affiche la boîte de dialogue Contrôles supplémentaires qui
supplémentaires permet d’ajouter des contrôles à la Boîte à outils.
Macros Affiche la boîte de dialogue Macros qui permet de
sélectionner et d’exécuter rapidement une macro se trouvant
dans l’un des projets ouverts.
Options Affiche la boîte de dialogue Options qui permet de définir
différentes options Visual Basic Editor.
Propriétés Affiche la boîte de dialogue Propriétés du projet qui permet
de définir plusieurs propriétés pour le projet en cours. Celui-
ci est identifié dans le menu Propriétés sous la forme
Propriétés de <NomProjet>.
Signature Affiche la boîte de dialogue Signature numérique qui permet

Chapitre 4
électronique de signer numériquement le code à l’aide de n’importe
quelle signature numérique installée sur le PC.

Personnaliser Visual Basic Editor


Vous pouvez entièrement personnaliser Visual Basic Editor et le configurer pour
l’adapter à votre méthode de travail. Vous pouvez détacher les fenêtres de leurs
positions par défaut et les placer où bon vous semble à l’écran, y compris sur les
divers bords de la fenêtre. En outre, comme nous l’avons étudié au chapitre 3,
vous pouvez déplacer, masquer et afficher n’importe quelle barre d’outils, ainsi
que les boutons qu’elle héberge.
Toutes les fenêtres secondaires de Visual Basic Editor possèdent un emplacement
d’ancrage par défaut. Pour déplacer une fenêtre, placez le pointeur de la souris
sur la barre de titre de la fenêtre et faites glisser vers l’emplacement de votre
choix. Le contour de la boîte s’affiche pour vous indiquer où la fenêtre sera pla-
cée lorsque vous relâcherez le bouton de la souris (voir figure 4.4).

55
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Figure 4-4. Voici les emplacements par défaut des fenêtres de Visual Basic
Editor, mais rien ne vous empêche de les positionner à votre guise pour
optimiser votre environnement de travail.

Astuce Voici une méthode rapide pour basculer entre une fenêtre ancrée et
sa dernière position détachée : double-cliquez sur la barre de titre de la fenê-
tre. Cette astuce est intéressante pour revenir à la position ancrée. Il peut, en
Chapitre 4

effet, s’avérer complexe de faire admettre à Visual Basic Editor que vous sou-
haitez ancrer à nouveau une fenêtre.

Les procédures de personnalisation des barres d’outils sont similaires à celles


employées dans les autres applications Windows. Pour déplacer une barre
d’outils, cliquez dans une zone vide de la barre d’outils et faites-la glisser vers
l’emplacement de votre choix. Cliquez sur le bouton Options de barre d’outils
(qui se trouve dans l’angle inférieur droit de la barre d’outils) ou cliquez droit
dans une zone vide de la barre d’outils et choisissez Personnaliser pour afficher la
boîte de dialogue Personnalisation qui permet d’ajouter ou de supprimer des
boutons sur les barres d’outils visibles. Si vous cliquez droit sur une barre
d’outils, vous pouvez également afficher ou masquer les barres d’outils.
La boîte de dialogue Options de Visual Basic Editor propose plusieurs options
qui affectent son environnement. Les commandes de la boîte de dialogue
Options sont réparties sur quatre onglets : Éditeur, Format de l’éditeur, Général
et Ancrage.
L’onglet Éditeur (voir figure 4.5) est divisé en deux jeux d’options. Le premier
jeu, Paramètres du code, contrôle l’affichage des info-bulle d’argument Intelli-
Sense, la mise en forme du code, la déclaration des variables et les erreurs de syn-
taxe. L’option Info express automatique fournit des informations ou des

56
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


fonctions et leurs paramètres à mesure que vous les saisissez, ainsi que les cons-
tantes intrinsèques applicables pendant le mode Création. En mode Exécuter,
l’option Info-bulles automatiques indique la valeur de la variable survolée par la
souris. Parmi les options de mise en forme du code, on trouve Retrait automati-
que qui indente les nouvelles lignes avec le même retrait que la ligne au-dessus et
Largeur de la tabulation qui définit le nombre d’espaces par tabulation. En
cochant la case Déclaration des variables obligatoire, vous éliminez la possibilité
d’utiliser une valeur dans une variable qui n’est pas encore définie. L’option
Vérification automatique de la syntaxe examine chaque ligne de code à la recher-
che d’erreurs de syntaxe. Pour finir, si vous cochez la case Complément automa-
tique des instructions, Visual Basic Editor affiche des informations servant à
compléter l’instruction que vous saisissez.

Figure 4-5. Les outils de l’onglet Éditeur de la boîte de dialogue Options

Chapitre 4
permettent de modifier l’affichage du code, des erreurs et des astuces dans
Visual Basic Editor.

Au Quotidien
Évitez les erreurs dans les déclarations

L’obligation de définir une variable avant de l’utiliser peut vous sembler


gênant, mais cela évite l’une des erreurs de programmation les plus
mystérieuse : l’erreur de la division par zéro. Voici un exemple simple de cette
erreur : vous voulez découvrir la température moyenne de la semaine. Si vous
tentez de diviser la somme des températures par une nouvelle variable intitu-
lée intNbreJours à laquelle vous n’avez pas encore assigné de valeur, le pro-
gramme suppose que la valeur est zéro et génère une erreur.

Le deuxième ensemble d’options, Paramètres de la fenêtre, contrôle l’affichage


de plusieurs procédures dans la fenêtre Code et détermine le déplacement du
code avec la souris. En cochant la case Édition du texte par glisser-déplacer, vous
pouvez glisser-déplacer des éléments au sein du code et de la fenêtre Code vers
ou depuis la fenêtre Exécution et/ou la Fenêtre Espions. L’option Affichage du
module complet par défaut définit l’affichage de la fenêtre du nouveau module :

57
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


une fenêtre avec barres de défilement ou l’affichage d’une seule procédure.
L’option Séparation des procédures trace une ligne séparant les procédures.
Les commandes de l’onglet Format de l’éditeur de la boîte de dialogue Options
(voir figure 4.6) contrôlent le style de police employé pour afficher le code. La
fenêtre Code peut être entièrement personnalisée pour répondre à des besoins
particuliers : couleur des différents éléments de code (clavier, commentaires,
erreurs de syntaxe, éléments sélectionnés et ainsi de suite), style et taille de la
police. Vous pouvez activer ou non l’option Barre des indicateurs en marge, bien
qu’il soit préférable de cocher cette case car elle permet d’activer rapidement les
points d’arrêt.

Figure 4-6. L’onglet Format de l’éditeur permet de choisir la mise en forme des
éléments du programme.
Chapitre 4

Au Quotidien
L’onglet Général (voir figure 4.7) propose un certain nombre d’options allant
des Paramètres de la grille de la feuille à l’affichage des info-bulles, en pas-
sant par la fermeture automatique des fenêtres Feuille et Module, l’avertisse-
ment avant la réinitialisation des variables, le suivi des erreurs et la
compilation du code. Dans la section Paramètres de la grille de la feuille, vous
activez et désactivez les points de la grille pendant la création des feuilles,
modifiez la distance horizontale et verticale entre les points de la grille et choi-
sissez d’aligner les nouveaux contrôles sur la grille. Vous pouvez également
activer ou désactiver les info-bulles qui expliquent l’action des boutons de la
barre d’outils.

58
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Figure 4-7. L’onglet Général de la boîte de dialogue Options regroupe les


commandes qui n’entrent pas dans les autres onglets.

Si vous cochez la case Réduire le proj. masque les fenêtres, les fenêtres du module
et de la feuille se ferment automatiquement lorsque vous réduisez le projet dans
la fenêtre Explorateur de projets. Si vous cochez la case Avertir avant la perte
d’état vous serez averti si vous effectuez une action spécifique qui réinitialise tou-
tes les variables.
La section Récupération d’erreur regroupe trois options. Si vous sélectionnez
l’option Arrêt sur toutes les erreurs, vous obligez Visual Basic Editor à basculer
en mode Arrêt pour toutes les erreurs, que la récupération d’erreur soit ou non
active dans les procédures en cours d’exécution. Si vous sélectionnez l’option
Arrêt dans le module de classe, Visual Basic Editor bascule en mode Arrêt uni-
quement sur les erreurs non récupérées et met en surbrillance la ligne de code

Chapitre 4
impliquée. Si vous optez pour Arrêt sur les erreurs non gérées, Visual Basic Edi-
tor bascule en mode Arrêt uniquement si aucun gestionnaire d’erreur n’est actif.
En présence d’une erreur non récupérée dans un module de classe, Visual Basic
Editor surligne la ligne de code dans la procédure appelante et non dans le
module de classe.
Les deux dernières options de l’onglet Général concernent la compilation des
procédures. Pour accélérer l’exécution, cochez les deux options Compilation sur
demande et Compilation en arrière-plan. La première option permet d’exécuter
plus rapidement l’application en compilant le code à la volée et non en une fois
et la deuxième permet d’utiliser le temps d’inactivité pour terminer la compila-
tion du projet en mode Exécuter.
Le quatrième et dernier onglet de la boîte de dialogue Options permet de spéci-
fier si les fenêtres auxiliaires de Visual Basic Editor sont ancrables. Par défaut,
toutes les fenêtres le sont à l’exception de la fenêtre Explorateur d’objets.

Gestion des fenêtres Code


Il est tout aussi important d’organiser le code d’un projet Excel que les fichiers de
votre disque dur. Heureusement, l’Explorateur de projets de Visual Basic Editor

59
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


présente les éléments d’un projet sous la forme d’une arborescence similaire à
celle de l’Explorateur Windows. L’Explorateur de projets n’est pas aussi souple
que l’Explorateur Windows, mais il regroupe les différents éléments d’un projet
dans un dossier commun. Cette organisation classique simplifie la localisation
des modules, modules de classe, feuilles ou de tout autre objet Excel.

Gérer les fenêtres


Chaque module, module de classe ou feuille s’affiche dans sa propre fenêtre
Code. Autrement dit, à mesure que vous ajoutez des modules, le nombre de fenê-
tres sur lesquelles vous travaillez augmente. Quel que soit le nombre de modules
d’un projet, il est inutile de les ouvrir tous pour travailler sur le projet : ouvrez
uniquement le module ou la feuille à modifier.
Pour simplifier la navigation au sein des diverses fenêtres, Visual Basic Editor
propose quelques outils pour ouvrir, basculer entre et fermer les fenêtres. Pour
ouvrir un module, double-cliquez dessus dans la fenêtre Explorateur de projets.
Vous pouvez également vous servir de cette méthode pour basculer vers un autre
module s’il est ouvert.
Pour basculer entre les différentes fenêtres ouvertes, utilisez le menu Fenêtre
pour sélectionner une fenêtre. Vous pouvez également faire défiler les fenêtres
vers l’avant en appuyant sur CTRL +F6 ou vers l’arrière en appuyant sur
MAJ + CTRL +F6. Pour fermer une fenêtre, cliquez sur le bouton Fermer ou
appuyez sur CTRL+F4.
Il est également possible de réduire ou de redimensionner les fenêtres pour affi-
Chapitre 4

cher simultanément plusieurs modules. Le menu Fenêtre contient des comman-


des pour créer une mosaïque horizontale ou verticale des fenêtres ou les placer
en cascade. Pour afficher deux sections différentes d’un même module, servez-
vous de la poignée de fractionnement de la fenêtre du module ou de la com-
mande Fractionner du menu Fenêtre.

Ajouter du code
Il existe plusieurs manières d’ajouter du code à un projet, mais avant de com-
mencer, vous devez choisir le conteneur du code : module, module de classe ou
feuille. Le choix du conteneur dépend des tâches effectuées par le code que vous
y insérer. Bien qu’il soit possible de placer tout le code au sein d’un unique
module, il est préférable de le diviser en plusieurs modules, groupés par tâche.
Pour ajouter un nouveau module, sélectionnez un type (module, module de
classe ou feuille) dans le menu Insertion ou avec le bouton Ajouter de la barre
d’outils Standard.
Pour ajouter une nouvelle procédure à un module ou à un module de classe, sai-
sissez-la directement dans la fenêtre Code du module. ou dans le menu Inser-
tion, choisissez Procédure pour ouvrir la boîte de dialogue Ajouter une
procédure (voir figure 4.8) qui vous invite à saisir le minimum d’informations
nécessaires à la création d’une procédure.

60
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Figure 4-8. La boîte de dialogue Ajouter une procédure permet de déterminer le


cadre général d’une procédure.

Remarque Nous détaillerons les options de la boîte de dialogue Ajouter une


procédure plus loin dans ce chapitre.

Notes sur le style de programmation et la lisibilité du code


Les programmeurs sont issus de formations diverses, chacune possédant son
propre style d’écriture du code. Ceux qui travaillent ou ont travaillé dans de
grandes sociétés de création de logiciels suivent un schéma strict, spécifié par
l’entreprise, alors que les programmeurs solitaires ne suivent souvent aucun for-
mat prédéfini. Quel que soit votre cas, il est indispensable que vous écriviez du
code facile à lire et à comprendre. Même si vous comprenez aujourd’hui le code
que vous écrivez, vous ou un autre programmeur pourriez être obligé de le

Chapitre 4
modifier à l’avenir. À moins de posséder une mémoire photographique, vous
pourriez éprouver quelques difficultés à comprendre la logique employée et à
effectuer des modifications.
Voici quelques règles à suivre pour écrire un code lisible.
● Écrivez des procédures aussi courtes que possible. Si vous devez créer un
macro qui ouvre un classeur, demandez les informations à l’utilisateur,
effectuez les changements, puis enregistrez et fermez le classeur. Divisez
ensuite la macro en plusieurs procédures : une par tâche. Créez ensuite
une procédure principale qui appelle les autres procédures. Ce format de
construction en une série de sous-procédures appelées par la procédure
principale simplifie également la localisation et la correction des erreurs
(débogage).
● Si une ligne de code est trop longue pour s’afficher dans sa totalité dans la
fenêtre Code, saisissez un espace suivi d’un caractère de soulignement
pour indiquer que le code de la ligne suivante constitue la suite de la ligne
en cours. La procédure PermissionLoop, que nous verrons en détails dans la
section « Boucles logiques », plus loin dans ce chapitre, est la première
d’une longue liste de procédures qui exploitent cette convention.

61
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


● Choisissez une convention de nommage et tenez-vous y. Projet, procédu-
res, variables et autres éléments de programmation doivent être libellés
avec un nom significatif qui décrit l’emploi de l’élément. Il existe un grand
nombre de conventions de nommage, la majorité constituant une forme
de la notation hongroise.

Remarque La notation hongroise porte le nom du pays d’origine du Dr Char-


les Simonyi, l’inventeur de ce style de nommage. Le Dr Simonyi était maître
d’œuvre chez Microsoft lorsqu’il a conçu cette convention. Le chapitre d’ori-
gine de la programmation Windows qui décrit comment l’employer se trouve à
l’adresse http://msdn.microsoft.com/ en tapant Simonyi Hungarian Notation
dans la zone de recherche.

● Choisissez des noms concis. Le nom doit être descriptif mais il ne doit pas
dépasser 10 à 15 caractères. Servez-vous d’abréviations logiques. Rappe-
lez-vous : plus le nom est long, plus vous augmentez le risque d’erreur de
frappe.

Développement de projets avec l’Explorateur


de projets
L’Explorateur de projets permet de gérer les projets et modules. Vous y créez de
nouveaux modules, les supprimez et les copiez d’un projet à un autre. La seule
action que vous ne pouvez pas entreprendre dans l’Explorateur de projets est
créer un projet (pour cela, vous devez créer un nouveau classeur).
Chapitre 4

Créer des modules VBA


Toutes les macros et procédures sont stockées dans un module VBA. Un projet
peut héberger plusieurs modules, ce qui peut s’avérer indispensable selon la
complexité de votre projet.
Pour créer un nouveau module, dans le menu Insertion, choisissez Module,
Module de classe ou UserForm, selon le type de module à créer. La figure 4.9
montre un nouveau module vide. Une fois le module créé, vous ajoutez des pro-
cédures ou constituez la feuille. En alternative, vous pouvez importer un module
à partir d’un fichier texte. Dans le menu Fichier, choisissez Importer un fichier et
sélectionnez un fichier texte qui contient le code à utiliser dans un module ou
une feuille. Visual Basic Editor crée un nouveau module. En conséquence, sauf si
le code importé constitue une procédure complète, il ne s’exécute pas tant que
vous n’avez pas ajouté la notation Sub…End Sub.

62
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Figure 4-9. Création d’un nouveau module.

Supprimer des modules VBA


Pour supprimer un module devenu inutile, sélectionnez-le dans l’Explorateur de
projets et dans le menu Fichier, choisissez Supprimer <NomModule>, <NomMo-
dule> étant le nom du module à supprimer. Avant de supprimer un module,

Chapitre 4
Visual Basic Editor vous demande si vous souhaitez l’exporter dans un fichier
texte (voir figure 4.10), ce qui permet de le sauvegarder avant de le supprimer
définitivement.

Figure 4-10. Il peut être intéressant de sauvegarder le code dans un fichier


texte, pour le cas où.

Pour exporter un module, dans le menu Fichier, choisissez Exporter un fichier.

63
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Copier des modules entre projets


L’Explorateur de projets permet de copier des modules d’un projet à un autre.
Pour ce faire, ouvrez le projet source et le projet de destination puis, dans la fenê-
tre Explorateur de projets, cliquez sur le module à copier et faites-le glisser vers le
module de destination. Une fois que le pointeur de la souris se trouve dans le
projet de destination, il change de forme : d’un cercle barré il se transforme en
flèche équipée d’une boîte et d’un signe plus (voir figure 4.11).
Chapitre 4

Figure 4-11. Le pointeur de la souris change d’apparence pour indiquer un


point de dépose valide.

Si vous copiez un module dans un projet qui contient un module portant le


même nom, Visual Basic Editor renomme le module copié en faisant suivre son
nom d’un nombre en commençant à 1. En outre, si le projet de destination ne
contient aucun module du type de celui copié, Visual Basic Editor crée un
module et le dossier approprié pour l’héberger.

Déclaration des variables, constantes et


types de données
Pour la majorité des procédures, vous devrez disposer d’une zone de stockage
temporaire pour manipuler les données et les conserver pour un usage ultérieur.
VBA stocke ces données en mémoire dans une variable. Il est également possible
de stocker en mémoire une valeur qui ne changera pas. Une telle valeur se
nomme une constante. Les variables contiennent des valeurs de différents types
de données, spécifiés lorsque l’on nomme, ou déclare, la variable. Pour éviter les

64
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


bogues et répartir correctement l’espace de stockage nécessaire, déclarez tou-
jours les variables.

Déclarer des variables


Pour déclarer les variables dans une procédure, on utilise l’instruction Dim,
pour dimension, dont le principale usage est le suivant

Dim varname as type

Cette instruction déclare explicitement une variable nommée varname comme


variable type. Pour déclarer plusieurs variables sur une ligne, séparez-les avec
une virgule :

Dim varname1 as type, varname2 as type, ...

Définir les types de données


Déclarez toujours les variables avec un type de données spécifiques. Ce type de
données détermine les valeurs que l’on peut stocker dans la variable ainsi que la
quantité de mémoire nécessaire pour stocker la valeur. VBA propose différents
types de données pour gérer les nombres, les chaînes, les dates et les heures, les
valeurs booléennes et les objets. Vous pouvez, en outre, déclarer votre propre
type de données, si nécessaire.
La majorité des types de données disponibles dans VBA sont des types numéri-
ques, chacun gérant une plage différente de valeurs avec une précision variable.

Chapitre 4
Le tableau 4.7 liste les types de données numériques ainsi que leurs spécifica-
tions.
Tableau 4-7. Types de données numériques
Stockage
Type Plage Description nécessaire
Byte 0 à 255 Nombre entier non 1 octet
signé
Currency –922 337 203 685 477,5808 à Nombre signé en virgule 8 octets
922 337 203 685 477,5807 fixe comprenant
15 chiffres à gauche du
séparateur décimal et 4
chiffres à droite, utilisé
dans les calculs
financiers ou les calculs
nécessitant une
précision élevée.

65
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Tableau 4-7. Types de données numériques (Suite)


Stockage
Type Plage Description nécessaire
Decimal 79 228 162 514 264 337 593 543 950 335 Ne peut être déclaré 12 octets
sans séparateur décimal et directement dans VBA.
±7,9228162514264337593543950335 Nécessite l’emploi d’un
avec 28 chiffres après le séparateur décimal. type de données
Variant.
Double Valeurs négatives : Nombre signé à virgule 8 octets
–1,79769313486231E308 à – flottante en double
4,94065645841247E-324 précision
Valeurs positives :
4,94065645841247E–324 à
1,79769313486231E308
Integer –32 768 à 32 767 Nombre entier signé 2 octets
Long -2 147 483 648 à 2 147 483 647 Nombre entier signé 4 octets
Single Valeurs négatives : Nombre signé à virgule 4 octets
–3,402823E38 à –1,401298E–45 flottante en double
Valeurs positives : précision
1,401298E–45 à 3,402823E38

Définir les constantes


Pour certaines procédures, vous devez référencer une valeur particulière qui
Chapitre 4

change rarement, voire jamais. Au lieu de saisir la même valeur de manière répé-
titive, vous pouvez créer une référence, appelée constante, pour cette valeur.
Dans la définition de la constante, vous spécifiez la valeur réelle une seule fois
pour l’ensemble du code, puis vous y faites référence.
VBA s’accompagne d’un certain nombre de constantes prédéfinies, appelés cons-
tantes intrinsèques, qui simplifient votre utilisation des nombreuses fonctions
disponibles. Par exemple, dans une procédure qui crée un graphique en courbes,
vous pouvez utiliser la constante intrinsèque xlDot pour créer une ligne en poin-
tillés.

Remarque Pour afficher la liste des constantes intrinsèques, saisissez cons-


tantes intrinsèques dans la zone Aide de Visual Basic Editor.

Pour spécifier vos propres constantes, servez-vous de l’instruction Const, dont le


fonctionnement est similaire à celui de l’instruction Dim, excepté que vous devez
fournir la valeur de la constante et que vous ne pouvez déclarer qu’une constante
par ligne. Les lignes suivantes déclarent deux constantes, la première est une
valeur Byte comprenant le nombre de jours au mois de décembre et la deuxième
est une variable Single comprenant une valeur acceptée de pi.

Const conJoursDec as Byte = 31

66
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


Const conPi as Single = 3,1415929

Gérer les chaînes


Les types de données ne sont pas nécessairement numériques. Avec le type de
données String, les variables peuvent également contenir des valeurs textuelles.
Les chaînes de texte sont de longueur variable ou fixe. Les premières peuvent
contenir environ 2 milliards (2^31) de caractères, en fonction de la mémoire
disponible, et les deuxièmes jusqu’à 65 000 caractères (2^16).
On déclare les deux types de chaînes de manière similaire avec une instruction
Dim, comme pour les valeurs numériques. Les chaînes de longueur fixe ajoutent
du code qui précise la longueur de la chaîne. La première ligne du fragment de
code ci-après spécifie une chaîne de longueur variable et le deuxième ligne spé-
cifie une chaîne de longueur fixe de 25 caractères.

Dim MaChaine as String


Dim MaChaineFixe as String * 25

Les chaînes déclarées auxquelles aucune valeur n’a encore été assignée sont dites
chaînes vides. Pour assigner une valeur à une variable String, placez-la entre
guillemets doubles. Les lignes suivantes sont des exemples d’assignation de
valeurs à des chaînes :

MaChaine = "Hello world."


MaChaineFixe = "Ceci est une chaîne fixe."
MaChaineVide = ""

Chapitre 4
Remarque La longueur des chaînes fixes doit être exactement de
25 caractères. En conséquence, Visual Basic Editor ajoute des espaces ou
tronque la chaîne à la longueur correcte.

Gérer les dates et les heures


On stocke les dates et les heures dans le type de données Date. La plage de dates
que vous pouvez stocker débute le 1 e r janv ier 100 et se termine le
31 décembre 9999 pour toutes les heures de 0:00:00 à 23:59:59. Bien qu’une
variable Date puisse contenir la date et l’heure, si un seul de ces éléments vous est
utile, omettez l’autre.
Pour assigner des valeurs à une variable Date, délimitez une chaîne littérale
reconnaissable par le signe dièse (#). VBA reconnaît les dates et les heures quel
que soit leur format, mais il est préférable de rester aussi explicite que possible
pour s’assurer de l’utilisation de la valeur correcte. Voici quelques exemple de
dates et d’heures reconnus par VBA.

MaDate = #15 Juillet 2004#


DateDepart = #Avril 8, 2001#

67
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


MonHeure = #8:47 PM#
DateHeureDepart = #05/07/1992 15:56#

Visual Basic Editor peut modifier les dates et heures que vous saisissez pour reflé-
ter les paramètres de date et d’heure définis sur votre ordinateur. Par exemple,
#15 juillet 2004# peut devenir #15/7/2004#.

Remarque Lorsque vous saisissez des dates, VBA reconnaît l’année sur
deux chiffres et se sert de 2029 comme année pivot. Toutes les années sur
deux chiffres entre 00 et 29 sont reconnues comme faisant partie des années
2000. Les années restantes, 30 à 99, sont considérées comme faisant partie
des années 1900. Il est préférable de préciser les quatre chiffres de l’année
pour éliminer toute ambiguïté.

Gérer les variables Variant et convertir des types de


données
Les variables Variant constituent le fourre-tout des types de données dans VBA.
Si vous avez déclaré une variable que vous n’avez pas encore saisie, elle est rangée
dans le type de données Variant. Les variables Variant peuvent héberger tout
type de données à l’exception des chaînes de longueur fixe et sont imposées pour
certains types de données, comme Currency.
Si vous utilisez les variables Variant, VBA recherche le type de données le plus
adapté aux données stockées dans la variable, mais son choix n’est pas toujours le
bon. Si vous assignez une valeur de 64 * 1024 à une variable Variant, vous obte-
Chapitre 4

nez un message d’erreur. En effet, VBA considère les deux opérandes, 64 et 1024,
comme des types de données Integer et il tente de stocker le résultat comme
Integer. Le résultat réel, 65536, est trop grand pour un type de données Integer et
produit un message d’erreur.
Pour éviter que VBA n’opte pour un type de données erroné, vous pouvez con-
vertir les valeurs en un type de données spécifique. Dans l’exemple précédent, si
l’on convertit explicitement une des valeurs en type de données Long, VBA place
le résultat comme Long évitant ainsi l’erreur.
VBA propose des fonctions pour convertir les valeurs en n’importe quel type de
données numériques. À l’heure de convertir deux types de données, tenez
compte du niveau de précision employé par chaque type et des limites de chaque
type. Par exemple, en convertissant une variable Single, qui possède un compo-
sant décimal, en Long, qui n’en possède pas, on perd la partie décimale de la
valeur. En outre, la conversion inverse, autrement dit, reconvertir la variable en
Single, ne restaure pas la partie décimale de la valeur d’origine.

lngOffset = CLong(sngOffset)

Le tableau 4.8 fournit une liste des fonctions de conversion ainsi que le type de
données retourné et les règles d’arrondi. L’argument expression fourni aux fonc-

68
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


tions peut être n’importe quelle expression numérique ou expression de chaîne.
Le format des expressions de chaîne doit être reconnu comme valeur numérique,
mais e format spécifique varie en fonction de la situation géographique.
Tableau 4-8. Fonctions de conversion des types de données
Fonction Résultat Remarques
CBool(expression) True/False (–1/0) Toute expression différente de zéro est
True (–1).
CByte(expression) Byte ,5 est arrondi à l’entier le plus proche.
CCur(expression) Currency Arrondi de quatre chiffres après le
séparateur décimal. Non documenté à
partir de cinq décimales. Éventuels
résultats inattendus.
CDate(expression) Date/Time Les expressions numériques
retournent une date correspondant au
nombre de jours écoulés depuis le 1er
janvier 100. Les expressions de chaîne
retournent une date interprétée.
CDbl(expression) Double Arrondi au nombre à virgule flottante le
plus proche dans la plage.
CDec(expression) Decimal Arrondi à un nombre variable de
décimales en fonction de la taille du
nombre.
CInt(expression) Integer ,5 est arrondi à l’entier le plus proche.

Chapitre 4
CLng(expression) Long Integer ,5 est arrondi à l’entier le plus proche.
CSng(expression) Single Arrondi au nombre à virgule flottante le
plus proche dans la plage.
CVar(expression) Variant Les expressions numériques sont
converties en Variant Double. Les
expressions délimitées par # sont
converties en Variant Date. Toutes les
autres sont converties en chaîne.

Portée et durée de vie des variables


Au sein des modules et des procédures, les variables possèdent une durée de vie
et une visibilité définies. La durée de vie d’une variable débute au moment de sa
déclaration et se termine lorsque l’exécution de la procédure ou du module qui
a déclaré la variable est terminée. Si une procédure appelle une deuxième procé-
dure, les variables de la première procédure restent en vie et conservent leurs
valeurs durant l’exécution de la deuxième procédure.

69
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Remarque Si l’on utilise exclusivement le terme variable dans cette section


dans le cadre de la Portée et de la Durée de vie, ces règles s’appliquent éga-
lement aux constantes.

Si une variable est déclarée avec le mot clé Static, sa durée de vie est illimitée. Les
variables statiques d’une procédure conservent leurs valeurs entre les appels de
procédure tant que le module qui contient la procédure n’a pas été arrêté ou réi-
nitialisé. La syntaxe pour déclarer les variables statiques est similaire à celle des
variables normales, excepté que l’on remplace Dim par Static.
Outre leur durée de vie, les variables possèdent une visibilité. Les variables décla-
rées dans une procédure servent uniquement dans cette procédure : les autres
procédures du même module ne les voient pas. Cela signifie que deux procédu-
res au sein d’un même module peuvent chacune déclarer une variable portant le
même nom, ces deux variables constituant des entités séparées et uniquement
visibles par la procédure qui les a déclarées. Prenons l’exemple de code suivant :

Sub Procedure1()
Dim intCounter as Integer, intResult as Integer
intCounter = 87
intResult = intCounter * 74
End Sub

Sub Procedure2()
Dim intCounter as Integer, intResult
intResult = intCounter * 74
End Sub
Chapitre 4

Dans ces procédures, Procedure1 et Procedure2 ont déclaré une variable intitu-
lée intCounter. Dans Procedure1, intCounter est positionnée à 87, ce qui signifie
que intResult prend la valeur 6438 lorsque la troisième ligne s’exécute. Dans
Procedure2, la valeur de intCounter n’a pas été définie, elle conserve donc la
valeur initialisée pour Integer, soit 0. Lorsque la deuxième ligne s’exécute, intRe-
sult prend la également valeur 0 (0 * 74 = 0).
Pour employer une variable dans plusieurs procédures, vous devez la déclarer au
niveau du module. Les variables déclarées au niveau du module peuvent être
exploitées par n’importe quelle procédure de ce module. Pour déclarer une
variable de module, saisissez l’instruction de déclaration de la variable dans la
section Déclarations du module (après les instructions Option et avant toute pro-
cédure), comme le montre la figure 4.12.

70
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Figure 4-12. Pour mettre une variable à la disposition de toutes les procédures
d’un module, vous devez la déclarer dans la section Déclarations des modules.

Pour exposer les variables de module aux autres modules servez-vous de l’ins-
truction Public. Une variable déclarée Public est visible par tous les autres modu-
les et pas uniquement par le module dans lequel elle est déclarée.
Toutes les variables de module sont privées par défaut, mais, à des fins de clarté,

Chapitre 4
il est préférable de les déclarer avec Private au lieu de Dim. Les deux déclarations
suivantes illustrent la différence entre une déclaration Public et Private :

Private intCeModuleUniquement as Integer


Public intTousLesModules as Integer

Assignation de valeurs aux variables


Une variable n’est d’aucune utilité si vous ne lui assignez pas de valeur. Pour assi-
gner une valeur à une variable, on utilise le signe égal (=), également appelé opé-
rateur d’assignation. On commence par donner le nom de la variable, suivi de
l’opérateur d’assignation, puis de l’expression de la valeur à assigner. L’expres-
sion de la valeur peut être une valeur littérale ou une valeur plus complexe, telle
qu’une équation mathématique.

monNombre = 23
votreNombre = 16 + 85
maChaine = "Voici ma chaîne littérale"
deuxChaines = "Voici la première partie" + "Voici la deuxième partie"
maDate = #09/10/2004#

71
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Vous pouvez également assigner la valeur d’une variable à une autre ou référen-
cer la variable à laquelle vous assignez une valeur. Par exemple, si vous conservez
le total en cours des heures travaillées, vous pouvez actualiser le total des heures
travaillées en ajoutant le nombre d’heures travaillées pendant la journée en
cours.

ToursTotaux = TourCompteur
TotalHeuresTravaillees = TotalHeuresTravaillees +
HeuresTravailleesAujourdhui

Tableaux
Un tableau est un ensemble de valeurs du même type de données. Bien que le
tableau contienne plusieurs valeurs, VBA le considère comme une seule variable,
ce qui offre une certaine souplesse. Vous pouvez exploiter le tableau entier ou
uniquement un élément du tableau. Pour utiliser un élément individuel d’un
tableau, vous spécifiez son index, qui représente sa position dans le tableau,
autrement dit la position de l’élément dans la liste.
Les tableaux possèdent deux limites, une limite supérieure et une limite infé-
rieure. La limite inférieure par défaut est 0, ce qui peut entraîner quelque confu-
sion. L’index commençant à 0, le premier élément de la liste se trouve à la
position 0, autrement dit, on travaille toujours avec un index inférieur de 1 par
rapport à la position réelle dans de l’élément dans le tableau.
Si vous préférez commencer à 1, modifiez la limite inférieure du tableau avec
l’instruction Option Base. L’instruction Option Base doit être placée dans la sec-
Chapitre 4

tion des déclarations du module avant de définir des tableaux et avant toute pro-
cédure. L’instruction Option Base prend un seul argument, 0 ou 1, comme le
montre l’exemple suivant :

Option Base 1

Créer un tableau
Pour créer un tableau, on se sert de la même procédure que pour définir une
variable : on crée une instruction Dim, Private, Public ou Static, suivie du nom
du tableau et du type de données stockées dans le tableau. La définition d’une
limite supérieure dans la déclaration du tableau constitue le seule différence
entre la création d’un tableau et celle d’une variable (vous pouvez également spé-
cifier une limite inférieure, comme nous venons de le voir). Pour créer un
tableau de chaîne contenant les noms des 12 mois, par exemple, utilisez l’ins-
truction suivante :

Dim strMois(11) as String

Souvenez-vous : sauf spécification contraire, les tableaux commencent avec une


limite inférieure de 0. Ainsi, pour contenir 12 mois, on définit une limite supé-
rieure de 11 (0 à 11 donne douze éléments). Si vous aviez inclus l’instruction

72
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


Option Base 1 dans la section des déclarations, vous auriez déclaré le tableau de la
manière suivante :

Dim strMois(12) as String

Outre l’instruction Option Base, vous pouvez positionner la limite inférieure


d’un tableau sur une valeur autre que 0 ou 1 en la déclarant explicitement à la
création du tableau avec une clause To. Par exemple, pour déclarer un tableau qui
contient uniquement les trois mois d’été, utilisez l’instruction suivante :

Dim strMoisEte (6 To 8) as String

Créer des tableaux multidimensionnels


Tous les tableaux que nous avons étudiés jusqu’ici étaient de simples tableaux
unidimensionnels. Vous pouvez créer des tableaux multidimensionnels compre-
nant jusqu’à 60 dimensions, quoi qu’il soit rare de trouver une raison d’exploiter
plus de 3 ou 4 dimensions.
Pour déclarer un tableau multidimensionnel, on sépare les limites de chaque
dimension par des virgules. Un tableau bidimensionnel qui contiendrait une
valeur pour chaque mois sur 10 ans peut être déclaré avec l’instruction suivante :

Dim intTableauDecennie(9, 11) as Integer

Rien de plus simple que de visualiser un tableau multidimensionnel. Prenons


l’exemple d’un tableau bidimensionnel où la première dimension représente les
lignes du tableau et la deuxième dimension représente les colonnes, comme dans

Chapitre 4
une feuille de calcul Excel. Pour notre exemple, la troisième dimension sert à sui-
vre plusieurs tableaux ou feuilles de calcul. Par exemple, pour un magasin de
matériel de jardinage ouvert 16 heures par jour, on peut créer le tableau suivant :

Dim curVentesHoraires (12, 31, 16) as Currency

Création de tableaux dynamiques


Dans les exemples de déclaration précédentes, les tableaux étaient tous fixes,
autrement dit chaque tableau possède une taille fixe qui ne peut être modifiée.
Les tableaux dynamiques peuvent changer de taille à la demande. Cette expan-
sion n’est pas automatique : elle est la conséquence de commandes que l’on
ajoute aux procédures.
Pour déclarer un tableau dynamique, on omet la limite dans l’instruction de
déclaration. Par exemple, pour créer un tableau dynamique test, servez-vous de
l’instruction suivante :

Dim intTableauTest() as Integer

73
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Avant d’exploiter un tableau dynamique, vous devez définir le nombre d’élé-
ments qu’il contiendra avec l’instruction ReDim. ReDim permet de redéfinir, ou
redimensionner, un tableau le nombre d’éléments selon les besoins. L’instruction
ReDim vous devez uniquement fournir le nom du tableau et le nombre d’élé-
ments qu’il peut à présent contenir, comme dans la commande suivante :

ReDim intTableauTest(365)

L’instruction ReDim réinitialiser le tableau, ce qui entraîne la perte de toutes les


données contenues dans ses éléments. Pour augmenter le nombre d’éléments
que peut contenir un tableau sans perdre les données qu’il contient, vous devez
ajouter le mot-clé Preserve à la commande, ce qui donne :

ReDim Preserve intTableauTest(730)

Attention Il n’existe aucun moyen de réduire la taille d’un tableau sans per-
dre les données qu’il contient.

Vous pouvez stocker des données dans un tableau en spécifiant l’index de l’élé-
ment auquel vous voulez assigner la valeur. Les fragments de code suivants
créent un tableau qui contient les noms des quatre principales zones horaires du
continent américain et assignent ces noms au tableau :

Option Base 1
Dim strZonesHorairesUS(4) as String
strZonesHorairesUS(1) = "Eastern"
strZonesHorairesUS(2) = "Central"
Chapitre 4

strZonesHorairesUS(3) = "Moutain"
strZonesHorairesUS(4) = "Pacific"

Pour retrouver une valeur dans un tableau, on procède de manière similaire : on


spécifie l’index de l’élément à employer. L’instruction suivante retrouve le qua-
trième élément de la troisième dimension d’un tableau bidimensionnel :

intValeur = intMonTableau(3,4)

Écriture à l’écran et acceptation des entrées


utilisateur
L’acceptation d’entrées de la part des utilisateurs et l’écriture de messages d’état
constituent des tâches classiques que vous exploiterez dans nombre de procédu-
res. Dans VBA, on utilise deux méthodes classiques de Windows pour afficher et
demander des informations à un utilisateur, ce qui simplifie l’utilisation des
macros puisqu’elles présentent une interface familière à l’utilisateur.

74
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Créer une boîte de message


Servez-vous de la fonction MsgBox (message box, boîte de message) pour afficher
de petits messages informationnels ou poser des questions simples. Les boîtes de
message sont intéressantes à plusieurs titres. Outre le fait qu’elles constituent un
élément commun à toute application Windows, elles sont extrêmement simples
à employer. Voici une liste des tâches classiques pour lesquelles vous pouvez
employer des boîtes de message.
● Informer l’utilisateur d’une action qui va avoir lieu et éventuellement lui
permettre d’annuler l’action ou de choisir une action différente.
● Informer l’utilisateur d’une condition d’erreur qui s’est produite et lui
permettre d’entreprendre une action corrective.
● Informer l’utilisateur qu’une tâche particulière est terminée avec succès ou
non. Une boîte de message peut informer l’utilisateur du déroulement
exact de la tâche.
L’un des principaux avantages des boîtes de message est qu’elles permettent de
présenter un message à l’utilisateur que celui-ci ne peut ignorer. Il est même pos-
sible d’obliger l’utilisateur à réagir à la boîte de message en ne l’autorisant pas à
basculer vers ou ouvrir toute autre application.
Quelle que soit l’utilité des boîtes de message, elles possèdent néanmoins quel-
ques limites :
● Une boîte de message ne peut accueillir que un, deux ou trois boutons
parmi lesquels l’utilisateur doit opérer un choix, ce qui limite le nombre
d’options offertes.

Chapitre 4
● Les boutons existent uniquement sous forme prédéfinie : vous ne pouvez
pas ajouter de bouton personnalisé à une boîte de message.
● Aucune autre fonctionnalité n’est disponible dans une boîte de message.
Vous ne pouvez pas ajouter d’autres commandes pour présenter plus
d’options/d’informations à l’utilisateur.
Malgré ces limites, la boîte de message reste un outil particulièrement pratique
pour le programmeur. Voici la syntaxe d’une boîte de message.

prompt[, buttons] [, title][, helpfile, context]) as Integer


MsgBox (p

● prompt Un argument indispensable de la fonction MsgBox qui contient le


texte affiché dans la boîte de message. La longueur maximale du texte est
de 1024 caractères, selon la largeur des caractères employés. Si le texte
s’étend sur plusieurs lignes, spécifiez les retours à la ligne en insérant un
retour chariot avec la constante vbCr, (Chr$(13)), un saut de ligne avec la
constante vbLf, (Chr$(10)) ou une combinaison retour chariot/saut de
ligne avec la constante vbCrLf.

75
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Remarque S’il est plus simple de servir des constantes intrinsèques pour le
retour chariot et le saut de ligne, vous pouvez rencontrer (Chr$(13)) pour un
retour chariot, (Chr$(10)) pour un saut de ligne et (Chr$(13) & Chr$(10)) pour
les deux.

● buttons Argument numérique optionnel qui sert à spécifier les boutons et


l’icône affichée dans la boîte de message. En additionnant la valeur des
options sélectionnée, vous indiquez les boutons et l’icône affichés, l’iden-
tité du bouton par défaut et la modalité de la boîte de message. Vous pou-
vez utiliser les constantes intrinsèques de Visual Basic pour spécifier les
options. Le tableau 4.9 donne une liste complète des options disponibles.
Le bouton par défaut est sélectionné si l’utilisateur appuie sur la touche
Entrée. Si cette option est omise, la valeur 0 est employée par défaut.
● title Expression de chaîne optionnelle qui sert à indiquer le texte affiché
dans la barre de tire des boîtes de message. Si elle est omise, le texte affiché
est « Microsoft Excel ».
● helpfile Argument de chaîne optionnel qui sert à désigner le fichier d’aide
employé pour l’aide contextuelle sur la boîte de message. Si helpfile est
défini, l’argument context doit également l’être.
● context Cet argument numérique optionnel indique le numéro de con-
texte attribué à la rubrique d’aide appropriée. Si context est défini, l’argu-
ment helpfile doit également l’être.
La fonction MsgBox retourne une valeur entière qui indique le bouton cliqué par
l’utilisateur. Le tableau 4.10 liste ces valeurs.
Chapitre 4

Tableau 4-9. Options des boutons de boîtes de message


Constante intrinsèque Valeur Description
Boutons
vbOkOnly 0 Affiche uniquement un bouton OK.
vbOkCancel 1 Affiche un bouton OK et un bouton
Annuler.
vbAbortRetryIgnore 2 Affiche les trois boutons intitulés
Abandonner, Réessayer et Ignorer.
vbYesNoCancel 3 Affiche les trois boutons libellés Oui,
Non et Annuler.
vbYesNo 4 Affiche les boutons libellés Oui et Non.
vbRetryCancel 5 Affiche les boutons libellés Réessayer et
Annuler.
Icônes
vbCritical 16 Affiche un cercle plein rouge barré
d’une croix blanche.

76
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Tableau 4-9. Options des boutons de boîtes de message (Suite)


Constante intrinsèque Valeur Description
vbQuestion 32 Affiche une bulle contenant un point
d’interrogation.
vbExclamation 48 Affiche un triangle jaune contenant un
point d’exclamation.
vbInformation 64 Affiche une bulle contenant une lettre i
en minuscule.
Bouton par défaut
vbDefaultButton1 0 Définit le premier bouton comme
bouton par défaut.
vbDefaultButton2 256 Définit le deuxième bouton comme
bouton par défaut.
vbDefaultButton3 512 Définit le troisième bouton comme
bouton par défaut.
vbDefaultButton4 768 Définit le quatrième bouton (bouton
d’aide, par exemple) comme bouton par
défaut.
Modalité
vbApplicationModal 0 Marque la boîte de message comme
modale. L’utilisateur doit répondre au
message avant de pouvoir continuer
sont travail dans l’application en cours.

Chapitre 4
N’interfère pas avec les autres
applications.
vbSystemModal 4096 Marque la boîte de message comme
modale système. Elle s’affiche toujours
au-dessus des autres fenêtres
ouvertes, quelle que soit l’application
dans laquelle l’utilisateur bascule.
vbMsgBoxHelpButton 16384 Ajoute un bouton Aide à la boîte de
message.
vbMsgBoxSetForeground 65536 Affiche la boîte de message au premier
plan.
vbMsgBoxRight 524288 Aligne le texte de la boîte de message à
droite.
vbMsgBoxRtlReading 1048576 Affiche le texte de droite à gauche sur
les systèmes en langues arabe et
hébraïque.

77
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Tableau 4-10. Valeurs retournées par une boîte de message


Constante intrinsèque Valeur
vbOk 1
vbCancel 2
vbAbort 3
vbRetry 4
vbIgnore 5
vbYes 6
vbNo 7

Si la boîte de message contient un bouton Annuler, appuyer sur la touche Echap


produit le même résultat que cliquer sur ce bouton. Sélectionnez exactement
une option par groupe. Si vous sélectionnez plusieurs options, Excel utilise celle
dont la valeur est la plus élevée.
Pour afficher la boîte de message, il suffit d’indiquer l’argument title.

Sub Bienvenue()
MsgBox "Bienvenue dans Excel."
End Sub

Cette procédure produit une boîte de message simple, contenant uniquement le


texte et un bouton OK. L’instruction ne contenant pas de valeur pour le titre de
la boîte de message, celui-ci prend la valeur pas défaut, autrement dit le nom de
l’application (voir figure 4.13).
Chapitre 4

Figure 4-13. Rien de plus simple que de créer des boîtes de message
contenant un bref message de bienvenue ou d’information.

Outre les chaînes littérales, vous pouvez afficher des messages avec des variables
de chaîne. Le fragment de code suivant affiche une boîte de message contenant
deux lignes de texte, une icône d’information et un titre dans la barre de titre,
dont la figure 4.14 montre le résultat.

Sub Voyage()
strPrompt = "Bienvenue !" & vbCrLf & "Saisissez les données de
votre voyage ci-après."
MsgBox strPrompt, vbInformation, "Enregistrements des coupons de
voyage"
End Sub

78
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA

Figure 4-14. Il n’est guère plus compliqué de créer une boîte de message
contenant deux lignes de texte.

À l’heure de choisir l’icône à afficher dans la boîte de message, servez-vous des


directives suivantes issues des directives de l’interface utilisateur Windows de
Microsoft :
● Utilisez l’icône d’information pour fournir à l’utilisateur le résultat d’une
commande précédemment émise. Ne proposez aucun choix. Seul le bou-
ton OK doit accompagner une icône informative.
● Servez-vous de l’icône d’exclamation pour avertir l’utilisateur d’un pro-
blème ou d’une situation qui nécessite une décision de sa part avant de
continuer, par exemple, lorsque les données risquent d’être définitivement
modifiées ou supprimées.
● Employez l’icône de message critique pour informer l’utilisateur d’une
erreur ou d’un problème critique qui doit être corrigé avant de poursuivre
le traitement.
● N’utilisez pas l’icône d’interrogation. Elle n’existe qu’à des fins de rétro-
compatibilité.

Créer une boîte de saisie

Chapitre 4
Une boîte de saisie est similaire à une boîte de message en ce qu’elle affiche du
texte, mais elle présente une fonctionnalité supplémentaire : elle accepte des
réponses textuelles de la part des utilisateurs. Au lieu de présenter quelques bou-
tons sur lesquels l’utilisateur clique pour répondre aux messages affichés, les boî-
tes de saisie contiennent une zone de texte dans laquelle l’utilisateur peut saisir
une réponse. À l’instar d’une boîte de message, la boîte de saisie présente une
invite et un titre, mais aucune icône ne s’affiche et les boutons OK et Annuler
sont toujours présents. La figure 4.15 montre une boîte de saisie qui demande le
nom de l’utilisateur.

Figure 4-15. Dans une boîte de saisie, les utilisateurs peuvent saisir des
informations personnelles, telles que leur nom.

Voici la syntaxe d’une boîte de saisie.

79
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


prompt [, title][, default][, xpos][, ypos][, helpfile,
InputBox (p
context]) as String

● prompt Argument obligatoire de la fonction InputBox qui contient le


texte affiché dans la boîte de saisie. La longueur maximale du texte est de
1024 caractères, selon la largeur des caractères employés. Si le texte se com-
pose de plusieurs lignes, spécifiez les retours à la ligne en insérant un
retour chariot avec la constante vbCr, un saut de ligne avec la constante
vbLf ou une combinaison retour chariot/saut de ligne avec la constante
vbCrLf. Vous pouvez également utiliser les constantes intrinsèques
Visual Basic, vbCr, vbLf et vbCrLf pour représenter les caractères.
● title Expression de chaîne optionnelle qui indique le texte affiché dans la
barre de tire des boîtes de saisie. Si elle est omise, le texte affiché est
« Microsoft Excel ».
● default Valeur de chaîne optionnelle qui s’affiche dans la zone de texte
comme valeur par défaut si aucune autre information n’y est saisie. L’utili-
sateur peut effacer ou modifier la réponse par défaut.
● xpos Expression numérique optionnelle qui représente le nombre de
twips entre le bord gauche de l’écran et le bord gauche de la boîte de saisie.
Si vous omette xpos, la boîte de saisie est centrée horizontalement.

Remarque Un twip (twentieth of a point, vingtième de point) correspond à 1/


1440ème de pouce soit 1/567ème de centimètre. Ainsi, pour commencer une
boîte de saisie à un demi pouce du bord gauche de l’écran, vous assignez la
valeur 720 à xpos.
Chapitre 4

● ypos Expression numérique optionnelle qui représente le nombre de


twips entre le bord supérieur de l’écran et le bord supérieur de la boîte de
saisie. Si vous omettez ypos, la boîte de saisie est centrée verticalement.
● helpfile Argument de chaîne optionnel qui désigne le fichier d’aide
employé pour l’aide contextuelle sur la boîte de saisie. Si helpfile est défini,
l’argument context doit l’être également.
● context Argument numérique optionnel qui indique le numéro de con-
texte attribué à la rubrique d’aide appropriée. Si context est défini, l’argu-
ment helpfile doit également l’être.
La fonction InputBox retourne une valeur de chaîne. En conséquence, si la zone
de texte est vide ou que l’utilisateur appuie sur le bouton Annuler, la chaîne
retournée est vide.
La valeur retournée par une boîte de saisie est généralement stockée dans une
variable de chaîne de manière à pouvoir être exploitée ultérieurement. La frag-
ment de code suivant affiche une boîte de saisie qui demande sa ville de nais-
sance à l’utilisateur. Tous les paramètres sont saisis sous forme de variables, mais
nous aurions pu employer des littéraux ou des constantes.

80
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


Sub VilleNaissance()
Dim strResponse as String, strPrompt as String, strTitle as String
strResponse = "Strasbourg"
strPrompt = "Veuillez saisir votre ville de naissance."
strTitle = "Ma boîte de saisie"
strResponse = InputBox(strPrompt, strTitle, strResponse)
End Sub

Définition de variables objet


Avec VBA, vous n’êtes pas limité aux variables simples qui contiennent des don-
nées assignées à partir d’une autre variable ou dérivées d’un calcul. En fait, si
vous souhaitez créer une feuille de calcul, un graphique ou tout autre « élément »
Excel représenté par un objet dans le modèle d’objet VBA Excel, il vous suffit de
déclarer une variable objet. Avec l’instruction Dim, vous fournissez le nom de la
variable puis vous indiquez le type d’objet à créer, comme dans le fragment de
code ci-après, qui crée une référence à une feuille de calcul :

Dim monObj as Worksheet

Les variables objet ne s’emploient pas de la même manière que les variables nor-
males, essentiellement parce qu’une variable objet représente un pointeur vers
un objet et non l’objet lui-même. Autrement dit, dans le fragment de code pré-
cédent, nous n’avons pas créer la feuille de calcul, nous avons simplement indi-
qué à VBA que la variable monObj contient un objet Worksheet. Vous devez donc
fournir l’objet à assigner à la variable. Pour ce faire, vous utilisez la commande
Set. La commande suivante définit la variable objet monObj pour qu’elle pointe

Chapitre 4
vers la première feuille de calcul :

Set monObj = Worksheets(1)

Création de types de données personnalisés


VBA propose tous les types de données simples dont vous pouvez avoir l’utilité
dans le cadre de l’écriture de macros Excel. Dans certains cas, toutefois, vous
aurez besoin de types de données plus complexes. Vous pouvez, par exemple,
créer un type de données personnalisé qui contient les coordonnées horizontales
et verticales d’un point sur une carte, au lieu de stocker les valeurs dans des
variables séparées. Avec l’instruction Type, vous définissez un nouveau type de
données qui contiendra les deux coordonnées.

Private Type SituationCarte


sglHorizontal as Single
sglVertical as Single
End Type

Une fois le nouveau type défini, vous pouvez l’utiliser à votre guise dans tout
autre type de variable en vous servant d’un point (.) pour référencer les sous-élé-
ments du nouveau type.

81
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Dim maSituationCarte as SituationCarte
monPointCarte.sglHorizontal = 29,57
monPointCarte.sglVertical = 90

Les types de données personnalisés doivent être définis dans la section Déclara-
tions d’un module. Ils peuvent être Public ou Private.

Commande With…End With


Pour rendre votre code plus lisible et plus court, servez-vous de la commande
With...End With. La commande With...End With définit un objet que le compila-
teur VBA va supposer référencé par chaque propriété, méthode et événement
appelés dans la procédure. Une fois l’objet défini dans la ligne de code With, vous
ajoutez un point, suivi du nom de la propriété à définir. La procédure suivante,
par exemple, positionne les marges supérieure et inférieure d’une feuille de cal-
cul à 2 pouces et change l’orientation de la feuille de calcul de portrait (avec les
en-têtes de colonnes parallèles au bord le plus court du papier) en paysage (avec
les en-têtes de colonnes parallèles au bord le plus long du papier).

Sub ConfigPage()
With ActiveSheet.ConfiPage
.TopMargin = Application.InchesToPoints(2)
.BottomMargin = Application.InchesToPoints(2)
.Orientation = xlLandscape
End With
End Sub

Contrôle de la progression du programme


Chapitre 4

VBA est un langage piloté par l’événement dérivé de Visual Basic. Autrement dit,
le code que vous écrivez est exécuté comme réponse à une action qui s’est pro-
duite, comme un clic sur un bouton ou l’ouverture d’un classeur. L’exécution du
programme progresse de la première ligne de code à la dernière ligne de la pro-
cédure, mais il arrive que l’on doive interrompre l’exécution de cette progression
descendante. VBA propose plusieurs méthodes pour répéter certaines sections
de code, sauter des sections de code et prendre des décisions quant aux sections
à exécuter.

Instructions de sélection
L’une des facettes essentielles de la plupart des applications repose sur la possibi-
lités de prendre des décisions. Cette possibilité permet à l’application de prendre
une décision à partir de l’entrée reçue de l’utilisateur et de toute valeur qui peut
être calculée.

L’instruction If…Then…Else
L’instruction If...Then...Else constitue la forme de prise de décision la plus sim-
ple. Elle étudie une expression pour vérifier si elle est vraie ou non. Si l’expres-

82
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


sion est True, le code effectue l’une des actions définies. Dans le cas contraire, il
effectue un jeu d’actions différent.
Les instructions If...Then...Else prennent deux formes : sur une ligne ou sur plu-
sieurs lignes. Voici la syntaxe de ces deux formes.

If condition Then statements Else elsestatements

ou

If condition Then
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[Else elsestatements] ]
End If

● condition Expression obligatoire qui prend la valeur booléenne True ou


False.
● statements Bloc optionnel d’une ou de plusieurs instructions à exécuter si
condition est True.
● elseifcondition Expression obligatoire si ElseIf est présent et qui prend la
valeur booléenne True ou False.
● elseifstatements Bloc optionnel d’une ou de plusieurs instructions à exé-
cuter si elseifcondition est True.
● elsestatements Bloc optionnel d’une ou de plusieurs instructions à exécu-

Chapitre 4
ter si aucune condition ou elseifcondition est True.
● End If Élément obligatoire dans la forme multilignes qui termine le bloc
If…Then.
Avec les instructions If...Then...Else vous devez employer les opérateurs de com-
paraisons pour construire les instructions conditionnelles. Les opérateurs de
comparaison comparent plusieurs valeurs et décident si les valeurs sont égales les
unes par rapport aux autres ou si l’une est supérieure à l’autre. Ils retournent
ensuite une réponse True ou False. Le tableau 4.11 liste les six opérateurs de com-
paraison.
Tableau 4-11. Opérateurs de comparaison
Opérateur Description
= Détermine si deux valeurs sont égales.
< Détermine si la valeur située à gauche de l’opérande est
inférieure à la valeur située à droite.
> Détermine si la valeur située à gauche de l’opérande est
supérieure à la valeur située à droite.
<= Détermine si la valeur située à gauche de l’opérande est
inférieure ou égale à la valeur située à droite.

83
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Tableau 4-11. Opérateurs de comparaison (Suite)


Opérateur Description
>= Détermine si la valeur située à gauche de l’opérande est
supérieure ou égale à la valeur située à droite.
<> Détermine si deux valeurs sont différentes.

Les fragments de code suivants montrent des exemples de l’utilisation de l’ins-


truction If...Then...Else pour déterminer si l’âge d’une personne lui permet de
voter :

If intAge >= 18 Then


boolVoteAutorise = True
Else
boolVoteAutorise = False
End If

If boolVoteAutorise Then
[Affiche bulletin et enregistre le vote]
End If

intReturn = MsgBox("Voulez-vous continuer ?", vbYesNo + vbExclamation,


"Mon App")
If intReturn = vbYes Then
[Continue traitement]
Else
[Sortie procédure]
End If
Chapitre 4

Instructions Select Case


Les instructions Select Case permettent de vérifier simultanément plusieurs
valeurs. Supposons que vous deviez calculer différentes valeurs en fonction du
mois. Vous devez écrire onze instructions If...Then...Else pour vérifier les douze
mois. Avec une instruction Select Case, le nombre d’instructions conditionnelles
est ramené à un, ce qui simplifie la lecture et le maintien de votre code.
Voici la syntaxe d’une instruction Select Case.

Select [Case] testcondition


[Case expressionlist
[ statements ]
[Case Else
elsestatements
End Select

● testcondition Expression obligatoire qui doit prendre pour valeur l’un des
types de données de base, comme Boolean, Integer, String et ainsi de suite.
● expressionlist Liste de clauses d’expression représentant les valeurs de tes-
texpression. On sépare les différentes clauses d’expression par des virgules.
Elles peuvent prendre les formes suivantes :

84
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


● Expression1 To Expression2 Utilisé pour représenter une plage de valeurs
allant de Expression1 à Epression2. Expression1 doit être inférieur à
Expression2.
● [Is] comparisonoperator Expression comparisonoperator sert à indiquer
une restriction sur la valeur de Expression.
● Expression Les expressions de expressionlist peuvent être de n’importe
quel type de données à condition qu’elles soient implicitement converti-
bles dans le type de testcondition.
● Statements Une ou plusieurs instructions sont exécutées si testexpression
correspond à l’une des clauses de expressionlist.
● Else statements Une ou plusieurs instructions sont exécutées si testexpres-
sion ne correspond pas à l’une des clauses de expressionlist.
● End Select Obligatoire pour marquer la fin du bloc Select Case.

Le fragment de code suivant expose une utilisation de l’instruction Select Case


pour attribuer à une variable le nombre de jours de chaque mois.

Select Case strMois


Case "Février"

intJours = 28

Case "Avril", "Juin", "Septembre", "Novembre"


intJours = 30

Case "Janvier", "Mars", "Mai", "Juillet", "Août", "Octobre",


"Décembre"

Chapitre 4
intJours = 31

End Select

Ce fragment constitue un exemple simple qui spécifie le nombre de jours dans


un mois, mais qui ne tient pas compte des années bissextiles. Nous devons ajou-
ter davantage de code à la clause « Février » pour configurer correctement le
nombre de jours du mois de février :

Case "Février"
If (intAnnee Mod 100) = 0 Then
If (intAnnee Mod 400) = 0 Then
intJours = 29
Else
intJours = 28
End If
Else
If (intAnnee Mod 4) = 0 Then
intJours = 29
Else
intJours = 28
End If
End If

85
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Cet exemple montre également que l’on peut imbriquer des instructions
If...Then...Else dans une instruction Select Case.

Boucles
Il vous arrivera souvent de devoir répéter une tâche donnée. Pour vous aider,
VBA propose plusieurs méthodes de création de boucles. Les boucles peuvent
être classées dans deux catégories : les boucles itératives et les boucles logiques.

Boucles itératives
Les boucles itératives, qui servent à assurer un certain nombre de répétitions,
possèdent un point de départ et de fin définitifs. Il existe deux boucles itératives,
dont le style et la syntaxe sont similaires.
Le premier type de boucle itérative, la boucle For…Next, sert essentiellement
pour compter et répond aux besoins des tableaux. Voici la syntaxe d’une boucle
For...Next.

For counter = start To end [Step step]


statements]
[s
[Exit For]
statements]
[s
Next counter

● counter Variable numérique obligatoire utilisée comme compteur. Il peut


s’agir d’une valeur Boolean ou d’un membre de tableau.
● start Valeur obligatoire employée comme point de départ du tableau.
Chapitre 4

● end Valeur obligatoire employée comme point final du tableau.


● step Valeur optionnelle qui sert de valeur d’incrémentation du compteur
à chaque itération de la boucle. La valeur de step peut être positive ou
négative. Sa valeur par défaut est 1.
● statements Une ou plusieurs lignes d’instructions optionnelles exécutées
pendant chaque itération de la boucle.
● Exit For Instruction optionnelle employée pour quitter prématurément la
boucle. L’exécution du code s’arrête à la première ligne qui suit l’instruc-
tion Next counter.
● Next counter Instruction obligatoire qui marque la fin de la boucle
For...Next.
Vous pouvez omettre la variable counter dans l’instruction Next, mais ce n’est pas
recommandé. En incluant le compteur, vous vous protégez davantage contre les
erreurs de programmation.
Comme nous l’avons étudié précédemment, la boucle For...Next assure qu’un
nombre donné de répétitions est réalisé. Supposons que vous disposiez d’un
tableau contenant 26 éléments et que vous vouliez définir chaque élément par la
lettre de l’alphabet correspondante. La boucle For...Next constitue le meilleur

86
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


moyen d’y parvenir. Le code suivant crée un tableau de 26 membres, assigne une
lettre de l’alphabet à chaque élément puis construit une boîte de message qui
affiche ces éléments.
Sub TableauAlphabet()
Dim strABC (1 To 26) as String
Dim intCounter as Integer
Dim strPrompt as String
For intCounter = 1 to 26
strABC(intCounter) = Chr$(intCounter + 64)
Next intCounter
strPrompt = "Le tableau strABC contient les valeurs suivantes :" &
vbCrLf
For intCounter = 1 to 26
strPrompt = strPrompt & strABC(intCounter)
Next intCounter
MsgBox strPrompt
End Sub

Les boucles For...Next peuvent être imbriquées les unes dans les autres, ce qui
permet de construire des itérations bien plus complexes. L’exemple suivant
modifie l’exemple précédent en construisant un tableau bidimensionnel et en
affichant les éléments du tableau en sens inverse :

Dim strABC(100 To 101, 1 To 26) As String


Dim intCounter1 As Integer, intCounter2 As Integer
Dim strPrompt as String
For intCounter1 = 100 To 101
For intCounter2 = 1 To 26
strABC(intCounter1, intCounter2) = Chr$(intCounter2 + 64)

Chapitre 4
Next intCounter2
Next intCounter1
strPrompt = "Le tableau strABC contient les valeurs suivantes :"

For intCounter1 = 100 To 101


strPrompt = strPrompt & vbCrLf & "Dimension" & Str$(intCounter1) & ": "
For intCounter2 = 26 To 1 Step -1
strPrompt = strPrompt & strABC(intCounter1, intCounter2)
Next
Next intCounter1
MsgBox strPrompt

L’autre boucle itérative, la boucle For Each...Next, sert dans le cadre des collec-
tions d’objets ou de tableaux, pour assurer que chaque membre du groupe est
concerné. Sa syntaxe est similaire à celle d’une boucle For...Next.

For Each element In group


statements]
[s
[Exit For]
statements]
[s
Next element

87
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


● element Objet ou variable Variant obligatoire utilisé pour pointer vers
chaque membre du groupe. Pour les boucles d’un tableau, il peut unique-
ment s’agir d’une variable de type Variant, quel que soit le type de données
du tableau.
● group Collection d’objets ou tableau obligatoires contenant les éléments
affectés par la boucle.
● statements Une ou plusieurs lignes d’instructions optionnelles exécutées
pendant chaque itération de la boucle.
● Exit For Instruction optionnelle employée pour quitter prématurément la
boucle. L’exécution du code s’arrête à la première ligne qui suit l’instruc-
tion Next element.
● Next element Instruction obligatoire qui marque la fin de la boucle
For...Next.
La boucle For Each...Next représente une méthode pratique pour effectuer la
même action sur une collection d’objets (nous détaillerons les collections
d’objets et leur utilisation aux chapitres 6, 7 et 8). Par exemple, pour renommer
toutes les feuilles de calcul d’un classeur, vous pouvez utiliser une boucle For
Each...Next pour demander à l’utilisateur le nom de chaque feuille de calcul, la
renommer et continuer avec la suivante jusqu’à ce que toutes les feuilles de calcul
soient renommées.

Sub RenommerFeuillesCalcul()
Dim maFeuilleCalcul As Worksheet
Dim strPrompt As String, strResult As String
Dim intCounter as Integer
Chapitre 4

intCounter = 0
strPrompt = "Veuillez saisir le nouveau nom de la feuille de calcul "
For Each maFeuilleCalcul In Application.Worksheets
strResult = InputBox(strPrompt & maFeuilleCalcul.Name)
maFeuilleCalcul.Name = strResult
intCounter = intCounter + 1
Next maFeuilleCalcul
strPrompt = "Nombre total de feuilles de calcul renommées =" &
Str$(intCounter)
MsgBox strPrompt
End Sub

Boucles logiques
Les boucles logiques ne possèdent pas de nombre prédéterminé d’itérations.
Elles se basent sur une expression logique qui teste une condition particulière
puis répètent la boucle jusqu’à ce que la condition soit rencontrée ou annulée,
selon le type de boucle.
Il existe quatre formes de boucles logiques, mais on peut les simplifier en deux
catégories : celles qui testent la condition avant d’effectuer une action et celles
qui testent la condition après avoir effectué une action. Dans chaque catégorie,

88
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


les deux boucles diffèrent en ce que l’une boucle lorsque la condition est vraie et
l’autre lorsque la condition est fausse.
Les boucles Do While…Loop et Do Until…Loop testent la condition avant
d’effectuer l’action de la boucle. La différence entre les deux boucles est que la
boucle Do While effectue l’action si la condition est vraie et Do Until effectue
l’action si la condition est fausse. Pour choisir celle à employer, vous devez trou-
ver la manière la plus simple d’exprimer la condition puis choisir la boucle qui
lui correspond au mieux.
Comme le montre le code suivant, la syntaxe des deux boucles est simple :

Do While condition
statement]
[s
[Exit Do]
statement]
[s
Loop
et
Do Until condition
statement]
[s
[Exit Do]
statement]
[s
Loop

● condition Expression numérique ou expression de chaîne obligatoire


dont la valeur est True ou False.
● statement Une ou plusieurs lignes d’instructions exécutées pendant la
boucle.
● Exit Do Instruction optionnelle employée pour quitter prématurément la

Chapitre 4
boucle.
● Loop Instruction obligatoire qui marque la fin du bloc d’instruction.

La boucle Do While teste d’abord la condition, puis entre dans la boucle et s’exé-
cute tant que condition est True. Cet exemple effectue une simple boucle de
comptage, similaire à l’instruction For…Next :
Dim intCounter as Integer
intCounter = 1
Do While intCounter <= 10
intCounter = intCounter + 1
Loop

La boucle Do Until suivante effectue les mêmes actions que la boucle Do While,
mais notez le changement dans l’expression de la condition :

Dim intCounter as Integer


intCounter = 1
Do Until intCounter = 11
intCounter = intCounter + 1
Loop

89
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Ces deux exemples exécutent une boucle de comptage simple de 1 à 10. De ces
deux exemples, il est plus simple de comprendre que la boucle Do While compte
de 1 à 10. La boucle Do Until semble compter jusqu’à 11. En fait, l’action ne
s’effectue pas lorsque le compteur atteint 11 : elle s’effectue pour la dernière fois
avec la valeur 10.
À l’instar des boucles Do While et Do Until, les boucles Do…Loop While et
Do…Loop Until sont similaires. Elles vérifient une expression conditionnelle à la
fin de la boucle, garantissant au moins un passage dans la boucle. La boucle
Do...Loop While boucle si la condition est vraie et la boucle Do...Loop Until bou-
cle si la condition est fausse. Voici les déclarations de leur syntaxe :

Do
statement]
[s
[Exit Do]
statement]
[s
Loop While condition
et
Do
statement]
[s
[Exit Do]
statement]
[s
Loop Until condition

● condition Expression obligatoire qui prend la valeur True ou False.


● statement Une ou plusieurs lignes d’instructions exécutées pendant la
boucle.
● Exit Do Instruction optionnelle employée pour quitter prématurément la
Chapitre 4

boucle.
● Loop Instruction obligatoire qui marque la fin du bloc d’instruction Do
While ou Do Until.
L’exemple suivant incrémente un compteur à chaque passage dans la boucle et
utilise une boîte de message pour demander à l’utilisateur s’il souhaite
continuer :
Sub PermissionLoop()
Dim intCounter As Integer, strPrompt As String
Dim intResult as Integer

intCounter = 0
Do
intCounter = intCounter + 1
strPrompt = "Vous avez bouclé" & Str$(intCounter) & " fois." _
& vbCrLf & "Voulez-vous continuer ?"
intResult = MsgBox(strPrompt, vbYesNo + vbExclamation)
Loop While intResult = vbYes
End Sub

Voici le même exemple avec une instruction Do…Loop Until.

Sub PermissionLoop2()

90
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


Dim intCounter As Integer, strPrompt As String
Dim intResult as Integer

intCounter = 0
Do
intCounter = intCounter + 1
strPrompt = "Vous avez bouclé" & Str$(intCounter) & " fois." _
& vbCrLf & "Voulez-vous continuer ?"
intResult = MsgBox(strPrompt, vbYesNo + vbExclamation)
Loop Until intResult = vbNo
End Sub

Instruction GoTo
L’instruction GoTo oblige la procédure à passer immédiatement à une autre sec-
tion de la procédure et ce sans condition. La section de code à atteindre doit être
marquée par un numéro de ligne ou une étiquette de ligne pour permettre au
programme d’avancer ou de reculer dans la procédure. L’utilisation de l’instruc-
tion GoTo est déconseillé car elle complexifie le débogage et la compréhension
des procédures.
Voici la syntaxe de l’instruction GoTo :

GoTo line

Dans le code précédent, line représente une étiquette de ligne obligatoire


(numéro de ligne ou étiquette de ligne) définie au sein de la même procédure.
Les numéros de ligne peuvent être n’importe quelle série de chiffres commen-
çant à la première colonne. Les étiquettes de ligne peuvent se composer de toute

Chapitre 4
série de caractères qui commence par une lettre et se termine par deux points (:).
Les étiquettes de ligne ne sont pas sensibles à la casse et doivent commencer dans
la première colonne.
Dans la mesure où les instructions GoTo risquent de déstructurer le code, leur
utilisation est fortement déconseillée. Toutefois, exploitées avec parcimonie, elles
peuvent être extrêmement utiles. La prochaine section, consacrée à la gestion des
erreurs, explique quand et comment utiliser l’instruction GoTo et les étiquettes
de ligne.

Gestion des erreurs


Chaque procédure doit s’accompagner d’une forme de gestion des erreurs,
même si elle se contente d’informer l’utilisateur de la cause de l’erreur avant de
quitter. Les procédures qui sont appelées par d’autres procédures et pas nécessai-
rement invoquées par l’utilisateur, par exemple, doivent retourner à la procédure
appelante une indication quant à la réussite de leur exécution.
Prenons l’exemple de l’instruction Select Case que nous avons étudiée plus tôt
dans ce chapitre pour calculer le nombre de jours dans un mois. Elle vérifiait si la

91
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


variable intMois correspondait à l’une des clauses attendues. Si intMois contient
une valeur hors de la plage de 1 à 12, l’instruction Select Case retourne –1.
En retournant une valeur qui se trouve en-dehors de la plage de valeurs atten-
dues, elle permet à toute instruction qui dépend de la valeur de intMois de con-
firmer la légitimité de la valeur.
Outre l’ajout de code de validation des données pour vérifier votre code, VBA
vous permet de récupérer les erreurs qu’il détecte. En récupérant les erreurs que
VBA détecte, votre procédure peut éventuellement les corriger et continuer son
exécution.
Pour récupérer les erreurs VBA, servez-vous de la commande On Error. Elle
prend la forme de base

On Error Goto line label

Dans cette ligne de code, line label spécifie la section de code que vous avez écrite
pour gérer les erreurs.
Le fragment de code suivant montre comment récupérer les erreurs et brancher
le code sur une étiquette libellée ErrorHandler :

On Error GoTo ErrorHandler


[statements]
ErrorHandler:
[error handler statements]

Pour démarrer la récupération des erreurs le plus rapidement possible, placez


Chapitre 4

l’instruction On Error au début de la procédure. Vous n’êtes pas limité à un ges-


tionnaire d’erreur par procédure. Vous pouvez désigner différents gestionnaires
d’erreurs à mesure que la procédure progresse, et même revenir à des gestionnai-
res d’erreurs antérieurs. Le fragment de code suivant illustre une méthode de
construction d’une série de routines de gestion d’erreurs :

On Error GoTo ErrorHandler1


[statements]
On Error GoTo ErrorHandler2
[statements]
On Error GoTo ErrorHandler1
[statements]
ErrorHandler1:
[errorhandler1 statements]
ErrorHandler2:
[errorhandler2 statements]

VBA exécute une procédure complète avant d’atteindre la fin. En conséquence,


vous devez inclure des instructions pour que VBA ignore tous les gestionnaires
d’erreurs que vous avez écrits si aucune erreur n’est récupérée. Pour empêcher
VBA d’exécuter le code de gestion des erreurs, on le place généralement à la fin
d’une procédure, puis dans la ligne immédiatement avant le gestionnaire

92
Partie 2 : Visual Basic pour Applications

Démarrage de la programmation VBA


d’erreurs, on insère une instruction Exit Sub ou Exit Function pour quitter la
procédure.

Pour plus d’informations sur les deux types de procédures (les procédures Sub et les pro-
cédures Function), reportez-vous au chapitre 5, « Création de procédures Sub et
Function ».

Une fois une erreur récupérée, comment savoir de quelle erreur il s’agit et quelle
action corrective a été entreprise ? Pour décrire l’erreur, VBA propose diverses
propriétés de l’objet Err. Deux de ces propriétés, Number et Description, fournis-
sent respectivement un code d’erreur numérique et une chaîne descriptive de
l’erreur. Le code permet de reconnaître et de corriger les erreurs communes et
attendues.
Les gestionnaires d’erreurs fonctionnent uniquement pour la procédure dans
laquelle ils apparaissent. Une fois la procédure terminée, la récupération
d’erreurs est désactivée. Pour désactiver vous-même le gestionnaire d’erreurs,
servez-vous de l’instruction suivante :

On Error GoTo 0

Si le gestionnaire d’erreurs parvient à résoudre le problème qui a produit


l’erreur, vous voudrez reprendre l’exécution de la procédure. Pour ce faire, ser-
vez-vous de la commande Resume. Placez à l’intérieur d’un gestionnaire
d’erreurs, elle reprend l’exécution au niveau de l’instruction qui a généré
l’erreur.
Quelquefois, le gestionnaire d’erreurs ne parvient pas à corriger le problème,

Chapitre 4
mais si l’erreur n’est pas fatale à l’exécution, elle ne fait pas échouer le reste de la
procédure. Si tel est le cas, vous pouvez reprendre l’exécution de la procédure
avec l’instruction Resume Next. L’exécution se poursuit avec l’instruction qui
suit immédiatement celle qui a provoqué l’erreur. Vous pouvez également spéci-
fier la reprise de l’exécution à une instruction spécifique avec l’instruction
Resume line. L’exécution continue au niveau de l’instruction désignée par line.
Le fragment de code suivant illustre une méthode classique d’utilisation des ges-
tionnaires d’erreurs :

On Error GoTo ErrorHandler


[statements]
FinishedSub:
Exit Sub
ErrorHandler:
MsgBox(str$(Err) & ": " & Err.Description, vbInformation, _
"Error Handler")
Resume FinishedSub

Ce chapitre plutôt long, mais espérons-le complet, a exploré toutes les techni-
ques de base dont vous avez besoin pour créer des macros VBA. Vous avez appris
à définir et à assigner des valeurs aux variables, à contrôler la progression des
programmes avec des boucles et des tests et à gérer les erreurs qui les accompa-

93
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


gnent. Au chapitre 5, vous allez apprendre à créer et à exploiter les procédures
qui contiennent le code VBA.
Chapitre 4

94
Partie 2 : Visual Basic pour Applications

Chapitre 5
Création de procédures
Sub et Function
Définition de procédures Sub. . . . 95 Organisez votre réussite . . . . . . 115
Définition de procédures
Function . . . . . . . . . . . . . . . . . . . 109

Dans les premiers chapitres de ce livre, et plus particulièrement dans le


chapitre 4, nous avons exploité des exemples de procédures pour illustrer l’utili-
sation de Visual Basic pour Applications (VBA) avec Microsoft Excel. Le
chapitre 4 a introduit les constructs de programmation que vous pouvez
employer pour créer et contrôler le fonctionnement du code VBA : répéter un
extrait de code un certain nombre de fois dans une boucle For...Next, influencer
chaque membre d’une collection dans une boucle For Each...Next ou répéter le
code jusqu’à satisfaire une condition. Il à est présent temps d’entrer dans les
détails.
Dans ce chapitre, vous apprendrez à ajouter des procédures Sub et Function à vos
modules de code, à déterminer si les procédures doivent être à la disposition des
autres classeurs, à contrôler si Excel se rappelle les valeurs générées par une pro-
cédure jusqu’à la fermeture du programme et à transférer des valeurs vers et à
partir de procédures de sorte que vous puissiez utiliser les résultats ailleurs dans
vos programmes.

Définition de procédures Sub


Vous pouvez créer deux types de procédures dans Excel VBA : une procédure Sub
ou une procédure Function. Quelle est la différence entre les deux types de
procédures ? Il s’agit de définir si la procédure retourne une valeur que l’on peut
ou non employer ailleurs dans le programme. Par exemple, une procédure Sub
configurée pour vérifier qu’un achat va entraîner un dépassement du crédit
autorisé pour un client peut prendre la forme suivante :

Private Sub VérifierLimiteCrédit()


If ActiveCell.Value + Range ("C3").Value > Range ("C2").Value Then
MsgBox("Cet achat excède la limite de crédit du client.")
End If
End Sub

95
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


En parcourant la procédure, vous remarquerez qu’aucune instruction n’envoie
de valeur à une procédure externe. Comme nous l’avons étudié au chapitre 4, la
boîte de message sert uniquement à envoyer une sortie à l’écran : aucune valeur
n’est passée aux autres procédures.

Pour plus d’informations sur le passage de valeurs entre procédures, reportez-vous à la


section « Passer des arguments aux procédures », plus loin dans ce chapitre.

Ce rapide tour d’horizon terminé, nous pouvons maintenant passer à une des-
cription plus formelle de ce qui constitue une procédure Sub.

Private | Public] [S
[P Static] Sub name [(arglist)]
statements]
[s
Exit Sub]
[E
statements]
[s
End Sub

Le tableau 5.1 décrit les éléments d’une procédure Sub.


Tableau 5-1. Éléments d’une procédure Sub
Élément Description
Public Élément optionnel qui indique que la procédure Sub est
accessible à toutes les procédures de tous les modules. S’il
est employé dans un module qui contient une instruction
Option Private, la procédure n’est pas disponible en-dehors
du projet.
Private Élément optionnel qui indique que la procédure Sub est
uniquement accessible aux autres procédures du module
dans lequel elle est déclarée.
Static Élément optionnel qui indique que les variables locales de la
procédure Sub sont préservées entre les appels. L’attribut
Static n’affecte pas le variables déclarées en-dehors de la
procédure Sub, même si elles sont exploitées dans la
procédure.
name Élément obligatoire qui indique le nom de l’élément Sub (par
Chapitre 5

exemple, Sub CreditDisponible). Il n’est pas nécessaire que


le nom suive les conventions de nommage standard.
arglist Liste optionnelle de variables représentant les arguments
passés à la procédure Sub lorsqu’elle est appelée. Les
différentes variables sont séparées par des virgules.
statements Groupe optionnel d’instructions à exécuter au sein de la
procédure Sub.

Pour ajouter une procédure à un module de code, procédez comme suit :


1 Cliquez sur Outils, Macro, Visual Basic Editor pour afficher ce dernier.

96
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function


2 Si nécessaire, cliquez sur Insertion, Module pour créer un nouveau
module de code (ou si vous souhaitez créer un nouveau module pour des
raisons organisationnelles).
3 Cliquez sur Insertion, Procédure pour afficher la boîte de dialogue Ajou-
ter une procédure.

4 Saisissez le nom de la procédure dans la zone Nom.


5 Sélectionnez l’option Sub.
6 Cliquez sur OK.

Remarque La boîte de dialogue Ajouter une procédure propose d’autres


options. Nous les étudierons plus loin dans ce chapitre.

Ceci fait, l’esquisse d’une procédure apparaît dans le module de code actif,
comme le montre la figure 5.1.

Chapitre 5

97
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Figure 5-1. Dès que vous cliquez sur OK dans la boîte de dialogue Ajouter une
procédure, le squelette d’une nouvelle procédure s’affiche dans le module de
code actif.

Complétez les détails de la procédure en vous servant de l’Explorateur d’objets


de Visual Basic Editor pour choisir les objets, les fonctions prédéfinies, les pro-
priétés, les événements et ainsi de suite. Le listing de code suivant contient une
procédure qui vérifie le contenu de la cellule active et, si la valeur correspond à
l’une de celles du test de l’instruction If…Then, remplace la couleur de police de
la cellule par la couleur spécifiée.

Sub CreditDisponible()
With ActiveCell
If .Value = "" Then Exit Sub
If .Value <= 1000 Then .Font.Color = vbRed
If .Value > 1000 Then .Font.Color = vbBlack
Chapitre 5

If .Value > 4999 Then .Font.Color = vbBlue


If .Value > 9999 Then .Font.Color = vbGreen
End With
End Sub

Les couleurs listées dans le code précédent sont représentées par des constantes VBA,
mais il existe des millions de couleurs spécifiques. Pour plus d’informations sur l’utilisa-
tion des couleurs dans le cadre de la mise en forme du contenu des éléments de votre
classeur, reportez-vous au chapitre 10, « Mise en forme d’objets Excel ».

Il est intéressant de noter que la procédure suivante, bien qu’apparemment équi-


valente, utilise une instruction Select Case pour tester les valeurs de la cellule
active, génère un résultat incorrect.

Sub CreditDisponibleCase()

98
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function


Solde = ActiveCell.Value
Select Case Solde
Case ""
Exit Sub
Case Is >= 10000
ActiveCell.Font.Color = vbGreen
Case Is <= 9999
ActiveCell.Font.Color = vbBlue
Case Is <= 4999
ActiveCell.Font.Color = vbBlack
Case Is <= 1000
ActiveCell.Font.Color = vbRed
End Select
End Sub

Au Quotidien
Les pièges des instructions Case et des mises en formes conditionnelles

Si on compare les versions If…Then et Select Case des routines CreditDispo-


nible, on remarque que les instructions If…Then vérifient les valeurs supérieu-
res à une autre valeur (par exemple, If .Value > 5000 Then .Font.Color =
vbBlue), alors que toutes les instructions Case hormis la dernière vérifient les
valeurs d’une plage définie. Dans une instruction Select Case, vous devez
employer des règles définitives. En effet, dès l’instant qu’Excel trouve un cas
vrai, il quitte l’instruction Select Case. En conséquence, si vous évaluez une
valeur de cellule de 5500 avec l’instruction If…Then de l’exemple précédent,
la procédure passe par les étapes suivantes :

1 Est-ce que la cellule est vide ? Non, donc n’entreprendre aucune action.
2 La valeur est-elle inférieure à 1000 ? Non, donc n’entreprendre aucune
action.
3 La valeur est-elle supérieure à 1000 ? Oui, donc remplacer la couleur de
police par du noir.
4 La valeur est-elle supérieure à 5000 ? Oui, donc remplacer la couleur de
police par du bleu.
Chapitre 5

5 La valeur est-elle supérieure à 10 000 ? Non, donc n’entreprendre


aucune action.

La routine change la couleur de la police une fois de trop (d’abord en noir, puis
en bleu), mais le résultat obtenu est correct et l’étape supplémentaire ne pose
pas de problème pour un programme simple sur un ordinateur qui peut effec-
tuer de millions de calculs à la seconde. En revanche, les règles de l’instruc-
tion Select Case étant construites selon le même ordre, le contenu de la cellule
s’affiche en noir et non en bleu.

Select Case Solde


Case ""
Exit Sub
Case Is < 1000

99
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

ActiveCell.Font.Color = vbRed
Case Is >= 1000
ActiveCell.Font.Color = vbBlack
Case Is >= 5000
ActiveCell.Font.Color = vbBlue
Case Is >= 10000
ActiveCell.Font.Color = vbGreen
End Select

Le résultat est faux. En effet, la routine quitte lorsqu’elle trouve que la valeur
de la cellule est inférieure ou égale à 9999. Vous rencontrerez le même pro-
blème si vous créez des mises en forme conditionnelles en passant par le
menu Format, Mise en forme conditionnelle pour créer des règles. Les règles
du graphique suivant correspondent à l’ordre incorrect que nous avez noté pré-
cédemment et génèrent le même résultat erroné d’une valeur de cellule mal
formatée.

Astuce La mise en forme conditionnelle est limitée à trois conditions


La mise en forme conditionnelle de la figure met en évidence l’un des avan-
tages de VBA : Vous ne pouvez utiliser que trois conditions dans la boîte de
dialogue Mise en forme conditionnelle.

Bien sûr, si vous inversez l’ordre des instructions Case (ignorant le premier
cas, qui vérifie si la cellule est vide), le cas le plus restrictif serait placer un
Chapitre 5

premier, le deuxième cas en deuxième, etc. Voilà l’astuce qui permet de créer
des instructions Select Case et If...Then efficaces : après avoir vérifié si la cel-
lule est vide, vérifiez toujours le jeu de valeurs le plus restrictif. Rappelez-vous
également que l’opérateur de comparaison et l’instruction employés détermi-
nent l’ordre dans lequel les jeux deviennent plus ou moins restrictifs. Dans
une instruction Select Case, pour vérifier si des valeurs sont supérieures à
d’autres valeurs, commencez par les valeurs les plus élevées (demandez, par
exemple, « la valeur est-elle supérieure à 10 000 ? » avant de demander « la
valeur est-elle supérieure à 5 000 ? » ; pour vérifier si des valeurs sont infé-
rieures à d’autres, commencez par les valeurs les moins élevées (demandez,
par exemple, « la valeur est-elle inférieure à 1 000? » avant de demander « la
valeur est-elle inférieure à 5 000 ? »).

100
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function

Définir la portée d’une procédure Sub


Le premier élément d’une procédure Sub, la déclaration Public ou Private, déter-
mine sa portée. Autrement dit, une procédure dont la portée est Private peut
uniquement être référencée par les procédures du même module, alors qu’une
procédure dont la portée est Public peut être référencée par n’importe quelle
procédure de n’importe quel module.

Remarque Sauf déclaration contraire, chaque procédure est Public.

Prenons comme exemple le module de code de la feuille InfosCredit.xls (voir


Figure 5.2) qui contient une procédure Private et une procédure Public.

Figure 5-2. L’utilisation des mots-clés Public et Private permet de limiter la


disponibilité des macros.
Chapitre 5

Si vous cliquez sur Outils, Macro, Macros pour ouvrir la boîte de dialogue Macro
à partir de n’importe quel classeur, vous pourrez uniquement afficher, exécuter
ou modifier la procédure CreditDisponibleCase. Vous pouvez, toutefois, exécuter
la procédure CreditDisponible à partir d’une autre procédure du même module
de code (mais pas à partir d’une procédure se trouvant dans un autre module,
même si ce module est lié au même classeur).

Remarque Nous verrons comment exécuter des procédures à partir d’autres


procédures plus loin dans ce chapitre.

Si vous écrivez un ensemble de macros dont vous ne voulez pas qu’elles soient
vues (ou exécutées) par toute personne sachant ouvrir la boîte de dialogue

101
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


Macro, vous pouvez ajouter une instruction Option Private Module dans la sec-
tion des déclarations, dans la partie supérieure du module de code pour rendre
privée toute procédure, y compris celles qui utilisent le mot-clé Public. Les
macros restent cependant disponibles dans le module de code.
Par exemple, l’une des procédures de la figure 5.3 contient le mot-clé Public dans
l’instruction Sub, mais la ligne Option Private Module de la section des déclara-
tions, dans la partie supérieure du module, est prioritaire.

Figure 5-3. Si vous ajoutez une ligne Option Private Module dans la section des
déclarations d’un module, vous masquez toutes les procédures du module.

Pour afficher la section des déclarations d’un module de code, cliquez sur la flè-
che de la liste déroulante Procédures et cliquez sur Déclarations : une nouvelle
section délimitée par une ligne, apparaît dans le module de code.
Chapitre 5

Saisissez ensuite la déclaration Option Private Module dans la section appropriée.

Astuce Servez-vous du clavier pour saisir la section des déclarations


Pour saisir la section des déclarations du module de code au clavier, placez le
point d’insertion à gauche de la première ligne de code du module, appuyez
sur ENTRÉE et revenez sur la nouvelle ligne vide. Ce faisant, la valeur de la
liste Procédure est remplacée par Déclarations et vous pouvez saisir la décla-
ration. Vous pouvez également saisir la déclaration dans la première position
de la première ligne du module et appuyer sur ENTRÉE. Lorsque Visual Basic
Editor reconnaît que vous avez saisi une déclaration sur la première ligne, il
crée une section Déclarations et insère une ligne marquant la fin de la section.

102
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function

Au Quotidien
Le lien n’est pas rompu

Il peut arriver que vous souhaitiez changer la portée d’une procédure de Public
à Private : vous avez terminé de tester la procédure et n’avez plus besoin de
l’afficher dans la boîte de dialogue Macro, par exemple. Voici une autre situa-
tion dans laquelle vous voudrez rendre une procédure privée : vous avez lié la
macro à un bouton de la barre d’outils ou à un élément de menu ; vous voulez
que vos collègues puissent exécuter la macro à partir du bouton ou de l’élé-
ment de menu personnalisé, mais vous ne voulez pas qu’une personne
sachant utiliser la boîte de dialogue Personnalisation assigne la macro à un
autre bouton, ou pire, la modifie dans Visual Basic Editor. Si une personne est
déterminée à entrer dans le code et que vous n’avez pas protégé le classeur
Chapitre 5

par un mot de passe, vous ne pourrez pas réellement l’arrêter, mais vous pou-
vez lui compliquer la tâche en rendant la procédure privée. Et, comme l’indique
le titre de cet encart, une procédure Public convertie en Private ne rompt pas
le lien avec le bouton de la barre d’outils, l’élément de menu ou l’objet auquel
vous avez assigné la macro. Si on clique sur le déclencheur de la macro, quel
qu’il soit, la macro s’exécute.

Exécuter une procédure Sub à partir d’une autre procédure


Après avoir créé une procédure Sub, vous voudrez l’exécuter. Comme nous
l’avons déjà mentionné, vous pouvez exécuter la procédure en liant la macro à
un déclencheur, mais il est également possible de l’exécuter à partir d’une autre

103
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


macro. Par exemple, vous pouvez exécuter une procédure existante, comme
NOW, qui retourne la date et l’heure actuelles.

Sub AfficherDateHeure
MsgBox (NOW())
End Sub

Ce mécanisme fonctionne pour une procédure Sub.


Pour appeler une procédure Sub à partir d’une autre procédure, tapez le nom de
la procédure et ajoutez les valeurs des arguments nécessaires. L’instruction Call
n’est pas indispensable, mais si vous l’employez, placez les arguments entre
parenthèses.
Examinons la procédure Sub suivante, qui convertit une somme en euros en cou-
ronnes suédoises au taux actuel et stockée dans la cellule C35.

Sub Couronnes()
sngInCouronnes = ActiveCell.Value * Range("C35").Value
MsgBox("La valeur ¤" & ActiveCell.Value & " correspond à " _
& sngInCouronnes & " couronnes suédoises.")
End Sub

Vous trouverez les cotations monétaires sur le site Web http://forum.money.msn.fr/cur-


rency/fr/convertisseur_devises.html. Pour plus d’informations sur les moyens de récupé-
rer des informations provenant du web dans vos feuilles de calcul Excel, reportez-vous au
chapitre 24, « Excel et le web ».

Pour exécuter cette procédure Sub à partir d’une autre procédure, vous pouvez
utiliser l’une des trois techniques suivantes :
● Saisissez le nom de la procédure et de tout argument qu’elle prend. (en
l’absence d’argument, tapez un paire de parenthèses vide).
● Saisissez le mot-clé Call et tapez le nom de la procédure et de tout argu-
ment qu’elle prend. (en l’absence d’argument, tapez un paire de parenthè-
ses vide).
● Utilisez la méthode Run de l’objet Application pour exécuter la macro.
Cette méthode est intéressante si vous exploitez le code VBA pour déter-
Chapitre 5

miner la macro à exécuter et pour assigner le nom de la macro de votre


choix à une variable.
Vous avez déjà observé la première technique en action, mais elle est en réalité
similaire à la deuxième. Lorsqu’Excel rencontre un mot qu’il ne connaît pas,
suivi d’une paire de parenthèses ouvrante et fermante, il parcourt les modules
disponibles à la recherche de procédure Public du même nom. Jusqu’à présent, il
fallait obligatoirement placer le mot-clé Call avant le nom de la procédure, mais
ce n’est plus le cas. Malgré tout, certains programmeurs choisissent de placer le
mot-clé Call devant les procédures qu’ils créent pour se souvenir ultérieurement
(ainsi que toute personne qui examinerait le code du module) que la procédure
ne fait pas partie de la bibliothèque standard d’Excel.

104
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function


En matière d’appel de procédures, vous n’êtes pas limité au code du module, ni
au même classeur. Rien ne vous empêche d’atteindre les procédures des autres
modules. En fait, si le moteur Excel VBA ne trouve pas la procédure que vous
appelez dans le module de la procédure appelant, il la recherche dans les autres
modules du classeur actif et, s’il ne l’a toujours pas trouvée, il consulte les autres
classeurs ouverts.
Si vous connaissez le nom du module qui contient la procédure à exécuter et que
vous savez qu’il se trouve dans le classeur actif, placez le nom du module devant
le nom de la procédure avec la notation par point, comme dans la brève procé-
dure Sub suivante :

Sub Appel()
Call ModuleDevise.Couronnes()
End Sub

Lorsque vous créez un nouveau module de code, Visual Basic Editor lui attribue
le nom Module1, Module2, et ainsi de suite. Il est vivement conseillé de lui attri-
buer un nom plus descriptif.
Pour renommer un module, procédez de la manière suivante :
1 Ouvrez le classeur auquel le module est lié et cliquez sur Outils, Macro,
Visual Basic Editor.
2 Dans la fenêtre Projet, cliquez sur le nom du module à renommer.
3 Dans la fenêtre Propriétés, sélectionnez le nom du module existant en
regard de la propriété Name, tapez le nouveau nom du module et appuyez
sur ENTRÉE.

Attention Si les procédures de plusieurs classeurs portent des noms identi-


ques, vous allez au devant de problèmes. Il n’est pas possible d’attribuer le
même nom à deux procédures d’un même module, mais par le biais de la nota-
tion par point, vous pouvez spécifier la procédure de module à appeler et éviter
ainsi tout problème. Ceci dit, si plusieurs procédures portent le même nom
dans différents modules et que vous tentez d’en appeler une sans spécifier le Chapitre 5
module qui l’héberge (par exemple, ModuleDevise.Couronnes), Visual Basic
Editor affiche l’erreur « Nom ambigu détecté » et arrête l’exécution du code qui
appelle la procédure.

Si vous savez que la procédure à exécuter se trouve dans un module lié à un autre
classeur et que, pour un raison ou une autre, vous ne voulez pas copier le code
dans le classeur actuel, vous pouvez appeler la procédure de deux manières : en
vous servant de la méthode Application.Run et en spécifiant le nom du classeur
ou en créant une référence au classeur qui contient la procédure.
Si vous faites appel à la méthode Application.Run pour exécuter une procédure
qui se trouve dans un autre classeur, il vous suffit de nommer le classeur et la
procédure à exécuter. Pour ce faire, vous utilisez une syntaxe qui ressemble à la

105
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


référence que vous créez pour lier une cellule de feuille de calcul à une cellule
d’un autre classeur.

Pour appeler la procédure ConvertirEnCouronnes du classeur TauxChange.xls,


faites appel à l’instruction suivante :

Application.Run "'TauxChange.xls'!ConvertirEnCouronnes"

La méthode Application.Run possède toutefois une limite : le classeur qui con-


tient la procédure appelée doit être ouvert pour permettre à Excel de vérifier les
procédures disponibles. Cette exigence constitue la raison pour laquelle la boîte
de dialogue Macros présente les macros du classeur en cours, de n’importe quel
autre classeur ouvert ou de tous les classeurs ouverts : les concepteurs du pro-
gramme ont choisit de ne pas autoriser Excel à atteindre les autres classeurs, sauf
s’ils sont ouverts et prêts à être exploités.
Il est cependant possible d’appeler des procédures dans n’importe quel classeur,
ouvert ou non, en créant une référence à la procédure. Le mécanisme qui crée
une référence à une procédure d’un autre classeur est similaire à celui qui permet
de lier ou d’incorporer un fichier externe dans un classeur Excel. Au lieu d’utili-
ser la boîte de dialogue Objet du menu Insertion d’Excel, on se sert de la boîte de
dialogue Références du menu Outils de Visual Basic Editor (voir figure 5.4).
Chapitre 5

Figure 5-4. La boîte de dialogue Références liste toutes les ressources


disponibles auxquelles vous pouvez lier et ultérieurement appeler des
procédures.

106
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function


Au premier affichage, la boîte de dialogue Références ne présente pas les projets
disponibles dans les classeurs Excel présents sur votre ordinateur (ou sur tout
lecteur du réseau auquel vous avez accès), mais vous pouvez les rechercher par le
biais de la boîte de dialogue Ajouter une référence.
Pour ajouter un classeur Excel à la liste de la boîte de dialogue Références, procé-
dez comme suit :
1 Dans le menu Outils, choisissez Références.
2 Cliquez sur Parcourir.
3 Cliquez sur la flèche de la liste déroulante Fichiers de type et sélectionnez
Microsoft Office Excel Files (*.xls, *.xla).
4 Localisez le répertoire qui contient le classeur, cliquez sur le classeur puis
sur Ouvrir.
Après avoir créé la référence, le nom du projet du classeur que vous venez de
sélectionner s’affiche dans la boîte de dialogue Références. Le point à relever
dans ce processus de création est que la plupart des projets sont intitulés VBA-
Projet (par défaut). À l’instar des modules de code, vous pouvez modifier le nom
de vos projets pour les rendre plus significatifs. Vous pouvez, par exemple, don-
ner au projet le même nom (ou presque) que le classeur. Si vous ne le faites pas,
la boîte de dialogue Références présente une liste de projets intitulés VBAProject
et vous ne saurez pas lequel choisir. Pour renommer un projet, dans la fenêtre
Projet, cliquez sur le nom du projet et modifiez sa propriété Name dans la fenêtre
Propriétés.

Au Quotidien
Récursivité et utilisation de Public : deux pièges procéduraux

Lorsque vous appelez une procédure à partir de cette même procédure, celle-
ci est dite récursive. Par exemple, dans le domaine des probabilités et des sta-
tistiques, la fonction FACT trouve la factorielle d’un nombre (par exemple, 3! =
3 * 2 * 1 = 6, 5! = 5 * 4 * 3 * 2 * 1 = 120, etc.). Le programmeur qui a écrit
la fonction FACT a créé un test qui s’assure que la procédure ne continue pas
Chapitre 5

à s’appeler après qu’elle a atteint 1, et c’est tant mieux. Si la procédure ne


vérifiait pas sa progression, elle continuerait ces multiplications avec 0, -1, -2,
et ainsi de suite, jusqu’à ce que la mémoire de l’ordinateur soit dépassée et
tombe en panne. Pour éviter toute sorte de boucle infinie, si vous devez écrire
une procédure qui s’appelle, ajoutez un texte logique dans une boucle
If…Then ou Do…While .

107
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Les procédures présentent un autre piège que l’on rencontre si on utilise le


mot-clé Static pour conserver des valeurs de variables dans une procédure
entre des appels. Supposons que vous travailliez avec une feuille de calcul qui
regroupe les ventes journalières et que le classeur contienne la macro, décrite
précédemment dans ce chapitre, qui conserve un cumul des ventes. Que se
passe-t-il si l’un de vos collègues examine un autre classeur qui appelle la
même procédure ? Supposons, par exemple, que vous ayez donner à votre col-
lègue l’un des classeurs du mois précédent pour qu’il apprenne comment vous
gérez le bureau avant que vous partiez pour des vacances bien méritées, loin
des courriels et des téléphones portables. Si ce collègue étudie le classeur,
voit ce que fait le code de la macro, tape un chiffre négatif important dans une
cellule et exécute la procédure, la prochaine actualisation de votre ordinateur
ne reflètera pas les vraies valeurs des ventes. Notons que les conséquences
de ce type d’erreur sont minimales si vous vous contentez de surveiller des
valeurs pour vous tenir informé. En outre, si le total des ventes est inférieur à
celui de votre souvenir, vous réaliserez rapidement qu’un chiffre négatif dans
votre copie de la feuille de calcul indique un problème dans une autre copie du
classeur.

Ceci dit, si vous vous servez d’un cumul ou d’autres variables statistiques
dans le fonctionnement de votre entreprise, placez les procédures de mise à
jour dans un module avec Option Private Module bien en évidence dans sa par-
tie supérieure.

Conserver les valeurs entre les appels de procédure


Le deuxième élément optionnel d’une déclaration de procédure concerne les
valeurs générées par ses exécutions antérieures : faut-il ou non les conserver ? On
peut prendre pour exemple une procédure qui écrit le cumul des ventes journa-
lières dans une feuille de calcul. Vous pourriez, bien entendu, écrire les valeurs
d’une journée dans un fichier ou un tableau et additionner les totaux, mais il est
beaucoup plus simple d’afficher le cumul du jour en s’assurant que la procédure
se rappelle les valeurs antérieures.
Chapitre 5

Comme vous l’aurez probablement deviné, le mot-clé employé dans ce cas est
Static. Prenons l’exemple de la procédure suivante, qui conserve un cumul des
ventes journalières dans la variable intTotal :

Sub Cumul()
intTotal = intTotal + ActiveCell.Value
Range("B10").Value = intTotal
End Sub

Si elle fonctionnait, cette procédure présenterait l’avantage d’éviter l’exécution


d’une requête ou d’une quelconque formule d’addition actualisable dans la cel-
lule B10 pour mettre à jour le total des ventes. Mais, telle qu’elle est écrite, cette
procédure génère toujours la même réponse : la valeur de la cellule active. En
effet, la variable intTotal est recréée chaque fois que vous exécutez la procédure :

108
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function


sa valeur est chaque fois positionnée sur 0. Comment corriger la procédure pour
quelle conserve le cumul réel ? En ajoutant le mot-clé Static devant l’instruction
Sub, de la manière suivante :

Static Sub Cumul()


intTotal = intTotal + ActiveCell.Value
Range("B10").Value = intTotal
End Sub

Lorsqu’on ajoute le mot-clé Static à une instruction Sub, Excel sait créer un
espace de stockage durable pour chaque variable et conserver cet espace et son
contenu jusqu’à ce que l’on ferme le classeur.

Remarque Pour réinitialiser la valeur des variables d’une procédure statique,


affichez-la dans Visual Basic Editor et cliquez sur Exécution, Réinitialiser.

Définition de procédures Function


La procédure Function est similaire à la procédure Sub, excepté qu’elle peut éga-
lement retourner une valeur. Une procédure Function peut prendre des argu-
ments, comme des constantes, des variables ou des expressions qui lui sont
passés par une procédure appelante. Prenons l’exemple de la fonction SOMME
que vous utilisez couramment dans les formules d’une feuille de calcul Excel. La
formule suivante calcule la somme des valeurs des cellules C14 à H14, J14 et
ajoute 100 :
=SOMME(C14:H14; J14; 100)
La fonction SOMME additionne tout ce qui se trouve dans l’instruction qui
l’appelle ; si elle ne comprend pas l’entrée, comme lorsqu’elle tente d’addition-
ner une valeur non numérique, elle retourne un message d’erreur et affiche le
code de l’erreur. Si une procédure Function ne comporte pas d’arguments, son
instruction Function doit contenir paire de parenthèses vide.

Private | Public] [S
[P Static] Function name [(arglist)] [As type]
[statements]
Chapitre 5

[name = expression]
Exit Function]
[E
[statements]
[name = expression]
End Function
Le tableau 5.2 décrit les éléments d’une procédure Function, dont la plupart sont
similaires à ceux de la procédure Sub.

109
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Tableau 5-2. Éléments d’une procédure Function


Élément Description
Public Élément optionnel qui indique que la procédure Function est
accessible à toutes les procédures de tous les modules. S’il
est employé dans un module qui contient une instruction
Option Private, la procédure n’est pas disponible en-dehors
du projet.
Private Élément optionnel qui indique que la procédure Function est
uniquement accessible aux autres procédures du module
dans lequel elle est déclarée.
Static Élément optionnel qui indique que les variables locales de la
procédure Function sont préservées entre les appels.
L’attribut Static n’affecte pas le variables déclarées en-
dehors de la procédure Function, même si elles sont
exploitées dans la procédure.
name Élément obligatoire qui indique le nom de l’élément Function
(par exemple, Function IntérêtsDus). Il n’est pas nécessaire
que le nom suive les conventions de nommage standard.
arglist Liste optionnelle de variables représentant les arguments
passés à la procédure Function lorsqu’elle est appelée. Les
différentes variables sont séparées par des virgules.
type Instruction optionnelle qui spécifie le type de données du
résultat retourné par la procédure Function. Par exemple, une
fonction qui retourne une valeur entière contient As Integer
dans cet espace.
statements Groupe optionnel d’instructions à exécuter au sein de la
procédure Function.

Créer une procédure Function


Pour créer une procédure Function dans un module de code existant, ouvrez le
module dans Visual Basic Editor et saisissez :
Chapitre 5

Function nom()

End Function

Vous devez nommer la fonction et placer des instructions au centre, à la place


des points de suspension, mais vous procéderez plus rapidement en vous servant
de la boîte de dialogue Ajouter une procédure.
Pour ajouter une procédure Function à un module de code, procédez comme
suit :
1 Cliquez sur Outils, Macro, Visual Basic Editor pour afficher ce dernier.

110
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function


2 Si nécessaire, cliquez sur Insertion, Module pour créer un nouveau
module de code (ou si vous souhaitez créer un nouveau module pour des
raisons organisationnelles).
3 Cliquez sur Insertion, Procédure pour afficher la boîte de dialogue Ajou-
ter une procédure.
4 Saisissez le nom de la procédure dans la zone Nom.
5 Sélectionnez l’option Function.

6 Cliquez sur OK.

Remarque À l’instar des procédures Sub, vous pouvez mettre les procédures
Function à la disposition des procédures présentes dans les autres classeurs
en plaçant le mot-clé Public devant la déclaration. Le mot-clé Public est ajouté
par défaut si vous vous servez de la boîte de dialogue Ajouter une procédure.

Exécuter des procédures Function


Pour exécuter une procédure Function, servez-vous de l’une des méthodes
suivantes :
● Utilisez la procédure Function dans une formule.
● Appelez la procédure Function à partir d’une autre procédure.
● Appelez la procédure Function à partir d’une cellule dans une feuille de
Chapitre 5

calcul.

Important Les procédures Function n’apparaissent pas dans la boîte de dia-


logue Macros.

Vous avez déjà étudié plusieurs fois la première technique dans les deux précé-
dents chapitres et vous avez sans doute déjà employé souvent des fonctions dans
vos feuilles de calcul. Vous avez, par exemple, sans doute déjà employé la fonc-
tion =MAINTENANT(), qui retourne la date et l’heure actuelles. La troisième
méthode d’exécution d’une procédure Function consiste à l’appeler à partir
d’une cellule dans une feuille de calcul. Pour ce faire, vous l’appelez en procédant

111
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA


de la même manière que pour toute autre fonction (par exemple, =Amor-
tir(ActiveCell.Value)).
Quand faut-il utiliser une procédure Function au lieu d’une procédure Sub pour
intervenir sur une valeur ? Dans deux cas : si vous voulez utiliser le résultat de la
fonction dans une expression du code VBA ou dans une formule dans l’une de
vos feuilles de calcul. Par exemple, la société Mon Jardin a reconditionné le ter-
reau en sacs de 10 kg par sacs de 2,5 kg. Vous pouvez créer une fonction qui mul-
tiplie le nombre de sacs de 10 kg par quatre pour générer le nombre total de
petits sacs. Vous créez ensuite une fonction similaire à celle-ci :

Function PetitsSacs(intGrandsSacs as Integer) as Integer


PetitsSacs = intGrandsSacs * 4
End Function

Une fois la fonction créée, vous pouvez l’appeler à partir d’une cellule avec la for-
mule =PetitsSacs(C16) pour convertir le nombre de grands sacs de terreau dans
une commande, stockée dans la cellule C16, en nombre de petits sacs de terreau
que produit la commande.

Passer des arguments aux procédures


Dans ce chapitre, nous avons pour l’instant étudié les procédures qui traitent des
valeurs fixes, comme le contenu d’une cellule, et des procédures qui n’intervien-
nent sur aucune valeur, comme la fonction NOW. Lorsque vous écrivez une pro-
cédure qui intervient sur la valeur d’une cellule en appelant cette valeur à partir
de la procédure avec la propr iété Act iveCell.Value ou la propr iété
Range(<cell>).Value, vous n’avez pas à vous soucier de valeurs passées par des
variables. Malheureusement, la situation n’est pas toujours aussi simple. Si vous
devez intervenir sur une valeur stockée dans une variable d’une procédure, et
non dans une cellule de feuille de calcul, vous devez indiquer à la procédure les
valeurs concernées. On appelle ces valeurs des arguments.
Vous avez probablement remarqué que la première ligne de la fonction Petits-
Sacs est différente des autres procédures que nous avons employées dans ce cha-
pitre. La fonction suivante, qui recommande un prix au détail correspondant à
Chapitre 5

180 pour cent du prix de gros de l’article, prend un argument :

Function Marge(curPrixArticle as Currency) as Currency


Marge = curPrixArticle * 1,8
End Function

Prenons un moment pour étudier chaque élément de la fonction. Le mot-clé


Function est usuel, au même titre que le nom de la fonction qui le suit, mais les
deux éléments suivants sont nouveaux. L’élément entre parenthèses, curPrix-
Artcile as Currency, représente le nom et le type de données de la variable pas-
sée à la fonction. Autrement dit, quelle que soit la manière dont la fonction
récupère la variable, elle sait traiter la valeur reçue en tant que variable du type
Currency.

112
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function

Attention À l’instar des autres fonctions, si les données que reçoit la fonc-
tion ne sont pas du type correct, la fonction retourne le message d’erreur
#VALEUR! dans la cellule où on a appelé la fonction.

Le dernier élément de la première instruction de la procédure Function est une


deuxième occurrence de as Currency. Cet élément indique à la fonction le type
de données de la valeur retournée à la formule ou à la procédure qui l’a appelée.
En général, le type données de la valeur retournée et le même que celui de la
valeur passée à la procédure, mais on peut diviser une valeur à virgule flottante
en simple précision (single) par une valeur entière (integer) et retourner une
valeur entière, par exemple, si vous voulez savoir combien de sacs de 5 kg vous
obtenez à partir de 22,3 kg de terreau.
Où la valeur calculée par la procédure est-elle stockée ? Elle est stockée dans une
variable portant le même nom que la procédure Function. Dans le code précé-
dent, la deuxième ligne exécute le calcul arithmétique.

Marge = curPrixArticle * 1,8

La variable Marge est créée à partir du type de données nommé à la fin de la pre-
mière instruction de la procédure.
Si vous devez passer plusieurs arguments à la procédure, séparez-les par des vir-
gules, comme dans l’exemple suivant :
Function ConversionMultiple (sngCouronnes as Single, sngEuro as
Single) as Single

Au Quotidien
Protéger les données d’origine

En programmation, on court le risque de modifier accidentellement les valeurs


d’origine de la feuille de calcul. Par exemple, si vous créez une procédure Sub
qui assigne une valeur à la cellule active, vous détruisez les données d’origine.
Chapitre 5

Ainsi, outre le fait de conserver une copie de sauvegarde de toutes vos don-
nées, envisagez de faire appel au mot-clé ByVal. Avec ce mot-clé, la procédure
utilise une copie des données et non la valeur de la cellule d’origine (ou du
tableau, ou de l’objet, ou de quoi que ce soit d’autre). La procédure Sub ser-
vant à calculer le nombre de petits sacs de terreau créés à partir d’un certain
nombre de grands sac s’écrit de la façon suivante :

Sub PetitsSacs(byVal intGrandsSacs)


MsgBox("Le nombre de grands est de " & intPetitsSacs * 4).
End Sub

113
Partie 2 : Visual Basic pour Applications

Microsoft Excel 2003 VBA

Passer des arguments nommés


Toutes les procédures de ce chapitre qui appellent une procédure passent les
arguments dont la procédure a besoin selon l’ordre attendu. Par exemple, si vous
tapez MsgBox au début d’une instruction pour créer une boîte de message,
Visual Basic Editor affiche une info-bulle pour indiquer les arguments attendus
(voir figure 5.5).

Figure 5-5. Visual Basic Editor vous aide à créer des procédures en listant les
arguments attendus.

Pour simplifier la lecture des arguments passés à une procédure, servez-vous des
arguments nommés. Un argument nommé se compose du nom de l’argument
suivi d’un double point et du signe égal (:=), puis de la valeur assignée à l’argu-
ment. Voici, par exemple, la syntaxe de la procédure MsgBox :
Chapitre 5

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Pour créer une boîte de message accompagnée d’un titre et d’un message spéci-
fiques (deux des arguments listés), utilisez l’instruction suivante :

MsgBox Title:="Rapport Périodique", Prompt:="Commande acceptée"

Pour plus d’informations sur la création de boîtes de message, reportez-vous au


chapitre 4, « Démarrage de la programmation ».

114
Partie 2 : Visual Basic pour Applications

Création de procédures Sub et Function

Organisez votre réussite


Vous serez peut-être tenté de placer chaque fragment de code nécessaire à l’achè-
vement d’une série de tâches dans une même procédure. Nous vous conseillons
toutefois d’écrire une procédure par tâche puis d’appeler chaque tâche depuis
une même procédure principale. Voici un exemple de code permettant de créer
un programme qui écrit le contenu d’une feuille de calcul des ventes journalières
dans une base de données, enregistre le fichier sous un nouveau nom basé sur la
date, supprime le contenu de la feuille de calcul des ventes puis enregistre et
ferme tous les fichiers ouverts :

Sub Principale()
Call ActualisationSQL()
Call RéenregistrerClasseur()
Call SupprimerDonnées()
Call EnregistrerEtFermer()
End Sub
Le contenu des procédures individuelles ne concerne pas la procédure Principale.
En fait, vous pouvez les modifier quand bon vous semble sans avoir à vous sou-
cier du code de la procédure Principale. Ce type de routine constitue une cachet
de qualité en matière de programmation depuis de longues années et nous vous
conseillons vivement de l’adopter.
Dans ce chapitre, vous avez appris à créer des procédures Sub et Function, les
conteneurs du code VBA. Rappelez-vous leur principale différence : les procédu-
res Sub ne retournent aucun résultat au programme principal, contrairement
aux procédures Function. Maintenant que vous savez créer ces conteneurs, vous
êtes prêts à affecter les classeurs Excel avec votre code. Dans le chapitre 6, vous
allez commencer par faire la connaissance de l’objet Application.

Chapitre 5

115
Partie 3
Le modèle d’objet
Excel
6 L’objet Application 119

7 Classeurs et feuilles
de calcul 143

8 Plages et cellules 179

117
Partie 3 : Le modèle d’objet Excel

Chapitre 6
L’objet Application
Introduction à l’objet
Application . . . . . . . . . . . . . . . . . 120

Visual Basic pour Applications (VBA) se sert des objets pour contrôler Microsoft
Excel. Que vous travailliez dans une application Excel (objet Application), des
classeurs (objet Workbook) ou des cellules individuelles (objet Cell), toutes vos
actions se concentrent sur la manipulation des objets. Tous les objets contien-
nent d’autres objets font partie d’un objet plus important. Par exemple, l’objet
Workbook contient des objets Worksheet, qui à leur tour contiennent des objets
Cell.
Les objets permettent de réaliser diverses actions : définir ou lire une propriété,
effectuer une action, appeler une méthode. Pour sélectionner une feuille de cal-
cul intitulée Feuil2 dans le classeur actif, vous utilisez la méthode Select de l’objet
Worksheet, Worksheets("Feuil2").Select.
Le modèle d’objet (voir figure 6.1) décrit les relations entre chaque objet d’Excel
et les autres objets. Dans le modèle d’objet, vous visualisez les objets contenus
dans l’objet, les objets contenus dans ces objets et ainsi de suite. Un objet peut
contenir plusieurs objets du même type. Par exemple, un classeur peut contenir
plusieurs feuilles de calcul.

119
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Figure 6-1. Le Modèle d’objet Microsoft Excel constitue le magasin de tout le


savoir d’Excel.

Un objet qui contient plusieurs objets du même type constitue une collection et
chaque objet de la collection en est membre. Pour se référer à un membre parti-
culier d’une collection, on utilise son numéro d’index ou son nom. Dans l’exem-
ple précédent, nous avons utilisé la collection Worksheets fait référence à une
feuille de calcul spécifique intitulée Feuil2.

Introduction à l’objet Application


L’objet Application constitue l’objet le plus élevé dans le modèle d’objet Micro-
soft Excel. L’objet Application héberge toutes les propriétés et méthodes pour
manipuler l’application Excel, ainsi que les objets qui représentent des classeurs
individuels et les données qu’ils contiennent.
Compte tenu de sa position dans la hiérarchie du modèle d’objet, on débute tou-
tes les références par l’objet Application. Pour faire référence à la première cellule
d’une feuille de calcul (A1), on commence par l’objet Application, suivi de l’objet
Worksheet avant de désigner l’objet Cell. Pour attribuer la valeur 100 à la pre-
mière cellule, le code VBA est le suivant :

Application.Workbooks(1).Worksheets(1).Cells(1,1) = 100
Chapitre 6

Les longues séquences en notation par point sont complexes à utiliser. En consé-
quence, les programmeurs Excel exposent directement les objets les plus cou-
rants, comme les classeurs, les feuilles de calcul et les cellules, sans obliger le code
à parcourir l’objet Application. Veillez toutefois à sélectionner le classeur et la
feuille de calcul appropriés, particulièrement si vous travaillez directement avec

120
Partie 3 : Le modèle d’objet Excel

L’objet Application
les cellules. Si vous êtes sûr d’avoir sélectionné le classeur et la feuille de calcul
appropriés, en vous servant par exemple de la méthode Activate de l’objet
Worksheet décrite dans la prochaine section de ce chapitre, vous pouvez abréger
la commande précédente en Cells(1,1) = 100.

Propriétés
L’utilisation de l’objet Application implique généralement de lire ou de définir
l’une de ses nombreuses propriétés, plus de 170, qui contrôlent chaque aspect de
l’application Excel. Des classeurs et des feuilles de calcul aux colonnes et aux
lignes, l’objet Application donne accès à pratiquement chaque élément d’Excel et
des classeurs Excel.
Avec ce nombre impressionnant de propriétés, il est impossible de connaître
chaque propriété disponible et ce n’est pas indispensable. Voici une liste des
10 propriétés les plus courantes que vous devez connaître pour exploiter Excel et
VBA. Vous ferez connaissance avec les autres propriétés à mesure que vous les
utiliserez. Le seul point important consiste à connaître leur existence pour les
applications à venir.
Voici les propriétés de l’objet Application les plus importantes :
● ActiveCell
● ActiveChart
● ActiveSheet
● ActiveWindow
● ActiveWorkbook
● RangeSelection
● Selection
● ScreenUpdating
● StatusBar
● ThisWorkbook

Vous trouverez des informations sur chaque élément du modèle d’objet Excel dans l’aide
de Visual Basic Editor en tapant excel dans la zone Poser une question et en affichant la
rubrique d’aide Modèle objet Microsoft Excel.

Cette courte liste des propriétés de l’objet Application récapitule les principaux
objets employés avec Excel. La plupart ont été directement présentés par l’équipe
de programmation Excel de sorte qu’une référence explicite à l’objet Application
est inutile. Ces propriétés sont décrites dans les prochaines sections par ordre
alphabétique.
Chapitre 6

Propriété ActiveCell
La propriété ActiveCell est une référence à la cellule actuellement active dans la
feuille de calcul active du classeur actif. Lorsqu’elle est appelée, la propriété Acti-

121
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


veCell retourne un objet Range qui définit la valeur ou la formule de la cellule
ainsi que toute modification de la mise en forme de votre choix (style de police,
bordures, formats des nombres, etc.).
L’exemple suivant exploite la procédure CellBorder pour examiner la valeur
d’une cellule et modifier la bordure qui l’entoure si cette valeur se situe entre 500
et 1000. La procédure ApplyBorders boucle dans toutes les cellules de données
spécifiées du classeur Y2001ByMonth.xls (voir figure 6.2), puis appelle la procé-
dure CellBorder pour chaque cellule.

Sub ApplyBorders()
Dim MyCell As Range
For Each MyCell In _
ActiveSheet.Range(D6:O36").Cells
MyCell.Select
If ActiveCell > 500 And ActiveCell < 1000 Then
With ActiveCell.Borders
.Weight = xlThick
.Color = vbBlue
End With
End If
Next MyCell
End Sub

Figure 6-2. La propriété ActiveCell permet de modifier la cellule active sans


référencer de cellule ou de plage spécifiques.
Chapitre 6

Rappelez-vous que la valeur de la propriété ActiveCell diffère de la valeur de la


propriété Selection. Une Selection peut retourner une plage de plusieurs cellules,
mais une seule cellule de la sélection peut être active. Lorsque l’on examine une
feuille de calcul dans laquelle plusieurs cellules sont sélectionnées, la cellule

122
Partie 3 : Le modèle d’objet Excel

L’objet Application
active est encadrée et sans surbrillance. Les autres cellules de la sélection sont
mises en évidence (la couleur de mise en évidence est un bleu grisé).

Propriété ActiveChart
La propriété ActiveChart permet de manipuler le graphique sélectionné, qu’il
soit incorporé ou placé sur une feuille séparée. Toutes les propriétés du graphi-
que sont disponibles, ce qui signifie que vous pouvez modifier les points de don-
nées du graphique, son format et tout autre attribut.
L’exemple suivant construit automatiquement un histogramme 3D dans le clas-
seur SalesByCategory.xls en utilisant les données existantes et le positionne sous
la source des données (voir figure 6.3).

Sub BuildChart()
Charts.Add 'Ajoute un nouvel objet graphique
ActiveChart.ChartType = xl3DColumn 'Positionne le type Chart à
3D Column
ActiveChart.SetSourceData _
Source:=Sheets("ByCategory").Range("C1:G13"), _
PlotBy:=xlColumns 'Définit la source des données
ActiveChart.Location Where:=xlLocationAsObject, Name:="ByCategory"
With ActiveChart 'Met le graphique en forme
.HasTitle = True
.ChartTitle.Characters.Text = "Monthly Sales by Category"
Chapitre 6

.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Characters.Text = "Month"
.Axes(xlSeries).HasTitle = True
.Axes(xlSeries).AxisTitle.Characters.Text = "Category"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Characters.Text = "Sales"

123
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


End With
ActiveSheet.Shapes(1).IncrementLeft -133.5 'Positionne le
graphique
ActiveSheet.Shapes(1).IncrementTop 214.5
ActiveSheet.Shapes(1).ScaleWidth 1.77, msoFalse,
msoScaleFromTopLeft
ActiveSheet.Shapes(1).ScaleHeight 1.35, msoFalse,
msoScaleFromTopLeft
End Sub

Pour plus d’informations sur les graphiques et leur modification par programmation,
reportez-vous au chapitre 15, « Graphiques ».

Figure 6-3. La propriété ActiveChart permet de rationaliser la création et la


manipulation d’un graphique.

Propriété ActiveSheet
La propriété ActiveSheet retourne un objet Worksheet qui représente la feuille de
calcul sélectionnée. Cet objet permet de réaliser toutes les manipulations relati-
ves à une feuille de calcul. Par exemple, dans un classeur où chaque feuille de cal-
cul récapitule les chiffres des ventes horaires pour chaque jour du mois, vous
pouvez écrire une macro qui crée une nouvelle feuille portant le nom du mois
suivant et le jour de la semaine correct en regard de la date. La figure 6.4 montre
le résultat de cette macro, qui utilise la feuille de calcul January du classeur
Chapitre 6

Y2004ByMonth.xls comme modèle.

Sub CopySheet()

Sheets("January").Select 'Sélectionne la feuille à copier

124
Partie 3 : Le modèle d’objet Excel

L’objet Application
ActiveSheet.Copy After:=Sheets(Sheets.Count) 'Copie la feuille
vers la dernière position
Sheets(Sheets.Count).Select 'Sélectionne une nouvelle feuille
ActiveSheet.Name = Format(Str$(Sheets.Count) & "/01/03", "MMMM")
'Attribue le nom du dernier mois
Range("D6:O36").Select 'Sélectionne les cellules de données et
les efface
Selection.ClearContents
Range("C6").Select 'Commence au premier jour, définit le jour
de la semaine pour les 3 premiers jours
ActiveCell.FormulaR1C1 = Format(Str$(Sheets.Count) & "/01/" & _
Str$(Year(Now())), "ddd")
Range("C7").Select
ActiveCell.FormulaR1C1 = Format(Str$(Sheets.Count) & "/02/" & _
Str$(Year(Now())), "ddd")
Range("C8").Select
ActiveCell.FormulaR1C1 = Format(Str$(Sheets.Count) & "/03/" & _
Str$(Year(Now())), "ddd")
Range("C6:C8").Select
Selection.AutoFill Destination:=Range("C6:C36"),
Type:=xlFillDefault
'Remplit automatiquement les jours restants
Range("C6:C36").Select 'Corrige les bordures
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
End With
Range("C36").Select
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With

End Sub

Chapitre 6

125
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Figure 6-4. Cette macro crée une nouvelle feuille de calcul en se basant sur un
modèle existant et ajoute le jour et la date corrects pour le mois suivant en
conservant les en-têtes de colonnes.

Propriété ActiveWindow
La propriété ActiveWindow retourne un objet Window qui représente la fenêtre
sélectionnée dans l’application Excel. La fenêtre active est toujours celle qui se
trouve au premier plan dans une application.
La propriété Caption d’un objet Window est un doublon de la propriété Name.
Lorsque vous assignez une valeur à la propriété Caption, vous permettez que l’on
fasse référence à une fenêtre particulière dans la collection Windows en se servant
de la valeur Caption à la place du numéro d’index. Le fragment de code suivant
assigne la chaîne "My Window" à la propriété Caption de la fenêtre active puis
invoque la méthode Calculate de l’objet ActiveSheet pour recalculer toutes les
formules de la feuille active dans My Window.

ActiveWindow.Caption = "My Window"


Application.Windows("My Window").ActiveSheet.Calculate

L’objet ActiveWindow sert essentiellement à contrôler le niveau de zoom de la


fenêtre ou à déplacer la fenêtre pour afficher une cellule spécifique. Les proprié-
tés ScrollRow et ScrollColumn renvoient le numéro de la cellule qui apparaît dans
l’angle supérieur gauche.
Chapitre 6

L’exemple suivant illustre l’utilisation des propriétés ScrollColumn, ScrollRow et


Zoom. Dans l’exemple, le code saisit du texte dans la cellule H18 avec une taille
de police de 4 points, trop petite pour être lue avec un facteur de zoom inférieur
à 200%. La macro augmente ensuite le niveau de zoom à son maximum (400%)

126
Partie 3 : Le modèle d’objet Excel

L’objet Application
et positionne la fenêtre de sorte que la cellule H18 se trouve dans l’angle supé-
rieur gauche.

Sub ZoomScrollSample()
Range("H18").Select
ActiveCell.Font.Size = 4
ActiveCell.Value = "Ce texte est très petit et difficile à lire."
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollRow = 16
ActiveWindow.Zoom = 100
MsgBox "Cliquez sur OK pour zoomer", vbOKOnly + vbInformation, _
"Excel 2003 VBA Au Quotidien"
ActiveWindow.Zoom = 400
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollRow = 18
End Sub

Le deux macros suivantes peuvent être assignées à des boutons pour agrandir ou
réduire le facteur de zoom d’un clic.

Sub ZoomIn()
Dim intZoom As Integer

intZoom = ActiveWindow.Zoom + 50
If intZoom > 400 Then intZoom = 400
ActiveWindow.Zoom = intZoom
End Sub
Chapitre 6

Sub ZoomOut()
Dim intZoom As Integer

intZoom = ActiveWindow.Zoom -50


If intZoom < 50 Then intZoom = 50

127
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


ActiveWindow.Zoom = intZoom
End Sub

Propriété ActiveWorkbook
La propriété ActiveWorkbook retourne un objet Workbook qui référence le clas-
seur sélectionné. Si la fenêtre du presse-papier est active, la propriété Acti-
veWorkbook retourne Nothing.

Remarque La propriété ActiveWorkbook retourne également Nothing si le


seul classeur ouvert est masqué.

L’exemple suivant construit un nouveau classeur trimestriel en extrayant les


feuilles appropriées du classeur annuel.

Sub ExtractQuarterlyFigures()
Dim szMyName As String, szQuarter As String, intCount As Integer
Dim szSheetName As String, szName As String

szMyName = ActiveWorkbook.Name
szQuarter = InputBox("Quel trimestre faut-il extraire (1,2,3 ou
4) ?", _
"Excel 2003 VBA Au Quotidien", "1")
Application.Workbooks.Add
Select Case szQuarter
Case 1: szName = "1st Quarter.xls"
Case 2: szName = "2nd Quarter.xls"
Case 3: szName = "3rd Quarter.xls"
Case 4: szName = "4th Quarter.xls"
Case Else
MsgBox "Entrée non valide ('" & szQuarter & "').",
vbOKOnly + _
vbInformation, "Excel 2003 VBA Au Quotidien"
Exit Sub
End Select
Workbooks(Workbooks.Count).SaveAs szName
For intCount = 1 to 3
Workbooks(szMyName).Activate
ActiveWorkbook.Sheets(intCount * Val(szQuarter)).Activate
Range("A1", ActiveCell.SpecialCells(xlLastCell)).Select
szSheetName = ActiveSheet.Name
Selection.Copy
Workbooks(szName).Activate
Sheets(intCount).Select
ActiveSheet.Paste
ActiveSheet.Name = szSheetName
Next intCount
End Sub
Chapitre 6

Propriété DisplayAlerts
La propriété DisplayAlerts détermine si Microsoft Excel affiche les alertes pen-
dant l’exécution d’une macro. Si on lui attribue la valeur False, Excel choisit la

128
Partie 3 : Le modèle d’objet Excel

L’objet Application
réponse par défaut pour toutes les alertes affichées. La seule exception est la
méthode SaveAs pour les classeurs. Si la propriété DisplayAlerts est positionnée à
True, l’alerte OverWrite prend la valeur par défaut Yes, mais Excel utilise No si la
propriété DisplayAlerts est positionnée à False.
Excel réinitialise la propriété DisplayAlerts à sa valeur par défaut True lorsque la
macro est terminée.
La macro suivante, qui supprime toutes les feuilles de calcul non utilisées d’un
classeur, positionne la propriété DisplayAlerts à False de sorte que l’utilisateur ne
soit pas averti chaque fois que la macro supprime une feuille de calcul.

Attention Vous devez exécuter cette macro dans un classeur qui contient
des données. Si vous l’exécuter dans un nouveau classeur contenant unique-
ment des feuilles vides, vous obtenez une erreur d’exécution '1004' : La
méthode Delete de la classe Worksheet a échoué.

Sub RemoveEmptySheets()
Dim intCount As Integer

Application.DisplayAlerts = False
For intCount = Sheets.Count To 1 Step -1
Sheets(intCount).Select
Range("A1", ActiveCell.SpecialCells(xlLastCell)).Select
If Selection.Address() = "$A$1" And ActiveCell = "" Then
Sheets(intCount).Delete
intCount = Sheets.Count + 1
End If
Next intCount

End Sub

Propriété RangeSelection
La propriété RangeSelection retourne un objet Range qui représente les cellules
sélectionnées sur le classeur sélectionné. Même si un objet graphique est sélec-
tionné, la propriété RangeSelection retourne une plage de cellules : les dernières
sélectionnées.
Lorsque des cellules sont sélectionnées, la propriété RangeSelection et l’objet
Selection représentent les mêmes cellules. Lorsqu’un objet graphique est sélec-
tionné, la propriété RangeSelection retourne les dernières cellules sélectionnées.
L’exemple suivant affiche l’adresse des cellules sélectionnées :
MsgBox ActiveWindow.RangeSelection.Address
Chapitre 6

Propriété Selection
La propriété Selection retourne un type d’objet quelle que soit la sélection en
cours. Pour les cellules, elle retourne un objet Range et pour les graphiques, elle
retourne un objet Chart.

129
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


En supposant que la sélection en cours soit une plage de cellules, cet exemple
efface toutes les valeurs et formules.
Selection.Clear

Propriété StatusBar
La propriété StatusBar permet de modifier le message actuellement affiché dans
la barre d’état, dans la partie inférieure de la fenêtre Excel. Ce message permet,
par exemple, d’informer l’utilisateur si l’exécution complète d’une procédure
doit prendre du temps. Pour désactiver les messages placés sur la barre d’état,
positionnez la propriété StatusBar sur False.
Cet exemple constitue une version modifiée de la procédure BuilChart que nous
avons utilisée précédemment pour illustrer la propriété ActiveChart. Plusieurs
lignes de code ont été ajoutées pour afficher des messages relatifs à l’activité de la
macro à l’attention de l’utilisateur dans la barre d’état.

Au Quotidien
Mettre un macro en pause

L’une des fonctionnalités d’Excel est d’extraire des données de sources exter-
nes. Supposons qu’un fleuriste décide de se développer et qu’il acquiert plu-
sieurs magasins. En tant que propriétaire, il décide de constituer un rapport
qui étudie chaque jour les données des ventes de chaque magasin. Cepen-
dant, la macro qui construit le rapport prend du temps pour compiler toutes les
informations et les présenter correctement. Il décide donc de l’exécuter pen-
dant la nuit de sorte que le rapport soit prêt au matin.

Au lieu d’attendre que tous les magasins aient soumis leurs données au ser-
veur principal pour exécuter la macro, il utilise la méthode Wait pour la mettre
en pause jusqu’à une heure donnée. Avec le code Application.Wait
"20:00:00", la macro doit attendre 20 heures avant de continuer à s’exécuter.
Pour mettre une macro en pause pendant un intervalle donné et non jusqu’à
une heure donnée, il suffit d’ajouter l’intervalle à l’heure en cours.

Testez attentivement la macro avant de définir un intervalle de pause trop


important : la méthode Wait arrête toute activité d’Excel et peut également
vous empêcher d’utiliser toute autre application de votre ordinateur.

Propriété ScreenUpdating
Les macros VBA s’exécutent très rapidement, en particulier si on les compare à
Chapitre 6

un humain effectuant les mêmes tâches. L’écran reflète les différentes actions
programmées dans la macro à mesure qu’Excel les effectue. Les actions s’effec-
tuent souvent si rapidement que l’écran ne s’actualise pas suffisamment vite
pour les refléter et semble clignoter. Les rafraîchissements de l’écran réclament
également du temps de traitement, ce qui ralentit l’exécution de la macro.

130
Partie 3 : Le modèle d’objet Excel

L’objet Application
Pour réduire le clignotement de l’écran et éventuellement gagner quelques
secondes sur le temps de traitement, en particulier dans le cadre des macros
gourmandes de temps de traitement, vous pouvez désactiver le rafraîchissement
de l’écran avec la propriété ScreenUpdating.
En positionnant la propriété ScreenUpdating sur False au début de la macro, vous
indiquez à Excel de ne pas actualiser l’écran pendant l’exécution jusqu’à ce que la
propriété soit à nouveau positionnée sur True. Il est très important de déboguer
entièrement une macro et d’insérer du code de récupération des erreurs si vous
désactivez le rafraîchissement de l’écran. En effet, une simple condition d’erreur
qui ne s’est pas affichée pourrait faire croire à l’utilisateur à un échec de la macro
ou à une panne d’Excel. Il est également important de positionner la propriété
ScreenUpdating sur True, sa valeur par défaut, une fois que la procédure a été
exécutée pour éviter que toute autre procédure qui l’aurait appelée n’ait été con-
cernée par la propriété ScreenUpdating.
La procédure suivante crée un nouveau graphique à partir des données du clas-
seur SalesByCategory.xls puis attend trois secondes avant de terminer la procé-
dure.

Sub BuildChart()
Application.StatusBar = "Ajout d’un nouveau graphique..."
Application.Wait (Now + TimeValue("0:00:03"))
Application.ScreenUpdating = False
Charts.Add 'Ajoute un nouvel objet graphique
ActiveChart.ChartType = xl3DColumn 'Définit le type de
graphique sur Histogramme 3D
ActiveChart.SetSourceData
Source:=Sheets("ByCategory").Range("C1:G13"), _
PlotBy:=xlColumns 'Définit la source des données
ActiveChart.Location Where:=xlLocationAsObject, Name:="ByCategory"
Application.StatusBar = "Configuration du nouveau graphique..."
With ActiveChart 'Met le graphique en forme
.HasTitle = True
.ChartTitle.Characters.Text = "Monthly Sales by Category"
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Characters.Text = "Month"
.Axes(xlSeries).HasTitle = True
.Axes(xlSeries).AxisTitle.Characters.Text = "Category"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Characters.Text = "Sales"
End With
ActiveSheet.Shapes(1).IncrementLeft -133.5 'Positionne le
graphique
ActiveSheet.Shapes(1).IncrementTop 214.5
ActiveSheet.Shapes(1).ScaleWidth 1.77, msoFalse,
msoScaleFromTopLeft
ActiveSheet.Shapes(1).ScaleHeight 1.35, msoFalse,
Chapitre 6

msoScaleFromTopLeft
Application.Wait (Now + TimeValue("0:00:03"))
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

131
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Propriété ThisWorkbook
La propriété ThisWorkbook retourne un objet Workbook qui se réfère au classeur
contenant la macro en cours d’exécution. Cette propriété permet aux compo-
sants externes de se référer au classeur qui contient le code. La propriété Acti-
veWorkbook ne fonctionne pas, puisqu’elle se réfère au classeur actif et non au
classeur qui contient le code exécuté.
L’exemple suivant illustre la propriété ThisWorkbook en affichant une boîte de
message libellée avec le nom du classeur active et le nom du classeur à partir
duquel s’exécute la macro :

Sub TestThisWorkbook()
Dim strMessage as String

strMessage = "Classeur actif = " & ActiveWorkbook.Name & vbCrLf


strMessage = strMessage & "Ce classeur = " & ThisWorkbook.Name

MsgBox strMessage, vbOKOnly + vbInformation, _


"Excel 2003 VBA Au Quotidien"

End Sub

Méthodes
Les méthodes sont des actions que les objets effectuent. Elles permettent de trai-
ter le contenu d’un conteneur d’objets. On peut les comparer à un mixeur de
cuisine. Le mixeur est un conteneur d’objets. La nourriture placée dans le mixeur
représente son contenu. Chaque bouton qui mélange, tranche, liquéfie, et ainsi
de suite, correspond à une méthode différente.

Méthode Calculate
La méthode Calculate oblige tous les classeurs ouverts à recalculer les cellules qui
contiennent de nouvelles données, des données modifiées ou changeantes, ainsi
que les cellules dépendantes. Cette méthode produit le même résultat que si l’on
appuie sur la touche F9. Elle oblige Excel à recalculer un classeur lorsqu’on a
sélectionné l’option Calcul Sur ordre dans la boîte de dialogue Options d’Excel.
Cet exemple recalcule tous les classeurs ouverts si l’option Calcul n’est pas posi-
tionnée sur Automatique.
Chapitre 6

Sub RecalcAll()
If Application.Calculation <> xlCalculationAutomatic Then
Calculate
End If
End Sub

132
Partie 3 : Le modèle d’objet Excel

L’objet Application

Au Quotidien
Limiter les calculs

Vous pouvez également employer la méthode Calculate avec les objets


Worksheet et Range. Elle permet, en outre, de limiter le nombre de calculs
effectués. Avec un objet Worksheet, la méthode Calculate effectue tous les cal-
culs nécessaires sur la feuille de calcul spécifiée. L’exemple suivant calcul la
feuille active :

Sub RecalcSheet()
If Application.Calculation <> xlCalculationAutomatic Then
ActiveSheet.Calculate
End If
End Sub

Pour calculer un nombre limité de cellules, servez-vous de l’objet Range pour


spécifier les cellules à recalculer. Cet exemple recalcule les formules de toutes
les cellules dans la plage C1:G13 :

Sub Recalc()
ActiveSheet.Range("C1:G13").Cells.Calculate
End Sub

Méthode CalculateFull
La méthode CalculateFull oblige tous les classeurs ouverts à recalculer toutes les
cellules quel que soit leur contenu. L’exemple suivant recalcule tous les classeurs
ouverts :

Sub ReCalcFull()
Application.CalculateFull
End Sub

Méthode FindFile
La méthode FindFile affiche la boîte de dialogue Ouvrir et ouvre le fichier sélec-
tionné par l’utilisateur. Elle retourne une valeur True si le fichier a été correcte-
ment ouvert ou False si l’utilisateur a cliqué sur le bouton Annuler. L’exemple
suivant invite l’utilisateur à localiser le fichier ProductList.xls :

Sub FindProductList()
Dim bReturn As Boolean, strPrompt As String

strPrompt = "Veuillez localiser le fichier ProductList.xls."


Chapitre 6

MsgBox strPrompt, vbOKOnly + vbInformation, "Excel 2003 VBA Au


Quotidien"

bReturn = Application.FindFile
If Not bReturn Then
strPrompt = "Le fichier n'a pas été ouvert."

133
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


MsgBox strPrompt, vbOKOnly + vbInformation, "Excel 2003 VBA Au
Quotidien"
End If

End Sub

Méthode InputBox
La méthode InputBox est similaire à la fonction InputBox en ce qu’elles affichent
toutes deux une boîte de dialogue simple qui permet à l’utilisateur de saisir des
informations exploitables dans la macro. La différence entre les deux réside dans
le fait que la méthode InputBox peut effectuer une validation sélective de l’entrée
de l’utilisateur et qu’elle peut être employée avec d’autres objets Excel, valeurs
d’erreurs et formules. La fonction InputBox, en revanche, se contente de retour-
ner une valeur exploitable dans la macro.

Pour plus d’informations sur la création de boîtes de saisie, reportez-vous au chapitre 4,


« Démarrage de la programmation VBA ».

À l’instar de la fonction InputBox, vous pouvez indiquer à l’utilisateur le type de


valeur demandée, afficher un titre dans la barre de titre de la boîte de dialogue,
présenter une valeur par défaut, choisir la position de la boîte de dialogue à
l’écran et la lier à un fichier d’aide. Vous pouvez, en outre, préciser le type de
valeur accepté par InputBox. Le tableau 6.1 récapitule les différents choix et com-
mente leur utilisation. Il est également possible d’additionner les données pour
spécifier plusieurs types. Par exemple, si vous additionnez la valeur pour les
nombres (1) et la valeur pour le texte (2) et vous servir de leur somme (3) pour
que la méthode InputBox accepte les nombres et le texte. Si vous ne précisez pas
de type, elle utilise la valeur par défaut, le texte.
La syntaxe complète de la méthode InputBox est la suivante :
expression.InputBox(Prompt, Title, Default, Left, Top, HelpFile,
HelpContextID, Type)

Expression, un objet Application, et Prompt, une valeur de chaîne, sont des élé-
ments obligatoires pour appeler la méthode InputBox. Les autres paramètres
sont optionnels, mais vous devez employer des paramètres fictifs si vous appelez
la méthode dans sa forme standard. Pour éviter l’emploi de paramètres fictifs,
nommez les paramètres fournis, comme dans l’exemple suivant :
Chapitre 6

Application.InputBox(Prompt:="My Prompt", Type:=8)

La méthode InputBox permet à l’utilisateur de se servir de sa souris pour sélec-


tionner une cellule ou une plage de cellules dans tout classeur ouvert. Utilisez
l’instruction Set pour assigner les cellules sélectionnées à un objet Range. Si vous

134
Partie 3 : Le modèle d’objet Excel

L’objet Application
ne le faites pas, la méthode InputBox utilise la valeur des cellules sélectionnées.
Servez-vous d’une instruction Set chaque fois que vous voulez assigner une ins-
tance spécifique d’un objet à une variable. Par exemple, vous pouvez créer une
variable qui pointe vers un objet Worksheet avec l’instruction suivante :
Dim wksNewSheet As Worksheet

Il reste une étape, toutefois. En effet, en créant une variable qui pointe vers un
objet, vous n’avez pas créé le nouvel objet ni fait pointer la variable vers une ins-
tance existante de l’objet. Pour que la variable wksNewSheet pointe vers une
feuille de calcul intitulée January, vous devez utiliser l’instruction suivante :
Set wksNewSheet = Worksheets("January")

À présent que la variable wksNewSheet est assignée à la feuille de calcul January,


vous pouvez utiliser le nom de la variable comme pointeur vers la feuille de cal-
cul January. Ces deux lignes de code sont équivalentes.

wksNewSheet.Name = "January2"
Worksheets("January").Name = "January2"

L’exemple suivant utilise la méthode InputBox pour demander à l’utilisateur de


spécifier une plage de cellules dans laquelle insérer les totaux mensuels, puis lui
demande les valeurs nécessaires :

Sub InputMonthlyTotals()
Dim strPrompt As String, rgeMonth As Range, sglTotal As Single
Dim intColumn as Integer

strPrompt = "Veuillez sélectionner les cellules dans lesquelles


placer les totaux mensuels."
Set rgeMonth = Application.InputBox(Prompt:=strPrompt,
Title:="Excel _
2003 VBA Au Quotidien", Type:=8)
strPrompt = "Veuillez saisir le total des ventes."
For intColumn = 1 To rgeMonth.Columns.Count
sglTotal = Application.InputBox(Prompt:=strPrompt,
Title:="Excel _
2003 VBA Au Quotidien", Type:=1)
rgeMonth(1, intColumn) = sglTotal
Next intColumn

End Sub
Chapitre 6

135
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Tableau 6-1. Valeurs de la méthode InputBox


Valeur Signification Commentaires
0 Une formule Toute formule Excel valide est retournée
sous forme de chaîne de texte. Servez-
vous de la propriété FormulaLocal pour
assigner la formule à un objet Range. Les
références des cellules sont retournées
dans le style A1 et exploitent la fonction
ConvertFormula pour passer au style
L1C1, si nécessaire.
1 Un nombre Calcule également une formule, si elle a
été saisie, pour retourner un nombre. Par
exemple, si on saisit =8*8, InputBox
retourne 64.
2 Texte Accepte une valeur textuelle (chaîne).
4 Une valeur logique (True/ Accepte toute variable Variant qui peut
False) être convertie en valeur logique.
8 Une référence de cellule, Utilisez l’instruction Set pour assigner le
comme un objet Range résultat à un objet Range.
16 Une valeur d’erreur, Retourne une valeur de chaîne composée
comme #NULL! du mot « Erreur » et du numéro d’erreur
Chapitre 6

associé à la valeur d’erreur (voir tableau


6.2 pour une liste des valeurs d’erreurs).
Toute valeur saisie qui ne correspond pas
à une erreur retourne « Erreur 2015 ».
64 Un tableau de valeurs Accepte une liste de valeurs.

136
Partie 3 : Le modèle d’objet Excel

L’objet Application

Au Quotidien
La propriété FormulaLocal et les paramètres locaux

La propriété FormulaLocal retourne ou définit une formule dans la langue spé-


cifiée par les paramètres régionaux de l’utilisateur. Par exemple, si un utilisa-
teur saisit la formule =SUM(B3:B15) dans une boîte de saisie (SUM étant la
version anglaise de SOMME), vous pouvez assigner la formule à la cellule B16
de la première feuille de calcul de votre classeur en vous servant de l’instruc-
tion suivante :
Range(B16).FormulaLocal = InputBox("Saisissez une formule.")

Tableau 6-2. Valeurs d’erreur de cellule


Valeur d’erreur Retourne
##### Erreur 2015
#DIV/0! Erreur 2007
#N/A Erreur 2042
#NAME? Erreur 2029
#NULL! Erreur 2000
#NUM! Erreur 2036
#REF! Erreur 2023
#VALUE! Erreur 2015

Méthode Intersect
La méthode Intersect compare plusieurs plages pour déterminer si elles se che-
vauchent ou partagent des cellules communes. La figure 6.5 montre une plage
délimitée en B3:E6 et une autre plage délimitée en D5:G8. L’intersection des
deux correspond à la page D5:E6, comme le montre l’exemple suivant :

Sub DisplayIntersection()
Range("B3:E6").BorderAround Color:=vbBlack, Weight:=xlThick
Range("B3:E6").Select
Set rge1 = Selection
Range("D5:E8").BorderAround Color:=vbYellow, Weight:=xlThick
Range("D5:E8").Select
Set rge2 = Selection
Set myRange = Application.Intersect(rge1, rge2)
Range(myRange.Address).Select
Selection.Interior.Color = vbBlue
Chapitre 6

End Sub

137
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Figure 6-5. La méthode Intersect retrouve les cellules représentant


l’intersection de deux plages.

La méthode Intersect sert souvent à déterminer si une cellule sélectionnée par


l’utilisateur se trouve dans une plage donnée. La procédure TestPlants invite
l’utilisateur à sélectionner le total mensuel le plus élevé pour Plants dans le
fichier SalesByCategory.xls et affiche un message d’erreur si la cellule sélection-
née ne se trouve pas dans les totaux mensuels des plantes.

Sub TestPlants()
Dim strPrompt As String, rgePlants As Range, rgeIntersect As Range

strPrompt = "Veuillez sélectionner le total mensuel le plus élevé


pour Plants."
Set rgePlants = Application.InputBox(Prompt:=strPrompt, Title:="
Excel _
2003 VBA Au Quotidien", Type:=8)
Set rgeIntersect = Application.Intersect(Range("G2:G13"),
rgePlants)
If rgeIntersect Is Nothing Then
strPrompt = "Vous n’avez pas sélectionné une valeur Plant."
MsgBox strPrompt, vbOKOnly + vbInformation
End If

End Sub
Chapitre 6

Méthode OnKey
La méthode OnKey permet de créer des raccourcis clavier qui, lorsqu’on les com-
posent, exécutent une routine donnée ou bloque le comportement normal
d’Excel. Voici la syntaxe de la méthode OnKey :

138
Partie 3 : Le modèle d’objet Excel

L’objet Application
Application.OnKey(Key, Prodecure)

Key est une valeur de chaîne représentant la combinaison de touches à assigner.


Le tableau 6.3 liste les codes de touches.
Procedure est la valeur de chaîne qui représente le nom de la procédure à invo-
quer. Si Procedure est vide (autrement dit, si on positionne le paramètre sur une
chaîne vide en lui assignant la valeur " "), la combinaison de touches n’effectue
aucune action, même si Excel réagit normalement à cette combinaison. Si on
omet entièrement l’argument Procedure (autrement dit, s’il n’y a rien après la
virgule), les actions normales par défaut de la combinaison de touches sont réi-
nitialisées.
Vous pouvez combiner une touche avec un ou plusieurs modificateurs de tou-
ches (Maj, Ctrl et/ou Alt) pour créer à votre guise des combinaisons de touches.
L’exemple suivant exécute une procédure si on appuie sur Alt+H :

Application.OnKey "%h", "MyProcedure"

L’exemple suivant utilise la combinaison de touches qui ouvre normalement la


boîte de dialogue Rechercher et remplacer (Ctrl+H) pour invoquer une procé-
dure personnalisée :

Application.OnKey "^h", "MyProcedure"

Cet exemple arrête l’exécution du code si on appuie sur Ctrl+H :

Application.OnKey "^h", ""

Ce dernier exemple réinitialise l’action par défaut de Ctrl+H dans Excel (Recher-
cher et remplacer) :

Application.OnKey "^h"

La méthode OnKey sert essentiellement à définir des raccourcis clavier lorsqu’un


classeur est ouvert ou fermé. On peut ainsi utiliser des raccourcis clavier spécifi-
ques au classeur et réinitialiser leurs valeurs par défaut lorsqu’il est fermé. Les
deux procédures suivantes, placées dans le fichier Y2001ByMonth.xls, assignent
le raccourci clavier Alt+C à la procédure CopySheet qui ajoute une nouvelle
feuille de calcul au classeur :

Sub Auto_Open()
Application.OnKey "%c", "CopySheet"
End Sub

Sub Auto_Exit()
Chapitre 6

Application.OnKey "%c"
End Sub

139
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Tableau 6-3. Codes des touches


Touche Code de la touche
Ret. Arr {Backspace} ou {BS}
Pause {Break}
Verr. Maj {CapsLock}
Effacement {Clear}
Supprimer ou Supp. {Delete} ou {Del}
Flèche Bas {Down}
Fin {End}
Entrée ~ (Tilde)
Entrée (pavé numérique) {Enter}
F1 à F15 {F1} à {F15}
Aide {Help}
Début {Home}
Ins {Insert}
Flèche Gauche {Left}
Verr. Num {NumLock}
Pg. Suiv {PGDN}
Pg. Préc {PGUP}
Retour {Return}
Flèche Droite {Right}
Arrêt Défil. {ScrollLock}
Tabulation {Tab}
Flèche Haut {Up}
Modificateur de touche Code de la touche
Maj + (signe plus)
Ctrl ^ (signe d’insertion)
Alt % (signe de pourcentage)

Méthode SendKeys
La méthode SendKeys envoie des frappes de touches vers le tampon du clavier
pour vous permettre d’envoyer les frappes de touches à l’application en cours.
Elle est particulièrement intéressante si l’on sait que la procédure ouvre une
boîte de dialogue et qu’il n’existe aucune méthode pour l’empêcher de s’ouvrir et
Chapitre 6

d’attendre une entrée de l’utilisateur.


Voici la syntaxe de la méthode SendKeys :

expression.SendKeys (K
Keys, Wait)

140
Partie 3 : Le modèle d’objet Excel

L’objet Application
● expression Expression optionnelle qui retourne un objet Application.
● Keys Expression Variant obligatoire, généralement exprimée sous forme
de chaîne, qui contient les codes de touches à envoyer (voir tableau 6.3
pour la liste des codes de touches des touches spéciales).
● Wait Expression Variant optionnelle, généralement exprimée avec la
valeur booléenne True ou False qui indique si la procédure doit arrêter
l’exécution jusqu’à ce que les touches ont été traitées. Si l’expression est
True, la procédure s’interrompt jusqu’à ce que toutes les touches envoyées
ont été traitées. Si l’expression est False ou omise, la procédure continue
l’exécution sans tenir compte du traitement des touches.
Les touches sont d’abord placées dans un tampon de touche en attendant que
l’application les appelle. Elles doivent donc être placées dans le tampon avant
que la procédure appelle une méthode qui demande les frappes de touches.
Cet exemple parcourt une liste de clients et génère un courriel personnalisé pour
chacun. La méthode SendKeys sert à passer une frappe de touches Alt+S au pro-
gramme de messagerie par défaut pour envoyer le courriel. La méthode Wait
laisse au programme de messagerie le temps de générer le courriel avant de
l’envoyer.

Sub SendEmail()
Dim strLink As String, rgeEmail As Range
Dim strMsg As String

strMsg = "%0A%0ACe mois-ci, économisez €10 sur toute commande


supérieure à €100.%0A "
strMsg = strMsg & "Chez Jardin vous trouverez tout l’équipement du
jardinage."
For Each rgeEmail In Range(Cells(2, 1), Cells(7, 1))
strLink = "Mailto:" & rgeEmail.Offset(0, 1).Value &
"?subject="
strLink = strLink & "Monthly Special%0A&body="
strLink = strLink & "Cher " & rgeEmail.Value & ",%0A"
strLink = strLink & strMsg
ActiveWorkbook.FollowHyperlink (strLink)
Application.Wait (Now + TimeValue("00:00:02"))
SendKeys "%s", True
Next rgeEmail

End Sub

Ce chapitre a présenté l’objet Application, qui contient un grand nombre de pro-


priétés et de méthodes affectant le fonctionnement d’Excel au plus haut niveau.
Vous pouvez assigner de nouvelles procédures pour contrôler les combinaisons
de touches, empêcher l’écran de clignoter pendant qu’une procédure modifie le
Chapitre 6

classeur et travailler dans la fenêtre, le classeur, le graphique, la feuille ou la cel-


lule actifs avec les propriétés ActiveWindow, ActiveWorkbook, ActiveChart, Acti-
veSheet et ActiveCell Le chapitre 7 entre davantage dans les détails et examine les
objets Workbook et Worksheet.

141
Partie 3 : Le modèle d’objet Excel

Chapitre 7
Classeurs et feuilles de
calcul
La collection Workbooks . . . . . . 143 Les collections Sheets
et Worksheets . . . . . . . . . . . . . . 164

Le classeur constitue le niveau le plus élevé de l’organisation Microsoft Excel.


Vous pensez peut-être que les actions que vous pouvez entreprendre au niveau
du classeur se limitent à créer des nouveaux classeurs, enregistrer les change-
ments, fermer les classeurs ou supprimer les classeurs devenus inutiles. S’il est
exact que la plupart des manipulations de « classeurs » se produisent essentielle-
ment au niveau de la feuille de calcul et de la cellule, les classeurs ne sont pas en
reste. Ce chapitre traite également des feuilles de calcul, à la fois comme feuilles
et comme membres de la collection Sheets. Vous y trouverez ainsi les ressources
nécessaires pour créer des classeurs, les configurer à votre guise (en terme de
protection par mot de passe, nombre de feuilles de calcul et noms de ces feuilles)
avant de commencer à manipuler les valeurs qu’ils contiennent.

La collection Workbooks
La collection Workbooks contient les références à chaque classeur ouvert dans
votre copie d’Excel. Pour modifier chaque classeur ouvert, vous pouvez faire
appel à une boucle For Each...Next qui parcourt la collection et effectue les modi-
fications. La collection Workbooks contient un certain nombre d’autres métho-
des intéressantes que vous pouvez exploiter pour manipuler les classeurs
existants, celle de base étant la création : vous devez pouvoir créer un nouveau
classeur avant de savoir le manipuler.

Créer de nouveaux classeurs


La création d’un nouveau classeur représente l’une des tâches de base du pro-
gramme Excel. Les nouveaux classeurs constituent le dépôt de nouvelles infor-
mations ou la cible de feuilles de calcul copiées à partir de classeurs existants.
Quel que soit l’usage que vous en faites, vous créez un nouveau classeur de la
manière suivante :

Workbooks.Add

143
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


Pour créer une copie d’un classeur existant, définissez le paramètre Template de
la méthode Add de la manière suivante :
Chapitre 7

Sub AjouterNouveauClasseur()
Dim NewWbk As Workbook
Set NewWbk =
Workbooks.Add(Template:="C:\ExcelProg\VentesMensuelles.xls")
End Sub

Ouvrir des classeurs


Après avoir créé un ou plusieurs classeurs, vous voudrez sans doute les ouvrir.
Pour ce faire, vous utilisez la méthode Open de la collection Workbooks qui, dans
sa forme la plus simple, se présente comme suit :

Workbooks.Open (FileName:="VentesMensuelles.xls")

Il existe un grand nombre d’autres options permettant d’ouvrir un classeur.


Voici la syntaxe de la méthode Open :

FileName, UpdateLinks, ReadOnly, Format, Password,


expression.Open(F
WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter,
Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

Le tableau 7.1 décrit les paramètres de la méthode Workbooks.Open. Les paramè-


tres intéressants sont ReadOnly, qui exige de l’utilisateur exécutant la macro qu’il
ouvre le classeur en lecture seule, Password, qui doit être défini pour protéger le
classeur avec un mot de passe et Delimiter, qui spécifie le caractère employé pour
séparer les champs si l’utilisateur ouvre un fichier texte.

Remarque Nous étudierons l’ouverture de fichiers texte plus loin dans cette
section.

Tableau 7-1. Paramètres associés à la méthode Workbooks.Open


Paramètre Description
FileName Chaîne obligatoire qui spécifie le nom et le chemin d’accès du
fichier à ouvrir.
UpdateLinks Indique à Excel comment gérer les liens entre le classeur et les
autres classeurs. 0 ne met pas les références à jour, 1 met à
jour les références externes, 2 met à jour les références
distantes et 3 met à jour les références externes et distantes.
ReadOnly Positionné sur True, ce paramètre ouvre le classeur en mode
lecture seule.

144
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul

Tableau 7-1. Paramètres associés à la méthode Workbooks.Open (Suite)

Chapitre 7
Paramètre Description
Password Chaîne qui contient le mot de passe requis pour ouvrir le
classeur. Si vous omettez cet argument, la routine de protection
par mot de passe Excel classique s’applique.
WriteResPassword Chaîne qui contient le mot de passe requis pour écrire dans un
classeur protégé en écriture. Si vous omettez cet argument, la
routine de protection par mot de passe Excel classique
s’applique.
IgnoreReadOnly Si le classeur a été enregistré avec l’option Read-Only
Recommended Recommended activée, en positionnant ce paramètre sur True,
Excel n’affiche pas le message de recommandation d’ouverture
en lecture seule si on ouvre le classeur.
Origin Indique le système d’exploitation employé pour créer le fichier.
Les trois constantes sont xlWindows, xlMacintosh et xlMSDOS.
Si ce paramètre n’est pas spécifié, Excel utilise le système
d’exploitation actuel.
Format Spécifie le caractère employé pour séparer une valeur de cellule
de la suivante. 1 représente les tabulations, 2 les virgules, 3
les espaces, 4 les points-virgules, 5 rien et 6 un caractère
personnalisé spécifié dans le paramètre Delimiter.
Delimiter Contient le caractère utilisé comme séparateur si l’argument
Format est positionné sur 6.
Editable Si le fichier est un complément Microsoft Excel 4.0, positionner
cet argument sur True ouvre la macro complémentaire dans une
fenêtre visible. Si l’argument est positionné sur False ou est
omis, le complément est ouvert mais masqué et ne peut pas
être visible. Cette option ne s’applique pas aux macros
complémentaires créées dans Excel 5.0 ou version ultérieure.
Si le fichier est un modèle Excel (fichier *.xlt), positionner
l’argument sur True ouvre le modèle pour le modifier ; s’il est
positionné sur False ou omis, il crée un nouveau classeur basé
sur le modèle.
Notify Si le fichier est en cours d’utilisation, lorsque ce paramètre est
positionné sur True Excel ouvre le fichier en lecture seule, vérifie
la disponibilité du fichier et informe l’utilisateur lorsque le fichier
peut être ouvert un mode lecture-écriture.
Converter Constante Excel qui indique le premier convertisseur à essayer
lorsque le fichier est ouvert. Les convertisseurs sont des
fichiers supplémentaires qui permettent de convertir au format
Excel des fichiers qu’Excel ne sait pas encore comment ouvrir.
Vous devrez généralement obtenir le convertisseur auprès du
distributeur du logiciel, mais certains convertisseurs sont
disponibles sur le site web de Microsoft.

145
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Tableau 7-1. Paramètres associés à la méthode Workbooks.Open (Suite)


Chapitre 7

Paramètre Description
AddToMru Positionné sur True ce paramètre ajouter le classeur à la liste
des fichiers récemment utilisés.
Local Variable booléenne qui indique s’il faut employer la langue Excel
locale ou le langage défini dans VBA (s’il est différent).
CorruptLoad S’il est positionné sur xlNormalLoad, ce paramètre ouvre le
fichier normalement. S’il est positionné sur xlRepairFile, il tente
de réparer le fichier. S’il est positionné sur xlExtractData, il tente
d’extraire les données dans un fichier de récupération.

Le format texte constitue l’un des formats de fichiers les plus utiles et les plus
polyvalents. Quel que soit le programme employé pour créer un tableur ou une
table de base de données, vous pouvez l’enregistrer au format texte et l’ouvrir
dans Excel. Par exemple, si vous travaillez avec un collègue d’une autre entreprise
qui utilise un tableur ou un programme de base de données qui ne lit pas ou ne
crée pas de fichiers compatibles avec Excel, vous pouvez écrire les données dans
un fichier texte et les lire ensuite dans Excel. Vous perdrez la mise en forme et les
formules du fichier d’origine, mais la possibilité de déplacer ainsi les données
mérite qu’on s’y intéresse.
L’essentiel, lorsque vous créez un fichier texte pour représenter les données d’un
tableau, est de créer une division claire entre les cellules. De nombreux program-
mes se servent des virgules comme séparateurs, ou d’un caractère qui représente
une limite entre deux cellules. Par exemple, la figure 7.1 présente une feuille de
calcul sous forme d’un tableau composé de trois lignes de données et de trois cel-
lules par ligne.

10345,5738,6029
24082,7459,3108
5119,8003,14972

Figure 7-1. Vous pouvez ouvrir un fichier contenant des données séparées par
des virgules directement dans Excel.

Il serait cependant incorrecte d’écrire les données dans un fichier texte avec des
virgules de séparation et des virgules comme séparateur décimal (en Europe) ou
séparateur des milliers (aux Etats-Unis). La figure 7.2 montre ce qui se produit
avec la même liste de données si les virgules servent de séparateurs décimaux et
de délimiteurs.

10,345,5,738,6,029
24,082,7,459,3,108
5,119,8,003,14,972

146
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


À la place des trois lignes de trois cellules, les données ci-dessus produisent une
feuille de calcul composée de trois lignes de six cellules.

Chapitre 7
Figure 7-2. Lorsque les séparateurs ne se trouvent pas à l’emplacement
prévu, il s’en suit un véritable chaos.

Vous pouvez faire appel à d’autres caractères que les virgules pour délimiter les
données. Dans l’Assistant Importation de texte, vous pouvez sélectionner une
option pour indiquer le délimiteur utilisé dans le fichier (virgule, espace, tabula-
tion, point-virgule, ou tout autre caractère que vous précisez). Vous disposez du
même choix dans Visual Basic pour Applications (VBA) en définissant les para-
mètres de la méthode Workbooks.OpenText. Voici la syntaxe de la méthode
OpenText :

FileName, Origin, StartRow, DataType,


expression.OpenText(F
TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space,
Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator,
ThousandsSeparator, TrailingMinusNumbers, Local)

Le tableau 7.2 décrit les paramètres disponibles.


Tableau 7-2. Paramètres de la méthode Workbooks.OpenText
Paramètre Description
FileName Chaîne obligatoire qui spécifie le nom et le chemin d’accès du
fichier.
Origin Indique le système d’exploitation employé pour créer le fichier.
Les trois constantes sont xlWindows, xlMacintosh et xlMSDOS.
Si ce paramètre n’est pas spécifié, Excel utilise le système
d’exploitation actuel.
StartRow Numéro de la ligne à partir de laquelle Excel doit commencer à
lire les données dans la feuille de calcul.
DataType Spécifie le format de la colonne de données dans le fichier. Il
peut s’agir de l’une des constantes XlTextParsingType
suivantes : xlDelimited qui indique la présence d’un caractère
délimiteur ou xlFixedWidth qui indique que la longueur de
chaque champ est fixe. Si vous ne spécifiez pas cet argument,
Excel tente de déterminer le format de la colonne lorsqu’il
ouvre le fichier.

147
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Tableau 7-2. Paramètres de la méthode Workbooks.OpenText (Suite)


Chapitre 7

Paramètre Description
TextQualifier Utilise une constante XlTextQualifier pour spécifier le caractère
employé pour indiquer qu’un champ contient une valeur
textuelle. Les constantes possibles sont
xlTextQualifierDoubleQuote (guillemets doubles, par défaut),
xlTextQualifierNone (aucun caractère n’indique qu’il s’agit d’un
champ texte) et xlTextQualifierSingleQuote (guillemets
simples).
ConsecutiveDelimiter Affectez-lui la valeur True pour que plusieurs séparateurs
consécutifs soient considérés comme un seul séparateur.
Tab, Semicolon, Positionnez ces paramètres sur True si le caractère nommé
Comma, Space représente le délimiteur employé dans le fichier texte.
FieldInfo Table contenant les informations de distribution pour les
colonnes de données individuelles. Lorsque les données sont
séparées, cet argument est une table de tableaux à deux
éléments, qui indiquent les options de conversion pour une
colonne particulière. Le premier élément représente le numéro
de la colonne (base 1) et le deuxième élément est l’une des
constantes xlColumnDataType indiquant comment la colonne
est distribuée. Les constantes sont xlGeneralFormat
(Général), xlTextFormat (Texte), xlMDYFormat (Format de date
Mois-Jour-Année), xlDMYFormat (Format de date Jour-Mois-
Année), xlYMDFormat (Format de date Année-Jour-Mois),
xlMYDFormat (Format de date Mois-Année-Jour), xlDYMFormat
(Format de date Jour-Année-Mois), xlYDMFormat (Format de
date Année-Jour-Mois), xlEMDFormat (Date EMD) et
xlSkipColumn (colonne non distribuée). Vous pouvez
uniquement employer la constante xlEMDFormat si vous avez
installé et sélectionné la prise en charge du chinois (Taïwan).
La constante xlEMDFormat spécifie que les dates d’ères
chinoises (Taïwan) sont utilisés.
TextVisualLayout Variante qui contrôle la mise en page visuelle du texte dans
l’interface Excel.
Other Positionnez ce paramètre sur True si vous utilisez OtherChar
pour définir un séparateur non standard.
OtherChar Le caractère employé comme séparateur dans le fichier à
ouvrir. Si la chaîne contient plusieurs caractères, Excel utilise
le premier caractère.
DecimalSeparator, Les caractères assignés à ces deux arguments indiquent le
ThousandsSeparator séparateur décimal et le séparateur des milliers.

148
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul

Tableau 7-2. Paramètres de la méthode Workbooks.OpenText (Suite)

Chapitre 7
Paramètre Description
TrailingMinusNumbers Valeur qui indique si un nombre est précédé du signe moins
(True, valeur par défaut) ou si le signe moins suit un nombre
négatif (False, presque jamais utilisé). À moins d’avoir une
raison spécifique de positionner ce paramètre sur False, ne
l’incluez jamais dans l’appel de la méthode OpenText.
Local Variable booléenne qui indique s’il faut employer la langue
Excel locale ou le langage défini dans VBA (s’il est différent).

Voici une routine ouvrant un fichier texte intitulé VentesExport.txt, dont les
données sont séparées par des doubles points :

Sub ImporterTexte()
Workbooks.OpenText Filename:="VentesExport.txt", Semicolon:=True
End Sub

Lorsque vous écrivez un programme qui modifie d’autres fichiers, souvenez-


vous que vous supposez disposer du contrôle total sur ces fichiers et qu’ils ne
sont pas ouverts. Le code le mieux écrit n’a aucune valeur si à l’heure d’ouvrir un
fichier, vous récupérez une copie en lecture seule du fichier parce que l’un de vos
collègues l’a ouvert pour compléter quelques chiffres.
La procédure suivante permet d’éviter ce type de problème en vérifiant qu’un
classeur spécifique est ouvert :

Sub VérifAvantOuverture()
Dim Wkbk As Workbook
Dim Filename As String
Filename = InputBox("Tapez le nom du fichier à consulter.")
For Each Wkbk in Application.Workbooks
If Wkbk.Name = Filename Then
MsgBox (Filename & " est ouvert ; tout changement peut
engendrer une erreur.")
End If
Next Wkbk
End Sub

Attention Rappelez-vous que le nom du fichier est sensible à la casse et


inclut l’extension du fichier, généralement .xls pour les fichiers Excel. Si on
saisi RécapVentes ou récapventes.xls dans la zone de saisie de cette procé-
dure, on ne sait pas si le fichier RécapVentes.xls est ouvert.

Enregistrer des classeurs


À l’instar de vos classeurs que vous enregistrez après toute modification, il est
indispensable d’enregistrer les classeurs après avoir apporter des changements
significatifs avec VBA. Imaginons, par exemple, que vous importiez des données
dans un classeur et le fermiez avant d’enregistrer les nouvelles données. Si le

149
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


fichier source se trouve sur un autre ordinateur et que vous ne parvenez pas à
rétablir la connexion, vous vous retrouvez au point de départ.
Chapitre 7

L’objet Application propose une propriété intéressante pour enregistrer le clas-


seur qui contient le code de la macro : la propriété ThisWorkbook, qui retourne
un objet Workbook représentant le classeur qui contient le code VBA exécuté. Ce
nouvel objet Workbook en main, vous appelez la méthode Save pour enregistrer
une copie du classeur.
Voici le code qui enregistre le classeur contenant le code :

ThisWorkbook.Save

Remarque Si vous vous servez de la méthode ThisWorkbook.Save pour enre-


gistrer le classeur la première fois, Excel essaie d’enregistrer le classeur en
utilisant son nom actuel. S’il s’agit du premier classeur enregistré au cours de
cette session Excel, son nom sera Classeur1. Si un autre classeur du même
répertoire porte le même nom, une boîte de message s’affiche pour vous per-
mettre d’écraser le fichier existant en cliquant sur Oui ou d’annuler l’opération
en cliquant sur Non ou Annuler. Si vous choisissez de ne pas écraser le fichier
existant, une boîte de message d’erreur d’exécution Microsoft Visual Basic
s’affiche, indiquant que la méthode à échoué (erreur 1004).

Pour enregistrer le classeur sous un nouveau nom ou dans un nouvel emplace-


ment, servez-vous de la méthode SaveAs de la propriété ThisWorkbook. À l’instar
du bouton Enregistrer de la barre d’outils qui représente une méthode moins
compliquée que de cliquer sur Fichier, Enregistrer sous pour ouvrir la boîte de
dialogue Enregistrer sous et ses options, la méthode ThisWorkbook.Save est bien
moins compliquée que la méthode ThisWorkbook.SaveAs. Mais, à vrai dire, la
méthode ThisWorkbook.SaveAs est simple d’emploi. Voici la syntaxe complète de
la méthode SaveAs :

FileName, FileFormat, Password, WriteResPassword,


expression.SaveAs(F
ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution,
AddToMru, TextCodePage, TextVisualLayout, Local)

Le tableau 7.3 liste les paramètres de cette méthode.


Tableau 7-3. Paramètres de la méthode ThisWorkbook.SaveAs
Paramètre Description
FileName Le nom et le chemin d’accès du fichier à enregistrer.
FileFormat La constante Excel qui représente le format de fichier dans
lequel enregistrer le fichier. Il existe 44 constantes de forme de
fichiers Excel, que vous trouverez dans l’aide de Visual Basic
Editor en tapant xlFileFormat dans la zone Poser une question.
Password Définit un mot de passe pour le fichier. Le mot de passe doit
se composer au maximum de 15 caractères.

150
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul

Tableau 7-3. Paramètres de la méthode ThisWorkbook.SaveAs (Suite)

Chapitre 7
Paramètre Description
WriteResPassword Définit un mot de passe pour restreindre le nombre de
personnes habilitées à modifier le fichier, tout en autorisant
l’ouverture du fichier en lecture seule.
ReadOnlyRecommended Positionné sur True, ce paramètre affiche une boîte de dialogue
qui recommande à l’utilisateur d’ouvrir le fichier en mode
lecture seule.
CreateBackup Positionné sur True, ce paramètre crée une copie de
sauvegarde du classeur.
AccessMode Indique si le fichier est enregistré en mode exclusif
(xlExclusive), en mode sans changement (xlNoChange) ou
comme fichier partagé (xlShared). En mode exclusif, un seul
utilisateur à la fois peut ouvrir le classeur et y apporter des
modifications. Si vous enregistrez le classeur sans
changement, le mode d’accès reste inchangé et si vous optez
pour un fichier partagé, plusieurs utilisateurs peuvent
simultanément accéder au fichier en lecture/écriture.
ConflictResolution Indique comment Excel doit gérer les changements conflictuels
dans un classeur partagé en positionnant le paramètre
ConflictResolution sur l’une des constantes
XlSaveConflictResolution suivantes : xlUserResolution, par
défaut, qui affiche la boîte de dialogue de résolution des
conflits, xlLocalSessionChanges, qui accepte automatiquement
les changements de l’utilisateur local, ou
xlOtherSessionChanges, qui accpete d’autres changements à la
place des changements de l’utilisateur local.
AddToMru Positionné sur True, ce paramètre ajoute le nom du fichier à la
liste des fichiers récemment utilisés dans le menu Fichier.
TextCodePage Variante, non utilisée dans la version française de Microsoft
Excel, qui contrôle l’interprétation et l’affichage des caractères
dans un classeur.
TextVisualLayout Variante, non utilisée dans la version française d’Excel, qui
contrôle la mise en page visuelle du texte dans l’interface
Excel.
Local Variable booléenne qui indique s’il faut employer la langue
Excel locale ou le langage défini dans VBA (s’il est différent).

Les propriétés que vous exploiterez le plus souvent sont FileName et AddToMru¸
avec FileFormat et Password se battant pour la troisième place. La propriété Add-
ToMru, qui place le fichier dans la liste des fichiers récemment utilisés du menu
Fichier, peut sembler un choix étrange, mais elle permet de vous souvenir des
classeurs sur lesquels vous devez travailler la prochaine fois que vous ouvrirez
Excel. Par exemple, si vous avez écrit une macro qui actualise les valeurs d’une

151
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


série de classeurs que le président de votre société doit étudier ultérieurement, si
vous ajoutez les noms des classeurs actualisés à la liste des fichiers récemment
Chapitre 7

utilisés, il lui sera plus simple de trouver les fichiers à examiner.


Pour enregistrer chaque classeur ouvert, écrivez un macro contenant une boucle
For Each...Next, comme dans la procédure suivante :

Sub ToutEnregistrer()
Dim Wkbk as Workbook
For Each Wkbk in Workbooks
If Wkbk.Path <> "" Then Wkbk.Save
Next Wkbk
End Sub

L’instruction If...Then de la boucle For Each...Next vérifie si le chemin d’accès du


classeur est non défini, ce qui signifie qu’il n’a jamais été enregistré. Cette vérifi-
cation est importante si vous voulez que la procédure s’exécute sans intervention
humaine. Si une personne doit être présente pendant l’enregistrement des clas-
seurs, autant le faire manuellement.
La méthode SaveAsCopy est une méthode apparentée qui enregistre une copie du
classeur en cours sous un nouveau nom. La méthode SaveAsCopy permet de faire
des copies de sauvegarde d’un classeur durant une longue procédure pour éviter
la perte de données. Vous pouvez en outre l’intégrer à une stratégie de mainte-
nance de fichiers et de sauvegarde plus générale. Voici la syntaxe de cette
procédure :

ThisWorkbook.SaveCopyAs "cheminaccès\nomfichier.xls"

Attention Si vous utilisez la méthode SaveAsCopy pour enregistrer un fichier


avec un nom de fichier existant, la macro écrase ce dernier sans demander la
permission.

Activer les classeurs


Dans notre étude des propriétés Save et SaveAs, vous aurez remarqué que le code
utilise l’objet ThisWorkbook, qui se réfère au classeur auquel le code VBA est lié.
L’objet ActiveWorkbook est apparenté à l’objet ThisWorkbook en ce qu’il se réfère
à un classeur (manifestement), mais il fait référence au classeur sur lequel vous
avez choisi d’agir et non sur celui auquel le code est lié. Pour modifier le classeur
actif, on appelle la méthode Activate de la collection Workbooks, comme dans le
code suivant :

Workbooks("2004T3Ventes.xls").Activate

Fermer les classeurs


Lorsque vous avez terminé de modifier le classeur, il est préférable de le fermer ;
d’une part pour économiser les ressources du système et d’autre part pour
réduire le risque qu’il se produise quelque chose alors que le classeur est ouvert.

152
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


Il suffit parfois d’une frappe de touche accidentelle pour que les données se
transforment en chaos total. À l’instar des techniques Save et SaveAs que nous

Chapitre 7
avons étudiées précédemment dans cette section, vous pouvez exploiter la pro-
priété ThisWorkbook de l’objet Application pour invoquer la méthode Close,
comme dans l’instruction suivante :

ThisWorkbook.Close

Pour fermer un autre classeur à partir de la procédure, servez-vous d’une ins-


truction de ce type :

Workbooks("nom").Close

Pour faire le ménage et fermer chaque classeur ouvert à la fin de la macro, servez-
vous de la procédure suivante :

Sub ToutFermer()
Dim Wkbk As Workbook
For Each Wkbk in Workbooks
If Wkbk.Name <> ThisWorkbook.Name Then
Wkbk.Close SaveChanges:=True
End If
Next Wkbk
ThisWorkbook.Close SaveChanges:=True
End Sub

Cette procédure vérifie chaque classeur pour s’assurer qu’il ne s’agit pas du clas-
seur contenant le code VBA. Si le code fermait son propre classeur avant d’avoir
fermer tous les autres classeurs ouverts, ces derniers ne seraient pas affectés puis-
que le code ne s’exécuterait plus.

Attention La procédure affiche la boîte de dialogue Enregistrer sous si l’un


des classeurs est nouveau.

Propriétés
Même si les classeurs constituent le point central d’Excel, on passe moins de
temps à manipuler les classeurs qu’à travailler dans les feuilles de calcul et les pla-
ges de cellules. Malgré tout, il existe un certain nombre de propriétés des clas-
seurs qui peuvent vous aider à travailler plus efficacement dans Excel.

Propriété ActiveChart
Les graphiques permettent de récapituler visuellement les données, mais si vous
devez afficher un graphique dans une zone relativement étroite et que vous ne
disposez pas de la place suffisante pour inclure une légende ou d’autres informa-
tions, vous pouvez faire appel aux boîtes de message pour afficher les informa-
tions sur le graphique sélectionné. La macro suivante peut être liée à un bouton

153
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


de commande dans une feuille de calcul qui présente des informations complé-
mentaires sur le graphique actif.
Chapitre 7

Sub AideGraphique()
ChartChosen = ActiveChart.Name
Select Case ChartChosen
Case "": Exit Sub
Case "Feuil1 Graphique 1": MsgBox "Ce graphique présente les
ventes pour la période 2000-2004."
Case "Feuil1 Graphique 2": MsgBox "Ce graphique présente les
bénéfices pour la période 2000-2004."
End Select
End Sub

Pour plus d’informations sur la création et la manipulation des graphiques dans VBA,
reportez-vous au chapitre 15, « Graphiques ».

Afficher des formes


Les classeurs contiennent une quantité de données et quelle que soit la manière
dont vous structurez les données, il n’est pas toujours simple d’appréhender
l’ensemble du projet. Les formes, comme les zones de texte et les flèches, permet-
tent d’appeler des fonctionnalités spéciales des feuilles de calcul et d’offrir des
informations utiles aux utilisateurs. Si vous vous servez des formes et autres
objets de dessin pour proposer des informations, vous pouvez également choisir
de les masquer ou de les afficher à volonté avec la méthode DisplayDrawingOb-
jects. Le code suivant suppose que vous disposez d’une série de formes qui dissi-
mulent les données si on les laisse sur la feuille de calcul, mais qui expliquent les
tenants et les aboutissants si l’utilisateur peut les activer ou les désactiver à sa
guise. La figure 7.3 présente la boîte de message produite par la procédure : en
cliquant sur OK, l’utilisateur masque les formes, alors qu’en cliquant sur Annu-
ler, les objets restent visibles.

Public Sub AfficherFormes()


ThisWorkbook.DisplayDrawingObjects = xlDisplayShapes
Answer = MsgBox(Prompt:="Cliquez sur OK pour masquer la forme.", _
Buttons:=vbOKCancel + vbQuestion)
If Answer = vbCancel Then
Exit Sub
Else
ThisWorkbook.DisplayDrawingObjects = xlHide
End If
End Sub

154
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul

Chapitre 7
Figure 7-3. Vous pouvez créer des procédures qui laissent les utilisateurs
décider de masquer les formes ou de les afficher.

La propriété DisplayDrawingObjects propose trois constantes Excel que l’on peut


employer comme valeurs : xlDisplayShapes, qui affiche toutes les formes, xlHide,
qui masque toutes les formes, et xlPlaceHolders, avec laquelle Excel imprime uni-
quement les objets de la feuille de calcul.

Gérer les paramètres des fichiers


Vous pouvez exploiter deux aspects des informations de fichiers pour manipuler
le classeur : le chemin d’accès du fichier et le son nom complet. Le chemin
d’accès représente le listing complet des répertoires d’un fichier, comme
C:\Excel\Données, alors que le nom complet du classeur inclut le nom de fichier
du classeur, comme C:\Excel\Données\T12004.xls. Pour faire référence à ces
propriétés dans le classeur qui héberge le code de la macro, servez-vous de ces
deux méthodes :

ThisWorkbook.Path
ThisWorkbook.FullName

Pour ajouter le nom complet ou le chemin d’accès du classeur auquel vous ajou-
tez le code dans Visual Basic Editor, cliquez sur Affichage, Fenêtre Exécution
pour l’ouvrir et tapez MsgBox (ThisWorkbook.FullName) ou MsgBox
(ThisWorkbook.Path) pour trouver les informations de répertoire et de nom de
fichier pour vos procédures. Ces informations n’ont pas grande importance si
vous ne prévoyez pas de transférer votre code en-dehors du classeur, mais si vous
devez faire référence à ce classeur particulier depuis un autre emplacement, vous
devrez employer le nom complet du fichier. En outre, même si vous pouvez obte-

155
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


nir les mêmes informations en essayant d’enregistrer le fichier et en cliquant sur
la flèche de la liste déroulante Enregistrer sous pour trouver le dossier dans
Chapitre 7

lequel le classeur est stocké, avec la fenêtre Exécution vous n’êtes pas obligé de
quitter Visual Basic Editor, ce qui fluidifie votre travail.

Remarque Le nom complet d’un fichier comprend un chemin d’accès, mais


celui-ci peut être vide si le fichier n’a pas encore été enregistré.

Précédemment dans ce chapitre, nous avons utilisé les méthodes Save et SaveAs
de la propriété ThisWorkbook pour enregistrer des fichiers modifiés avec VBA.
Excel vérifie la présence de changements non enregistrés, ce qui trouve son inté-
rêt si vous voulez consulter le classeur et l’enregistrer chaque fois que vous exé-
cutez une procédure qui affecte son contenu ou si vous voulez fermer le classeur
sans enregistrer les modifications effectuées (si vous exécutez un série de routi-
nes de mise en forme pour mettre en évidence différents aspects de vos données,
mais préférez tout réinitialiser avant de terminer, par exemple). Avec le fragment
de code suivant, Excel ferme le classeur actif sans enregistrer les changement non
sauvegardés :

ThisWorkbook.Saved = True
ThisWorkbook.Close

L’enregistrement des valeurs d’un classeur présente un autre aspect relatif à


l’intensité de l’utilisation des liens vers des sources de données externes. Par
exemple, si vous appartenez à une entreprise qui réalise un nombre important de
ventes individuelles que vous suivez dans une base de données Microsoft Access,
il peut être intéressant de créer des liens entre chaque cellule du classeur et la cel-
lule correspondante dans la table de la base de données. Si Excel poursuit son
comportement par défaut qui consiste à recalculer le classeur en vérifiant les
valeurs dans la table de la base de données, vous risquez d’attendre un long
moment chaque fois que vous ouvrez le classeur.
Voici le code employé pour enregistrer les valeurs liées :

ThisWorkbook.SaveLinkValues = True

En positionnant la propriété SaveLinkValues sur False, Excel revérifie les valeurs


chaque fois que l’on ouvre le classeur et si les valeurs ne sont pas disponibles, il
génère une erreur.

Demander un mot de passe à l’ouverture d’un classeur


Maintenir l’intégrité des données dans un environnement d’entreprise constitue
l’une des parts les plus importantes du travail au sein de l’industrie de l’informa-
tion. Si vous devez protéger vos données contre les personnes externes venant
fureter dans votre système ou les utilisateurs internes ayant obtenu des privilèges
supplémentaires et qui parcourent l’intranet, vous pouvez également choisir de
restreindre l’accès à l’un de vos classeurs en demandant aux utilisateurs habilités

156
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


de fournir un mot de passe correct lorsqu’ils enregistrent toute modification du
classeur.

Chapitre 7
Le code suivant permet à un utilisateur de définir un mot de passe qu’il devra
fournir pour ouvrir le classeur. Une fois que la personne a ouvert le classeur, elle
sera en mesure de le modifier à sa guise, mais uniquement si elle connaît le mot
de passe !

Sub MotDePasseLecture()
Dim strPassword1 As String
Dim strPassword2 As String
strPassword1 = InputBox ("Tapez un mot de passe pour le classeur.")
strPassword2 = InputBox ("Tapez à nouveau le mot de passe.")
If strPassword1 <> strPassword2 Then
MsgBox ("Le mot de passe ne correspond pas. Essayez à
nouveau.")
Else
ThisWorkbook.Password = strPassword1
MsgBox ("Le mot de passe est défini.")
End If
End Sub

Important Vous avez probablement remarqué que la procédure DéfinirMotDe-


Passe demande à l’utilisateur de taper deux fois le même mot de passe pour
le définir. Lorsque vous créez des routines qui limitent l’accès aux données,
vérifiez toujours que le mot de passe saisi par l’utilisateur est bien celui qu’il
avait prévu. Rappelez-vous que si les données sont suffisamment importantes
pour être protégées, il est préférable d’ajouter des mesures supplémentaires
pour surveiller le mot de passe.

Pour protéger votre classeur, vous pouvez également empêcher les utilisateurs
d’enregistrer les modifications sauf s’ils connaissent le mot de passe qui protège
le classeur. Lorsqu’un classeur est protégé en écriture, la propriété WriteReserved
est positionnée sur True. Ne commencez pas par écrire à la volée le code qui
change un mot de passe protégé en écriture. En effet, l’utilisateur doit saisir le
mot de passe actuel avant d’en définir un nouveau. En conséquence, la routine
suivante vérifie que le classeur actif n’est pas protégé en écriture avant d’autoriser
l’utilisateur à définir un mot de passe qu’il devra saisir pour être habilité à enre-
gistrer les changements.

Sub MotDePasseÉcriture()
Dim strPassword1 As String
Dim strPassword2 As String
strPassword1 = InputBox ("Tapez un mot de passe pour enregistrer les
changements.")
strPassword2 = InputBox ("Tapez à nouveau le mot de passe.")
If strPassword1 <> strPassword2 Then
MsgBox ("Le mot de passe ne correspond pas. Essayez à
nouveau.")
Else
If ActiveWorkbook.WriteReserved = False Then

157
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


ActiveWorkbook.WritePassword = strPassword1
Else MsgBox ("Le classeur est déjà protégé en écriture.")
Chapitre 7

End If
MsgBox ("Le mot de passe est défini.")
End If
End Sub

Protéger les classeurs contre les modifications


Lorsque vous utilisez la méthode WritePassword pour protéger votre classeur,
vous demandez aux utilisateurs de connaître le mot de passe qui leur permet
d’ouvrir le classeur. Une fois le classeur ouvert, ils peuvent effectuer les modifi-
cations de leur choix. Pour ajouter une deuxième couche de protection, vous
pouvez définir un autre mot de passe que les utilisateurs doivent saisir avant de
pouvoir modifier le classeur. Avec la méthode Protect, vous empêchez les utilisa-
teurs d’ajouter des feuilles de calcul, de supprimer des feuilles de calcul, d’affi-
cher des feuilles de calcul masquées (autrement dit, de modifier la structure du
classeur) et également de changer la taille ou la position des fenêtres du classeur
(changer les fenêtres du classeur).

Remarque Si vous utilisez la méthode Protect avec un objet Workbook, les


protections s’appliquent à l’ensemble du classeur.

Voici la syntaxe de la méthode Protect de l’objet Workbook :

Password], [S
Protect[P Structure], [W
Windows]

Pas besoin de tableau cette fois ! Le paramètre Password représente le mot de


passe (obligatoire), les paramètres Structure et Windows sont optionnels. Par
défaut, ils sont positionnés sur False, mais si vous les positionnez sur True,
comme dans l’exemple de code suivant, la structure et la disposition des fenêtres
du classeur seront protégées.

Sub DéfinirProtection()
Dim strPassword1 As String
Dim strPassword2 As String
'D'abord, vérifiez que le classeur n'est pas déjà protégé.
If (ActiveWorkbook.ProtectStructure <> True And _
ActiveWorkbook.ProtectWindows <> True) Then
strPassword1 = InputBox ("Tapez un mot de passe pour
protéger le classeur.")
strPassword2 = InputBox ("Tapez à nouveau le mot de passe.")
'Vérifiez ensuite que les mots de passe sont identiques
If strPassword1 <> strPassword2 Then
MsgBox ("Le mot de passe ne correspond pas. Essayez à
nouveau.")
Else
ActiveWorkbook.Protect Password:=strPassword1,
Structure:=True, _
Windows:=True
MsgBox ("Le mot de passe est défini.")

158
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


End If
'De retour dans la partie de la routine qui vérifie la protection.

Chapitre 7
Else
MsgBox ("Le classeur est déjà protégé en écriture.")
End If
End Sub

Au Quotidien
Quand une erreur n’en est pas une

Il est intéressant de noter que les tentatives pour protéger un classeur déjà
protégé ne génèrent pas de message d’erreur : elles se contentent d’échouer.
Une ancienne version de la procédure Sub DéfinirProtection que nous venons
de voir vérifiait les erreurs et, au lieu s’arrêter quand la procédure s’exécutait
dans un classeur protégé, la routine continuait tranquillement jusqu’à la fin
sans informer l’utilisateur d’un quelconque problème. La seule manière fiable
de vérifier la présence d’une protection consiste à interroger les propriétés
ProtectStructure et ProtectWindows.

Pour supprimer la protection du classeur, servez-vous de la méthode Unprotect.


Elle prend un unique paramètre, le mot de passe requis pour supprimer la pro-
tection.

ActiveWorkbook.Unprotect Password:=password

La procédure suivante permet à l’utilisateur de supprimer la protection d’un


classeur :

Sub SupprProtectionClasseur()
Dim strPassword As String
If (ActiveWorkbook.ProtectStructure = True Or _
ActiveWorkbook.ProtectWindows = True) Then
strPassword = InputBox ("Tapez le mot de passe pour supprimer
la protection de _
ce classeur.")
ActiveWorkbook.Unprotect Password:=strPassword
Else
MsgBox ("Le classeur n'est pas protégé.")
End If
End Sub

La procédure SupprProtectionClasseur vérifie si l’une des propriétés ProtectStruc-


ture ou ProtectWindows est positionnée sur True puisqu’il est possible de proté-
ger l’un des aspects du classeur sans protéger l’autre.

159
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


Chapitre 7

Au Quotidien
Créer des mots de passe valables

Les meilleurs mots de passe sont des chaînes aléatoires de caractères, mais
ce type de chaîne est difficile à retenir. Pour créer des mots de passe difficiles
à deviner, combinez des éléments de deux mots entre lesquels vous insérez
un nombre. Par exemple, votre mot de passe peut ressembler à
prog#2003exce, que l’on peut lire « programmation de la version 2003
d’Excel ». Quoi qu’il en soit, évitez les mots du dictionnaire en français ou dans
toute autre langue. Ils sont en effet faciles à découvrir par le biais de program-
mes spécialisés disponibles sur l’Internet. L’algorithme de cryptage d’Excel
est suffisamment fort pour obliger un attaquant à passer quelques 30 jours en
moyenne pour découvrir la clé qui déverrouille un classeur, mais les données
financières sensibles possèdent une durée de vie significativement plus lon-
gue. Ainsi si vos données sont réellement sensibles et que vous voulez les
protéger contre le vol ou une divulgation accidentelle, servez-vous d’un pro-
gramme de cryptage commercial plus puissant.

Méthodes
Le classeur constitue le document de base dans Excel. Il n’est donc pas surpre-
nant qu’il existe un nombre important de méthodes que vous pouvez invoquer
pour agir dans vos classeurs. Vous pouvez ajouter une classeur à la liste de vos
fichiers et URL favoris, activer le classeur pour l’exploiter sans le nommer dans
chaque commande ou prévisualiser le classeur avant de l’imprimer.

Méthode Activate
Lorsque vous commencez à écrire des macros, vous travaillez presque exclusive-
ment sur un seul classeur. Les macros les plus simples, destinées à des tâches
comme manipuler les valeurs d’une feuille de calcul ou sauvegarder un classeur
en faisant une copie du fichier avec la méthode SaveCopyAs, exploitent toutes des
propriétés et des méthodes du classeur actif. Lorsque l’on commence à travailler
sur plusieurs classeurs à partir d’une même macro, cependant, il faut informer le
moteur VBA que l’on passe à la vitesse supérieure. Pour ce faire, vous faites appel
à la méthode Activate de l’objet Workbook. Prenons pour exemple l’extrait de
code suivant : il fait du classeur T42004Ventes.xls le classeur actif.

160
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


Workbooks("T42003Ventes.xls").Activate

Chapitre 7
Attention Il est important de se rappeler que la propriété ThisWorkbook et la
propriété ActiveWorkbook peut faire référence à des classeurs différents. La
première se réfère toujours au classeur qui contient le module du code exé-
cuté, mais le fichier auquel se réfère la propriété ActiveWorkbook peut être dif-
férent.

Une fois que vous avez changé de classeur actif, chaque méthode que vous appe-
lez avec la propriété ActiveWorkbook l’affecte. Par exemple, si vous travaillez sur
cinq classeurs mais que vous n’en avez modifié que deux, vous pouvez les activer
tour à tour, les enregistrer et revenir au classeur d’origine, comme dans la procé-
dure suivante :

Sub EnregistrerAprèsChangement()
Workbooks("T4RécapVentes.xls").Activate
ActiveWorkbook.Save
Workbooks("2004RécapVentes.xls").Activate
ActiveWorkbook.Save
Workbooks("T42004Ventes.xls").Activate
End Sub

Méthode AddToFavorites
Précédemment dans ce chapitre, nous avons étudié comment ajouter le nom
d’un fichier enregistré à la liste des fichiers récemment utilisés du menu Fichier
avec la propriété AddToMru. Vous pouvez également ajouter le fichier à la liste
Favoris qui s’affiche dans Internet Explorer, le Poste de travail (voir Figure 7.4)
ou la barre d’outils Web d’Excel.

Figure 7-4. La liste Favoris contient les liens vers des fichiers et des liens
hypertexte auxquels vous voulez accéder rapidement.

Astuce Retrouvez facilement vos favoris


Vous pouvez, bien sûr, ajouter le bouton Favoris à n’importe quelle barre
d’outils. Pour ce faire, dans le menu Outils, choisissez Personnaliser et cliquez
sur l’onglet Commandes de la boîte de dialogue Personnalisation. Dans le
volet Catégories, cliquez sur Web et faites glisser Favoris depuis le volet Com-
mandes jusqu’à la barre d’outils de votre choix.

Pour invoquer la méthode AddToFavorites et ajouter un classeur à la liste des


favoris, servez-vous de n’importe quelle méthode liée à un objet qui référence un
objet classeur, comme dans les deux fragments de code suivants :

161
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


ActiveWorkbook.AddToFavorites
ThisWorkbook.AddToFavorites
Chapitre 7

Méthode FollowHyperlink
Pour créer des fichiers d’aide et d’informations dans les applications Excel que
vous créez, enregistrez-les en tant que pages web. Vous pouvez ainsi configurer
une série de liens hypertexte sur lesquels les utilisateurs cliquent pour obtenir de
l’aide sur une feuille ou tout autre objet. Le code suivant présente la syntaxe de
base de la méthode FollowHyperlink et le tableau 7.4 détaille les paramètres les
plus employés.

Address, SubAddress, NewWindow, ExtraInfo,


expression.FollowHyperlink(A
Method, HeaderInfo)

Tableau 7-4. Paramètres de la méthode FollowHyperlink


Paramètre Type Description
Expression Obligatoire Expression qui retourne un objet Workbook.
Address String, Adresse du document cible.
obligatoire
SubAddress Variant, Emplacement au sein du document cible. La
optionnel valeur par défaut est une chaîne vide.
NewWindow Variant, True pour afficher l’application cible dans une
optionnel nouvelle fenêtre. La valeur par défaut est False.

Vous ne définirez que rarement la plupart de ces paramètres. Toutefois, le para-


mètre NewWindow est pratique si vous voulez vous assurer que le document que
vous ouvrez s’afficher dans une fenêtre séparée et qu’il n’écrase pas des informa-
tions existantes. Les paramètres listés dans le code que l’on ne retrouve pas dans
le tableau servent uniquement lorsque l’on doit appeler la page web par le biais
d’instructions HTTP (Hypertext Transfer Protocol) spécifiques. Consultez votre
administrateur réseau pour connaître les paramètres appropriés.
L’exemple suivant affiche la page web qui se trouve à l’adresse http://exem-
ple.microsoft.com dans une nouvelle fenêtre.

ActiveWorkbook.FollowHyperlink Address:="http://
exemple.microsoft.com", NewWindow:=True

Pour plus d’informations sur l’utilisation des liens hypertexte et du web, reportez-vous au
chapitre 25, « Excel et le web ».

Imprimer et prévisualiser les classeurs


Avec l’impression, vous pouvez communiquer vos données sous une forme défi-
nie indépendante de l’ordinateur. Le vénérable matériel dans lequel vous lisez ces
mots (un livre) est une mise en œuvre de ce concept. Pour permettre à vos collè-
gues d’imprimer un exemplaire de classeur, vous utilisez la méthode PrintOut.

162
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


From, To, Copies, Preview, ActivePrinter,
expression.PrintOut(F
PrintToFile, Collate, PrToFileName)

Chapitre 7
Remarque La méthode PrintOut existe également pour les feuilles, les gra-
phiques, les objets et les plages de cellules.

Les paramètres de la méthode PrintOut correspondent aux commandes de la


boîte de dialogue Imprimer (voir figure 7.5). Les seules exceptions sont le bou-
ton Propriétés, qui affiche les commandes de l’imprimante en cours, et le bouton
Rechercher une imprimante, qui se sert du service d’annuaire (s’il est disponi-
ble) pour afficher la liste des imprimantes disponibles sur le réseau, mais aucune
de ces fonctionnalités n’est vitale à l’impression d’un classeur dans une configu-
ration réseau connue.

Figure 7-5. La méthode PrintOut contient toutes les commandes importantes


de la boîte de dialogue Imprimer.

Remarque Prévoyez une routine de gestion d’erreurs pour informer l’utilisa-


teur d’un échec d’impression. Si possible, écrivez également une routine pour
imprimer le classeur sur une autre imprimante et, dans ce cas, informer l’utili-
sateur de l’imprimante utilisée par la procédure pour imprimer le classeur.

Le tableau 7.5 décrit les paramètres de la méthode PrintOut. Les paramètres et


descriptions sont simples à une exception près. Lorsque vous positionnez le
paramètre Preview sur True, Excel affiche le classeur en mode Aperçu avant
impression dans lequel l’utilisateur doit cliquer sur le bouton Imprimer pour
commencer l’impression.

163
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Tableau 7-5. Paramètres de la méthode PrintOut


Chapitre 7

Paramètre Type Description


Expression Obligatoire Expression qui fait référence à un classeur,
une feuille de calcul, un graphique, un objet ou
une plage de cellules.
From Variant Numéro de la page à laquelle débute
optionnel l’impression. Si on omet cet argument,
l’impression commence au début du
document.
To Variant Numéro de la dernière page à imprimer. Si on
optionnel omet cet argument, l’impression se termine à
la dernière page.
Copies Variant Nombre de copies à imprimer. Si cet argument
optionnel est omis, une copie est imprimée.
Preview Variant True pour qu’Excel invoque l’aperçu avant
optionnel impression avant d’imprimer l’objet. False (ou
omis) pour imprimer l’objet immédiatement.
ActivePrinter Variant Définit le nom de l’imprimante active.
optionnel
PrintToFile Variant True pour imprimer dans un fichier. Si on ne
optionnel spécifie pas PrToFileName, Excel invite
l’utilisateur à saisir le nom du fichier de sortie.
Collate Variant True pour assembler plusieurs copies.
optionnel
PrToFileName Variant Si PrintToFile est positionné sur True, cet
optionnel argument spécifie le nom du fichier dans
lequel imprimer.

Pour amener directement l’utilisateur en mode Aperçu avant impression, servez-


vous de la méthode PrintPreview. Cette méthode, qui s’applique également aux
feuilles, graphiques, objets et plages de cellules, prend un unique paramètre :
EnableChanges. Lorsque ce paramètre est positionné sur True (par défaut), l’uti-
lisateur peut modifier la mise en page du classeur et les paramètres de marge
avant l’impression. Lorsqu’il est positionné sur False, les boutons Page et Marges
sont désactivés, mais l’utilisateur peut toujours choisir d’imprimer (en cliquant
sur le bouton Imprimer) ou non (en cliquant sur le bouton Fermer).

Les collections Sheets et Worksheets


La plupart des utilisateurs qui entendent « feuille » dans un classeur, pensent à
une feuille de calcul, avec des lignes, des colonnes, des cellules et des formules. Il
existe cependant plusieurs types de feuilles dans un classeur. Il y a évidemment la
feuille de calcul, mais également la feuille de graphique. Voilà qui est quelque peu

164
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


confus. En effet, une feuille de calcul peut héberger un graphique, mais si vous
utilisez l’Assistant Graphique, vous avez la possibilité de placer le graphique sur

Chapitre 7
une feuille de graphique séparée. Les deux autres types de feuilles gèrent les
macros Excel 4 : une pour les macros américaines et une autre pour les macros
internationales.

Propriétés
Les collections Sheets et Worksheets ont en commune un grand nombre de pro-
priétés, mais vous devez prêter attention à quelques points importants lorsque
vous exploitez les feuilles d’un classeur, et plus particulièrement à la propriété
Count, qui sera la première que nous traiterons dans cette section.

Propriété Count
La propriété Count de la collection Worksheets parcourt le classeur nommé et
compte le nombre de feuilles de calcul qu’il contient, alors que la propriété
Count de la collection Sheets reflète le nombre combiné de feuilles de graphique
et de feuilles de calcul du classeur. Vous pouvez utiliser la propriété Count des
collections Sheets et Worksheets pour examiner la structure du classeur avec de la
passer à une autre procédure pour continuer le traitement.

Sub VérifClasseur()
Do While Worksheets.Count < 12
ThisWorkbook.Sheets.Add
Loop
End Sub

Le reste de cette procédure se trouve après la section relative à la méthode Add de


l’objet Workbook.

Propriété Name
Le nom fait partie de la face publique de la feuille. Il l’identifie dans la barre
d’onglets et permet de l’identifier dans le code VBA. Pour modifier le nom d’une
feuille de calcul, vous définissez sa propriété Name. Par exemple, pour copier les
ventes hebdomadaires totales dans une feuille de calcul à la fin d’un classeur,
vous remplacez le nom de cette feuille de calcul par Récapitulatif avec la procé-
dure suivante :

Sub ChangerNom()
Dim strWkshtName As String
strWkshtName = "Récapitulatif"
Sheets(Sheets.Count).Name = strWkshtName
End Sub

165
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Propriété Visible
Chapitre 7

La propriété Visible constitue l’autre propriété fréquemment employée dans les


collections Worksheets et Sheets. Elle indique si une feuille particulière est affi-
chée dans la barre d’onglets d’un classeur. Elle peut prendre trois valeurs : les
constantes Excel xlSheetVisible, xlSheetHidden et xlSheetVeryHidden. Si la pro-
priété Visible est positionnée sur xlSheetVisible la feuille apparaît dans la barre
d’onglets et peut être directement modifiée par l’utilisateur. Si elle est position-
née sur xlSheetHidden, la feuille n’est pas représentée dans la barre d’onglets,
mais l’utilisateur peut l’afficher en cliquant sur Format, Feuille, Afficher avant de
cliquer sur le nom de la feuille dans la boîte de dialogue Afficher.

Si la propriété Visible prend la valeur xlSheetVeryHidden, la feuille masquée


n’apparaît pas dans boîte de dialogue Afficher et ne peut être rendue accessible
que par le biais du code VBA en modifiant la valeur de la propriété Visible.

Méthodes
La collection Sheets héberge un grande variété de méthodes qui permettent
d’ajouter, de supprimer, de déplacer, de copier et de définir les options de mise
en page (marges, en-têtes, pieds de page, etc.).

Méthode Add
Lorsque vous incorporez des données à partir d’un fichier externe, il est préféra-
ble de stocker les données importées dans une nouvelle feuille de calcul. Pour
créer une nouvelle feuille de calcul dans un classeur existant, on utilise la
méthode Add, dont la syntaxe est la suivante :

Before, After, Count, Type)


Sheets.Add(B

Les paramètres Before et After sont mutuellement exclusifs : celui que vous
employez dépend de l’emplacement de la nouvelle feuille dans le classeur. Les
paramètres Before et After peuvent prendre une valeur d’index qui reflète la posi-
tion de la feuille dans le classeur, un nom de feuille ou la feuille active (en utili-
sant la propriété ActiveSheet comme valeur du paramètre).
Par exemple, pour placer la feuille de calcul ajoutée en première page du classeur,
on utilise le paramètre Before et l’une des instructions suivantes :

ThisWorkbook.Sheets.Add Before:=Worksheets(1)
ThisWorkbook.Sheets.Add Before:=Feuil1

166
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


ThisWorkbook.Sheets.Add Before:=ActiveSheet

Chapitre 7
La dernière instruction présume que la feuille active est la Feuil1.

Remarque Contrairement aux tables classiques, qui comment par une valeur
d’index de 0 par défaut, les collections Sheets et Worksheets commencent par
une valeur d’index de 1.

Pour ajouter plusieurs feuilles de calcul à un classeur, le système d’aide de Visual


Basic Editor indique que l’on peut positionner le paramètre Count sur le nombre
de pages à ajouter. Par exemple, pour ajouter trois feuilles après la feuille intitu-
lée Mars, on utilise la commande suivante :

ThisWorkbook.Sheets.Add After:=Mars, Count:=3

Type est le dernier paramètre que vous pouvez employer avec la méthode Add. Il
détermine le type de la feuille ajoutée au classeur avec l’une des quatre constantes
suivantes :
● xlWorksheet, qui ajoute une feuille de calcul (par défaut) ;
● xlChart, qui ajoute une feuille de graphique ;
● xlExcel4MacroSheet, qui ajoute une feuille de macro Excel 4 ;
● xlExcel4IntMacroSheet, qui ajoute une feuille de macro Excel 4 internatio-
nale.
Les constantes xlExcel4MacroSheet et xlExcel4IntMacroSheet assurent la rétro-
compatibilité d’Excel 2003 avec Excel 4.
Vous aurez remarqué qu’il n’existe pas de méthode directe pour ajouter une
feuille à la fin d’un classeur. Vous pouvez néanmoins vous servir de la propriété
Count de la collection Sheets ou (si votre classeur ne comporte pas d’autre type
de feuille) la collection Worksheets pour déterminer le nombre de feuilles dans le
classeur et ajouter la feuille après. Le code suivant représente l’une de méthode
pour y parvenir :

ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)

Astuce Commencer avec le nombre de feuilles correct


Si vous connaissez le nombre total de feuilles dont vous aurez besoin dans un
classeur donné, créez le classeur avec le nombre approprié au lieu d’ajouter
des feuilles ultérieurement. Vous éviterez ainsi tout problème d’accès au
classeur : un utilisateur qui aurait ouvert le classeur ou un problème réseau au
moment où vous modifier un classeur qui se trouve sur un autre ordinateur.

Méthode Delete
La méthode Delete est complémentaire de la méthode Add : au lieu d’ajouter des
feuilles, elle en supprime. Avec la méthode Delete de la collection Sheets, vous

167
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


pouvez supprimer n’importe quelle feuille du classeur. En revanche, avec la
méthode Delete de la collection Worksheets, vous ne pourrez pas supprimer acci-
Chapitre 7

dentellement une feuille de graphique (ce qui est également vrai si vous essayez
de supprimer une feuille de calcul avec la méthode Delete de la collection
Charts).
La syntaxe pour supprimer une feuille suit le schéma classique : nommer la col-
lection dont vous voulez supprimer une feuille, nommer la feuille soit par son
nom ou soit par sa position dans la collection, et invoquer la méthode Delete. Par
exemple, n’importe laquelle des lignes de code suivantes supprime la feuille de
calcul intitulé Récapitulatif, en admettant qu’il s’agit de la quatrième feuille d’un
classeur :

Worksheets("Récapitulatif").Delete
Sheets("Récapitulatif").Delete
Worksheets(4).Delete
Sheets(4).Delete

Vous pouvez également supprimer la feuille active avec la propriété ActiveSheet


dans l’instruction suivante :

ActiveSheet.Delete

Il est important de noter, toutefois, que la dernière des quatre lignes de code de
l’exemple précédent ne supprime pas la feuille correcte si l’une des quatre pre-
mières feuilles est une feuille de graphique. Prenons pour exemple un classeur
créé pour la société Mon Jardin et qui contient cinq feuilles, la quatrième étant
une feuille de graphique. Dans ce classeur, le quatrième membre de la collection
Worksheets est la feuille Récapitulatif, mais le quatrième membre de la collection
Sheets est la feuille T1Ventes.

Astuce Supprimez le nom, pas la position


Dans la mesure du possible, référez-vous toujours aux feuilles par leur nom,
pour être sûr de supprimer la page appropriée. L’exception à cette règle est le
cas dans lequel vous voulez supprimer toutes les feuilles sauf une et que vous
en connaissez la position ou le nom (par exemple, vous l’avez placé en pre-
mière ou en dernière position dans le classeur ou lui avez donné un nom spé-
cifique codé en dur dans la procédure). Dans ce cas, vous pouvez vous servir
d’une boucle For Each...Next pour supprimer toutes les feuilles excepté la pre-
mière ou la dernière ou ignorer la feuille portant un nom spécifique. Testez le
code sur des classeurs factices avant de l’exploiter sur des données réelles.

Lorsque vous invoquez la méthode Delete, Excel affiche une alerte pour vous
demander si vous êtes sûr de vouloir supprimer la feuille. Ce n’est évidemment
pas le comportement attendu dans une procédure automatisée. Pour désactiver
les alertes, faites appel à la propriété DisplayAlerts de l’objet Application. Il est
cependant préférable de les réactiver de sorte que, si un problème inattendu se
produit, la procédure ne se poursuive pas sans que vous ou un collègue n’ayez pu

168
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


vérifier qu’aucun problème ne s’en suivra.

Chapitre 7
Sub SupprimerFeuille()
Application.DisplayAlerts = False
Sheets(1).Delete
Application.DisplayAlerts = True
End Sub

Méthodes Move et Copy


Le code VBA permet de changer la position des feuilles d’un classeur ou de
déplacer ou de copier une feuille vers un nouveau classeur. On peut prendre
pour exemple un classeur employé dans un rapport annuel ou un autre type de
présentation. Ce type de rapport suit souvent des directives de mise en forme
strictes. Il peut également être intéressant de déplacer ou de copier une feuille
d’un classeur à un classeur récapitulatif. Par exemple, si un directeur de projet
récapitule des dépenses en main d’œuvre et en équipement sur une feuille dont
il connaît le nom, vous pouvez la copier dans un classeur cible et utiliser la copie,
et non l’originale, pour y effectuer tout traitement nécessaire.
Le choix de déplacer ou de copier la feuille dépend du fait que vous souhaitiez ou
non conserver la feuille d’origine. La copie est une opération non destructive en
ce que la feuille copiée n’est pas supprimée. En revanche, si vous la déplacez, elle
sera supprimée de son emplacement d’origine.
Les méthodes Move et Copy permettent de définir une position cible pour la
feuille déplacée ou copiée avec les paramètres Before et After (si pour une quel-
conque raison vous tentez d’utiliser les deux, vous obtiendrez une erreur
« Attendu : fin d’instruction »). Par exemple, la procédure suivante compte le
nombre de pages dans le classeur existant et déplace la page Récapitulatif à la fin
du classeur :

Sub ALaFin()
Sheets("Récapitulatif").Move After:=Sheets(Sheets.Count)
End Sub

Pour déplacer ou copier plusieurs feuilles au sein d’un classeur, spécifiez une
table dans la collection Sheets. La procédure suivante, par exemple, place les
feuilles Récapitulatif et TableauCroisé au début du classeur.

Sheets(Array("Récapitulatif", "TableauCroisé")).Move Before:=Sheets(1)

Si vous déplacez ou copiez une feuille sans préciser le paramètre Before ou After,
Excel crée un nouveau classeur dans lequel la feuille copiée est la seule du clas-
seur, quel que soit le nombre de feuilles de calcul par défaut des nouveaux clas-
seurs.

169
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Objet PageSetup
Chapitre 7

Que vous exploitiez Excel par le biais de l’interface utilisateur ou du code VBA,
n’oubliez pas que les données des classeurs constituent l’élément fondamental.
Une fois que vous êtes sûr que les données sont correctement saisies et résumées,
vous pouvez vous concentrer sur leur apparence. Nous étudierons la mise en
forme des données de manière plus détaillée au chapitre 10, « Mise en forme
d’objets Excel », mais il est logique de voir comment modifier la disposition des
feuilles de calcul avec la propriété PageSetup de l’objet Worksheet.
Cette propriété retourne un objet PageSetup, qui contient une série de propriétés
reflétant la position, l’orientation, les marges et le niveau de détail de l’affichage
d’une feuille de calcul. Le tableau 7.6 liste les propriétés les plus importantes de
l’objet PageSetup, mais vous en trouverez une liste complète dans l’aide de Visual
Basic Editor.
Tableau 7-6. Propriétés sélectionnées de l’objet PageSetup
Propriété Description
BlackAndWhite Positionnée sur True, cette propriété imprime une feuille en noir et
blanc.
BottomMargin Détermine la distance, en points, entre la partie supérieure du pied de
page et la partie inférieure de la feuille de calcul.
CenterHorizontally Positionnée sur True, cette propriété centre la feuille de calcul
horizontalement sur la page imprimée.
CenterVertically Positionnée sur True, cette propriété centre la feuille de calcul
verticalement sur la page imprimée.
FirstPageNumber Définit le numéro de page assigné à la première page imprimée.
FitToPagesTall Définit le nombre de hauteurs de page en fonction duquel la feuille de
calcul doit être mise à l’échelle lors de son impression. Pratique pour
rétrécir une feuille de calcul trop grande à un nombre spécifique de
pages.
FitToPagesWide Définit le nombre de largeurs de page en fonction duquel la feuille de
calcul doit être mise à l’échelle lors de son impression. Pratique pour
rétrécir une feuille de calcul trop grande à un nombre spécifique de
pages.
FooterMargin Détermine la distance, en points, entre la partie supérieure du pied de
page et la partie inférieure de la page imprimée.
HeaderMargin Détermine la distance, en points, entre la partie inférieure de l’en-tête
de page et la partie supérieure de la page imprimée.
LeftMargin Détermine la quantité d’espace blanc restant entre le bord de la page
et l’élément le plus à gauche de la feuille de calcul.
Orientation Détermine l’orientation du mode d’impression : paysage (xlLandscape)
ou portrait (xlPortrait).

170
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul

Tableau 7-6. Propriétés sélectionnées de l’objet PageSetup (Suite)

Chapitre 7
Propriété Description
RightMargin Détermine la quantité d’espace blanc restant entre le bord de la page
et l’élément le plus à droite de la feuille de calcul.
TopMargin Détermine la quantité d’espace blanc restant entre la partie inférieure
de l’en-tête et l’élément le plus haut de la feuille de calcul.
Zoom Détermine le facteur de zoom pour l’affichage de la feuille de calcul
(entre 10 et 400 pour cent).

Notez que les valeurs des paramètres de marge s’expriment en points (un point
est égal à 1/72e de pouce, soit environ 1/28e de centimètre). Si vous ne voulez pas
garder ces nombres en mémoire et passer votre temps à effectuer des conver-
sions, servez-vous de la méthode Application.InchesToPoints qui fait la conver-
sion à votre place. Il suffit d’indiquer le nombre de pouces dans les parenthèses
de la méthode et d’assigner cette valeur à la propriété appropriée. Par exemple,
vous pouvez positionner la marge du haut à trois quart de pouce avec le code
suivant :

ActiveSheet.PageSetup.TopMargin = Application.InchesToPoints(0,75)

L’emplacement des sauts de page constitue un autre aspect important relatif à


l’impression de la feuille de calcul. Le saut de page représente la dernière ligne ou
colonne imprimée sur une page. Dans la majorité des cas, vous pouvez laisser
Excel le définir automatiquement et déplacer une ligne ou une colonne manuel-
lement sur la page suivante lorsqu’elle empiète sur la marge. Si vous préférez spé-
cifier l’emplacement des sauts de page, vous pouvez indiquer la colonne à droite
ou la ligne qui se trouve au-dessous du saut de page.

Remarque Nous détaillerons le référencement des lignes et des colonnes au


chapitre 8, « Plages et cellules ».

Voici la syntaxe qui définit un saut de page manuel au-dessus de la ligne 30 de la


Feuil2 :

Worksheets("Feuil2").Rows(30).PageBreak = xlPageBreakManual

Pour définir un saut de page manuel à gauche de la colonne D de la Feuil1, utili-


sez le code suivant :

Worksheets("Feuil1").Columns("D").PageBreak = xlPageBreakManual

Pour supprimer un saut de page, on positionne la propriété PageBreak sur l’une


des constantes Excel xlPageBreakNone ou xlNone, comme dans les exemples
suivants :

Worksheets("Feuil2").Rows(30).PageBreak = xlPageBreakNone

171
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


Worksheets("Feuil1").Columns("D").PageBreak = xlNone
Chapitre 7

Pour supprimer tous les sauts de page d’une feuille de calcul, servez-vous de la
méthode ResetAllPageBreaks :

Worksheets("Feuil1").ResetAllPageBreaks

Astuce Imprimez selon votre spécification


Rappelez-vous que vous obligez une feuille de calcul à s’imprimer sur un nom-
bre défini de pages en définissant les propriétés FitToPagesTall et FitToPa-
gesWide de l’objet PageSetup de la feuille de calcul.

Méthodes des feuilles de calcul


Les feuilles de calcul constituent l’élément vital d’un classeur et VBA propose un
grand nombre de méthodes permettant de retirer le maximum de vos feuilles de
calcul. Certaines de ces méthodes sont similaires à celles disponibles pour les
classeurs, mais avec des différences subtiles. Dans cette section, vous allez décou-
vrir les méthodes suivantes :
● Calculate qui recalcule les résultats de toutes les formules d’une feuille de
calcul ;
● Protect qui permet de demander un mot de passe aux utilisateurs pour
modifier les éléments spécifiés d’une feuille de calcul ;
● SaveAs qui enregistre une feuille de calcul en tant que nouveau classeur ;
● Select qui permet de travailler simultanément avec plusieurs feuilles de cal-
cul.

Méthode Calculate
La méthode Calculate de l’objet Worksheet sert à recalculer toutes les formules
d’une feuille de calcul. Elle est particulièrement pratique si ces formules
extraient des données qui peuvent avoir changer depuis la dernière ouverture du
classeur les héberge. La syntaxe de la méthode Calculate est simple : il suffit de
nommer la feuille de calcul à calculer et d’ajouter la méthode Calculate, comme
dans les exemples suivants :

Worksheets(1).Calculate
Worksheets("Récapitulatif").Calculate

Pour actualiser le résultat de chaque formule de chaque classeur ouvert, vous


pouvez ajouter la méthode Calculate seule (raccourci pour Application.Calcu-
late) au code VBA.
Normalement, Excel recalcule les formules chaque fois que vous effectuez une
modification, mais vous pouvez choisir quand Excel recalcule vos formules. Ce
choix constitue une science inexacte : si les valeurs affichées doivent toujours
représenter les résultats les plus récents alors que ceux-ci changent en perma-

172
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


nence, il est préférable qu’Excel recalcule les formules à chaque changement. Une
autre approche consiste à placer un bouton de commande dans une feuille de

Chapitre 7
calcul sur lequel les utilisateurs cliquent pour recalculer les formules lorsqu’ils
ont besoin de valeurs actualisées pour prendre une décision. Cette approche pré-
sente toutefois une difficulté avec une feuille de calcul importante qui récupère
les données à partir de plusieurs autres sources. Si votre réseau est actif ou si vous
devez actualiser des centaines de formules, il peut être plus intéressant de créer
un processus qui met les formules à jour pendant la nuit. Dans ce cas, pensez à
actualiser d’abord chaque feuille de calcul source pour éviter toute incohérence.
Pour modifier le moment où Excel recalcule une feuille de calcul, vous position-
nez la propriété Calculate de l’objet Application (et oui, c’est le même nom) sur
l’une des constantes xlCalculate :
● xlCalculationAutomatic, la valeur par défaut, avec laquelle Excel recalcule
les formules à chaque changement.
● xlCalculationManual, avec laquelle l’utilisateur doit appuyer sur MAJ+F9
pour recalculer les formules de la feuille de calcul active.
● xlCalculationSemiautomatic, qui recalcule toutes les formules d’une feuille
de calcul, excepté celles qui se trouvent dans un tableau.
Pour calculer les formules juste avant d’enregistrer le classeur, optez pour un
recalcul manuel puis positionnez la propriété CalculateBeforeSave de l’objet
Application sur True, comme dans le code suivant :

Application.Calculation = xlCalculationManual
Application.CalculateBeforeSave = True

Méthode Protect
La première ligne de défense contre les changements dans une feuille de calcul
commence par un mot de passe que les utilisateurs doivent fournir avant d’être
habilités à ouvrir le classeur. La méthode Protect de l’objet Workbook est quelque
peu limitée, mais elle protège votre classeur contre les accès non autorisés, les
changements dans la structure du classeur ou les modifications de taille et de
placement des fenêtres du classeur. Au niveau de la feuille de calcul, vous dispo-
sez de quelques mesures supplémentaires et les méthodes Protect des objets Sheet
et Worksheet proposent davantage d’options.

Password, DrawingObjects, Contents, Scenarios,


expression.Protect(P
UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns,
AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows,
AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows,
AllowSorting, AllowFiltering, AllowUsingPivotTables)

173
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


Le tableau 7.7 présente les valeurs par défaut de chacun de ces paramètres et
décrit ce qui est ou n’est pas autorisé lorsque ces options sont positionnées sur
Chapitre 7

True ou False.
Tableau 7-7. Paramètres de la méthode Worksheet.Protect
Valeur par
Paramètre défaut Description
Expression n/a Expression obligatoire qui retourne un objet
Worksheet.
Password n/a Chaîne qui spécifie un mot de passe sensible
à la casse pour la feuille de calcul ou le
classeur. Si on omet cet argument, on ne
peut pas supprimer la protection de la feuille
de calcul ou du classeur sans utiliser de mot
de passe.
DrawingObjects False Positionné sur True, ce paramètre protège les
formes contre le changement.
Contents True Si ce paramètre est positionné sur True, en
protégeant le contenu d’une feuille de calcul
on protège toute cellule verrouillée.
Scenarios True La valeur True empêche l’utilisateur de
modifier les scénarios.
UserInterfaceOnly False La valeur True protège l’interface utilisateur,
mais celui-ci peut éditer des macros. Si on le
laisse vide ou qu’on le positionne sur False,
l’interface utilisateur et les macros sont
protégées.
AllowFormattingCells False La valeur True permet aux utilisateurs de
formater n’importe quelle cellule d’une feuille
de calcul protégée.
AllowFormattingColumns False La valeur True permet aux utilisateurs de
formater n’importe quelle colonne d’une
feuille de calcul protégée.
AllowFormattingRows False La valeur True permet aux utilisateurs de
formater n’importe quelle ligne d’une feuille
de calcul protégée.
AllowInsertingColumns False La valeur True permet aux utilisateurs
d’insérer des colonnes dans une feuille de
calcul protégée.
AllowInsertingRows False La valeur True permet aux utilisateurs
d’insérer des lignes dans une feuille de calcul
protégée.

174
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul

Tableau 7-7. Paramètres de la méthode Worksheet.Protect (Suite)

Chapitre 7
Valeur par
Paramètre défaut Description
AllowInsertingHyperlinks False La valeur True permet aux utilisateurs
d’ajouter des liens hypertexte dans une
feuille de calcul protégée.
AllowDeletingColumns False La valeur True permet aux utilisateurs de
supprimer des colonnes sur la feuille de
calcul protégée, à condition que chaque
cellule de la colonne à supprimer soit
déverrouillée.
AllowDeletingRows False La valeur True permet aux utilisateurs de
supprimer des lignes sur la feuille de calcul
protégée, à condition que chaque cellule de
la ligne à supprimer soit déverrouillée.
AllowSorting False La valeur True permet aux utilisateurs de trier
les données d’une feuille de calcul protégée,
à condition que chaque cellule de la plage
triée soit déverrouillée ou non protégée.
AllowFiltering False La valeur True permet aux utilisateurs de
définir des filtres sur une feuille de calcul
protégée et de modifier les critères de
filtrage, mais ils ne peuvent pas activer ou
désactiver le filtre automatique.
AllowUsingPivotTables False La valeur True permet aux utilisateurs
d’exploiter des tableaux croisés dynamiques
dans une feuille de calcul protégée.

Pour étendre la protection de la feuille de calcul, vous pouvez également limiter


les cellules que l’utilisateur peut sélectionner en assignant une valeur à la pro-
priété EnableSelection. Une fois la feuille de calcul protégée, vous pouvez posi-
tionner la propriété EnableSelection sur l’une des constantes Excel suivantes :
● xlNoSelection empêche l’utilisateur de sélectionner une cellule de la
feuille ;
● xlUnlockedCells permet à l’utilisateur de sélectionner uniquement les cel-
lules dont la propriété Locked prend la valeur False ;
● xlNoRestrictions, la valeur par défaut, permet à l’utilisateur de sélectionner
n’importe quelle valeur.
L’extrait de code suivant empêche les utilisateurs de sélectionner une cellule dans
la feuille de calcul protégée intitulée Janvier :

Worksheets("Janvier").EnableSelection = xlNoSelection

175
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Important La propriété EnableSelection prend uniquement effet si la feuille


de calcul est protégée.
Chapitre 7

À l’instar des classeurs, vous pouvez autoriser un utilisateur à supprimer la pro-


tection d’une feuille de calcul en lui demandant un mot de passe. La ligne de
code employée dans ce cas est la suivante :

ActiveWorksheet. Unprotect

Excel affiche une boîte de saisie pour accepter le mot de passe : inutile d’écrire
une quelconque ligne de code supplémentaire pour gérer l’entrée.

Méthode SaveAs
À l’instar des classeurs, vous pouvez enregistrer une feuille de calcul individuelle
en tant que fichier séparé avec la méthode SaveAs de la méthode Worksheet.

FileName, FileFormat, Password, WriteResPassword,


expression.SaveAs(F
ReadOnlyRecommended, CreateBackup, AddToMru, TextCodepage,
TextVisualLayout, Local)

La méthode SaveAs de l’objet Worksheet est très similaire à celle de l’objet


Workbook ; en conséquence, vous pouvez vous reportez au tableau 7.3 pour con-
naître les détails de la plupart des paramètres.

Méthode Select
Au premier coup d’œil, la méthode Select semble identique à la méthode Acti-
vate. La différence entre les deux méthodes repose sur le fait que la méthode Acti-
vate fonctionne sur une feuille de calcul à la fois, alors que la méthode Select
permet d’intervenir simultanément sur plusieurs feuilles de calcul. Prenons un
exemple dans l’interface utilisateur : vous pouvez déplacer simultanément deux
feuilles de calcul en cliquant sur l’onglet de la première, en cliquant sur l’onglet
de la deuxième tout en maintenant la touche MAJ enfoncée et en faisant glisser
les deux feuilles vers leur nouvelle position dans le classeur.

Remarque Dans le cas que nous venons de mentionner, la première feuille


de calcul sur laquelle vous cliquez est considérée comme la feuille active.

L’extrait de code suivant sélectionne la feuille de calcul intitulée Feuil1 :

Worksheets("Feuil1").Select

Pour sélectionner simultanément plusieurs feuilles de calcul, utilisez une table


comme argument de la méthode Select, comme dans l’exemple suivant :

Worksheets (Array ("Feuil1", "Feuil2")).Select

176
Partie 3 : Le modèle d’objet Excel

Classeurs et feuilles de calcul


Dans ce chapitre, vous avez fait la connaissance des propriétés et méthodes les
plus importantes dans le cadre de la manipulation des feuilles de calcul et des

Chapitre 7
classeurs Excel. Vous êtes entièrement libre de choisir le comportement que vous
souhaitez obtenir de vos classeurs et feuilles de calcul en matière d’enregistre-
ment par programmation, de recalcul des formules ou de protection par un mot
de passe que les utilisateurs doivent fournir avant d’être habiliter à y accéder.
Dans le chapitre 8, vous allez apprendre à réaliser des tâches similaires au niveau
des plages et des cellules.

177
Partie 3 : Le modèle d’objet Excel

Chapitre 8
Plages et cellules
Manipulations de base. . . . . . . . 179 Plages nommées . . . . . . . . . . . 194
Référencement des plages . . . . 183 Validation des données . . . . . . . 204
Manipulation de groupes
de cellules . . . . . . . . . . . . . . . . . 190

Avant d’exploiter les informations contenues dans un classeur, vous devez y


accéder. Nous avons déjà vu comment accéder à des divers éléments du modèle
d’objet Excel : l’application Excel elle-même, les classeurs et les feuilles de calcul.
Dans ce chapitre, nous allons nous concentrer sur les cellules et les plages de cel-
lules.

Manipulations de base
Si la cellule constitue l’unité de travail de base d’une feuille de calcul Excel, au
sein du modèle d’objet Excel, l’unité de travail de base est l’objet Range. Il permet
de manipuler des groupes de cellules et des cellules individuelles.

Localiser la plage active


L’objet PlageActive n’existe pas, mais il existe d’autres moyens pour exploiter la
plage sélectionnée. La méthode classique consiste à employer l’objet Selection. Ce
dernier retourne tout objet sélectionné : plage de cellules, cellule, graphique, etc.
Il contrôle les actions au sein d’une cellule de la même manière que si vous les
effectuiez étape par étape avec le clavier ou la souris. Vous pouvez, par exemple,
utiliser le code suivant pour afficher les valeurs des cellules sélectionnées en
caractères gras :

Selection.Font.Bold = True

Remarque Rappelez-vous qu’« actif » n’est pas un synonyme de


« sélectionné ». Vous pouvez sélectionner toutes les cellules de la feuille de
calcul en appuyant sur CTRL+A, mais une seule cellule est active (généralement
A1, si on utilise CTRL+A).

179
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Sélectionner une plage


La méthode Select d’un objet Range propose diverses manières de sélectionner
une plage de cellules. La plupart de ces procédures sont similaires à une sélection
par le biais du clavier, ce qui en simplifie l’émulation.
L’exemple suivant utilise la propriété CurrentRegion de l’objet ActiveCell pour
sélectionner la plage de cellules utilisées dans la feuille de calcul. La procédure
InsertNewSheet copie la plage dans le presse-papier, la colle dans une nouvelle
feuille de calcul, lui applique la mise en forme appropriée et, pour finir, efface le
contenu, laissant des cellules vides pour une nouvelle année d’informations dans
Chapitre 8

le classeur SalesByCategory.xls.

Sub InsertNewSheet()

Range("C1").Activate
ActiveCell.CurrentRegion.Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Nouvelle année"
Sheets("Nouvelle année").Select
Range("C1").Activate
ActiveSheet.Paste
Columns("C:H").EntireColumn.AutoFit
Range("D2:G13").Select
Selection.ClearContents

End Sub

Outre la propriété CurrentRegion de l’objet ActiveCell, vous pouvez faire appel à


la méthode End pour étendre la plage au-delà de l’objet ActiveCell. Si vous utili-

180
Partie 3 : Le modèle d’objet Excel

Plages et cellules
sez l’une des valeurs du tableau 8.1, Excel étend la plage en exploitant les mêmes
règles que celles de la touche Fin combinée avec l’une des touches de direction
pour se déplacer à la fin d’une ligne ou d’une colonne.
L’exemple suivant parcourt toutes les entrées d’heures d’un mois dans le classeur
Y2001ByMonth.xls pour trouver celle qui contient la valeur la plus élevée. Une
fois l’entrée trouvée, Excel étend la plage vers le haut et le bas pour inclure toutes
les entrées de cette plage horaire et remplace la couleur de remplissage des cellu-
les par du bleu.

Chapitre 8
Sub HighLightTimeFrame()
Dim MyCell As Range, strAddress As String
Dim sngMaximum As Single

sngMaximum = 0
For Each MyCell In Range("D6:O36").Cells
If MyCell > sngMaximum Then
sngMaximum = MyCell
strAddress = MyCell.Address
End If
Next MyCell

Range(strAddress).Activate
Range(ActiveCell.End(xlUp), ActiveCell.End(xlDown)).Select
Selection.Cells.Interior.ColorIndex = 41
End Sub

Le tableau 8.1 liste les méthodes de l’objet Range et décrit comment elles affec-
tent les cellules sélectionnées.

181
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Tableau 8-1. Méthodes de sélection de plages


Méthode Action
.End(xlDown) Étend la plage vers le bas.
.End(xlUp) Étend la plage vers le haut.
.End(xlToRight) Étend la plage vers la droite.
.End(xlToLeft) Étend la plage vers la gauche.
.SpecialCells(xlCellTypeAllFormatConditions) Étend la plage pour inclure les
cellules dont on a modifié la
Chapitre 8

mise en forme. Excel


commence la recherche à la
cellule A1 et non à partir de la
cellule active.
.SpecialCells(xlCellTypeAllValidation) Étend la plage jusqu’à la
première cellule contenant des
règles de validation.
.SpecialCells(xlCellTypeBlanks) Étend la plage jusqu’à la
première cellule vide.
.SpecialCells(xlCellTypeComments) Étend la plage jusqu’à la
première cellule contenant un
commentaire.
.SpecialCells(xlCellTypeConstants) Étend la plage jusqu’à la
première cellule contenant une
constante.
.SpecialCells(xlCellTypeFormulas) Étend la plage jusqu’à la
première cellule contenant une
formule.
.SpecialCells(xlCellTypeLastCell) Étend la plage vers la gauche
et vers le bas jusqu’à la
dernière cellule utilisée.
.SpecialCells(xlCellTypeSameFormatConditions) Étend la plage jusqu’à la
première cellule contenant les
mêmes conditions de mise en
forme.
.SpecialCells(xlCellTypeSameValidtion) Étend la plage jusqu’à la
première cellule contenant les
mêmes règles de validation.
.SpecialCells(xlCellTypeVisible) Étend la plage à toutes les
cellules visibles.
.EntireColumn Étend la plage à l’ensemble de
la colonne.
.EntireRow Étend la plage à l’ensemble de
la ligne.

182
Partie 3 : Le modèle d’objet Excel

Plages et cellules

Au Quotidien
Comment Excel étend-il la plage ?

Pour localiser une cellule qui correspond à l’un des types spéciaux du
tableau 8.1, Excel commence la recherche à la cellule active. À partir de ce
point, il effectue une recherche minutieuse vers la droite et vers le bas et il
sélectionne autant de cellules que nécessaire pour atteindre la cellule la plus
éloignée qui réponde aux critères. S’il ne trouve pas de cellule répondant aux
critères, Excel modifie le sens de la recherche, passe à une recherche plus

Chapitre 8
« paresseuse » et retourne la première cellule qui correspond.

Excel continue la recherche vers la droite et vers le haut. S’il ne trouve aucune
correspondance, il continue la recherche vers la gauche. Puis à nouveau vers
le bas et ensuite vers le haut.

Pour connaître les cellules qu’Excel sélectionne, rappelez-vous les règles


suivantes :

● Droite en premier, gauche en deuxième ;


● Vers le bas en premier, vers le haut en deuxième ;
● À droite et vers le bas, la recherche est minutieuse. Toutes les autres
sont paresseuses.

Recherche 4 Recherche 2

Recherche 1
Recherche 3

Référencement des plages


La polyvalence des plages se manifeste dans le nombre de méthodes qui permet-
tent de s’y référer : directement par l’adresse de la cellule, sous forme d’un déca-

183
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


lage par rapport à une autre cellule, par nom ou par la sélection en cours. La
propriété Range permet de référencer une cellule de plusieurs manières. Voici la
syntaxe de la méthode Range :

expression.Range(Cell1, Cell2)

expression Élément obligatoire qui retourne un objet Application, Range ou


Worksheet. Si on omet expression, ActiveSheet est implicite.
Cell1 Variable Variant obligatoire qui référence avec la notation A1 une cellule
ou une plage de cellules. Si vous utilisez le paramètre Cell1 pour faire référence à
Chapitre 8

une plage de cellules, la variable Variant peut contenir l’opérateur de plage (un
double point), l’opérateur d’intersection (un espace) ou l’opérateur d’union
(une virgule). Vous pouvez insérer des signes dollar ($), mais ils sont ignorés. Il
est également possible de fournir un nom définit localement.
Cell2 Variable Variant qui, associée à Cell1, indique la cellule qui se trouve dans
l’angle inférieur droit de la plage.
Comme le démontre la description de la propriété, les manières de spécifier les
cellules de la plage sont légion. Pour employer des références absolues, servez-
vous de l’objet ActiveSheet comme objet de base (expression) ou faites appel à
des références relatives avec l’objet ActiveCell ou tout autre objet de plage comme
objet de base. Pour définir une plage, vous pouvez désigner une cellule unique,
un groupe de cellules contiguës, un groupe de cellules non contiguës, des lignes
ou des colonnes.

Référencer les plages de la feuille de calcul active


Dans VBA, le référencement d’une plage sur la feuille de calcul active est sans
aucun doute le plus exploité. Pour faire référence à une plage sur l’objet Acti-
veSheet, il vous suffit d’utiliser la propriété Range. Par exemple, pour faire réfé-
rence à la cellule D6 sur la feuille de calcul active, utilisez le code suivant :

Range("D6").Select

Au Quotidien
Évitez Select
Bien que la tendance soit de commencer par sélectionner une plage, ce n’est
pas indispensable, sans compter que cette action ralentit les performances de
la procédure (voir la section « Copie de données entre des plages et des
tableaux », plus loin dans ce chapitre, pour plus d’informations). Pour une sim-
ple commande de mise en forme, spécifiez la plage et la mise en forme en une
seule ligne, au lieu de sélectionner d’abord la plage puis d’appliquer la mise
en forme.

184
Partie 3 : Le modèle d’objet Excel

Plages et cellules

Par exemple, pour mettre en évidence la liste complète des entrées de 6:00
dans le classeur Y2001ByMonth.xls et appliquer une couleur bleue à la police,
utilisez la commande suivante :

Range("M6:M36").Font.ColorIndex = 41

Référencer les plages d’une feuille de calcul inactive


Le nombre de feuilles de calcul dans un classeur Excel est limité uniquement par
la quantité de mémoire disponible et les informations peuvent être réparties de

Chapitre 8
nombreuses feuilles de calcul et pas uniquement sur la feuille de calcul active.
Pour faire référence à une plage sur une feuille de calcul inactive, vous devez
indiquer la feuille de calcul qui contient la plage.
Sur une feuille de calcul inactive, on utilise la propriété Range de la même
manière que sur la feuille de calcul active. Si l’objet Worksheet n’est pas spécifié,
la feuille de calcul active est implicite. Revenons à l’exemple précédent qui faisait
référence à la cellule D6. Sur une feuille de calcul inactive, on s’y réfère avec le
code suivant :

Worksheets(2).Range("D6").Select.

Il est possible de référencer une plage sur une feuille de calcul inactive sans spé-
cifier la feuille de calcul, mais uniquement si la plage est nommée (voir la section
« Plages nommées », plus loin dans ce chapitre). Avec l’instruction Range("Fre-
quency").Select, on sélectionne la plage nommée Frequency, qu’elle se trouve
ou non sur la feuille de calcul active.

Référencer les cellules d’une plage


Pour référencer une cellule individuelle au sein d’une plage, on procède comme
pour une cellule dans un classeur. La cellule qui se trouve dans l’angle supérieur
gauche porte l’adresse « A1 ». La cellule qui se trouve trois lignes plus bas et qua-
tre colonnes vers la droite a pour adresse « D3 ». Par exemple, dans le classeur
Y2001ByMonth.xls, on peut assigner la plage D6:O36 à un objet Range. Ensuite,
pour référencer l’entrée 9:00 A.M. du premier jour (la cellule D6 dans la feuille
de calcul), vous pouvez utiliser la cellule A1 de l’objet Range. De même, l’entrée
7:00 P.M. du seizième jour (la cellule N21 dans la feuille de calcul) est la cellule
K16 de l’objet Range.

Référencer des cellules avec la propriété Offset


Si les informations dont vous avez besoin se trouvent à un emplacement donné
par rapport à une cellule connue, vous pouvez utiliser la propriété Offset pour
référencer la cellule, en indiquant le nombre de lignes et de colonnes à partir
d’un emplacement défini. Le principe est similaire à celui utiliser pour orienter
une personne à partir d’un lieu précis. La personne que vous renseignez doit se

185
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


rendre au point de départ et une fois sur place, elle peut suivre les directions
indiquées pour atteindre sa destination finale.
La propriété Offset fonctionne en se déplaçant du nombre de lignes et de colon-
nes spécifiés. Les nombres positifs désignent un déplacement vers le bas et vers la
droite, alors que les nombres négatifs indiquent un déplacement vers le haut et
vers la gauche. Zéro conserve la ligne ou la colonne en cours. La routine
Table_Calcul (voir figure 8.1) utilise la propriété Offset pour définir la formule
des colonnes Valeur actuelle et Intérêts payés.
Chapitre 8

Figure 8-1. Cet exemple de feuille de calcul permet de calculer les composants
d’un prêt hypothécaire.

Sub Table_Calcul()
Dim counter As Integer, Paiements As Integer, Frequence As Integer
Dim Temp As String, intRow As Integer, intColumn As Integer
Dim intOffset As Integer, strR1C1Address As String, strA1Address As
String

ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
Sheets(Sheets.Count).Select
ActiveSheet.Name = Range("Nom")
Paiements = Range("Paiements")
Frequence = 12
'Définit les en-têtes de colonnes
Range("A5") = "Paiement"
Range("B5") = "Capital"
Range("C5") = "Intérêts"
Range("D5") = "Valeur actuelle"
Range("E5") = "Intérêts payés"

186
Partie 3 : Le modèle d’objet Excel

Plages et cellules
'Boucle dans un certain nombre de paiements et de formules
d'intérêt
'Utilise différentes méthodes pour référencer une plage
For counter = 1 To Paiements
intRow = 5 + counter
intColumn = 1
strR1C1Address = "R" & Format(intRow, "#0") & "C" & _
Format(intColumn, "#0")
strA1Address = Application.ConvertFormula(strR1C1Address, _
xlR1C1, xlA1)
Range(strA1Address) = "Paiement :" + Str$(counter)
Range(strA1Address).Range("B1") = "=PPMT(TIA/" & _

Chapitre 8
Str$(Frequence) & "," & Str$(counter) & _
",Paiements,Capital,Valeur_capitalisée)"
Range(strA1Address).Select
Selection.Range("C1") = "=IPMT(TIA/" & Str$(Frequence) _
& "," & Str$(counter) & ",Paiements,Capital," _
& "Valeur_capitalisée)"
Selection.Offset(0, 3) = "=R[-1]C+RC[-2]"
Selection.Offset(0, 4) = "=RC[-2]+r[-1]c"
Next counter

'Réinitialise les formules "Valeur actuelle" et "Intérêts payés"


'pour le premier paiement
Range("D6").Formula = "=Capital+B6"
Range("E6").Formula = "=C6"

'Dimensionne automatiquement les colonnes à la largeur adaptée


Columns("A:E").Select
Columns.EntireColumn.AutoFit

'Définit les titres


Range("A1").Value = ActiveSheet.Name
Range("A1:E1").Select
Selection.Merge
Range("A2").Value = "Tableau d'amortissement"
Range("A2:E2").Merge
With Range("A1")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
With Range("A2")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With

End Sub

Construire un classeur de calcul de prêt


Le fonctionnement de la macro Table_Calcul se base sur plusieurs fonctionna-
lités Excel, comme les pages nommées (que nous étudierons plus loin dans ce
chapitre), les contrôles de formulaire et les boutons de commande. Pour cons-
truire le classeur, procédez de la manière suivante :

187
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

1 Ouvrez un classeur vide en cliquant sur le bouton Nouveau de la barre


d’outils Standard ou en choisissant Nouveau classeur Excel dans le
Volet Office du même nom.
2 Dans la colonne A, tapez les descriptions suivantes, ligne par ligne. Ser-
vez-vous de la figure 8.2 comme référence :
■ Nom de la banque
■ Capital
■ Valeur capitalisée
Chapitre 8

■ Taux d’intérêt annuel


■ Nombre d’années du prêt
■ Montant du paiement
■ Taux effectif
■ Nombre de paiements

Figure 8-2. Le calculateur de prêt demande un certain nombre d’entrées


spécifiques dont voici la description.

3 Dans la colonne B, assignez un nom aux cellules situées en regard des


descriptifs. Faites correspondre le nom de chaque cellule de la
colonne B avec la description de la colonne A : Nom, Capital,
Valeur_capitalisée, TIA, Années, Paiement. Ignorez la cellule du taux
effectif et nommez la dernière cellule Paiements.
4 Sélectionnez la cellule Paiement et tapez la formule suivante :
=VPM(TIA/12;Paiements;Capital;Valeur_capitalisée)

Remarque Lorsque vous saisissez ces valeurs la première fois, une erreur
#DIV/0 s’affiche puisque les cellules employées dans la formule ne con-
tiennent aucune valeur. Une fois les valeurs saisies, l’erreur disparaîtra.

5 Sélectionnez la cellule adjacente à Taux effectif et tapez la formule


suivante : =TAUX.EFFECTIF(TIA;12).

Remarque Lorsque vous saisissez cette formule la première fois, une


erreur #NOMBRE! s’affiche dans la cellule puisque la cellule Années ne con-
tient aucune valeur. Une fois une valeur saisie, l’erreur disparaîtra.

188
Partie 3 : Le modèle d’objet Excel

Plages et cellules

6 Sélectionnez la cellule Paiements et tapez la formule suivante :


=Années*12.
7 Après avoir recopié la macro Table_Calcul, dans la barre d’outils Formu-
laires de l’interface Excel, sélectionnez le bouton Bouton et tracez un
bouton sur la feuille de calcul (voir figure 8.3). La boîte de dialogue
Affecter une macro s’affiche pour vous permettre de sélectionner la
macro Table_Calcul.
8 Sélectionnez le texte du bouton et saisissez : Tracer le tableau d’amor-
tissement.

Chapitre 8
Figure 8-3. Ajout d’un bouton sur le formulaire.

Après avoir saisi des informations dans les champs, cliquez sur le bouton Tra-
cer le tableau d’amortissement pour exécuter la macro Table_Calcul. Pour exé-
cuter à nouveau la macro, modifiez le nom de la banque, qui sert à nommer la
nouvelle feuille de calcul. Si vous tentez de créer une feuille de calcul avec un
nom en double, la macro génère une erreur.

Définir une plage avec la propriété Cells


Pour référencer une plage de cellules, il est également possible de la désigner avec
la méthode Cells. Pour ce faire, vous devez spécifier les numéros de ligne et de
colonne des cellules qui se trouvent dans les angles opposés de la plage. Pour une
cellule individuelle, vous désignez deux fois la même cellule, puisqu’il s’agit bien
de la même cellule dans les deux angles opposés. Par exemple, pour sélectionner
la cellule D6, on utilise le code suivant :

Range(Cells(4,6), Cells(4,6)).Select

189
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Référencer des colonnes et des lignes


Pour référencer une ou plusieurs colonne(s) ou ligne(s), on fait appel aux pro-
priétés Columns ou Rows. Cet extrait de code de la routine Table_Calcul sélec-
tionne les colonnes A à E et les redimensionne pour les adapter au contenu des
cellules.

Columns("A:E").Select
Columns.EntireColumn.AutoFit
Chapitre 8

Référencer des groupes de cellules non contiguës


Les plages de cellules dont vous avez besoin ne sont pas nécessairement conti-
guës. Pour désigner des cellules non contiguës, on sépare les plages avec des vir-
gules. Par exemple, pour sélectionner toutes les données des ventes des lundis du
mois de janvier dans le classeur Y2001ByMonth.xls, on se sert du code suivant :

Range("D6:O6, D13:O13, D20:O20, D27:O27, D34:O34").Select.

Manipulation de groupes de cellules


On se sert de plages de cellules pour appliquer une action collective : les redi-
mensionner, ajouter des bordures ou modifier le format de leur contenu. Il est
même possible de travailler conjointement avec deux groupes de cellules pour
générer une union de deux groupes ou trouver leur intersection.

Dimensionner les cellules par programmation


La taille par défaut de chaque cellule est 10,71 points (80 pixels) de large sur
12,75 points (17 pixels de haut). Ces paramètres sont entièrement adaptés à
l’exploitation classique d’une feuille de calcul non partagée. Si vous devez parta-
ger la feuille de calcul ou que celle-ci contient une grande quantité de données,
vous devrez probablement la redimensionner.
Pour commencer, il n’est pas possible de redimensionner une cellule en particu-
lier. Toute modification de la largeur affecte l’ensemble de la colonne et toute
modification de la hauteur affecte l’ensemble de la ligne. En conséquence, pour
toute modification réalisée avec une macro, servez-vous de la propriété Width de
l’objet Column ou de la propriété Height de l’objet Row. Vous pouvez définir les
propriétés Width et Height explicitement, si la taille à employer est prédétermi-
née. Vous pouvez également demander à Excel de calculer la taille appropriée en
vous servant de la méthode AutoFit.

Lier de deux plages


Il n’est pas toujours souhaitable de créer une plage de cellules non contiguës, par
exemple, si vous devez maintenir la séparation à des fins de suivi. Dans le clas-
seur Y2001ByMonth.xls, les valeurs sont stockées par dates, mais il peut être

190
Partie 3 : Le modèle d’objet Excel

Plages et cellules
nécessaire d’effectuer certaines analyses en fonction du jour de la semaine. Natu-
rellement, chaque jour de la semaine est séparé de ses homologues par d’autres
jours de la semaine. Pour créer les plages des jours de semaine identiques, on
peut faire appel à la méthode Union de l’objet Application.

Pour plus d’informations sur l’objet Application, reportez-vous au chapitre 6, « L’objet


Application ».

La méthode Union prend plusieurs plages et les combine en une seule. Sa syntaxe
est la suivante :

Chapitre 8
expression.Union(A
Arg1 as Range, Arg2 as Range, …)

● expression Objet Application optionnel.

● Arg1, Arg2, … Plages d’objets dont au minimum deux doivent être spéci-
fiées.
La procédure suivante calcule les ventes horaires moyennes de chaque jour de la
semaine.

Sub CalcWeeklyAverages()
Dim intDayOfWeek As Integer, intWeeks As Integer, intHours As Integer
Dim rgeWeek As Range, rgeMonth As Range, rgeDay As Range
Dim sglTotal As Single
Dim strRow As String, intWeek As Integer

'Boucle dans chaque jour de la semaine


For intDayOfWeek = 1 To 7

'Trouve le premier jour du mois


Set rgeDay = Range("D6", Range("D6").End(xlDown))
Set rgeMonth = Nothing
intWeeks = 0

'Boucle dans chaque semaine


For intWeek = intDayOfWeek To _
rgeDay.Cells(rgeDay.Cells.count, -1) Step 7

'Calcule le numéro de ligne


strRow = Format(intWeek + 5, "#0")
Set rgeWeek = Range("D" & strRow & ":O" & strRow)
If intWeek = intDayOfWeek Then 'Ajuste la première semaine
Set rgeMonth = rgeWeek
Else
Set rgeMonth = Union(rgeMonth, rgeWeek)
End If

'Compte le nombre d’occurrences du jour de la semaine


intWeeks = intWeeks + 1
Next intWeek

'Calcule le numéro de ligne


strRow = Format(intDayOfWeek + 41, "00")

191
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


'Définit le titre de la colonne
With Range("C" & strRow)
.Formula = rgeDay(intDayOfWeek, 0)
.Interior.ColorIndex = 36
.Font.Italic = True
End With

'Boucle dans chaque période horaire


For intHours = 1 To 12
sglTotal = 0
For intWeek = 1 To intWeeks
sglTotal = sglTotal + rgeMonth(intWeek, intHours)
Chapitre 8

Next intWeek

'Définit la moyenne et le format


With Range(Chr$(Asc("C") + intHours) & strRow)
.Formula = sglTotal / intWeeks
.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00)"
End With
Next intHours

'Ajoute le total des moyennes du jour de la semaine


With rgeMonth(1, 1).Offset(36, 13)
.Formula = "=Sum(R[0]C[-13]:R[0]C[-2])"
.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00)"
End With
Next intDayOfWeek

End Sub

Détecter les cellules vides


Si on fournit des données erronées à une procédure, le résultat généré sera
erroné. Pour éviter ce type de problème, vous devez vérifier l’intégrité des don-
nées.
Avant de vous fier aux totaux du classeur Y2001ByMonth.xls, vérifiez que toutes
les valeurs ont été saisies. Pour ce faire, vous pouvez rechercher les cellules vides
et demander à l’utilisateur les valeurs manquantes. Pour localiser les cellules
vides, on fait appel à la méthode SpecialCells de l’objet Range. Voici la syntaxe de
la méthode SpecialCells:

expression.SpecialCells(T
Type, Value)

● expression Objet Range obligatoire.


● Type Valeur obligatoire qui doit correspondre à l’une des constantes
xlCellType listées dans le tableau 8.1.
● Value Variable Variant optionnelle. Si Type prend la valeur xlCellType-
Constants ou xlCellTypeFormulas, Value sert à déterminer le type de cellu-
les à inclure dans le résultat. Les valeurs numériques qui correspondent
aux constantes xlSpecialCellsValues, listées dans le tableau 8.2, peuvent être
additionnées pour retourner plusieurs types de cellules spéciales.

192
Partie 3 : Le modèle d’objet Excel

Plages et cellules

Tableau 8-2. Constantes xlSpecialCellsValues


Valeur
Constante Description numérique
xlErrors Retourne les cellules qui contiennent des erreurs 16
xlLogical Retourne les cellules qui contiennent une valeur 4
logique (autrement dit, booléenne)
xlNumbers Retourne les cellules qui contiennent des 1
valeurs numériques.

Chapitre 8
xlTextValues Retourne les cellules qui contiennent du texte 2

La procédure FindEmptyCells recherche les cellules vident des zones de données


dans Y2001ByMonth.xls et invite l’utilisateur à saisir une valeur dans chaque cel-
lule vide trouvée.
Sub FindEmptyCells()
Dim rgeSearch As Range, rgeEmpties As Range, rgeCurrent As Range
Dim strPrompt As String, strTitle As String, strReturn As String
Dim strRow As String, strAddress As String, strColumn As String

strTitle = "Excel 2003 VBA Au Quotidien"

'Sélectionne la plage appropriée en fonction des jours du mois


Set rgeSearch = Range("D6", Range("D6").End(xlDown))
Set rgeSearch = Range(rgeSearch, rgeSearch.End(xlToRight))

'Localise les cellules vides - Termine si elle n'en trouve pas


'Récupération d'erreur si elle ne trouve pas de cellule vide
On Error Résume Next
Set rgeEmpties = rgeSearch.SpecialCells(xlCellTypeBlanks)
If Err.Number = 1004 Then
strPrompt = "Pas de cellule vide trouvée !"
MsgBox strPrompt, vbOKOnly + vbInformation, strTitle
Exit Sub
Else
strPrompt = "Erreur inattendue - " & Str$(Err.Number) & _
vbCrLf & Err.Description
MsgBox strPrompt, vbOKOnly + vbExclamation, strTitle
End If

'Réinitialise le gestionnaire d’erreurs


On Error GoTo 0

'Boucle dans les entrées vides pour demander des valeurs


For Each rgeCurrent In rgeEmpties

'Calculer l'heure
strAddress = "R5C" & Format(rgeCurrent.Column, "#0")
strAddress = Application.ConvertFormula(strAddress, xlR1C1,
xlA1)
strPrompt = "Il manque la valeur de " &
Format(Range(strAddress), _
"h:mm AM/PM")

193
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


'Calcule le jour
strAddress = "R" & Format(rgeCurrent.Row, "#0") & "C2"
strAddress = Application.ConvertFormula(strAddress, xlR1C1,
xlA1)
strPrompt = strPrompt & " le " & ActiveSheet.Name & " " & _
Range(strAddress)
strReturn = InputBox(strPrompt, strTitle)
rgeCurrent = CSng(strReturn)
Next rgeCurrent
End Sub
Chapitre 8

Plages nommées
Vous savez déjà qu’il est possible de sélectionner une plage de cellules dans une
feuille de calcul et de lui attribuer un nom en le saisissant dans la zone Nom.
Vous pouvez ensuite sélectionner rapidement la plage en sélectionnant son nom
dans la liste déroulante de la zone Nom. Ces noms sont également à la disposi-
tion des macros. Au lieu d’indiquer les coordonnées d’une plage, vous pouvez
vous servir de son nom.

Définir une plage nommée


Excel stocke les noms des plages nommées dans la collection Names, une pro-
priété de l’objet Workbook. Avec la méthode Add, vous pouvez créer une plage
nommée dans le classeur en indiquant le nom à utiliser et la plage vers laquelle il
pointe.
Po u r a n a l y s e r l e s ve n t e s d e c h a q u e p é r i o d e h o r a i r e d u c l a s s e u r
Y2001ByQuarter.xls, il est plus simple de lire les formules si chaque période
horaire constitue une plage. Au lieu de sélectionner manuellement la plage et de
taper son nom, servez-vous d’une macro. La routine CreateNames créer une
plage nommée pour chaque période horaire de la feuille de calcul en cours et la
nomme en fonction du nom de la feuille de calcul et de la période horaire. La
syntaxe de base est la suivante :

expression.Add(N
Name, RefersTo, Visible, MacroType, ShortcutKey,
Category, NameLocal, RefersToLocal, CategoryLocal, RefersToR1C1,
RefersToR1C1Local)

Des différents paramètres passés à la méthode, seuls quatre sont importants.


● Name Valeur Variant qui indique le nom attribué à la plage.
● RefersTo Valeur Variant qui indique les cellules à inclure dans la plage
avec la notation A1. Obligatoire si on n’utilise pas RefersToR1C1.
● RefersToR1C1 Valeur Variant qui indique les cellules à inclure dans la
plage avec la notation R1C1. Obligatoire si on n’utilise pas RefersTo.
● Visible Valeur Variant qui détermine si Name est visible ou non. En posi-
tionnant la propriété sur True (valeur par défaut), Name s’affiche dans les
boîtes de dialogue Définir un nom, Coller un nom et Atteindre. Si cette

194
Partie 3 : Le modèle d’objet Excel

Plages et cellules
propriété est positionnée sur False, Name n’apparaît pas dans ces trois boî-
tes de dialogue (bien que vous puissiez toujours faire référence à Name
dans les formules et le code VBA).

Au Quotidien
Nommer les plages

À l’heure de nommer une plage, tenez compte des directives suivantes :

● Le nom doit commencer par une lettre ou un caractère de soulignement

Chapitre 8
(_). Le reste du nom peut contenir toute combinaison de lettres, chiffres,
virgules (,) ou caractères de soulignement.
● Le nom ne doit pas être identique à une référence de cellule existante
(B22, CB76, R2C20 et ainsi de suite).
● Le nom ne peut pas contenir d’espace ou d’autres caractères spéciaux,
accolades, crochets ou parenthèses.
● Le nom ne doit pas excéder 255 caractères. En outre, les noms de plus
de 253 caractères ne sont pas sélectionnables dans la liste déroulante.
● Les noms ne sont pas sensibles à la casse. MaPlage équivaut à
maplage.
● Le nom doit être unique au sein du classeur. Vous ne pouvez pas utiliser
le même nom pour faire référence à des plages situées sur différentes
feuilles de calcul.

La macro suivante, CreateNames, fonctionne en bouclant dans chaque colonne


qui contient des entrées fondées sur l’heure. À chaque passage de la boucle, le
nom de la feuille de calcul en cours et l’intitulé de la colonne marquée servent à
générer le nom de la plage au format MoisHeure (voir figure 8.6) : les entrées
1:00 P.M. de la feuille de calcul February sont intitulées February1.

Sub CreateNames()
Dim strRangeName As String, strWorksheetName As String
Dim intCounter As Integer, strRangeFormula As String
Dim strColumn As String, strR1C1Formula As String
Dim strA1Formula As String

For intCounter = 1 To 12
strWorksheetName = ActiveSheet.Name

'Calcul le nom de la colonne(D-O) en convertissant


'la notation L1C1 en notation A1
strR1C1Formula = "R5C" & Format(intCounter + 3, "#0")
strA1Formula = Application.ConvertFormula
(Formula:=strR1C1Formula, _
FromReferenceStyle:=xlR1C1, ToReferenceStyle:=xlA1)
strRangeName = strWorksheetName & Format(Range(strA1Formula),
"h")

195
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


'Formate la portion colonne de la formule de plage
strColumn = "C" & Format(intCounter + 3, "#0")
strRangeFormula = "=" & strWorksheetName & "!R6" & _
strColumn & ":R36" & strColumn

'Ajoute une nouvelle plage et continue


ActiveWorkbook.Names.Add Name:=strRangeName, _
RefersToR1C1:=strRangeFormula
Next intCounter
End Sub
Chapitre 8

Figure 8-4. Cette procédure crée des noms dans le classeur


Y2001ByQuarter.xls.

Styles de notation
La routine CreateNames se sert de la méthode ConvertFormula de l’objet Appli-
cation pour simplifier l’utilisation d’un compteur qui indique la colonne réfé-
rencée. L’utilisation d’un compteur ou d’une variable numérique pour pointer
vers une colonne spécifique simplifie le déplacement vers la gauche ou la droite
au sein des colonnes : si la valeur 4 pointe vers la colonne D, en ajoutant 6, on
pointe vers la colonne J et en soustrayant 2, on pointe vers la colonne B.
Toutefois, pour les pointeurs de cellules, l’objet Range utilise uniquement la
notation A1 ou la méthode Cells. Dans la procédure on a substitué la méthode
ConvertFormula à la méthode Cells pour construire une référence de style L1C1
et la convertir en notation A1.
La méthode ConvertFormula permet également de convertir la notation A1 en
notation L1C1 et de remplacer un type de référence de formule d’absolu en rela-
tif et vice versa.
Dans la routine CreateNames, la méthode ConvertFormula convertir une adresse
de cellule d’un type de référence à l’autre. Rien ne vous empêche cependant de
passer une formule plus complexe, comme dans l’exemple suivant, qui calcule la
moyenne journalière des deux premiers lundis de janvier dans le classeur
Y2001ByQuarters.xls.

strA1Formula = Application.ConvertFormula( _
Formula:=" =AVERAGE(R5C2:R5C13, _
R12C2:R12C13), fromReferenceStyle:=xlR1C1, _
toReferenceStyle:=xlA1)

196
Partie 3 : Le modèle d’objet Excel

Plages et cellules
Voici la syntaxe de la méthode ConvertFormula :

expression.ConvertFormula(F
Formula, FromReferenceStyle,
ToReferenceStyle, ToAbsolute, RelativeTo)

● Expression Expression obligatoire qui retourne un objet Application.


● Formula Variable Variant obligatoire qui fournit la formule à convertir
sous forme de chaîne.
● FromReferenceStyle Entier obligatoire qui correspond à l’une des deux
constantes xlReferenceStyle.

Chapitre 8
● ToReferenceStyle Entier optionnel qui correspond à l’une des deux cons-
tantes xlReferenceStyle. S’il n’est pas fourni, le style de référence ne change
pas.
● ToAbsolute Entier optionnel qui correspond à l’une constantes xlReferen-
ceType. S’il n’est pas fourni, le style de référence ne change pas.
● RelativeTo Variable Variant qui retourne un objet Range pointant vers
une cellule unique. Les références relatives se réfèrent à cette cellule.
Le tableau 8.3 liste les constantes xlReferenceStyle et xlReferenceType disponibles
que l’on peut utiliser avec la méthode ConvertFormula.
Tableau 8-3. Constantes employées avec la méthode
ConvertFormula
Constante Entier
xlReferenceStyle
xlA1 1
xlR1C1 –4150
xlReferenceType
alAbsolute 1
xlAbsRowRelColumn 2
xlRelRowAbsColumn 3
xlRelative 4

197
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Au Quotidien
Noms et formules

Excel stocke les noms des plages sous forme de formules. Cette gestion peut
vous être profitable pour optimiser les raccourcis employés dans les feuilles
de calcul. D’ordinaire, il est impossible d’exploiter plusieurs fois un même
nom dans un même classeur, mais comment procéder si votre classeur com-
por te plusieurs feuilles similaires, comme dans le classeur
Y2001ByMonth.xls ? Il serait intéressant de pouvoir utiliser le même nom pour
Chapitre 8

faire référence à la même zone d’une feuille de calcul sans tenir compte de la
feuille sur laquelle elle se trouve. Pour ce faire, il vous suffit de créer un nom
spécifique à la feuille de calcul qui ne soit pas disponible dans tout le classeur.

Sélectionnez les cellules à nommer comme à l’accoutumée, cliquez dans la


zone Nom et saisissez le nom. Cette fois, au lieu de simplement taper le nom,
faites-le précéder du nom du classeur, suivi d’un point d'exclamation (!) et du
nom de la plage (appliquez les règles de nommage normales après le point
d'exclamation).

Le point d’exclamation sert de séparateur entre le nom de la feuille et le nom


de la plage. Lorsqu’Excel voit un nom de plage, il sait que ce nom est spécifi-
que à la feuille de calcul.

Il est également possible de développer davantage les noms en faisant appel


aux références relatives. Les noms utilisent par défaut une référence absolue,
mais si vous saisissez manuellement la plage à laquelle se réfère le nom en
cliquant sur Insertion, Nom, Définir, vous pouvez employer une référence rela-
tive. Ouvrez par exemple le classeur Y2001ByMonth.xls, affichez la feuille de
calcul January et procédez de la manière suivante :

1 Sélectionnez l’une des cellules de la colonne A.


2 Dans le menu Insertion, choisissez Nom, Définir.
3 Dans la zone Noms du classeur, tapez ValeursJournalières.
4 Dans la zone Fait référence à, tapez =D$6:D$36.
5 Cliquez sur le bouton Ajouter puis sur le bouton OK.
6 Sélectionnez la cellule D38.
7 Tapez =Somme(ValeursJournalières) et appuyez sur Entrée.

198
Partie 3 : Le modèle d’objet Excel

Plages et cellules

Chapitre 8
Le total qui s’affiche dans la cellule doit être identique, $5 571,00. Examinez
la définition du nom ValeursJournalières. Revenez à la boîte de dialogue Définir
un nom et sélectionnez ValeursJournalières dans la zone de liste. La zone Fait
référence à contient la valeur =January!D$6:D$36. Les noms de colonnes
sont relatifs, mais les lignes sont absolues. Vous pouvez utiliser le nom Valeur-
sJournalières dans une formule si vous devez référencer toute la plage de
valeurs de cette colonne, des lignes 6 à 36.

Attention Vous pouvez utiliser les noms que vous avez créés dans
n’importe quelle ligne à l’exception des lignes incluses dans la plage nom-
mée. Si vous vous servez des noms dans une formule dans ces lignes,
vous créez une référence circulaire qui invalide la formule.

Noms de plages réservés


Il existe quelques noms réservés qu’Excel exploite en interne et que vous ne pou-
vez pas employer dans la définition des plages. Dans le cadre des macros, il est
toutefois intéressant de savoir comment ils sont exploités et comment les appli-
q u e r. L e s n o m s r é s e r v é s s o n t Z o n e _ d e _ co n s o l i d a t i o n , C r i t è re s ,
Base_de_données, Extraction, Zone_d_impression, Impression_des_titres et
une collection d’autres qui commencent par le préfixe Auto_.
Le nom Zone_d_impression est sans doute le plus utile. Il permet de définir la
plage de cellules imprimées. Bien que cette tâche puisse également être réalisée
avec la propriété PrintArea de l’objet Worksheet.PageSetup, la plage
Zone_d_impression est plus souple. La propriété PrintArea permet uniquement

199
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


de définir la plage de cellules à imprimer avec la notation A1 ou des noms de pla-
ges. En outre, si l’on examine la propriété, on obtient son nom en notation A1,
même si on a utilisé son nom.
La plage Zone_d_impression permet de définir la plage de cellules avec au choix
la notation A1, la notation L1C1 ou les noms de plages. Si on étudie les proprié-
tés de la plage Zone_d_impression, on obtient la plage dans le style employé
pour la définir.
Chapitre 8

La routine SelectPrint permet à l’utilisateur de choisir entre imprimer l’ensem-


ble de la feuille ou juste les valeurs du soir dans le classeur Y2001ByMonth.xls. La
plage Zone_d_impression sert à informer Excel des valeurs à imprimer.
Sub SelectPrint()
Dim intReturn As Integer, strPrompt As String, strTitle As String
Dim strRange As String, objName As Name, intCounter As Integer

'Appelle la sous-routine CreateNames pour être sûr que les plages


'nommées correctes sont disponibles
CreateNames

'Demande les valeurs à imprimer


strPrompt = "Cliquez sur Oui pour imprimer uniquement les valeurs
du soir " _
& "et cliquez sur Non pour imprimer toutes les valeurs."
strTitle = "Excel 2003 VBA Au Quotidien"
intReturn = MsgBox(strPrompt, vbYesNoCancel, strTitle)

'Vérifie la réponse de l'utilisateur


Select Case intReturn
Case vbNo 'Imprime la totalité du tableau
strRange = "=" & ActiveSheet.Name & "!" & _
ActiveSheet.Name & "AllValues"
Case vbYes 'Imprime uniquement les valeurs du soir
strRange = "=" & ActiveSheet.Name & "!" & _
ActiveSheet.Name & "1PM:" & _
ActiveSheet.Name & "8PM"
Case vbCancel 'Annule complètement
Exit Sub
End Select

'Boucle dans la collection Names. Delete Zone_d_impression or


'Impression_des_titres si trouvé.
intCounter = ActiveSheet.Names.count

200
Partie 3 : Le modèle d’objet Excel

Plages et cellules
While (intCounter > 0)
If ActiveSheet.Names(intCounter).Name = ActiveSheet.Name _
& "!Zone_d_impression" Then
ActiveSheet.Names(intCounter).Delete
intCounter = ActiveSheet.Names.count
ElseIf ActiveSheet.Names(intCounter).Name = ActiveSheet.Name _
& "!Impression_des_titres" Then
ActiveSheet.Names(intCounter).Delete
intCounter = ActiveSheet.Names.count
End If
intCounter = intCounter -1
Wend

Chapitre 8
'Définit la zone d'impression
ActiveWorkbook.Names.Add Name:=ActiveSheet.Name & _
"!Zone_d_impression", RefersTo:=strRange
'Définit les titres si nécessaire
If vbYes Then
ActiveSheet.PageSetup.PrintTitleColumns = _
ActiveSheet.Columns("B:C").Address
ActiveSheet.PageSetup.PrintTitleRows = _
ActiveSheet.Rows("5:5").Address
End If
'Imprime la feuille de calcul
ActiveWorkbook.PrintPreview
End Sub

201
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Copier des données entre des plages et des tableaux


Toutes les informations d’un classeur sont simples à exploiter avec une macro
VBA. Pourquoi copier ces informations ailleurs avant de les exploiter ? La vitesse.
L’écriture et la lecture d’informations dans une feuille de calcul sont des proces-
sus extrêmement gourmands de temps. En réduisant le nombre de fois que VBA
lit et écrit dans une feuille de calcul, vous réduisez le délai nécessaire au fonction-
nement de votre procédure.
Comment réduire le nombre de lectures et d’écritures ? En lisant et en écrivant
des plages de cellules en une fois. En effet, la plus grand part du temps nécessaire
Chapitre 8

est employée par la configuration dont VBA a besoin pour accéder à la feuille de
calcul. Malheureusement, VBA exécute le même processus de configuration cha-
que fois qu’il doit lire ou écrire une autre plage, que celle-ci se compose d’une
cellule ou de plusieurs centaines de cellules.

Attention Comme souvent, il existe un point de rendement décroissant ou de


panne globale. VBA ne peut pas transférer plus de 3000 cellules en une fois.
Tant que vous restez sous ce nombre, vous ne devriez pas rencontrer de pro-
blème.

La question à présent est de savoir comment lire ou écrire simultanément plu-


sieurs cellules ? Pour transférer plusieurs cellules entre un classeur et VBA, on
utilise des tableaux de variables Variant. Le type de données Variant peut conte-
nir n’importe quel autre type de données, y compris des tableaux. Plus impor-
tant encore, il est inutile de déclarer la variable Variant comme tableau pour
qu’elle puisse contenir un tableau. En fait, dans le cadre de la copie de données
vers et depuis une feuille de calcul, la variable Variant ne peut pas être déclarée
comme tableau. Elle doit être déclarée comme simple type Variant, comme dans
l’exemple suivant.

Dim varA As Variant

Pour lire les données qui se trouvent dans une variable Variant, on se sert d’une
instruction d’affectation, autrement dit, varA = Range("January1PM") ou varA =
Range("H6:H36"). Ces deux exemple lisent la même plage dans la variable varA et
accèdent aux cellules individuelles comme à un élément unique d’un tableau.
Une fois les valeurs assignées à la variable Variant, vous pouvez l’utiliser pour
référencer la plage. Par exemple, on peut utiliser ce code pour afficher une boîte
de message contenant la somme des valeurs des cellules E12:E15.

Sub VariantSum()
Dim varA As Variant, intSum As Integer
varA = Range("E12:E15")
intSum = WorksheetFunction.Sum(varA)
MsgBox (intSum)
End Sub

202
Partie 3 : Le modèle d’objet Excel

Plages et cellules

Remarque Une plage retourne toujours un tableau multidimensionnel, en


général bidimensionnel, quel que soit le nombre de colonnes. Le deuxième
dimension contient au moins un élément, mais peut en héberger davantage
selon le nombre de colonnes qui se trouvent dans la plage.

Pour déterminer la taille d’un tableau, vous pouvez faire appel aux fonctions
LBound et UBound qui récupèrent les limites inférieure et supérieure du tableau.
LBound(var) retourne la limite inférieure, généralement 0 ou 1, alors que
UBound(var) retourne la limite supérieure.

Chapitre 8
Pour déterminer les limites des toutes les dimensions dans un tableau multidi-
mensionnel, indiquez la dimension dont vous voulez récupérer la limite. Par
exemple, dans le classeur Y2001ByMonth.xls, l’instruction varA = Range("Janu-
aryAllValues") lit toutes les cellules de B3:Q38. Pour obtenir le nombre de
lignes, servez-vous de UBound(varA, 1) ou simplement de UBound(varA). Pour
retrouver le nombre de colonnes, utilisez la commande UBound(varA, 2).
Lorsque vous lisez les valeurs d’une plage nommée, vous pouvez également
réduire ou augmenter le nombre de cellules lues avec la méthode Resize. Par
exemple, pour lire uniquement les sept premières lignes de données, sur une
p é r i o d e d e t ro i s h e u re s à co m p te r d e 1 : 0 0 P. M . d a n s l e c l a s s e u r
Y2001ByQuarter.xls, vous pouvez utiliser l’instruction suivante :

varA = Range("January1").Resize(7, 3)

Pour écrire des informations dans la plage, il suffit d’inverser l’instruction :


Range("January1PM") = varA . Vous devez toutefois être attentifs à l’heure
d’écrire des informations dans des cellules. Assurez-vous que la taille de plage et
celle du tableau sont identiques pour éviter d’écraser d’autres cellules. Pour pré-
server l’intégrité des données, il suffit de combiner la fonction UBound et la
méthode Resize de la manière suivante :

Range("January1").Resize(UBound(varA, 1), UBound(varA, 2)) = varA.

Il existe une méthode encore plus simple pour garantir l’intégrité des données :
peupler d’abord le tableau avec les valeurs de la plage. Cette méthode sert deux
objectifs : elle dimensionne le tableau à la taille de la plage et elle le remplit avec
les valeurs actuellement contenues dans la plage de sorte que lorsque les données
sont écrites en retour, Excel conserve les valeurs qui n’ont pas été modifiées au
cours de la procédure.
La procédure suivante illustre la différence des temps de traitement entre l’accès
direct aux cellules et leur copie initiale dans un tableau (chaque méthode est
répétée 50 fois de sorte que le temps nécessaire aux lectures soit notable).

Sub ProcessTime()
Dim rgeCells As Range, intCount As Integer
Dim strPrompt As String, strTitle As String
Dim sglStart As Single, sglEnd As Single
Dim rgeCell As Range, varCells As Variant

203
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA


Dim intRows As Integer, intColumns As Integer
Dim intLoop As Integer

intCount = 0
strTitle = "Excel 2003 VBA Au Quotidien"
sglStart = Timer
Debug.Print sglStart
For intLoop = 1 To 50
For Each rgeCell In Range("JanuaryAllValues")
intCount = intCount + 1
Next rgeCell
Next intLoop
Chapitre 8

sglEnd = Timer
Debug.Print sglEnd
strPrompt = "Temps de traitement de la méthode Range : " & _
Format(sglEnd - sglStart, "#0.00000") & _
" Cellules totales :" & Str$(intCount) & vbCrLf

sglStart = Timer
intCount = 0
For intLoop = 1 To 50
varCells = Range("JanuaryAllValues")
For intRows = 1 To UBound(varCells)
For intColumns = 1 To UBound(varCells, 2)
intCount = intCount + 1
Next intColumns
Next intRows
Next intLoop
sglEnd = Timer

strPrompt = "Temps de traitement de la méthode tableau : " & _


Format(sglEnd - sglStart, "#0.00000") & _
" Cellules totales :" & Str$(intCount)
MsgBox strPrompt, vbOKOnly + vbInformation, strTitle

End Sub

Validation des données


La saisie des données dans une feuille de calcul ou un formulaire constitue l’une
des activités les plus ennuyeuses qui existent. Si vous aviez saisi des numéros
ISBN dans une base de données huit heures par jour, cinq jours par semaine
pendant deux mois, vous commenceriez à apprécier le travail des opérateurs de
saisie. Des colonnes de nombres se transposent devant vos yeux, des livres saisis
s’égarent dans votre pile « à faire » et vous passer d’une main à l’autre pour éviter
les désordres nerveux. Ajoutez le risque d’erreurs de saisie et vous comprendrez
pourquoi les collections de données électroniques sont notoirement inexacts.
Pour éviter les erreurs de saisie à la source, vous pouvez créer des règles de vali-
dation sur les cellules de vos feuilles de calcul. Comme l’indique son nom, une
règle de validation est un critère auquel doivent répondre les données pour assu-
rer la cohérence de informations saisies. Vous choisissez s’il est possible de saisir
des données non valides ou si l’utilisateur doit saisir à nouveau les données avant

204
Partie 3 : Le modèle d’objet Excel

Plages et cellules
de pouvoir passer à la cellule suivante. Vous pouvez également décider si l’utili-
sateur qui saisit les données peut laisser des cellules vides.
Pour créer des règles de validation, on se sert de la propriété Validation de l’objet
Range. La propriété Validation, qui retourne un objet Validation, permet de défi-
nir les règles de validation et les styles de notification des plages de cellules. Le
tableau 8.4 liste les propriétés et méthodes de l’objet Validation.
Tableau 8-4. Propriétés et méthodes de l’objet Validation
Attribut Description

Chapitre 8
Propriétés
AlertStyle Cette propriété peut être positionnée à l’une des trois
constantes Excel suivantes : xlValidAlertInformation (qui
affiche une boîte d’informations), xlValidAlertStop (qui
affiche une boîte d’arrêt) et xlValidAlertWarning (qui affiche
une boîte d’avertissement).
ErrorMessage Cette propriété contient le message défini par l’utilisateur
qui s’affiche dans la boîte d’alerte après que l’utilisateur a
saisi des données non valides.
ErrorTitle Cette propriété contient la valeur définie par l’utilisateur
apparaissant dans la barre de titre de la boîte d’alerte qui
s’affiche après que l’utilisateur a saisi des données non
valides.
Formula1 Cette propriété contient la première (et éventuellement la
seule) valeur utilisée dans un critère (par exemple, entre 5
et 10 ou inférieur à 10).
Formula2 Cette propriété contient la deuxième valeur utilisée dans
un critère (par exemple, entre 5 et 10).
IgnoreBlank Si cette propriété booléenne est positionnée à True,
l’utilisateur peut laisser la cellule vide.
InCellDropdown Cette propriété détermine si la cellule contient une flèche
descendante et une liste de valeurs parmi lesquelles
l’utilisateur doit faire un choix.
InputMessage Cette propriété contient le message qui s’affiche dans la
boîte de saisie dans laquelle l’utilisateur saisit les
données.
InputTitle Cette propriété contient la valeur qui s’affiche dans la
barre de titre de la boîte de saisie dans laquelle
l’utilisateur saisit les données.
Operator Cette propriété contient l’opérateur d’un critère, qui peut
être l’une des constantes Excel suivantes : xlBetween,
xlEqual, xlGreater, xlGreaterEqual, xlLess, xlLessEqual,
xlNotBetween et xlNotEqual.

205
Partie 3 : Le modèle d’objet Excel

Microsoft Excel 2003 VBA

Tableau 8-4. Propriétés et méthodes de l’objet Validation (Suite)


Attribut Description
Propriétés
ShowError Si cette propriété booléenne est positionnée à True, Excel
affiche un message pour informer l’utilisateur qu’il a saisi
des données non valides.
ShowInput Si cette propriété booléenne est positionnée à True, Excel
affiche le contenu de la propriété InputMessage lorsque la
cellule est activée.
Chapitre 8

Type Une propriété qui détermine le type des valeurs validées.


Les types disponibles sont : xlValidateCustom,
xlValidateDate, xlValidateDecimal, xlValidateInputOnly,
xlValidateList, xlValidateTextLength, xlValidateTime et
xlValidateWholeNumber.
Value Cette propriété booléenne est positionnée à True si toutes
les règles de validation sont satisfaites ou à False si au
moins l’une des règles n’est pas satisfaite.
Méthodes
Add Une méthode pour créer une règle de validation pour une
plage de cellules. Le tableau 8.5 détaille les paramètres à
définir.
Delete Une méthode qui supprime un objet Validation.
Modify Une méthode qui change les règles de validation pour une
plage de cellules. La méthode Modify utilise les règles de
paramètres listées dans le tableau 8.5.

Les paramètres des méthodes Add et Modify employées dépendent du type de


valeur à valider. Le tableau 8.5 liste les valeurs correspondant à chaque type de
validation.
Tableau 8-5. Liste des paramètres utilisés dans une instruction
Add ou Modify
Type de validation Paramètres
xlValidateCustom Formula1 est obligatoire, alors que Formula2
n’est jamais employé (toute valeur assignée à
Formula2 est ignorée). Formula1 doit contenir
une expression qui prend la valeur True si
l’entrée est valide et False si les données
saisies ne sont pas valides.
xlInputOnly On utilise AlertStyle, Formula1 ou Formula2.

206
Partie 3 : Le modèle d’objet Excel

Plages et cellules

Tableau 8-5. Liste des paramètres utilisés dans une instruction


Add ou Modify (Suite)
Type de validation Paramètres
xlValidateList Formula1 est obligatoire, alors que Formula2
n’est jamais employé (toute valeur assignée à
Formula2 est ignorée). Formula1 doit contenir
soit une liste de valeurs délimitées par des
virgules, soit une référence de feuille de calcul
à la liste.

Chapitre 8
xlValidateWholeNumber, Formula1 et/ou Formula2 doivent être
xlValidateDate, spécifiés.
xlValidateDecimal,
xlValidateTextLength ou
xlValidateTime

Pour définir le critère de validation pour 600 cellules dans la colonne H d’une
feuille de calcul, vous pouvez vous servir du code suivant :

With Range("H6, H606").Validation


.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlLessEqual, Formula1:="5000"
.InputTitle = "Limite de crédit"
.ErrorTitle = "Limite de crédit trop élevée"
.InputMessage = "Saisissez la limite de crédit du client."
.ErrorMessage = "La limite de crédit doit être inférieur à
€5 000."
End With

Dans ce chapitre, vous avez appris à référencer et à manipuler les plages de cellu-
les et les cellules individuelles au sein des feuilles de calcul. Le concept fonda-
mental est le suivant : pour appeler une cellule, que celle-ci se trouve dans une
plage ou non, on utilise l’objet Range (par exemple Range("A16"). Une fois que
vous avez défini une plage, vous pouvez exploiter ses valeurs dans des formules,
lui attribuer un nom pour la référencer de manière plus conviviale et plus ration-
nelle et valider les données saisies dans cette plage.

207
Partie 4
Fonctions VBA
avancées
9 Manipulation des données
avec VBA 211

10 Mise en forme
d’objets Excel 239

11 Création de macros
complémentaires et de
compléments COM 259

12 Événements 285

13 Manipulation des fichiers 303

14 Développement de modules
de classes 323

209
Partie 4 : Fonctions VBA avancées

Chapitre 9
Manipulation des données
avec VBA
Texte. . . . . . . . . . . . . . . . . . . . . . 211 Dates et heures . . . . . . . . . . . . . 233
Nombres. . . . . . . . . . . . . . . . . . . 225

Lorsque vous recevez un classeur de données, votre premier objectif consiste à


analyser ces données. Quel est le total des ventes de la journée ? Ou du mois ? Ou
de l’année ? Quel est le délai qui sépare deux commandes d’un client ? Le format
utilisé pour écrire les données dans un fichier texte peut-il être lu dans une base
de données ? Pour répondre à ces questions, et à bien d’autres, vous faites appel
aux fonctions de texte, de nombres et de dates et d’heures.
Dans ce chapitre, vous allez apprendre à :
● Concaténer, localiser et modifier des chaînes ;
● Effectuer des calculs analytiques sur des données numériques ;
● Prendre des décisions financières avec les calculs Excel ;
● Exploiter les dates et les heures dans Excel.

Note du traducteur Il n’est pas toujours évident de faire son choix entre le
libellé anglais et le libellé français des fonctions. En effet, si les fonctions ont
été traduites dans l’interface Excel, vous comprendrez qu’elles ne l’ont pas
été dans l’interface VBA. Chaque fois que le cas se présente, dans le texte et
les tableaux, nous avons mis en correspondance le terme anglais et le terme
français (entre parenthèses). À vous de les utiliser à bon escient.

Texte
Même si de prime abord on envisage Excel comme une application de traitement
de données financières, ces capacités sont plutôt polyvalentes puisqu’il permet
également de gérer le texte qui accompagne les données. Que ce soit pour affi-
cher un simple message de bienvenue après qu’un utilisateur a ouvert un classeur
ou pour importer des données à partir d’un fichier texte, vous exploitez les pro-
cédures de gestion de texte proposées dans Excel VBA ou dans les formules des
feuilles de calcul.

211
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA

Déterminer si la valeur d’une cellule est du texte


Pour manipuler du texte sans générer d’erreur, vous devez d’abord déterminer si
la variable ou la valeur de la cellule à utiliser est, en fait, une valeur de texte. Pour
ce faire, vous traitez la chaîne avec la fonction ISTEXT (ESTTEXTE). Par exem-
ple, vous pouvez utiliser la fonction ISTEXT pour vous prémunir contre les
erreurs de saisie des données, comme lorsqu’un utilisateur saisit des données
incorrectes dans une cellule ou une feuille. Ce type de problème se présente sou-
vent après que l’on a changé une procédure ou créer un nouveau formulaire : les
personnes qui saisissent des données sont tellement habituées à saisir le code
client en premier, qu’elles oublient qu’elles doivent maintenant commencer par
le nom de la société.

La fonction ISTEXT (ESTTEXTE) est écrite en majuscules parce qu’elle constitue l’une des
nombreuses fonctions de feuille de calcul que l’on peut appeler avec du code VBA. Pour
plus d’informations sur l’appel des fonctions de feuille de calcul comme ISTEXT dans le
code VBA, reportez-vous à la section « Cette fonction existe-t-elle dans VBA ? », plus loin
dans ce chapitre.
Chapitre 9

La fonction ISTEXT sert également à assurer que les données importées depuis
une source externe sont correctement formatées avant que vous n’exécutiez un
ensemble de procédures. Si vous avez déjà exécuté une routine de traitement de
texte sur des données autres que textuelles, vous savez précisément le chaos
qu’une petite vérification permet d’éviter. Vous pouvez également utiliser
ISTEXT comme fonction de base si vous n’êtes pas absolument sûr du type des
données textuelles reçues. En revanche, si vous êtes sûr qu’il s’agit de texte, vous
pouvez écrire une procédure pour parcourir les cellules non vides de la feuille de
calcul et effectuer ne serait-ce qu’une vérification rudimentaire.
Que faire si les données à exploiter sous forme de chaîne sont en réalité un
nombre ? Dans ce cas, servez-vous de la fonction STR (CTXT) pour représenter
le nombre par une chaîne. La syntaxe de la fonction STR est minime : STR(num-
ber) [CTXT(nombre)], où nombre représente le nom de la variable ou l’adresse
de la cellule qui contient le nombre à convertir en texte.

Pour plus d’informations sur la validation des données, reportez-vous à la section


« Validation des données », au chapitre 8.

ISTEXT n’est pas la seule fonction de la famille IS (EST). Le tableau 9.1 liste les
fonctions de feuille de calcul que vous pouvez employer pour déterminer si une
valeur correspond à une catégorie donnée.
Tableau 9-1. Les fonctions de la famille IS (EST)
Fonction Fonction
Excel VBA Retourne True si
ESTVIDE ISBLANK La valeur fait référence à une cellule vide.
ESTERR ISERR La valeur fait référence à n’importe quelle valeur
d’erreur, à l’exception de #N/A (valeur non
disponible).

212
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA

Tableau 9-1. Les fonctions de la famille IS (EST) (Suite)


Fonction Fonction
Excel VBA Retourne True si
ESTERREUR ISERROR La valeur fait référence à n’importe quelle valeur
d’erreur (#N/A, #VALUE!, #REF!, #DIV/0!,
#NUM!, #NAME? ou #NULL!).
ESTLOGIQUE ISLOGICAL La valeur fait référence à une valeur logique.
ESTNA ISNA La valeur fait référence à la valeur d’erreur #N/A
(valeur non disponible).
ESTNONTEXTE ISNONTEXT La valeur fait référence à tout élément qui n’est
pas du texte (notez que cette fonction retourne
True si la valeur fait référence à une cellule
vide).
ESTNUM ISNUMBER La valeur fait référence à un nombre.
ESTREF ISREF La valeur fait référence à une référence.
ESTTEXTE ISTEXT La valeur fait référence à du texte.

Chapitre 9
À l’heure d’écrire les données dans une cellule, vérifiez que la cellule a été prépa-
rée pour accepter des données de texte. Par exemple, si les cellules sont formatées
avec le format de nombre Standard (par défaut) et que vous essayez d’écrire une
chaîne qui se trouve être un nombre (comme, 0000097239) dans la cellule, les
zéros de tête seront supprimés. Pour vous assurez qu’Excel traite votre entrée
comme du texte, remplacez le format de nombre par Texte. Pour ce faire, dans le
menu Format de l’interface Excel, choisissez Cellule, cliquez sur l’onglet Nombre
et sélectionnez Texte dans la liste Catégorie. Vous obtiendrez le même résultat
avec la propriété NumberFormat de l’objet Range.
Par exemple, pour appliquer le format de nombre Texte à la cellule active (qui est
considérée comme une plage dans ce contexte), servez-vous de la ligne de code
suivante :

ActiveCell.NumberFormat = "@"

Vous pouvez appliquer n’importe quel format de nombre proposé dans la liste
Personnalisée de la boîte de dialogue Format de cellule (voir figure 9.1). Si vous
n’êtes pas sûr du format à employer, appliquez-le par le biais de la boîte de dia-
logue Format de cellule et cliquez sur Personnalisée pour visualiser le code.
Attention ! Placez le code entre guillemets.

213
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA

Figure 9-1. Vous pouvez appliquer à votre guise un format de la liste


Personnalisée à votre cellule.

Préparer les données de chaîne pour le traitement


Chapitre 9

Une fois que vous avez déterminé que les données sur lesquelles vous voulez
effectuer des opérations de texte sont de fait du texte, vous pouvez continuer et
vous occuper de leur aspect. Pour traiter les données, vous disposez de deux
fonctions : CLEAN (EPURAGE) et TRIM (SUPPRESPACE). La fonction
CLEAN supprime tous les caractères non imprimables d’une chaîne. Les carac-
tères non imprimables sont également appelés caractères de contrôle, puisqu’ils
sont généralement saisis en appuyant sur la touche Ctrl associée à une séquence
de touches. Les caractères non imprimables n’apparaissent souvent pas dans le
fichiers texte ou les feuilles de calcul, mais si vous importez les données à partir
d’un autre programme, ils peuvent être interprétés comme une mise en forme
ou des instructions relatives à la structure des données qui n’étaient pas visibles
lorsque les données d’origines ont été enregistrées.

Au Quotidien
Cette fonction existe-t-elle dans VBA ?

Rappelez-vous que le comportement par défaut de Visual Basic Editor est


d’afficher les arguments nécessaires à une fonction ainsi que les propriétés,
méthodes et événements disponibles pour un objet après que l’on a saisi son
nom et le point de suite. Pour savoir si vous devez utiliser l’objet Applica-
tion.WorksheetFunction, il suffit de saisir la fonction sans l’objet : si néces-
saire, une info-bulle liste les arguments indispensables. Si l’info-bulle
s’affiche, vous pouvez utiliser la fonction comme telle. Dans le cas contraire,
saisissez Application.WorksheetFunction. (il y a un point après WorksheetFunc-
tion) et voyez si la fonction que vous souhaitez employer se trouve dans la liste
des propriétés disponibles pour l’objet.

214
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA

Chapitre 9
Remarque La ligne ci-après est uniquement constituée de caractères non
imprimables :

La fonction TRIM (SUPPRESPACE)est similaire à la fonction CLEAN en ce que


les deux fonctions suppriment des caractères indésirables, mais la fonction
TRIM élimine les espaces blancs (espaces, tabulations, retours chariot, renvois à
la ligne, et ainsi de suite) qui précèdent le premier et suivent le dernier caractère
alphanumérique de la chaîne. La fonction TRIM élimine également tous les
espaces excepté un entre les mots. Ces caractères correspondent, par exemple, à
des espaces que le programme d’origine a ajoutés aux champs de longueur fixe
pour compléter la chaîne. Pour appeler les fonctions CLEAN et TRIM, ainsi
qu’une foule d’autres fonctions de texte et de données pratiques, ajoutez le nom
de la fonction comme propriété de l’objet Application.WorksheetFunction.

ActiveCell.Value =
Application.WorksheetFunction.Clean(ActiveCell.Value)
ActiveCell.Value =
Application.WorksheetFunction.Trim(ActiveCell.Value)

Déterminer le nombre de caractères d’une chaîne


Avec la fonction LEN (NBCAR) de VBA, vous pouvez déterminer le nombre de
caractères qui composent une chaîne. À l’instar de la fonction ISTEXT qui valide
les données, la fonction LEN assure que la longueur des données saisies, impor-

215
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


tées ou exportées est correcte. Prenons l’exemple des numéros ISBN (Internatio-
nal Standard Book Numbers) qui identifient les livres. La longueur de chaque
ISBN est exactement de 10 caractères. Si vous saisissez le titre, les auteurs, l’ISBN
et le prix de chaque livre de la bibliothèque de votre entreprise, vous devez vous
assurer que la longueur des ISBN est correcte. Les ISBN ne sont qu’un exemple
parmi d’autres ; cette fonction peut servir à vérifier la longueur des données dans
une feuille de calcul ou une feuille UserForm : ces applications sont presque infi-
nies. Voici d’autres exemples : au sein de votre entreprise les numéros de com-
mandes ou de clients la longueur définie est de neuf caractères et la longueur des
codes produits est de huit caractères ; vous voulez vous assurer qu’aucun carac-
tère inutile n’a par inadvertance été ajouté à des numéros de téléphones, etc.
Le code suivant vérifie la valeur de la cellule active pour s’assurer le code produit
saisi dans la cellule comporte exactement 10 caractères :

If Len(ActiveCell.Value) <> 10 Then


MsgBox ("La longueur du code produit saisi dans cette cellule est
inexacte.")
ActiveCell.Value = "Erreur"
Chapitre 9

End If

Si vous exploitez d’anciens systèmes de gestion de base de données ou une base


de données dont les longueurs de caractères sont définies pour chaque champ,
ajoutez une règle de validation dans une colonne pour vous assurez que chaque
entrée a été correctement lue. En outre, même si la taille des bases de données est
souvent suffisamment réduite pour que vous puissiez gaspiller un peu de stoc-
kage en allouant plus d’espace qu’il n’est strictement nécessaire, il est préférable
de limiter la taille de chaque champ (à l’exception éventuellement du champ des
commentaires) au minimum de caractères.
La fonction LEN peut également servir à garantir que les mots de passe que vos
collègues assignent aux classeurs et aux feuilles de calcul possèdent une longueur
minimum. Comme nous l’avons étudié au chapitre 7, le plan de protection par
mot de passe dans Excel n’empêche pas la compromission de vos données, mais
vous pouvez compliquer la tâche d’un attaquant en assignant des mots de passe
longs. Excel accepte des mots de passe d’une longueur maximale de
15 caractères, mais une longueur de 8 caractères constitue un bon compromis.

Pour plus d’informations sur l’utilisation de la fonction LEN pour vérifier qu’un mot de
passe contient au moins un caractère non alphanumérique, reportez-vous à la section
« Retourner des caractères arbitraires d’une chaîne », plus loin dans ce chapitre.

216
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA

Au Quotidien
Validation ou instruction If…Then ?

Plusieurs méthodes sont à votre disposition pour fixer la longueur des valeurs
saisies. Au chapitre 8, nous avons appris à utiliser la propriété Validation de
l’objet Range pour établir un critère que doit satisfaire la valeur d’une cellule
pour être acceptée. En positionnant le paramètre Type de objet Validation sur
xlValidateTextLength, Excel vérifie que la valeur d’une cellule possède la lon-
gueur appropriée. Vous obtiendrez le même résultat avec une règle If…Then.
Alors pourquoi utiliser une méthode au lieu de l’autre ?

● Servez-vous de la propriété Validation de l’objet Range pour :


● Créer une règle unique facile à exprimée avec les paramètres de la pro-
priété Validation.
● Assigner un titre spécifique à la boîte de saisie et la soumettre à des
règles de validation.

Chapitre 9
● Afficher un type de boîte de message spécifique (information, avertisse-
ment ou arrêt) et programmer son comportement (passage à la cellule
suivante ou non) dans le cadre du type de boîte de message.
● Stocker tous les critères au sein d’un unique objet.
● Servez-vous d’une instruction If...Then...Else pour :
● Définir plusieurs critères et trouver des constructions If…Then…Else
plus simples à exploiter que la méthode Modify de l’objet Validation.
● Modifier le critère conditionnel selon certaines circonstances. Par exem-
ple, la limite de crédit maximale qu’un employé peut accorder à un client
peut varier d’un employé à l’autre.

Concaténer le texte de plusieurs cellules ou variables


Certaines des procédures que vous avez étudiées dans ce livre génèrent des boîtes
de message qui affichent du texte issu de plusieurs variables ou cellules. Les
auteurs de ce livre admettent avoir été un peu trop rapides et s’être perdus dans
l’ordre des rubriques. Il est à présent temps de vous montrer comment ajouter
du texte issu d’une cellule, d’une variable ou d’un littéral : on utilise l’opérateur
&.
Attention, ne confondez pas l’esperluette (ou et commercial), &, avec le mot
« et ». En outre, si vous possédez une expérience en programmation, vous avez
sans doute déjà employé l’opérateur & pour indiquer un « et » logique dans des
expressions comme

If ((Range("C5").Value >= 1000) & (Range("D5")<=10)) Then…

217
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


Ne tombez pas dans ce piège ! L’opérateur de concaténation VBA & est différent
de l’opérateur logique ET : ce dernier s’orthographie comme le mot « et ». L’ins-
truction If précédente s’écrit correctement de la manière suivante :

If ((Range("C5").Value >= 1000) And (Range("D5")<=10)) Then…

L’utilisation de l’opérateur de concaténation est simple. Par exemple, vous pou-


vez l’employer conjointement à la fonction LEN, décrite précédemment, pour
indiquer pourquoi les données saisies dans une cellule ne sont pas valides.

Public Sub VerifyLength()


If Len(ActiveCell.Value) <> 10 Then
MsgBox ("La longueur du code produit saisi est de " &
LEN(ActiveCell.Value) & _ " caractères et non de 10.")
ActiveCell.Value = ""
End If
End Sub

La fonction LEN et l’opérateur & permettent également d’ajouter des caractères


à la valeur d’une cellule ou à une variable pour obtenir la longueur appropriée
Chapitre 9

avant d’exporter les données dans un programme où la longueur des données est
fixe. Pour ajouter des caractères au début ou à la fin d’une chaîne, servez-vous de
la fonction REPT (REPT) combinée à l’opérateur &. Voici la syntaxe de la fonc-
tion REPT :

texte, no_fois)
Application.WorksheetFunction.Rept(t

Le paramètre texte représente le texte à répéter et no_fois indique le nombre de


fois que le texte doit être répété. Par exemple, dans une entreprise en pleine
expansion qui utilise des codes de commande de longueur variable, vous pouvez
remplacer le code sur 5 caractères par un code sur 10 caractères. Cela ne pose
aucun problème dans Excel, il suffit de répéter un zéro devant chaque code de
commande pour obtenir une longueur de 10 caractères. La procédure suivante
vérifie la longueur de la chaîne du code de commande dans les cellules identifiées
par l’utilisateur et ajoute suffisamment de x pour obtenir une chaîne de
10 caractères.

Public Sub MakeTen()

Dim strFirst, strLast, strAllCells, strPadding, strContents As String


Dim intPadding As Integer

strFirst = InputBox("Saisissez l'adresse de la première cellule.")


strLast = InputBox("Saisissez l'adresse de la dernière cellule.")
strAllCells = strFirst & ":" & strLast

For Each MyCell In Range(strAllCells).Cells

If Len(MyCell.Value) < 10 Then


Range(MyCell.Address).Select
strContents = MyCell.Value

218
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA


intPadding = 10 - Len(MyCell.Value)
strPadding = Application.WorksheetFunction.Rept("0", intPadding)
MyCell.NumberFormat = "@"
MyCell.Value = strPadding & strContents
End If

MyCell.NumberFormat = "@"

Next MyCell

End Sub

Attention Vérifiez que le code de commande que vous modifiez est stocké en
tant que chaîne et non comme un nombre. Si vous ajoutez une chaîne de zéro
au début d’une cellule qu’Excel convertit en nombre (ce qui inclut les cellules
auxquelles on a appliqué le format Standard), Excel élimine les zéros qu’il con-
sidère inutiles. Dans la feuille de calcul, appliquez le format Texte.

Retourner le premier ou le dernier caractère d’une chaîne

Chapitre 9
Les données d’un tableur forment souvent des modèles que vous avez éventuel-
lement programmés. Même si tous les caractères d’une chaîne ont leur impor-
tance, les premiers ou les derniers caractères d’une chaîne peuvent vous être
utiles pour dériver des informations relatives à une tâche spécifique. Par exem-
ple, si les cinq premiers chiffres de l’ISBN d’un livre désignent l’éditeur (c’est le
cas), vous pouvez lire ces chiffres en mémoire, rechercher l’identité de l’éditeur
dans une base de données ou le tableau d’une feuille de calcul et programmer
l’écriture des données résultantes dans une autre cellule.
Pour retourner les premiers ou derniers caractères d’une chaîne, on fait appel à
la fonction LEFT (GAUCHE), qui retourne les premiers caractères d’une chaîne
ou la fonction RIGHT (DROITE), qui retourne les derniers caractères d’une
chaîne. La syntaxe des deux fonctions, à l’exception de leurs noms, est identique :

string, length)
LEFT(s
GAUCHE(ttexte; nbre_car)
RIGHT(sstring, length)
DROITE(ttexte; nbre_car)

Dans ces fonctions, string (texte) représente la variable ou la plage qui contient la
chaîne à traiter et length (nbre_car) correspond au nombre de caractères à
retourner. Prenons l’exemple d’une feuille de calcul dans laquelle chaque ligne
représente les articles des commandes passées à la société Garden.

219
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


Chapitre 9

La société Garden se sert d’un système de nommage logique pour ses produits. Il
est ainsi possible de créer une procédure qui détermine la catégorie de chaque
produit commandé. Dans ce système de nommage, les deux premiers caractères
du code d’identification d’un article représentent la catégorie à laquelle il appar-
tient (OU pour outillage, PL pour plantes et AC pour accessoires). Au lieu de
demander à l’utilisateur de saisir la catégorie, on peut créer une procédure pour
cette action.

Remarque Les données de la feuille de calcul sont toutes en majuscules. En


conséquence, les entrées de l’instruction Case de la procédure recherche uni-
quement des codes de catégories en majuscules.

Public Sub NoteCategory()

Dim MyCell As Range


Dim strFirst, strLast, strAllCells, strCategory As String

strFirst = InputBox("Saisissez l'adresse de la première cellule dans


la colonne Article.")
strLast = InputBox("Saisissez l'adresse de la dernière cellule dans la
colonne Article.")
strAllCells = strFirst & ":" & strLast

For Each MyCell In Range(strAllCells).Cells

Range(MyCell.Address).Select
strCategory = Left(MyCell.Value, 2)

Select Case strCategory


Case "OU"

220
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA


ActiveCell.Offset(0, 1).Value = "Outillage"
Case "PL"
ActiveCell.Offset(0, 1).Value = "Plantes"
Case "AC"
ActiveCell.Offset(0, 1).Value = "Accessoires"
Case Else
ActiveCell.Offset(0, 1).Value = "Erreur"
End Select

Next MyCell

End Sub

Pour plus d’informations sur la recherche de valeurs dans des listes existantes, y compris
celles stockées dans des bases de données, reportez-vous au chapitre 22, « Introduction
à ADO », qui présente également un exemple pratique.

Retourner des caractères arbitraires d’une chaîne


Des données bien organisés en abondance, provenant de sources externes, cons-
tituent l’une des petites joies des programmeurs Excel : il suffit d’atteindre les

Chapitre 9
chaînes pour en extraire ce dont on a besoin. Le système d’immatriculation des
véhicules aux États-Unis en est un exemple. Les numéros d’immatriculation ont
une longueur de 17 caractères chacun codant des informations pertinentes rela-
tives au véhicule : marque, modèle, couleur, année de fabrication, usine de fabri-
cation et ainsi de suite. Lorsqu’on connaît la structure des données, on peut faire
appel à la fonction MID (STXT) pour extraire les caractères nécessaires à la pro-
cédure.
Contrairement aux fonctions LEFT et RIGHT, qui récupèrent les données au
début et la fin d’une chaîne, la fonction MID extrait un certain nombre de carac-
tères dans le corps de la chaîne. La syntaxe de la fonction MID (STXT) est simi-
laire à celles des fonctions LEFT et RIGHT, à la différence que l’on définit la
position du premier caractère à retourner et le nombre de caractères retournés.

string, start, length)


MID(s
STXT(ttexte;d
début;n
nbre_car)

Pour récupérer les caractères des positions 4 à 8 (soit 5 caractères au total) de la


valeur de la cellule D5, servez-vous du code suivant (en supposant que vous avez
créé les variables strCode et strDetails précédemment :

strCode = Range("D5").Value
strDetails = Mid(strCode, 4, 5)

Retrouver une chaîne au sein d’une autre chaîne


Vous vous demandez peut-être pour quelle raison on voudrait récupérer une
chaîne au sein d’une autre chaîne. Dans le domaine de la génétique, on peut
rechercher une séquence de protéine spécifique pour localiser un chromosome,
mais si tel est votre domaine d’activité, il est peut probable que vous utilisiez

221
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


Excel pour trouver une sous-chaîne. Supposons plutôt que vous ayez reçu des
lignes de données qui, indépendamment de votre volonté, ont été importées
dans Excel sous la forme d’une cellule par ligne. Pire encore : les champs de don-
nées ne sont pas de longueur fixe et vous ne pouvez donc pas utiliser la fonction
MID sans un minimum de peaufinage. Mais si, pour votre malheur, les données
de chaque cellule ressemblent à NC1800230AR7801CL486EXFX2J, il existe une
solution à votre problème.
En réalité, les données se répartissent de la manière suivante : NoCde
NC1800230, Article AR7801, Client CL486, Expédition FedEx Deuxième jour.
Comment le découvrir ? Cette méthode repose autant sur l’intelligence que sur
les compétences. L’intelligence permet de déterminer que le début de chaque
champ représente un code distinct. Dans notre exemple, les sept premiers carac-
tères représente le numéro de commande NC1800230. Le champ NoCde com-
mence par les lettres NC, qui dans notre exemple, ne se retrouvent nulle part
ailleurs dans la chaîne. On a employé la même technique de marquage pour
libeller l’article (AR), le client (CL) et la méthode d’expédition (EX).
Chapitre 9

Remarque Pour vous préserver contre toute occurrence errante des repères,
placez chaque repère entre crochets, comme <NC> ou <AR>. Ce système de
balisage est similaire à celui des langages HTML (Hypertext Markup Language)
et XML (Extensible Markup Language). Il fonctionne avec d’autres systèmes
qui ne doivent pas encoder les crochets comme des valeurs.

À l’heure de localiser des chaînes au sein d’autres chaînes, la compétence permet


de connaître l’usage des fonctions SEARCH (CHERCHE) et FIND (TROUVE).
Ces deux fonctions retournent un certain nombre de caractères extraits d’une
chaîne dans laquelle se trouve un caractère ou une chaîne de texte spécifique. Les
différences de fonctionnement de ces fonctions sont minimes mais importantes.
Voici leur syntaxe :

find_text, within_text, star_num)


SEARCH(f
CHERCHE(ttexte_cherché; texte; no_départ)
find_text; within_text; star_num)
FIND(f
texte_cherché; texte; no_départ)
TROUVE(t

find_text (texte_cherché) représente le texte à trouver. Avec la fonction SEARCH,


vous pouvez employer des caractères génériques, un point d’interrogation (?) et
un astérisque (*) dans find_text. Le point d’interrogation représente n’importe
quel caractère, alors que l’astérisque correspond à une suite de caractères. Pour
localiser un vrai point d’interrogation ou astérisque, saisissez un tilde (~) avant
le caractère. La fonction SEARCH n’est pas sensible à la casse, autrement dit si
vous cherchez un « e » la fonction récupère également les « E ». La fonction
FIND est sensible à la casse et n’autorise pas l’utilisation des caractères généri-
ques. En fait, on peut la considérer comme une version plus précise de la fonc-
tion SEARCH. Avec la fonction FIND, si vous cherchez « e », vous ne récupèrerez
pas « E ».

222
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA


● within_text (texte) représente le texte dans lequel vous recherchez
texte_cherché.
● star_num (no_départ) représente le numéro du caractère dans texte à par-
tir duquel la recherche débute. Si vous ignorez ce paramètre, la recherche
commence au début de la chaîne (soit no_départ = 1).
L’avantage des fonctions SEARCH et FIND prend toute sa valeur lorsqu’on les
combine avec la fonction MID. Après avoir localisé le début de deux champs
consécutifs avec la fonction SEARCH ou la fonction FIND, servez-vous de la
fonction MID pour extraire la partie souhaitée de la chaîne. Vous devez néan-
moins être au fait de l’une ou l’autre subtilité. Bien que la fonction MID fasse
partie du package VBA standard, ce n’est pas le cas des fonctions SEARCH et
FIND. Vous devez donc utiliser l’objet Application.WorksheetFunction pour
appeler ces fonctions, comme dans l’exemple suivant :

Application.WorksheetFunction.Search("AR", ActiveCell.Value)

Remarque La fonction VBA INSTR (CAR) retourne également la position du

Chapitre 9
caractère dans une chaîne qui commence par une autre chaîne, mais cette
fonction est équivalente à la fonction FIND en ce qu’elle est sensible à la
casse.

Reprenons notre scénario cauchemardesque dans lequel les enregistrements des


commandes ont été incorrectement importés. Nous allons utiliser les fonctions
SEARCH et MID pour localiser le début et la fin des valeurs de chaque champ,
puis écrire ces valeurs dans une cellule, comme dans la procédure suivante :

Public Sub SeparateValues()

Dim MyCell As Range


Dim intAR, intCL, intEX As Integer
Dim strFirst, strLast, strAllCells As String

strFirst = InputBox("Saisissez l'adresse de la première cellule.")


strLast = InputBox("Saisissez l'adresse de la dernière cellule.")
strAllCells = strFirst & ":" & strLast

For Each MyCell In Range(strAllCells).Cells

Range(MyCell.Address).Select

intAR = Application.WorksheetFunction.Search("AR", MyCell.Value)


intCL = Application.WorksheetFunction.Search("CL", MyCell.Value)
intEX = Application.WorksheetFunction.Search("EX", MyCell.Value)

ActiveCell.Offset(0, 2).Value = Mid(MyCell.Value, 1, intAR - 1)


ActiveCell.Offset(0, 3).Value = Mid(MyCell.Value, intAR, intCL -
intAR)
ActiveCell.Offset(0, 4).Value = Mid(MyCell.Value, intCL, intEX -
intCL)
ActiveCell.Offset(0, 5).Value = Mid(MyCell.Value, intEX)

223
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


Next MyCell

End Sub

Cette procédure récupère les chaînes des cellules qui se trouvent dans une plage
saisie par l’utilisateur (A2:A21 dans cet exemple) et écrit les valeurs des compo-
sants dans les cellules situées à droite, comme le montre la figure 9.2.
Chapitre 9

Figure 9-2. Les fonctions SEARCH et MID permettent d’extraire les parties
intéressantes de chaînes de texte.

Remarque Si vous connaissez la longueur de chaque champ ou cellule, vous


pouvez vous dispenser de calcul pour déterminer le début de chaque chaîne.

224
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA

Au Quotidien
Traitement de texte et cookies de navigation

La gestion d’un site web d’entreprise représente une charge de travail impor-
tante pour les administrateurs et, dans la plupart des cas, des dépenses
substantielles pour l’entreprise. Une partie de la tâche des administrateurs
consiste à justifier l’argent et le temps dépensés sur le site. Si la programma-
tion est limitée au sein du site et que vous l’administrez sans programmation,
vous vivez sans doute dans la crainte que l’on vous demande de traiter les
informations stockées dans les cookies que votre serveur web place sur les
ordinateurs des clients. La programmation des cookies sort de la portée de ce
livre, certains se composent d’une unique chaîne qui code les activités de l’uti-
lisateur d’une manière très similaire aux chaînes de commande que nous
av o n s v u e s p l u s t ô t d a n s c e c h a p i t r e : p a r e x e m p l e , l a c h a î n e
UI007589TM37900.77589 pourrait constituer le texte d’un cookie, où
007589 représente le numéro d’identification utilisateur du visiteur et
37900.77589 correspond à la chaîne date/heure indiquant la dernière visite

Chapitre 9
de l’utilisateur (qui, dans ce cas, était le 10/06/2003 à 06:37).

Nombres
Les rubriques que nous allons étudiées dans les prochaines sections font partie
du fonctionnement standard d’une feuille de calcul Excel et non de la program-
mation VBA. Ceci dit, les calculs financiers sont souvent employés dans le cadre
de l’entreprise et nous les avons inclus dans ce livre. Ces fonctions sont traitées
dans le contexte des routines VBA, mais nous examinerons suffisamment
d’exemples d’utilisation des fonctions financières dans les feuilles de calcul pour
vous permettre d’apprendre à les exploiter dans des formules.

Analyse des données


Le tableur Excel propose de nombreuses méthodes pour analyser les données.
Toutefois, il n’est pas toujours évident de connaître leur existence, en particulier
pour des utilisateurs novices. Le tableau 9.2 liste les opérations mathématiques
(et quelques autres opérations) qui permettent d’analyser les données d’une
feuille de calcul.
Tableau 9-2. Calculs d’analyse standards disponibles dans
Excel et Excel VBA
Fonction Excel Fonction VBA Description
MOYENNE AVERAGE Renvoie la moyenne arithmétique
des arguments
NB COUNT Compte le nombre de cellules dans
une plage

225
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA

Tableau 9-2. Calculs d’analyse standards disponibles dans


Excel et Excel VBA (Suite)
Fonction Excel Fonction VBA Description
NBA COUNTA Compte le nombre de cellules non
vides dans une plage
NB.VIDE NBCOUNTBLANK Compte le nombre de cellules vides
dans une plage
NB.SI(plage; critère) COUNTIF(range, Compte le nombre de cellules dans
criteria) une plage qui correspondent au
critère donné
MAX MAX Renvoie la valeur maximale de la
plage
MEDIANE MEDIAN Renvoie la ou les valeur(s)
médiane(s) (la valeur ou la paire de
valeurs le plus près de la moyenne)
de la plage
Chapitre 9

MIN MIN Renvoie la valeur minimale de la


plage
MODE MODE Renvoie la valeur la plus commune
de la plage
ECARTYPE STDEV Renvoie l’écart des valeurs de la
plage
SOMME SUM Renvoie la somme arithmétique des
valeurs de la plage
SOMME.SI(plage; COUNTIF(range, Renvoie la somme arithmétique des
critère) criteria) valeurs de la plage qui répondent au
critère

Maintenant que vous connaissez les fonctions d’analyse de base comment vos
collègues peuvent-ils savoir lesquelles utilisées ? C’est simple : vous le leur indi-
quez en listant les opérations disponibles dans une cellule, un commentaire ou
une zone de texte que vous placez en regard des données.
La procédure suivante est un exemple de la manière de procéder pour permettre
à vos collègues d’identifier les données à analyser et de sélectionner l’opération
appropriée.

Remarque Dans cette version de la procédure, nous avons utilisé une ins-
truction Select Case dans laquelle nous avons inclus le code qui effectue cha-
que calcul. Il est également possible de créer une fonction par opération et
d’appeler cette fonction à partir de l’instruction Case correspondante. On peut
aussi demander à l’utilisateur de saisir un numéro d’opération à effectuer au
lieu de son nom. Pour éviter les erreurs d’orthographe ou de capitalisation, les
valeurs doivent correspondre exactement.

226
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA


Public Sub Analyse()
Dim intColNumber As Integer
Dim strOperation, strCriteria As String
Dim sngResult As Single

MsgBox ("Sélectionnez une cellule du tableau à analyser. " _


& "Saisissez le numéro, sans la lettre, représentant la colonne des " _
& "cellules à analyser.")

intColNumber = InputBox("Quelle colonne voulez-vous analyser ?")


strOperation = InputBox("Quelle opération voulez-vous effectuer ?" _
& " Les options sont Somme, SommeSi, Max, Min, Nb, NbVal, NbVide, " _
& "NbSi, Moyenne, Mode, EcartType. (Saisissez-les exactement telles qu’elles
s’affichent.)")
With ActiveCell.CurrentRegion.Columns(intColNumber)
Select Case strOperation
Case "Somme"
sngResult = Application.WorksheetFunction.Sum(.Cells)
MsgBox ("La somme de la colonne est " & sngResult & ".")
Case "SommeSi"
strCriteria = InputBox("Saisissez un critère pour la méthode en " _

Chapitre 9
& "tapant un nombre seul ou précédé d’un des opérateurs " _
& ">, < ou =.")
sngResult = Application.WorksheetFunction.SumIf(.Cells, strCriteria)
MsgBox ("La somme des valeurs est " & sngResult & ".")
Case "Max"
sngResult = Application.WorksheetFunction.Max(Cells)
MsgBox ("La valeur maximale de la colonne est " & sngResult & ".")
Case "Min"
sngResult = Application.WorksheetFunction.Min(.Cells)
MsgBox ("La valeur minimale de la colonne est " & sngResult & ".")
Case "Nb"
sngResult = Application.WorksheetFunction.Count(.Cells)
MsgBox ("Le nombre de cellules dans la colonne est " & sngResult & ".")
Case "NbVal"
sngResult = Application.WorksheetFunction.CountA(Cells)
MsgBox ("Le nombre de cellules non vides est " & sngResult & ".")
Case "NbVide"
sngResult = Application.WorksheetFunction.CountBlank(.Cells)
MsgBox ("Le nombre de cellules vides est " & sngResult & ".")
Case "NbSi"
strCriteria = InputBox("Saisissez un critère pour la méthode en " _
& "tapant un nombre seul ou précédé d’un des opérateurs " _
& ">, < ou =.")
sngResult = Application.WorksheetFunction.CountIf(.Cells, strCriteria)
MsgBox ("Le nombre de cellules qui satisfont au critère est " & sngResult
& ".")
Case "Moyenne"
sngResult = Application.WorksheetFunction.Average(.Cells)
MsgBox ("La moyenne des valeurs est " & sngResult & ".")
Case "Mode"
sngResult = Application.WorksheetFunction.Mode(.Cells)
MsgBox ("La valeur la plus commune est " & sngResult & ".")
Case "EcartType"
sngResult = Application.WorksheetFunction.StDev(.Cells)
MsgBox ("L’écart type des valeurs est " & sngResult & ".")

227
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


Case Else
MsgBox ("Opération non reconnue. Recommencez.")
End Select
End With
End Sub

Remarque Vous avez probablement remarqué le travail économisé avec l’ins-


truction With ActiveCell.CurrentRegion. Columns(intColNumber) dans la
procédure Analyse. Sans l’instruction With, le code de référence de la plage
parcourt chaque ligne, ce qui le rend difficile à lire. Recherchez toujours ce
type d’opportunité pour simplifier votre code.

Calculs financiers
L’un montant du remboursement mensuel d’un prêt représente sans doute l’un
des calculs financiers les plus exploités. Pour ce calcul, vous utilisez la fonction
PMT (VPM), dont voici la syntaxe :

rate, nper, pv, fv, type)


Chapitre 9

PMT(r
taux;n
VPM(t npm;v
va;vc;type)

Le tableau 9.3 décrit les cinq arguments utilisés avec la fonction PMT (VPM).
Tableau 9-3. Arguments de la fonction PMT (VPM)
Arguments de Arguments de
la fonction la fonction
PMT VPM Description
rate taux Taux d’intérêts, à diviser par 12 pour
obtenir le montant mensuel des
paiements
nper npm Nombre total de paiements du prêt
pv va Montant global emprunté (pv (va)
représente la valeur actuel ou principal)
fv vc Solde à obtenir après avoir effectué le
dernier paiement (généralement vide, ce
qui indique 0)
type type 0 ou 1. Indique si les paiements sont
effectués en début ou en fin de mois
(généralement vide, ce qui indique 0, soit
la fin du mois)

Pour emprunter €20 000 avec un taux d’intérêts de 8% et un remboursement en


24 mois, écrivez la formule suivante dans une cellule de votre feuille de calcul :
=VPM(8%/12; 24; 20000), ce qui donne un paiement mensuel de €904,55. Dans
VBA, vous pouvez utiliser l’objet Application.WorksheetFunction pour appeler la
fonction PMT dans une procédure VBA. L’exemple ci-après suppose que le taux

228
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA


se trouve dans la cellule B2, le nombre de mensualités dans la cellule B3, la
somme empruntée dans la cellule B4, le solde après le dernier paiement du prêt
(toujours 0) dans la cellule B5 et l’échéance du paiement (laissée vide pour utili-
ser la valeur par défaut) dans la cellule B6.

Public Function MonthlyPayment(rate, nper, pv, fv, when) As Currency


With Application.WorksheetFunction
MonthlyPayment = .Pmt(rate / 12, nper, pv, fv, when)
End With
End Function

Public Sub Payment()


MsgBox (MonthlyPayment(Range("B2"), Range("B3"), Range("B4"), _
Range("B5"), Range("B6")))
End Sub

Attention Remarquez que dans la fonction MonthlyPayment l’argument type


est remplacé par when. En effet, type est un mot réservé dans VBA et Excel
génère une erreur au moment de la compilation.

Chapitre 9
Certaines fonctions de feuille de calcul Excel permettent de déterminer la partie
d’un paiement dédiée aux intérêts et celle dédiée au principal du prêt. Ces calculs
sont importants dans le cadre de la déclaration d’impôts. Par exemple, si les inté-
rêts du prêt de votre maison sont déductibles des impôts, il peut être intéressant
de connaître exactement la part des intérêts et la part du principal dans vos men-
sualités. La fonction de feuille de calcul IPMT (INTPER) permet de calculer la
part dédiée aux intérêts. Sa syntaxe est similaire à celle de la fonction PMT, à
quelques différentes près :

rate, per, nper, pv, fv, type)


IPMT(r
taux;p
INTPER(t pér;n
npm;v
va;vc;type)

Les arguments rate (taux), pv (va), fv (vc) et type (type) ont la même signification
que dans la fonction PMT, mais il y a un nouvel argument : per (pér) qui repré-
sente la période pour laquelle vous voulez calculer les intérêts. La valeur doit être
comprise entre 1 et nper (npm). Par exemple, pour déterminer la part mensuelle
dédiée aux intérêts, servez-vous de la procédure suivante, qui place le résultat
dans la cellule active :

Public Sub DetermineInterest()


Dim intRate, intPer, intNper As Integer
Dim curPv, curInterest As Currency

intRate = InputBox("Quel est le taux d’intérêt (sous forme


d’entier) ?")
intPer = InputBox("Pour quel mois souhaitez-vous connaître les
intérêts ?")
intNper = InputBox("En combien de paiements voulez-vous rembourser
le prêt ?")
curPv = InputBox("Quelle somme avez-vous empruntée ?")

229
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


With Application.WorksheetFunction
curInterest = -1 *(.IPmt(intRate / 1200, intPer, intNper,
curPv))
End With

ActiveCell.Value = curInterest
End Sub

Remarque Cette procédure multiplie curInterest par –1 pour produire un


résultat positif. Il est vrai que le montant est négatif, mais on préfère généra-
lement voir les paiements en nombres positifs.

Pour lister la contribution de chaque paiement aux intérêts, ajoutez une boucle
For...Next autour du calcul de l’intérêt périodique, ce qui place les résultats dans
une colonne commençant à la cellule active.

Public Sub DetermineAllInterest()


Dim intRate, intPer, intNper, intPayment As Integer
Dim curPv, curInterest As Currency
Chapitre 9

intRate = InputBox("Quel est le taux d’intérêt (nombre entier


uniquement) ?")
intNper = InputBox("Combien de paiements allez-vous faire sur le
prêt ?")
curPv = InputBox("Quelle somme avez-vous empruntée ?")

For intPer = 1 To intNper


With Application.WorksheetFunction
curInterest = -1 * (.IPmt(intRate / 1200, intPer, intNper,
curPv))
'Divise par 1200 pour obtenir un pourcentage mensuel (12 mois
* 100 pour cent)
End With

ActiveCell.Value = curInterest
ActiveCell.Offset(1, 0).Activate
Next intPer

End Sub

PPMT (PRINCPER) représente la fonction complémentaire de la fonction


IPMT. Elle détermine la part de remboursement du principal sur un paiement.
La syntaxe de la fonction PPMT est exactement identique à celle de la fonction
IPMT, mais le résultat représente la part du paiement dédiée au principal.
Maintenant que nous avons étudié les fonctions employées pour déterminer les
paiements, et leur répartition entre intérêts et principal, voyons comment inver-
ser le processus et déduire le taux d’intérêts d’un planning de paiements.
D’accord, il n’est pas coutume de rechercher le taux d’intérêt d’un prêt immobi-
lier (puisqu’il est rare qu’on l’oublie et qu’il est écrit sur les formulaires de prêt),
mais pour le cas où vous en auriez besoin, voici comment procéder.

230
Partie 4 : Fonctions VBA avancées

Manipulation des données avec VBA


La syntaxe de la fonction RATE (TAUX) est similaire à celle des fonctions de la
famille PMT.

nper, pmt, pv, fv, type, guess)


RATE(n

npm;v
TAUX(n vpm;v
va;vc;type;estimation)

Il existe quelques différences entre RATE et les autres fonctions PMT. Le


tableau 9.4 récapitule les arguments de la fonction RATE (TAUX).
Tableau 9-4. Arguments de la fonction RATE (TAUX)
Arguments de Arguments de
la fonction la fonction
RATE TAUX Description
nper npm Nombre total de périodes de
remboursement en une annuité.
pmt vpm Montant du remboursement pour chaque
période. Cette valeur peut changer

Chapitre 9
pendant la durée de vie de l’annuité. Si
on omet pmt (vpm), l’argument fv (vc) est
obligatoire.
pv va Valeur actuelle de l’annuité, autrement
dit la valeur que représente à la date
d’aujourd’hui une série de
remboursements ultérieurs.
fv vc Valeur capitalisée, autrement dit le
montant résultant après le dernier
paiement. Si on omet fv (vc), la valeur
par défaut est 0 (par exemple, la valeur
capitalisée d’un emprunt est égale à 0).
type type Nombre 0 ou 1 qui indique quand les
paiements doivent être effectués (0 est
la valeur par défaut, ce qui signifie que
les paiements sont dus à la fin du mois).
guess estimation Votre estimation quant à la valeur du
taux. Si l’argument est omis, la valeur
par défaut est de 10%. Si les résultats
de la fonction RATE (TAUX) ne convergent
pas, essayez différentes valeurs pour
l’argument guess (estimation).
Normalement les résultats de RATE
(TAUX) convergent si guess (estimation)
se situe entre 0 et 1.

231
Partie 4 : Fonctions VBA avancées

Microsoft Excel 2003 VBA


Ainsi, pour découvrir le taux d’intérêt d’un prêt immobilier de €150 000 pour
lequel vous remboursez €1 186,19 par mois pendant 15 ans, la formule suivante
détermine le pourcentage annuel du taux de prêt :

=TAUX(180,-1186.19,150000)*12

Il est important de saisir la mensualité (le deuxième paramètre) sous forme d’un
nombre négatif. Pour vous en souvenir, pensez au fait que l’argent quitte votre
compte en banque.

Déterminer la valeur actuelle d’un investissement


La fonction PV (VA), pour present value (valeur actuelle), retourne la valeur
actuelle d’un investissement ce qui, du point de vue financier, correspond à la
somme totale que représente aujourd’hui un ens