Professional Documents
Culture Documents
EXCEL 2003
VBA
Curtis Frye
Wayne S. Freeze
et Felicia K. Buckingham
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.
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.
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
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
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.
3
Partie 1 : Préliminaires
4
Partie 1 : Préliminaires
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
6
Partie 1 : Préliminaires
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.
7
Partie 1 : Préliminaires
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.
8
Partie 1 : Préliminaires
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.
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
é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.
10
Partie 1 : Préliminaires
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
Figure 1-2. Les listes de données optimisent votre capacité à créer et afficher
des collections de données dans Excel 2003.
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
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 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
Pour parcourir les feuilles de calcul d’un classeur, servez-vous des commandes
Chapitre 2
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
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.
17
Partie 1 : Préliminaires
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.
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.
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.
19
Partie 1 : Préliminaires
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.
21
Partie 1 : Préliminaires
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
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.
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
29
Partie 2 : Visual Basic pour Applications
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
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.
31
Partie 2 : Visual Basic pour Applications
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
For i = 1 to 3
Worksheets(i).PageSetup.RightFooter = Path
Next i
32
Partie 2 : Visual Basic pour Applications
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 ».
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.
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
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
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.
Chapitre 3
cellules ».
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.
35
Partie 2 : Visual Basic pour Applications
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
36
Partie 2 : Visual Basic pour Applications
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.
37
Partie 2 : Visual Basic pour Applications
38
Partie 2 : 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
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.
40
Partie 2 : Visual Basic pour Applications
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
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
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.
43
Partie 2 : Visual Basic pour Applications
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.
44
Partie 2 : Visual Basic pour Applications
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
47
Partie 2 : Visual Basic pour Applications
Figure 4-1. Visual Basic Editor organise les éléments de programmation pour
en simplifier la gestion.
48
Partie 2 : Visual Basic pour Applications
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.
49
Partie 2 : Visual Basic pour Applications
Figure 4-3. L’éditeur de feuilles Visual Basic Editor s’affiche lorsque vous
Chapitre 4
À 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.
50
Partie 2 : Visual Basic pour Applications
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
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
52
Partie 2 : Visual Basic pour Applications
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
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
54
Partie 2 : Visual Basic pour Applications
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.
55
Partie 2 : Visual Basic pour Applications
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.
56
Partie 2 : Visual Basic pour Applications
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
57
Partie 2 : Visual Basic pour Applications
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
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.
59
Partie 2 : Visual Basic pour Applications
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
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
● 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.
62
Partie 2 : Visual Basic pour Applications
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.
63
Partie 2 : Visual Basic pour Applications
64
Partie 2 : Visual Basic pour Applications
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
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.
66
Partie 2 : Visual Basic pour Applications
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 :
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.
67
Partie 2 : Visual Basic pour Applications
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é.
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
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.
69
Partie 2 : Visual Basic pour Applications
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
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 :
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
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 :
72
Partie 2 : Visual Basic pour Applications
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 :
73
Partie 2 : Visual Basic pour Applications
ReDim intTableauTest(365)
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"
intValeur = intMonTableau(3,4)
74
Partie 2 : Visual Basic pour Applications
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.
75
Partie 2 : Visual Basic pour Applications
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.
76
Partie 2 : Visual Basic pour Applications
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
Sub Bienvenue()
MsgBox "Bienvenue dans Excel."
End Sub
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
Figure 4-14. Il n’est guère plus compliqué de créer une boîte de message
contenant deux lignes de texte.
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.
79
Partie 2 : Visual Basic pour Applications
80
Partie 2 : Visual Basic pour Applications
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 :
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
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.
Sub ConfigPage()
With ActiveSheet.ConfiPage
.TopMargin = Application.InchesToPoints(2)
.BottomMargin = Application.InchesToPoints(2)
.Orientation = xlLandscape
End With
End Sub
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
ou
If condition Then
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[Else elsestatements] ]
End If
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
If boolVoteAutorise Then
[Affiche bulletin et enregistre le vote]
End If
● 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
intJours = 28
Chapitre 4
intJours = 31
End Select
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
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.
86
Partie 2 : Visual Basic pour Applications
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 :
Chapitre 4
Next intCounter2
Next intCounter1
strPrompt = "Le tableau strABC contient les valeurs suivantes :"
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.
87
Partie 2 : Visual Basic pour Applications
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
Do While condition
statement]
[s
[Exit Do]
statement]
[s
Loop
et
Do Until condition
statement]
[s
[Exit Do]
statement]
[s
Loop
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 :
89
Partie 2 : Visual Basic pour Applications
Do
statement]
[s
[Exit Do]
statement]
[s
Loop While condition
et
Do
statement]
[s
[Exit Do]
statement]
[s
Loop Until condition
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
Sub PermissionLoop2()
90
Partie 2 : Visual Basic pour Applications
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
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.
91
Partie 2 : Visual Basic pour Applications
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 :
92
Partie 2 : Visual Basic pour Applications
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
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 :
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
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
95
Partie 2 : Visual Basic pour Applications
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
96
Partie 2 : Visual Basic pour Applications
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
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.
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
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 ».
Sub CreditDisponibleCase()
98
Partie 2 : Visual Basic pour Applications
Au Quotidien
Les pièges des instructions Case et des mises en formes conditionnelles
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
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.
99
Partie 2 : Visual Basic pour Applications
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.
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
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).
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
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
102
Partie 2 : Visual Basic pour Applications
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.
103
Partie 2 : Visual Basic pour Applications
Sub AfficherDateHeure
MsgBox (NOW())
End Sub
Sub Couronnes()
sngInCouronnes = ActiveCell.Value * Range("C35").Value
MsgBox("La valeur ¤" & ActiveCell.Value & " correspond à " _
& sngInCouronnes & " couronnes suédoises.")
End Sub
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
104
Partie 2 : Visual Basic pour Applications
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.
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
Application.Run "'TauxChange.xls'!ConvertirEnCouronnes"
106
Partie 2 : Visual Basic pour Applications
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
107
Partie 2 : Visual Basic pour Applications
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.
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
108
Partie 2 : Visual Basic pour Applications
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.
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
Function nom()
…
End Function
110
Partie 2 : Visual Basic pour Applications
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.
calcul.
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
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.
112
Partie 2 : Visual Basic pour Applications
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.
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
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 :
113
Partie 2 : Visual Basic pour Applications
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
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 :
114
Partie 2 : Visual Basic pour Applications
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
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
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.
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
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
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
Pour plus d’informations sur les graphiques et leur modification par programmation,
reportez-vous au chapitre 15, « Graphiques ».
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
Sub CopySheet()
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
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.
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
127
Partie 3 : Le modèle d’objet Excel
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.
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
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.
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
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
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
Sub RecalcSheet()
If Application.Calculation <> xlCalculationAutomatic Then
ActiveSheet.Calculate
End If
End Sub
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
bReturn = Application.FindFile
If Not bReturn Then
strPrompt = "Le fichier n'a pas été ouvert."
133
Partie 3 : Le modèle d’objet Excel
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.
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
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")
wksNewSheet.Name = "January2"
Worksheets("January").Name = "January2"
Sub InputMonthlyTotals()
Dim strPrompt As String, rgeMonth As Range, sglTotal As Single
Dim intColumn as Integer
End Sub
Chapitre 6
135
Partie 3 : Le modèle d’objet Excel
136
Partie 3 : Le modèle d’objet Excel
L’objet Application
Au Quotidien
La propriété FormulaLocal et les paramètres locaux
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
Sub TestPlants()
Dim strPrompt As String, rgePlants As Range, rgeIntersect As Range
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)
Ce dernier exemple réinitialise l’action par défaut de Ctrl+H dans Excel (Recher-
cher et remplacer) :
Application.OnKey "^h"
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
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
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
End Sub
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
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.
Workbooks.Add
143
Partie 3 : Le modèle d’objet Excel
Sub AjouterNouveauClasseur()
Dim NewWbk As Workbook
Set NewWbk =
Workbooks.Add(Template:="C:\ExcelProg\VentesMensuelles.xls")
End Sub
Workbooks.Open (FileName:="VentesMensuelles.xls")
Remarque Nous étudierons l’ouverture de fichiers texte plus loin dans cette
section.
144
Partie 3 : Le modèle d’objet Excel
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
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
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 :
147
Partie 3 : Le modèle d’objet Excel
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
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
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
149
Partie 3 : Le modèle d’objet Excel
ThisWorkbook.Save
150
Partie 3 : Le modèle d’objet Excel
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
Sub ToutEnregistrer()
Dim Wkbk as Workbook
For Each Wkbk in Workbooks
If Wkbk.Path <> "" Then Wkbk.Save
Next Wkbk
End Sub
ThisWorkbook.SaveCopyAs "cheminaccès\nomfichier.xls"
Workbooks("2004T3Ventes.xls").Activate
152
Partie 3 : Le modèle d’objet Excel
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
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.
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
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 ».
154
Partie 3 : Le modèle d’objet Excel
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.
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
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.
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
ThisWorkbook.SaveLinkValues = True
156
Partie 3 : Le modèle d’objet Excel
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
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
End If
MsgBox ("Le mot de passe est défini.")
End If
End Sub
Password], [S
Protect[P Structure], [W
Windows]
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
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.
ActiveWorkbook.Unprotect Password:=password
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
159
Partie 3 : Le modèle d’objet Excel
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
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.
161
Partie 3 : Le modèle d’objet Excel
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.
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 ».
162
Partie 3 : Le modèle d’objet Excel
Chapitre 7
Remarque La méthode PrintOut existe également pour les feuilles, les gra-
phiques, les objets et les plages de cellules.
163
Partie 3 : Le modèle d’objet Excel
164
Partie 3 : Le modèle d’objet Excel
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
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
Propriété Visible
Chapitre 7
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 :
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
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.
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)
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
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
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.
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
Chapitre 7
Sub SupprimerFeuille()
Application.DisplayAlerts = False
Sheets(1).Delete
Application.DisplayAlerts = True
End Sub
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.
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
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
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)
Worksheets("Feuil2").Rows(30).PageBreak = xlPageBreakManual
Worksheets("Feuil1").Columns("D").PageBreak = xlPageBreakManual
Worksheets("Feuil2").Rows(30).PageBreak = xlPageBreakNone
171
Partie 3 : Le modèle d’objet Excel
Pour supprimer tous les sauts de page d’une feuille de calcul, servez-vous de la
méthode ResetAllPageBreaks :
Worksheets("Feuil1").ResetAllPageBreaks
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
172
Partie 3 : Le modèle d’objet Excel
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.
173
Partie 3 : Le modèle d’objet Excel
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
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.
Worksheets("Janvier").EnableSelection = xlNoSelection
175
Partie 3 : Le modèle d’objet Excel
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.
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.
Worksheets("Feuil1").Select
176
Partie 3 : Le modèle d’objet Excel
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
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.
Selection.Font.Bold = True
179
Partie 3 : Le modèle d’objet Excel
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
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
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.
Recherche 4 Recherche 2
Recherche 1
Recherche 3
183
Partie 3 : Le modèle d’objet Excel
expression.Range(Cell1, Cell2)
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.
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
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.
185
Partie 3 : Le modèle d’objet Excel
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
End Sub
187
Partie 3 : Le modèle d’objet Excel
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.
188
Partie 3 : Le modèle d’objet Excel
Plages et cellules
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.
Range(Cells(4,6), Cells(4,6)).Select
189
Partie 3 : Le modèle d’objet Excel
Columns("A:E").Select
Columns.EntireColumn.AutoFit
Chapitre 8
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.
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, …)
● 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
191
Partie 3 : Le modèle d’objet Excel
Next intWeek
End Sub
expression.SpecialCells(T
Type, Value)
192
Partie 3 : Le modèle d’objet Excel
Plages et cellules
Chapitre 8
xlTextValues Retourne les cellules qui contiennent du texte 2
'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
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.
expression.Add(N
Name, RefersTo, Visible, MacroType, ShortcutKey,
Category, NameLocal, RefersToLocal, CategoryLocal, RefersToR1C1,
RefersToR1C1Local)
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
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.
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
195
Partie 3 : Le modèle d’objet Excel
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)
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
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.
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.
199
Partie 3 : Le modèle d’objet Excel
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
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.
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
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)
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
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
End Sub
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
206
Partie 3 : Le modèle d’objet Excel
Plages et cellules
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 :
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
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
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
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.
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
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
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 ?
214
Partie 4 : Fonctions VBA avancées
Chapitre 9
Remarque La ligne ci-après est uniquement constituée de caractères non
imprimables :
ActiveCell.Value =
Application.WorksheetFunction.Clean(ActiveCell.Value)
ActiveCell.Value =
Application.WorksheetFunction.Trim(ActiveCell.Value)
215
Partie 4 : Fonctions VBA avancées
End If
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
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 ?
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.
217
Partie 4 : Fonctions VBA avancées
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
218
Partie 4 : Fonctions VBA avancées
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.
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
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.
Range(MyCell.Address).Select
strCategory = Left(MyCell.Value, 2)
220
Partie 4 : Fonctions VBA avancées
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.
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.
strCode = Range("D5").Value
strDetails = Mid(strCode, 4, 5)
221
Partie 4 : Fonctions VBA avancées
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.
222
Partie 4 : Fonctions VBA avancées
Application.WorksheetFunction.Search("AR", ActiveCell.Value)
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.
Range(MyCell.Address).Select
223
Partie 4 : Fonctions VBA avancées
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.
224
Partie 4 : Fonctions VBA avancées
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.
225
Partie 4 : Fonctions VBA avancées
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
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
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 :
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)
228
Partie 4 : Fonctions VBA avancées
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 :
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 :
229
Partie 4 : Fonctions VBA avancées
ActiveCell.Value = curInterest
End Sub
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.
ActiveCell.Value = curInterest
ActiveCell.Offset(1, 0).Activate
Next intPer
End Sub
230
Partie 4 : Fonctions VBA avancées
npm;v
TAUX(n vpm;v
va;vc;type;estimation)
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
=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.
Dans la formule précédente, rate (taux) représente le taux d’intérêt par période
(généralement un taux annuel divisé par 12), nper (npm) le nombre total de
périodes de paiement (dans ce cas, 12 * 15, soit 180), pmt (vpm) le montant du
remboursement pour chaque période (1 186,19 dans ce cas), fv (vc) la valeur
capitalisée, autrement dit le montant obtenu après le dernier paiement (la valeur
capitalisée d’un prêt est de 0) et type indique si le paiement est du en début ou en
fin de mois (0, la valeur par défaut, signifie que le paiement est du à la fin du
mois et 1 au début). Ainsi, pour le prêt décrit précédemment, on crée la formule
suivante :
=VA(5%/12;180;-1186,19)
La formule précédente génère une valeur actuelle de €150 000, soit le montant
total du prêt. La somme totale des paiements représente €213 514,20, mais la
valeur actuelle du prêt est inférieure puisque, au moment du prêt, les intérêts
n’entrent pas encore en compte. Après 10 ans de paiements, par exemple, le pro-
priétaire du bien immobilier a payé €142 342,80, mais il lui reste 60 paiements à
effectuer !
232
Partie 4 : Fonctions VBA avancées
Une autre différence entre les calculs de la valeur actuelle et de la valeur actuelle
nette est que les valeurs d’une formule NPV (VAN) peuvent varier, alors que
dans un calcul PV (VA) les paiements sont constants sur toute la durée de vie de
l’annuité. Par exemple, vous envisagez peut-être d’investir €5 000 dans un pla-
cement sécuritaire qui vous rapporte €1 000 après la première année, €1 500
après la deuxième, €2 000 après la troisième et €2 500 après la quatrième année.
En supposant que le taux d’inflation soit de 4%, pour évaluer l’investissement,
vous utilisez la formule suivante :
=VAN(4%;-5000;1000;1500;2000;2500)
Chapitre 9
Vous devez comparer le résultat de plusieurs investissements pour déterminer si
vous devez ou non investir votre argent.
Pour plus d’informations sur l’utilisation d’Excel dans des analyses financières, reportez-
vous à l’ouvrage Microsoft Excel pour le business et la finance, par Wayne L. Winston
(Microsoft Press, 2004).
Dates et heures
À l’instar des fonctions de texte et des fonctions numériques décrites précédem-
ment dans ce chapitre, la manipulation des dates et des heures relève davantage
du domaine d’une formule Excel que de VBA. Il est cependant important de
savoir travailler avec des dates et des heures dans le cadre des tâches avancées
d’Excel.
233
Partie 4 : Fonctions VBA avancées
Important Les dates antérieures au 1er janvier 1900 sont traitées comme
des chaînes. Vous ne pouvez pas les manipuler avec les fonctions de date étu-
diées dans la prochaine section, mais elles sont acceptées comme entrées
valides.
ActiveCell.Value = Now
Vous pouvez également saisir la date et l’heure actuelle dans une cellule de feuille
de calcul avec la formule EXCEL =MAINTENANT, mais si vous n’avez pas rem-
placer la formule par sa valeur en cliquant sur le bouton Copier, puis sur la flèche
du bouton Coller pour en afficher les options pour choisir Valeurs, Excel recal-
cule la formule chaque fois que vous ouvrez le classeur et remplace l’heure de la
Chapitre 9
commande par l’heure en cours. Pour éviter ce problème, créez une macro qui
assigne la valeur Maintenant à la cellule active.
NOW (MAINTENANT) n’est pas la seule fonction de date ou d’heure disponi-
ble dans VBA. Le tableau 9.5 liste et décrit les fonctions disponibles.
Tableau 9-5. Fonctions de date et d’heure
Fonction Fonction
Excel VBA Description
Date Date Renvoie la date en cours.
Heure Time Renvoie l’heure en cours.
Maintenant Now Renvoie la date et l’heure en cours.
/ Timer Retourne le nombre de secondes depuis minuit.
DateVal DateValue En fonction d’une chaîne de caractères, comme
« 2 août 2004 », renvoie une date (par exemple,
02/08/2004).
TemspVal TimeValue En fonction d’une chaîne de caractères, comme
« 19:30 », renvoie une heure (par exemple,
19:30:00).
/ DateSerial En fonction d’une année, d’un mois et d’un jour
(year, month, (par exemple, DateSerial(2, 8, 2004), renvoie la
day) date (02/08/2004).
/ TimeSerial En fonction d’une heure, minute et seconde
(hour, minute, (par exemple, TimeSerial(19, 30, 24), renvoie
second) l’heure (19:30:24).
234
Partie 4 : Fonctions VBA avancées
Chapitre 9
l’une des fonctions de date ou d’heure dans une cellule de feuille de calcul, vous
devez lui appliquer le format Date.
VBA propose un certain nombre d’autres fonctions relatives à la date ou à
l’heure que vous pouvez intégrer à votre code. Le plus intéressantes sont
DateAdd et DateDiff. DateAdd permet d’ajouter un intervalle de temps à une
date ou une heure. Pour ajouter trois jours à la date en cours, servez-vous de la
procédure suivante :
End Sub
Mais comment ajouter un mois à datFirst ? Selon le mois, vous devrez ajouter 28,
30 ou 31 jours. La fonction DateAdd permet d’ajouter une variété d’incréments
d’heure une date ou une heure grâce à une syntaxe ingénieuse :
235
Partie 4 : Fonctions VBA avancées
Par exemple, pour afficher la date située à 9 semaines à partir d’aujourd’hui dans
Chapitre 9
Remarque Vous pouvez également employer des valeurs négatives dans les
fonctions DateSerial et TimeSerial, décrite précédemment, mais la fonction
DateAdd est plus souple puisqu’elle vous permet d’exploiter différentes unités
de temps.
236
Partie 4 : Fonctions VBA avancées
Chapitre 9
actuelle et le 2 août 2005 (rappelez-vous que la date doit être placée entre signes
dièses) :
Pour soustraire des heures, il est inutile d’employer un opérateur spécial : l’opé-
rateur de soustraction fonctionne, mais vous risquez des problèmes si vous pas-
sez minuit. Par exemple, si vous travaillez de 9:00 à 18:00, vous avez travaillé neuf
heures, mais si vous soustrayez 0,875 (le numéro de série pour 9:00) de 0,25 (le
numéro de série de 6:00) vous obtenez un nombre négatif, ce que vous ne pouvez
pas obtenir avec des numéros de série d’heure. L’astuce consiste à ajouter un jour
à la plus petite des valeurs pour réussir la soustraction. En ajoutant 1 au numéro
de série de 6:00, on obtient l’équation 1,25 – 0,875, ce qui donne 0,375 (neuf
heures ou 9:00). Voici comment mettre cette vérification en œuvre en VBA :
237
Partie 4 : Fonctions VBA avancées
Au Quotidien
Quand les heures dépassent 24 heures
Si vous avez déjà essayé d’additionner deux heures dans une feuille de calcul
Excel, vous aurez noté que le programme ne gère pas correctement les résul-
tats supérieurs à 24 heures. En fait, si on additionne 8:00 (8 heures), 7:00
(7 heures) et 10:00 (10 heures), la cellule qui contient le résultat affiche 1:00
(1 heure) ! Autrement dit, Excel ne tient pas compte des 24 premières heures
et affiche uniquement le nombre d’heures qui dépassent 24. Il se produit le
même résultat avec deux instances de 12:00 (12 heures), en fait, même un
total de 49:00 présente 1:00.
Les crochets ([]) qui encadrent le symbole de l’heure signifient que la limite
normale des 24 heures ne s’applique pas : la cellule affiche correctement
25:00. Servez-vous de la même méthode pour afficher plus de 60 minutes
([mm]:ss) ou plus de 60 secondes ([ss]) ou créez un format personnalisé en le
saisissant dans la zone Type. Notez que Excel ne permet pas de créer un for-
mat du type [h]:[mm]:ss. En effet, le nombre des minutes n’étant pas limité, le
nombre d’heures resterait à 0. Sachez également qu’il n’est pas possible de
placer un indicateur de jour ou de mois entre crochets.
Dans ce chapitre, vous avez appris à manipuler les données dans les classeurs
Excel. Avec les fonctions de Excel VBA vous analysez vos données, concaténez les
valeurs de plusieurs cellules pour créer des boîtes de message et gérez les dates et
les heures. Si les fonctions n’existent pas dans Excel VBA, vous pouvez les appeler
à partir du programme Excel principal avec la propriété WorksheetFunction de
l’objet Application.
238
Partie 4 : Fonctions VBA avancées
Chapitre 10
Mise en forme d’objets
Excel
Constantes et palette Polices . . . . . . . . . . . . . . . . . . . . 252
de couleurs Excel . . . . . . . . . . . . 239 Cellules . . . . . . . . . . . . . . . . . . . 254
Éléments de la feuille Bordures . . . . . . . . . . . . . . . . . . 256
de calcul. . . . . . . . . . . . . . . . . . . 250
Dans leur forme d’origine, les feuilles de calcul Microsoft Excel sont relativement
ordinaires : texte en noir sur fond blanc, quadrillage gris délimitant les cellules,
une manière très fonctionnelle de présenter des données. On peut également
préciser le fait que toutes les données sont présentées de manière similaires et
que rien ne distingue une cellule d’une autre exceptée la valeur. Si les données
constituent la part la plus importante d’une feuille de calcul, la présentation a
sont importance.
Dans ce chapitre, vous allez apprendre à exploiter les constantes de couleur et la
palette de couleurs Excel, à modifier la palette de couleurs existante, à passer
outre la limite des 56 couleurs d’Excel et à formater des cellules pour modifier
leurs couleurs de remplissage, de police et de bordures.
239
Partie 4 : Fonctions VBA avancées
Pourquoi ces couleurs sont-elles les seules assorties de constantes ? La raison est
liée à la manière dont les couleurs sont créées sur un ordinateur. Vous avez sans
doute déjà étudié le cercle chromatique, probablement en classe, et vous avez
appris que l’on peut combiner les pigments rouges, bleus et jaunes pour créer la
couleur de son choix. Si ceci est vrai pour les pigments (peinture ou encre), ce
n’est pas le cas de la lumière. Pour créer des couleurs à partir de la lumière, on se
sert des trois couleurs primaires : rouge, vert et bleu.
La différence entre les pigments et la lumière s’exprime dans le nom de chaque
système de couleurs : la couleur soustractive, qui se réfère aux pigments, et la cou-
leur additive qui se réfère à la lumière. Dans le système soustractif, on commence
par le blanc (la totalité des couleurs) et, par le biais des pigments, on « soustrait »
les couleurs en les bloquant avec de la peinture. Si on mélange une quantité égale
de couleurs primaires (rouge, jaune et bleu), on obtient du noir puisqu’on a
soustrait toutes les couleurs. Dans le système additif, en revanche, on commence
par le noir (l’absence de couleur ou de lumière) et on ajoute les couleurs. Dans ce
système, si on ajoute du rouge, du vert et du bleu en pleine intensité, on obtient
du blanc.
À l’instar des pigments dont on mélange différentes quantités pour obtenir des
Chapitre 10
Pour définir une couleur avec un mélange de lumière rouge, verte et bleue, on
utilise la fonction Visual Basic RGB dont la syntaxe est la suivante :
Dans cette fonction, red représente la quantité de lumière rouge utilisée, green
celle de lumière verte et blue celle de lumière bleue (toute valeur supérieure à 255
240
Partie 4 : Fonctions VBA avancées
Vous pouvez utiliser la fonction RGB pour appliquer directement une couleur à
un élément de la feuille de calcul, mais Excel présente une limite importante : le
programme ne peut afficher simultanément que les 56 couleurs qu’il conserve
Chapitre 10
dans la palette de couleurs. Si vous tentez d’assigner à un élément une couleur
absente de la palette, Excel affiche la couleur de la palette la plus proche.
Le tableau 10.3 liste les valeurs RVB des couleurs assignées à chaque entrée de la
palette de couleurs Excel standard, ainsi que son nom.
Tableau 10-3. Valeurs RVB des couleurs Excel standard
Composante Composante Composante
Nom rouge verte bleue
Noir (couleur 1) 0 0 0
Blanc (couleur 2) 255 255 255
Rouge (couleur 3) 255 0 0
Vert (couleur 4) 0 255 0
Bleu (couleur 5) 0 0 255
Jaune (couleur 6) 255 255 0
Magenta (couleur 7) 255 0 255
Cyan (couleur 8) 0 255 255
Couleur 9 128 0 0
Couleur 10 0 128 0
241
Partie 4 : Fonctions VBA avancées
242
Partie 4 : Fonctions VBA avancées
Après les huit couleurs assignées aux constantes Visual Basic, les noms des cou-
leurs reflètent leur position au sein de l’index de la palette. Ce choix est logique,
si l’on sait qu’il est possible (en tant qu’utilisateur du programme principal
Excel) d’assigner de nouvelles valeurs RVB à n’importe quel emplacement de la
palette.
Chapitre 10
Remarque La palette de couleurs à laquelle il est fait référence ici est diffé-
rente de celle affichée dans le programme Excel principal. Elle est uniquement
employée comme représentation interne des couleurs.
Workbook.Colors (index)
Dans le code précédent, index représente un numéro entre 1 et 56. Dans un gra-
phique en secteurs représentant chacun l’un des 100 produits commercialisés
par votre entreprise, certaines couleurs seront répétées. Ce n’est pas si grave, il
suffit de les éloigner suffisamment dans le graphique de sorte qu’il soit simple de
différencier chaque segment. En alternative, vous pouvez créer un graphique qui
représente la proportion des ventes attribuées aux 50 produits les plus vendus
(avec un segment représentant les 50 autres produits), puis diviser les ventes des
produits restants sur un autre graphique.
243
Partie 4 : Fonctions VBA avancées
Sub DisplayPalette()
Range("A1").Select
ActiveCell.Formula = "Couleur"
ActiveCell.Offset(0, 1).Formula = "Index"
ActiveCell.Offset(1, 0).Activate
For NumColor = 1 To 56
With ActiveCell.Interior
.ColorIndex = NumColor
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
ActiveCell.Offset(0, 1).Formula = NumColor
ActiveCell.Offset(1, 0).Activate
Next NumColor
End Sub
Attention Une version de cette procédure a été publiée sur la Base de con-
naissances Microsoft à l’adresse http://support.microsoft.com/support/kb/
articles/q149/1/70.asp, mais elle contient une erreur de nommage d’une
variable qui lui fait répéter la même couleur dans les 56 cellules. Pour vous
entraîner au débogage, exécutez le code, voyez le résultat et essayez de loca-
liser le problème (à condition que le problème n’ait pas été corrigé).
Chapitre 10
Que faire si les couleurs proposées dans la palette ne répondent pas à vos
attentes ? Il n’est pas rare qu’une entreprise possède une convention de couleurs
pour ses logos et ses documents officiels. Pour éviter d’employer une couleur
inexacte, vous pouvez remplacer une couleur existante par une couleur person-
nalisée.
Pour assigner une nouvelle couleur à un emplacement de la palette de couleurs
du programme Excel, procédez comme suit :
1 Dans le menu Outils, choisissez Options et cliquez sur l’onglet Couleur.
244
Partie 4 : Fonctions VBA avancées
Mais quelles couleurs faut-il remplacer ? L’une de celles que vous n’emploierez
Chapitre 10
pas, bien sûr, mais la palette standard contient quelques doublons. Pourquoi ?
Aucun indice, mais les voici :
● La couleur 32 duplique la couleur 5 (bleu).
● La couleur 27 duplique la couleur 6 (jaune).
● La couleur 26 duplique la couleur 7 (magenta).
● La couleur 28 duplique la couleur 8 (cyan).
● La couleur 30 duplique la couleur 9.
● La couleur 29 duplique la couleur 13.
● La couleur 31 duplique la couleur 14.
● La couleur 54 duplique la couleur 18.
● La couleur 34 duplique la couleur 20.
Commencez par remplacer les couleurs dont le numéro est élevé, en particulier
si vous substituez une couleur désignée par l’une des constantes de couleur VBA.
La procédure suivante ajoute un nouveau jeu de couleurs à la palette du classeur
actif en se servant des couleurs 26, 27, 28, 29 et 30 :
Sub CustomColors()
ActiveWorkbook.Colors(26) = RGB(240, 248, 255)
245
Partie 4 : Fonctions VBA avancées
Sub ObtenirNosCouleurs()
ActiveWorkbook.Colors = Workbooks("NosCouleurs.xls").Colors
End Sub
Chapitre 10
Pour copier une palette de couleurs à partir d’un autre classeur dans l’interface
Excel, procédez de la manière suivante :
1 Ouvrez le classeur dont vous voulez copier la palette de couleurs.
2 Dans le menu Outils du classeur où vous voulez la copier et choisissez
Options.
3 Cliquez sur l’onglet Couleur.
4 Dans la liste déroulante Copier les couleurs de, cliquez sur le nom du clas-
seur qui contient la palette de couleurs à copier. Cliquez sur OK.
Si vous avez modifié la palette de couleurs Excel, vous pouvez revenir aux para-
mètres par défaut en appelant la méthode ResetColors de l’objet Workbook,
comme dans la procédure suivante :
Sub NormalColors()
ActiveWorkbook.ResetColors
End Sub
Pour revenir à la palette par défaut dans l’interface Excel, procédez comme suit :
1 Dans le menu Outils, choisissez Options.
2 Cliquez sur l’onglet Couleur.
3 Cliquez sur Par défaut.
246
Partie 4 : Fonctions VBA avancées
Chapitre 10
Tableau 10-4. Valeurs RVB des couleurs HTML standard
Composante Composante Composante Composante Composante Composante
Couleur rouge verte bleue Couleur rouge verte bleue
aliceblue 240 248 255 antiquewhite 250 235 215
aqua 0 255 255 aquamarine 127 255 212
azure 240 255 255 beige 245 245 220
bisque 255 228 196 black 0 0 0
blanchedalmond 255 235 205 blue 0 0 255
blueviolet 138 43 226 brown 165 42 42
burlywood 222 184 135 cadetblue 95 158 160
chartreuse 127 255 0 chocolate 210 105 30
coral 255 127 80 cornflowerblue 100 149 237
cornsilk 255 248 220 crimson 220 20 60
cyan 0 255 255 darkblue 0 0 139
darkcyan 0 139 139 darkgoldenrod 184 134 11
darkgray 169 169 169 darkgreen 0 100 0
darkkhaki 189 183 107 darkmagenta 139 0 139
247
Partie 4 : Fonctions VBA avancées
248
Partie 4 : Fonctions VBA avancées
Chapitre 10
snow 255 250 250 springgreen 0 255 127
steelblue 70 130 180 tan 210 180 140
teal 0 128 128 thistle 216 191 216
tomato 255 99 71 turquoise 64 224 208
violet 238 130 238 wheat 245 222 179
white 255 255 255 whitesmoke 245 245 245
yellow 255 255 0 yellowgreen 154 205 50
Pour plus d’informations sur la publication de feuilles de calcul et de classeurs Excel sur
le web, reportez-vous au chapitre 25 « Excel et le web ».
Le tableau 10.5 met en correspondance les couleurs de la palette Excel et les cou-
leurs HTML standards.
249
Partie 4 : Fonctions VBA avancées
250
Partie 4 : Fonctions VBA avancées
Sub CycleGridlines()
MsgBox ("Appliquer la couleur bleu au quadrillage.")
ActiveWindow.GridlineColorIndex = 5
MsgBox ("Appliquer la couleur blanc au quadrillage.")
ActiveWindow.GridlineColor = RGB (255, 255, 255)
MsgBox ("Appliquer la couleur par défaut au quadrillage.")
ActiveWindow.GridlineColorIndex = xlColorIndexAutomatic
MsgBox ("Fin de la procédure.")
End Sub
Chapitre 10
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
ActiveWorkbook.ActiveSheet.Tab.ColorIndex = 5
End Sub
Pour plus d'informations sur les événements Excel en général et les actions qui déclen-
chent ou non l’événement Worksheet_Change en par ticulier, repor tez-vous au
chapitre 12, « Événements ».
La figure 10.1 montre deux feuilles de calcul dont on a modifié les onglets avec la
procédure événementielle Worksheet_Change. La feuille de calcul de gauche est
active : Excel affiche une ligne de la couleur de l’onglet sous le nom de la feuille
de calcul. Notez qu’Excel affiche le nom de la feuille de calcul en noir un fond
blanc pour qu’il soit plus lisible. La feuille inactive à droite présente un onglet
dont l’arrière-plan est bleu et le texte blanc, pour indiquer qu’elle a également été
modifiée.
251
Partie 4 : Fonctions VBA avancées
Polices
Si vous programmez Excel avec VBA, n’oubliez pas que les données constituent
la partie la plus importante de votre feuille de calcul. Plus les données sont sim-
ples à appréhender et plus votre présentation est efficace.
La majorité des utilisateurs d’Excel apprennent à utiliser les commandes de la
barre d’outils Mise en forme et de la boîte de dialogue Format de cellule dès leurs
débuts dans Excel. Dans ce même esprit, vous devez faire de l’objet Font votre
répertoire VBA de base. Le tableau 10.6 liste et décrit les propriétés de l’objet
Font.
252
Partie 4 : Fonctions VBA avancées
Chapitre 10
Size Retourne ou définit la taille de la police en points.
Strikethrough Positionnée à True ou False, cette propriété détermine si le
texte est barré d’une ligne horizontale.
Subscript Positionnée à True ou False, cette propriété détermine si le
texte est affiché en indice.
Superscript Positionnée à True ou False, cette propriété détermine si le
texte est affiché en exposant.
Underline Renvoie ou définit le type de soulignement du texte
sélectionné. Le style du soulignement est représenté par
l’une des constantes Excel suivantes : xlUnderlineStyleNone,
xlUnderlineStyleSingle, xlUnderlineStyleDouble,
xlUnderlineStyleSingleAccounting ou
xlUnderlineStyleDoubleAccounting.
Sub AvailableCredit()
253
Partie 4 : Fonctions VBA avancées
start, length)
Characters (s
Sub HighlightAgent()
Dim MyCell As Range
Dim strFirst, strLast, strAllCells, strCategory As String
Pour plus d’informations sur la manipulation des chaînes de texte et autres valeurs de
cellules et sur la manière de vérifier si le début et/ou la fin d’une sous-chaîne répond à un
schéma spécifique, reportez-vous au chapitre 9, « Manipulation des données avec VBA ».
Cellules
Dans le cadre de la mise en forme, on divise les cellules en deux sections : l’inté-
rieur et la bordure. À l’instar du quadrillage et des onglets de feuille, il est possi-
ble de modifier la couleur et le motif de remplissage de l’intérieur d’une cellule.
Par exemple, les couleurs de remplissage jaune ou orange clair mettent en évi-
dence les valeurs des cellules formatées. En fait, comme l’illustre la figure 10.2, la
plupart des formats automatiques proposés par Excel exploitent les couleurs
intérieures pour distinguer les en-têtes des données.
254
Partie 4 : Fonctions VBA avancées
Figure 10-2. Le Format automatique met en avant les intitulés pour simplifier la
lecture des données.
Chapitre 10
ColorIndex Détermine la couleur de remplissage d’une cellule avec
une valeur d’index qui se réfère à la palette de couleurs
Excel.
Pattern Détermine le motif employé pour remplir l’intérieur d’une
cellule avec l’une des constantes Excel XlPattern
suivantes : xlPatternAutomatic, xlPatternChecker,
xlPatternCrissCross, xlPatternDown, xlPatternGray16,
xlPatternGray25, xlPatternGray50, xlPatternGray75,
xlPatternGray8, xlPatternGrid, xlPatternHorizontal,
xlPatternLightDown, xlPatternLightHorizontal,
xlPatternLightUp, xlPatternLightVertical, xlPatternNone,
xlPatternSemiGray75, xlPatternSolid, xlPatternUp ou
xlPatternVertical
PatternColor Détermine la couleur du motif de remplissage d’une
cellule avec une constante de couleur Excel ou une
valeur de la fonction RGB.
PatternColorIndex Détermine la couleur du motif de remplissage d’une
cellule avec une valeur d’index qui se réfère à la palette
de couleurs Excel.
255
Partie 4 : Fonctions VBA avancées
ColorIndex est le noir (dont le numéro d’index est 1 dans la propriété PatternCo-
lorIndex), mais vous pouvez en changer.
La procédure suivante applique la couleur de remplissage bleu à la cellule active,
ajoute un motif de lignes horizontales minces et noires et applique la couleur de
remplissage blanc :
Sub ChangePattern()
With ActiveCell
.Interior.ColorIndex = 5
MsgBox ("D’accord pour ajouter le motif horizontal ?")
.Interior.Pattern = xlPatternLightHorizontal
MsgBox ("D’accord pour changer la couleur du motif ?")
.Interior.PatternColorIndex = 2
End With
End Sub
Bordures
Pour affecter l’extérieur d’une cellule, on fait appel à la propriété Borders, qui se
trouve être au pluriel. En effet, chaque cellule possède six (oui, six) bordures.
Pour modifier une bordure, on fait appel à l’une des constantes de XlBordersIn-
256
Partie 4 : Fonctions VBA avancées
Lorsque vous référencez la propriété Borders dans le code VBA, Excel crée un
objet Border, dont le tableau 10.8 liste les propriétés.
Tableau 10-8. Propriétés de l’objet Borders
Propriété Description
Color Définit ou renvoie la couleur d’une bordure en se servant de
la fonction RGB.
ColorIndex Définit ou renvoie la couleur d’une bordure en se servant
d’une référence à une position dans la palette de couleurs
Excel ou de l’une des constantes xlColorIndexAutomatic
(attribue la couleur par défaut) ou xlColorIndexNone
(formate une bordure sans couleur).
LineStyle Définit le style de ligne en se servant de l’une des
constantes de xlLineStyle : xlContinuous, xlDash, xlDashDot,
xlDashDotDot, xlDot, xlDouble, xlLineStyleNone ou
xlSlantDashDot.
Weight Définit le poids de la ligne en se servant de l’une des
Chapitre 10
constantes de xlBorderWeight : xlHairline, xlMedium, xlThick
ou xlThin.
Sub BlueBorder()
With Worksheets("Feuil1").Range("A1:D1").Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = vbBlue
End With
End Sub
257
Partie 4 : Fonctions VBA avancées
Sub RedBorder()
Range("B1:E1").BorderAround LineStyle := xlDash, Weight := xlThin, _
Color := vbRed
End Sub
Dans ce chapitre, nous avons étudié comment Excel gère les couleurs, comment
afficher les couleurs dans la palette de couleurs Excel et comment adapter ces
couleurs à vos besoins. Nous avons également fait connaissance avec les proprié-
tés de mise en forme disponibles qui permettent de présenter les données et d’en
simplifier la lecture. Nous avons également décrit comment mettre en évidence
des feuilles de calcul modifiées depuis leur dernier enregistrement.
Chapitre 10
258
Partie 4 : Fonctions VBA avancées
Chapitre 11
Création de macros
complémentaires et de
compléments COM
Présentation des macros Création de compléments
complémentaires . . . . . . . . . . . . 259 d’automatisation et COM . . . . . 267
Boîte de dialogue Macro Construction d’un complément
complémentaire. . . . . . . . . . . . . 260 d’automatisation avec
Création de macros Visual Basic 6 . . . . . . . . . . . . . . 271
complémentaires Excel . . . . . . . 262 Génération d’un complément
Collection AddIns . . . . . . . . . . . . 264 COM avec Visual Basic .NET . . . 277
259
Partie 4 : Fonctions VBA avancées
Par défaut, la boîte de dialogue Macro complémentaire présente les macros com-
plémentaires installées avec Excel. Une coche en regard du nom d’une macro
complémentaire indique que celle-ci est chargée. Le tableau 11.1 présente une
liste des macros complémentaires installées avec Excel.
Chapitre 11
260
Partie 4 : Fonctions VBA avancées
Si la macro que vous souhaitez employer ne se trouve pas dans le boîte de dialo-
gue Macro complémentaire, cliquez sur le bouton Parcourir pour la localiser. Par
défaut, les macros complémentaires créées par l’utilisateur sont stockées dans le
dossier \Documents and Settings\Utilisateur\Application Data\Micro-
soft\AddIns. Rien ne vous empêche cependant de les stocker dans le dossier de
votre choix.
261
Partie 4 : Fonctions VBA avancées
Else
PrixNet = 0
End If
End Function
Figure 11-2. Spécifiez le titre d’une macro complémentaire ainsi que les autres
propriétés du classeur.
262
Partie 4 : Fonctions VBA avancées
Chapitre 11
263
Partie 4 : Fonctions VBA avancées
Collection AddIns
La collection AddIns contient le jeu de macros complémentaires disponibles,
qu’elles aient ou non été installées. Les entrées de cette collection correspondent
aux macros de la boîte de dialogue Macro complémentaire. Cette collection per-
met de parcourir les macros complémentaires disponibles pour Excel, d’ajouter
de nouvelles macros et d’installer ou de supprimer des macros au programme.
Tour d’horizon
La collection AddIns constitue un objet de collection classique possédant les pro-
priétés décrites dans le tableau 11.2.
Tableau 11-2. Propriétés de la collection AddIns
Propriété Type Description
Application Object Retourne l’objet Application représentant la créateur de la
macro complémentaire.
Count Long Retourne le nombre total d’objets AddIns dans la collection.
Creator Long Retourne un entier 32 bits contenant la valeur XCEL binaire.
Item(Index) String Retourne l’objet AddIn associé à Index. Si Index est numérique,
elle se réfère à la position relative de l’objet dans la collection.
Si Index est une chaîne, elle retourne une référence à l’objet
AddIn dont la propriété Name correspond à la valeur de Index.
Parent Object Retourne l’objet parent associé à la macro complémentaire.
La collection AddIns inclut une seule méthode, Add. Celle-ci prend un ou deux
paramètres et retourne une référence d’objet au nouvel objet AddIn. Voici la syn-
taxe de la méthode Add telle qu’elle s’applique à l’objet AddIn :
Chapitre 11
FileName, CopyFile)
expression.Add(F
264
Partie 4 : Fonctions VBA avancées
L’objet AddIn
L’objet AddIn représente une macro complémentaire disponible dans Excel. Le
tableau 11.3 donne une liste des propriétés associées à une macro complémen-
taire.
Tableau 11-3. Propriétés de l’objet AddIn
Propriété Type Description
Application Object Retourne l’objet Application représentant le créateur de la
macro complémentaire.
CLSID String Retourne le CLSID de la macro complémentaire.
Creator Long Retourne un entier 32 bits contenant la valeur XCEL binaire.
FullName String Retourne le chemin complet et le nom de fichier du classeur
qui contient la macro complémentaire.
Installed Boolean Si elle est True, cette propriété signifie que la macro
complémentaire est installée.
Name String Retourne le nom de fichier de la macro complémentaire.
Parent Objet Retourne l’objet parent associé à la macro complémentaire.
Path String Retourne le chemin d’accès au répertoire hébergeant la macro
complémentaire.
ProgId String Retourne l’identificateur de programmation associé à l’objet.
265
Partie 4 : Fonctions VBA avancées
Routines automatiques
Dans les versions d’Excel antérieures à Excel 97, on appelait des macros spé-
ciales comme Auto_Add et Auto_Remove lors de l’installation ou de la sup-
pression d’une macro complémentaire. Ces macros sont stockées dans un
module associé au classeur au lieu de se trouver dans l’objet ThisWorkbook.
Bien que ces macros continuent de fonctionner dans cette version d’Excel,
préférez les événements Workbook correspondants.
Dans d’anciennes versions d’Excel, vous pouvez rencontrer les routines auto-
matiques Auto_Open et Auto_Close, qui correspondent à Workbook_Open et
Workbook_Close, et Auto_Activate et Auto_Deactivate, qui correspondent à
Workbook_Activate et Workbook_Deactivate.
Pour afficher les valeurs stockées dans l’objet AddIn, écrivez une macro similaire
à celle du listing précédent. Cette macro utilise une instruction For Each pour
boucler dans chaque objet AddIn de la collection AddIns puis insère la valeur
dans la feuille de calcul en cours.
Sub GetAddIns()
Dim a As AddIn
Dim i As Long
i = 1
For Each a In Application.AddIns
i = i + 1
Cells(i, 1) = i - 1
Cells(i, 2) = a.Application.Name
Cells(i, 3) = a.CLSID
Cells(i, 4) = a.Creator
Cells(i, 5) = a.FullName
Chapitre 11
Cells(i, 6) = a.Installed
Cells(i, 7) = a.Name
Cells(i, 8) = a.Parent.Name
Cells(i, 9) = a.Path
Cells(i, 10) = a.progID
Next a
End Sub
Les propriétés Application et Parent retournent les références de l’objet que l’on
peut afficher dans une cellule. En conséquence, la propriété Name associée à cha-
cun de ces objets s’affiche. La figure 11.5 montre la feuille de calcul après exécu-
tion de la macro GetAddIns.
266
Partie 4 : Fonctions VBA avancées
EXE externe. Pour accéder aux macros complémentaires externes, il existe deux
méthodes différentes créées avec des techniques de programmation similaires.
Les compléments COM sont essentiellement employés pour répondre à un clic
sur un bouton de commande ou à tout autre événement Excel, comme ouvrir ou
fermer un classeur. Contrairement aux macros complémentaires Excel, vous ne
pouvez pas créer de complément COM à utiliser dans une formule de cellule. Les
compléments d’automatisation sont moins limitatifs : ils servent à répondre à
des événements Excel et proposent des fonctions que vous pouvez exploiter dans
une formule.
Pour définir les compléments COM, vous utilisez la boîte de dialogue Modules
complémentaires COM, accessible depuis la barre d’outils, alors que pour les
compléments d’automatisation, vous pouvez vous servir de la boîte de dialogue
267
Partie 4 : Fonctions VBA avancées
EXE ou DLL?
Vous pouvez créer les compléments COM dans un fichier DLL ou EXE. Les deux
possèdent des avantages et des inconvénients. En général, un composant DLL
fonctionne mieux qu’un composant EXE. En effet, il s’exécute dans le proces-
sus, ce qui évite la surcharge liée à l’appel d’un composant hors processus.
Interface IDTExtensibility2
L’interface IDTExtensibility2 constitue une interface générale partagée par de
nombreux produits hors Microsoft Office. Cette interface représente une
manière standard pour une application de communiquer avec une macro com-
plémentaire. Tout complément COM doit mettre en œuvre chacune des métho-
des listées dans le tableau 11.4.
268
Partie 4 : Fonctions VBA avancées
269
Partie 4 : Fonctions VBA avancées
Clés du registre
Les compléments COM doivent déclarer certaines entrées dans le registre Win-
dows. Toutes les entrées de registre sont stockées dans la clé suivante, où App
représente le nom de l’application Office (comme Excel) et ProgID représente la
valeur ProgID associée à la macro complémentaire. Ces entrées sont générale-
ment créées par le programme d’installation de la macro.
HKEY_CURRENT_USER\Software\Microsoft\Office\App\Addins\ProgID
Sous la clé spécifiée précédemment, se trouve une série de sous-clés qui contien-
nent des informations spécifiques relatives au complément. La sous-clé LoadBe-
havior est une valeur DWORD qui détermine si l’application Office charge un
complément. Une valeur de 0 signifie que le complément n’est pas chargé, une
valeur de 3 signifie qu’il est chargé au démarrage de l’application, une valeur de
9 signifie qu’il est chargé à la demande de l’utilisateur et une valeur de 16 signifie
qu’il est chargé une fois, au démarrage suivant de l’application.
La sous-clé Description est une valeur String qui s’affiche dans la boîte de dialo-
gue Modules complémentaires COM, alors que la sous-clé FriendlyName est une
valeur String retournée par la propriété Description du complément.
Les compléments qui exploitent l’interface IDTExtensibility2 possèdent égale-
ment une entrée de registre nommée CommandLineSafe. Il s’agit d’une valeur
270
Partie 4 : Fonctions VBA avancées
Concevoir le complément
Voici le code du complément d’automatisation. Le module commence par défi-
nir une variable publique qui contiendra la référence à l’objet Excel.Application.
Le reste du code met en œuvre les cinq méthodes nécessaires à la gestion de
l’interface IDTExtensibility2, ainsi qu’une fonction supplémentaire qui met en
œuvre la même fonction PrixNet que celle employée dans la macro complémen-
taire Excel, précédemment dans ce chapitre.
Option Explicit
End Sub
End Sub
End Sub
271
Partie 4 : Fonctions VBA avancées
End Sub
Else
PrixNet = 0
End If
End Function
272
Partie 4 : Fonctions VBA avancées
Chapitre 11
273
Partie 4 : Fonctions VBA avancées
274
Partie 4 : Fonctions VBA avancées
9 Créez une feuille de calcul qui exploite la fonction PrixNet, comme celle
de la figure 11.8.
Chapitre 11
275
Partie 4 : Fonctions VBA avancées
Entrées du registre
Même si la création d’une macro complémentaire avec le modèle AddIn de
Visual Basic 6 semble augmenter la charge de travail, AddInDesigner simplifie le
travail nécessaire en créant toutes les entrées appropriées dans le registre Win-
dows à votre place (voir figure 11.9). Vous pouvez vérifier ces entrées en exécu-
tant RegEdit (cliquez sur Démarrer, Exécuter, tapez regedit et cliquez sur OK).
Chapitre 11
Figure 11-9. Vérifiez les entrées créées dans le registre Windows avec
l’utilitaire RegEdit.
276
Partie 4 : Fonctions VBA avancées
Chapitre 11
277
Partie 4 : Fonctions VBA avancées
278
Partie 4 : Fonctions VBA avancées
Il est possible de développer un complément qui pourra être utilisé dans plu-
sieurs applications Office. Cette fonctionnalité est intéressante si vous écrivez
un complément d’ordre général comme un navigateur d’images ou un locali-
seur de fichiers. Avec l’objet d’application passé à la méthode OnConnection,
vous pouvez déterminer quelle application a appelé le complément et apporter
les modifications appropriées aux menus ou informations contenues dans
l’application.
Modifier le modèle
Même si vous avez coché Microsoft Excel pendant l’exécution de l’assistant, vous
devez explicitement ajouter une référence à la bibliothèque TypeLib Excel dans le
programme Visual Basic .NET. Pour ce faire, dans le menu projet, choisissez
Ajouter une référence. Dans la boîte de dialogue du même nom, cliquez sur
l’onglet COM et sélectionnez Microsoft Excel 11.0 Object Library. Pour finir, cli-
quez sur le bouton Sélectionner puis sur le bouton OK pour ajouter la référence
à votre projet.
Chapitre 11
279
Partie 4 : Fonctions VBA avancées
applicationObject = application
addInInstance = addInInst
End Sub
MonBouton =
applicationObject.CommandBars("Standard").Controls.Add(1)
MsgBox("Démarrage terminé")
End Sub
Définissez ensuite la propriété Tag pour indiquer le nom du bouton ainsi que la
propriété OnAction pour qu’elle pointe vers ce complément.
280
Partie 4 : Fonctions VBA avancées
Reportez-vous au chapitre 18, « Personnalisation des menus et des barres d’outils », pour
plus d’informations sur la manière de créer et de manipuler les menus et les barres
d’outils.
MonBouton.Delete()
MonBouton = Nothing
End Sub
Pour finir, on appelle le code associé à l’événement Click du bouton lorsque l’on
clique sur Mon Bouton dans la barre d’outils. Comme le montre cet exemple, la
routine MonBouton_Click se contente d’appeler la routine MsgBox pour afficher
un simple message à l’écran. Cependant, dans une macro complémentaire plus
complexe, les routines gèrent les interactions avec l’utilisateur relatives au com-
plément.
Private Sub MonBouton_Click(ByVal CTRL As _
Microsoft.Office.Core.CommandBarButton, _
ByRef CancelDefault As Boolean) Handles MonBouton.Click
End Sub
Installer le complément
Pour installer le complément, vous devez commencer par le générer. Ensuite,
vous créerez le programme d’installation et l’exécuterez. Chapitre 11
281
Partie 4 : Fonctions VBA avancées
Pour vérifier que le complément est correctement installé, démarrez Excel. Lors-
que le complément s’exécute, une boîte de message s’affiche pour vous informer
que l’installation est terminée. Notez la présence du bouton Mon Bouton dans la
barre d’outils Standard.
Chapitre 11
Si vous cliquez sur le bouton Mon Bouton, vous affichez une boîte de message
qui indique qu’on a cliqué sur le bouton Mon Bouton.
282
Partie 4 : Fonctions VBA avancées
Dans ce chapitre, nous avons étudié les macros complémentaires et les complé-
ments et la manière de les intégrer à une application Excel. Nous avons ensuite
expliqué comment utiliser la boîte de dialogue Macro complémentaire pour
incorporer une macro complémentaire dans Excel. Pour finir, vous avez appris
trois techniques différentes pour générer un complément : créer un classeur avec
une série de macros Excel et les enregistrer dans un fichier .xla, créer un complé-
ment d’automatisation avec Visual Basic 6 et créer un complément COM avec
Visual Basic .NET. Chacune de ces techniques possède des avantages et des
inconvénients selon la manière dont vous prévoyez de l’incorporer à l’applica-
tion.
Chapitre 11
283
Partie 4 : Fonctions VBA avancées
Chapitre 12
Événements
Activation et désactivation des Événements Worksheet . . . . . . 294
événements . . . . . . . . . . . . . . . . 286 Événements Application . . . . . . 298
Événements Workbook . . . . . . . 288
Dans Microsoft Excel, toute action qui se produit, comme ouvrir un classeur,
enregistrer le fichier ou recalculer une feuille de calcul constitue un événement.
Certains événements sont déclenchés par l’application et d’autres par l’utilisa-
teur. Quelle que soit la manière dont l’événement s’initie, vous pouvez lui assi-
gner des procédures pour optimiser l’interaction de l’utilisateur avec
l’application Excel.
Au moment du déclenchement, Excel recherche une procédure d’événement
intitulée Objet_NomÉvénement, dans laquelle Objet représente l’objet qui génère
et contient l’événement et NomÉvénement représente le nom du déclencheur.
Par exemple, si un utilisateur change la sélection, soit en cliquant dans une cel-
lule du classeur, soit en se servant des flèches de navigation, Excel génère un évé-
nement SelectionChange et exécute tout code se trouvant dans une procédure
intitulé Objet_SelectionChange. De même, si l’utilisateur modifie la valeur d’une
cellule, en tapant une nouvelle valeur dans une cellule ou en modifiant la pro-
priété Value d’une procédure VBA, Excel déclenche un événement Change et
exécute la procédure d’événement Objet_Change.
Dans ce chapitre, vous allez apprendre à activer et à désactiver les événements,
ainsi qu’à exploiter efficacement les événements Workbook, Worksheet et Applica-
tion.
Pour plus d’informations sur les événements Chart, reportez-vous au chapitre 15,
« Graphiques ». Pour les événements UserForm, repor tez-vous au chapitre 19,
« Formulaires utilisateur ».
285
Partie 4 : Fonctions VBA avancées
Figure 12-1. Les composants de chaque Projet VBA sont affichés sous forme
d’arborescence.
code qui modifie une autre cellule, vous devez désactiver les événements pour
empêcher Worksheet_Change de s’auto-appeler de manière répétitive. Si une
procédure s’appelle elle-même continuellement, elle risque de faire déborder la
286
Partie 4 : Fonctions VBA avancées
Événements
pile des appels (un enregistrement interne des tâches en attente au sein d’Excel)
ou d’épuiser la mémoire.
Par défaut, tous les événements sont activés. Pour désactiver tous les événe-
ments, ajoutez la ligne de code suivante à votre procédure VBA :
Application.EnableEvents = False
On désactive les événements essentiellement pour une raison : éviter les boucles
sans fin d’événements ininterrompus. Supposons, par exemple, que vous avez
développé une fiche horaire et que le nombre maximum d’heures qu’un employé
est autorisé à travailler est de 40 heures par semaine. Vous écrivez la code pour
valider le contenu au moment où les données sont saisies dans la cellule qui con-
tient le nombre total d’heures de chaque employé. Dans cet exemple, vous sur-
veillez l’événement Change de la feuille de calcul par le biais d’une procédure
Worksheet_Change. Votre procédure vérifie l’entrée de l’utilisateur pour s’assurer
qu’elle est inférieure à 40. Si elle est supérieure à 40, la procédure affiche un mes-
sage informant l’utilisateur qu’il a dépassé le nombre d’heures de travail autori-
sées et efface l’entrée de la cellule. Le problème avec ce scénario est le suivant :
lorsque le contenu de la cellule est effacé, le code VBA génère un nouvel événe-
ment Change, qui exécute à nouveau l’événement. Ce n’est pas ce que vous sou-
haitez. Vous devez donc désactiver les événements avant d’effacer la cellule, puis
les réactiver pour contrôler l’entrée de l’utilisateur suivant. L’événement
Worksheet_Change suivant présent le code nécessaire pour valider les entrées des
utilisateurs dans une plage nommée Heures. Dans cet exemple, vous pouvez
remplacer le nom de la plage Heures par l’adresse d’une cellule spécifique pour
tester le code dans n’importe quel classeur. Cette procédure d’événement fait
référence au niveau de la feuille de calcul. En conséquence, vous devez ajouter le
code au module de la feuille de calcul qui doit déclencher l’événement Change.
287
Partie 4 : Fonctions VBA avancées
Événements Workbook
Les événements de l’objet Workbook se produisent au sein d’un classeur particu-
lier. Les événements Workbook sont activés par défaut mais, comme nous l’avons
mentionné dans la section précédente, vous pouvez les désactiver en position-
nant la propriété EnableEvents sur False. Pour afficher les procédures d’événe-
ments d’un classeur, commencez par ouvrir Visual Basic Editor. Développez le
projet de votre choix dans la fenêtre Projet et double-cliquez sur l’objet
ThisWorkBook pour l’activer. Toutes les procédures d’événements du classeur
s’affichent dans la fenêtre Code, à droite de l’écran.
Pour créer une nouvelle procédure d’événement Workbook, procédez comme
suit :
1 Double-cliquez sur l’objet ThisWorkbook pour l’activer.
2 Cliquez sur la liste déroulante Objet et sélectionnez l’option Workbook.
3 Cliquez sur la liste déroulante Procédure et sélectionnez l’événement de
votre choix.
Dans la figure 12.2, Visual Basic Editor présente la liste déroulante Procédure
pendant la création d’une nouvelle procédure d’événement Workbook.
Chapitre 12
288
Partie 4 : Fonctions VBA avancées
Événements
Après avoir créé une nouvelle procédure d’événement, vous remarquerez que les
lignes Private Sub Workbook_Event et End Sub ont été ajoutées dans la fenêtre
Code. Maintenant que vous avez créé le cadre de la procédure d’événement, vous
pouvez ajouter le code à exécuter lorsque l’événement se déclenche. Le
tableau 12.1 décrit les événements habituellement employés avec l’objet Work-
book.
Tableau 12-1. Événements Workbook courants
Événement Workbook Action qui déclenche l’événement
Open Surveille l’événement Open d’un classeur. Cet événement se
déclenche lorsqu’on ouvre un classeur ou une macro
complémentaire. Il exécute la procédure Workbook_Open.
Activate Surveille l’événement Activate d’un classeur. L’événement se
déclenche lorsqu’on active le classeur.
SheetActivate Surveille l’événement SheetActivate d’un classeur.
L’événement se déclenche lorsqu’on active une feuille
quelconque du classeur.
NewSheet Surveille l’événement NewSheet d’un classeur. L’événement se
déclenche lorsqu’on ajoute une nouvelle feuille au classeur.
Celle-ci pouvant être une feuille de calcul ou une feuille de
graphique, cette procédure s’exécute quel que soit le type de
la feuille ajoutée.
BeforeSave Surveille l’événement BeforeSave d’un classeur. L’événement
se déclenche lorsqu’un utilisateur enregistre le classeur et
s’exécute avant l’action enregistrer.
Deactivate Surveille l’événement Deactivate. L’événement se déclenche
lorsqu’on désactive le classeur, en le fermant ou en en ouvrant
un nouveau, par exemple.
BeforePrint Surveille l’événement BeforePrint. L’événement se déclenche
lorsqu’un utilisateur se sert de la fonctionnalité Aperçu avant
impression ou essaie d’imprimer le classeur. L’événement se
produit avant la fenêtre d’aperçu ou l’exécution de la requête
d’impression.
BeforeClose Surveille l’événement BeforeClose d’un classeur. L’événement
se déclenche lorsqu’un utilisateur ferme le classeur mais
s’exécute avant la fermeture du classeur.
Événement Open
L’événement Open est l’un des plus surveillés. Il se déclenche chaque fois qu’on
Chapitre 12
289
Partie 4 : Fonctions VBA avancées
Événement Activate
L’événement Activate se déclenche lorsqu’on active le classeur : s’il est déjà
ouvert, si on bascule dans la fenêtre Excel après avoir affiché un autre pro-
gramme ou si on bascule entre deux classeurs, par exemple. Pour vous assurer
que le classeur est agrandi, ajoutez la procédure d’événement suivante à l’objet
ThisWorkbook.
pour chaque type de feuille. Vous pouvez, par exemple, sélectionner la cellule A1
de la feuille de calcul pour aider les utilisateurs qui travaillent dans le fichier. La
procédure d’événement suivante vérifie le type de feuille et active la cellule A1 :
290
Partie 4 : Fonctions VBA avancées
Événements
If TypeName(Sh) = "Worksheet" Then Range("A1").Select
End Sub
Événement Newsheet
L’événement NewSheet se déclenche lorsqu’on ajoute une nouvelle feuille au
classeur. La feuille est passée à l’événement en tant qu’argument ce qui vous per-
met de la manipuler. La procédure suivante déplace la nouvelle feuille à la fin du
classeur :
Événement BeforeSave
La procédure d’événement BeforeSave s’exécute avant que le classeur soit enre-
gistré. Cette procédure utilise deux arguments : SaveAsUI et Cancel. L’argument
SaveAsUI sert à identifier si la boîte de dialogue Enregistrer sous s’affiche et
l’argument Cancel permet d’annuler l’opération d’enregistrement. Par exemple,
la procédure d’événement suivante demande aux utilisateurs s’ils souhaitent
enregistrer les modifications qu’ils ont apportées au classeur :
291
Partie 4 : Fonctions VBA avancées
Événement Deactivate
L’événement Deactivate se produit lorsqu’on désélectionne le classeur. La procé-
dure suivante organise toutes les fenêtres ouvertes lorsqu’on désactive le
classeur :
Événement BeforePrint
L’événement BeforePrint s’exécute lorsqu’un utilisateur tente d’imprimer le clas-
seur ou utilise l’Aperçu avant impression. La requête est transférée à la procédure
d’événement en tant qu’argument Cancel, ce qui peut servir à annuler la requête
d’impression si elle est positionnée sur True. Malheureusement, cette procédure
d’événement possède une limite : elle ne peut pas déterminer s’il s’agit d’une
requête d’impression ou si l’utilisateur souhaite simplement afficher un aperçu
du classeur.
La procédure d’événement suivante recalcule l’ensemble du classeur avant que le
classeur actif soit imprimé :
292
Partie 4 : Fonctions VBA avancées
Événements
Événement BeforeClose
La procédure d’événement BeforeClose s’exécute avant que le classeur soit fermé.
On utilise souvent cet événement conjointement à la procédure d’événement
Wor kbook_Ope n. Vous pouvez, par exemple, créer une procédure
Workbook_Open pour ouvrir un menu personnalisé dans le classeur et une pro-
cédure Workbook_BeforeClose pour fermer ensuite le menu personnalisé. Dans
ce scénario, le menu personnalisé est uniquement visible lorsque le classeur est
ouvert. Les procédures d’événements suivantes montrent comment employer les
événements Workbook_Open et Workbook_BeforeClose pour accomplir l’ouver-
ture et la fermeture du menu personnalisé.
End If
End Sub
293
Partie 4 : Fonctions VBA avancées
Événements Worksheet
Les événements de l’objet Worksheet sont parmi les événements les plus intéres-
sants à votre disposition dans Microsoft Excel. Comme nous le verrons, les évé-
nements de l’objet Worksheet se produisent lorsqu’on active la feuille de calcul ou
qu’un utilisateur modifie le contenu d’une cellule. Les événements Worksheet
sont également activés par défaut mais, comme nous l’avons mentionné dans la
section « Activation et désactivation d’événements », précédemment dans ce
chapitre, vous pouvez activer et désactiver les événements.
Pour afficher les procédures d’événements d’une feuille de calcul, commencez
par ouvrir Visual Basic Editor. Développez le projet de votre choix dans la fenêtre
Projet et double-cliquez sur la feuille de calcul pour l’activer. Toutes les procédu-
res d’événements associées à la feuille de calcul s’affichent dans la fenêtre Code,
à droite de l’écran.
Pour créer une nouvelle procédure d’événement Worksheet, procédez comme
suit :
1 Double-cliquez sur l’objet Worksheet intitulé Feuil1 (Feuil1) pour l’activer.
2 Cliquez sur la liste déroulante Objet et sélectionnez l’option Worksheet.
3 Cliquez sur la liste déroulante Procédure et sélectionnez l’événement de
votre choix.
La figure 12.3 montre comment créer une nouvelle procédure d’événement
Worksheet.
Chapitre 12
294
Partie 4 : Fonctions VBA avancées
Événements
Après avoir créé une nouvelle procédure d’événement, vous remarquerez que les
lignes Private Sub Worksheet_Event et End Sub ont été ajoutées dans la fenêtre
Code. Le tableau 12.2 décrit les événements Worksheet les plus courants.
Tableau 12-2. Événements Worksheet courants
Événements Worksheet Action qui déclenche l’événement
Change Surveille l’événement Change d’une feuille de calcul.
L’événement se déclenche lorsque l’utilisateur ou un lien
externe modifient les cellules d’une feuille de calcul.
SelectionChange Surveille l’événement SelectionChange d’une feuille de
calcul. L’événement se déclenche lorsque l’utilisateur
choisit une nouvelle sélection dans la feuille de calcul.
BeforeRightClick Surveille l’événement BeforeRightClick d’une feuille de
calcul. L’événement se déclenche lorsque l’utilisateur clique
droit dans la feuille de calcul.
Événement Change
L’événement Change se produit lorsque l’utilisateur, du code VBA ou un lien
externe modifient une cellule de la feuille de calcul. Il ne se déclenche pas si un
295
Partie 4 : Fonctions VBA avancées
Au Quotidien
L’étrange événement Change
l’événement Change.
296
Partie 4 : Fonctions VBA avancées
Événements
Événement SelectionChange
La procédure d’événement SelectionChange s’exécute chaque fois que l’utilisa-
teur sélectionne une nouvelle cellule ou plage de cellules dans la feuille de calcul.
Cette procédure sert essentiellement à aider l’utilisateur à naviguer au sein des
fichiers importants. Par exemple, la procédure d’événement peut griser la ligne
et la colonne à l’intersection de la cellule active. Lorsque l’utilisateur effectue une
nouvelle sélection, vous désactivez le grisé en cours et le réappliquez à la nouvelle
intersection de ligne et de colonne.
La procédure d’événement suivante permet aux employés de la société Mon Jar-
din de naviguer dans le fichier ListeProduits.xls. Elle fait défiler la fenêtre du clas-
seur jusqu’à la sélection en cours dans l’angle supérieur gauche de la fenêtre.
Événement BeforeRightClick
L’événement BeforeRightClick se déclenche lorsque l’utilisateur clique droit dans
la feuille de calcul. Pour désactiver le menu contextuel qui s’affiche lorsque l’uti-
lisateur clique droit dans la feuille de calcul, piégez l’événement RightClick et
positionnez l’argument Cancel sur True.
297
Partie 4 : Fonctions VBA avancées
Événements Application
Les événements de l’objet Application se déclenchent lorsque l’on crée, ouvre ou
modifie un classeur. Pour écrire une procédure d’événement au niveau de l’objet
Application, vous devez créer un nouvel objet dans un module de classe. Une fois
le nouveau module de classe créé, vous pouvez associer les macros à une variété
d’événements, comme NewWorkbook, SheetActivate ou WorkbookOpen.
Le tableau 12.3 décrit les événements Application couramment employés que
vous pouvez programmer dans vos classeurs.
Tableau 12-3. Événements couramment surveillés par l’objet Application
Événement Action qui déclenche l’événement
NewWorkbook Surveille l’événement NewWorkbook de l’application Excel.
L’événement se déclenche lorsqu’on crée un nouveau classeur.
SheetActivate Surveille l’événement SheetActivate pour l’ensemble du programme
Excel. L’événement se déclenche lorsqu’on active une feuille
quelconque au sein du programme.
WorkbookOpen Surveille l’événement WorkbookOpen de l’application Excel.
L’événement se déclenche lorsqu’on ouvre un classeur quelconque au
sein de la fenêtre Excel.
Au Quotidien
Localiser les événements avec l’Explorateur d’objets
L’Explorateur d’objets constitue un outil pratique qui vous renseigne sur les
objets, leurs propriétés et leurs méthodes. Il sert également à rechercher les
objets supportés par un événement particulier. Par exemple, disons que vous
vouliez trouver les objets supportés par l’événement Change. Activez Visual
Basic Editor et appuyez sur F2 pour afficher la fenêtre Explorateur d’objets.
Vérifiez que <Toutes bibliothèques> est sélectionné, tapez Change et cliquez
sur l’icône des jumelles.
Chapitre 12
298
Partie 4 : Fonctions VBA avancées
Événements
Notez que la liste est divisée en trois colonnes : Bibliothèque, Class et Mem-
bre. La correspondance recherchée peut se trouver dans n’importe laquelle de
ces trois colonnes. Le nom d’un événement ou d’un terme appartenant à une
bibliothèque ou une classe peut être identique à celui d’un autre appartenant
à une autre bibliothèque ou classe, même s’ils ne partagent sans doute pas la
même fonctionnalité. Pour chaque élément de la liste de l’Explorateur d’objets
sur lequel vous cliquez, la barre d’état, qui se trouve dans la partie inférieure
de la liste, présente la syntaxe. Vous noterez qu’une classe ou une bibliothè-
que traite l’événement différemment d’une autre.
299
Partie 4 : Fonctions VBA avancées
5 Créez une variable que vous pouvez utiliser pour faire référence à l’objet
Application déclaré dans le module de classe. Il peut s’agir d’une variable
objet de module, déclarée dans un module VBA classique ou dans l’objet
ThisWorkbook. Par exemple :
300
Partie 4 : Fonctions VBA avancées
Événements
End If
WorkBookNotOpen:
End Function
Une fois que la fonction a été ajoutée à l’objet ThisWorkbook dans le fichier Fac-
ture.xls, vous pouvez l’utiliser pour évaluer si le classeur approprié est ouvert.
L’instruction If…Then…Else suivante, que vous pouvez employer comme sous-
routine au sein d’une procédure englobante, s’assure que le classeur ListePro-
duits.xls s’ouvre lorsque vous devez l’utiliser dans une procédure.
Chapitre 12
301
Partie 4 : Fonctions VBA avancées
Chapitre 13
Manipulation des fichiers
Localisation des fichiers Lecture dans un fichier
externes . . . . . . . . . . . . . . . . . . . 303 externe . . . . . . . . . . . . . . . . . . . 319
Écriture dans un fichier Recherche d’une valeur
externe . . . . . . . . . . . . . . . . . . . . 317 dans un fichier. . . . . . . . . . . . . . 320
La majorité des applications que vous développez pour Microsoft Excel vous
obligent à travailler simultanément dans plusieurs fichiers. Vous devrez, par
exemple, récupérer un listing de fichiers dans un répertoire, supprimer ou
renommer des fichiers. Excel permet d’importer et d’exporter plusieurs types de
fichiers texte. Il arrive cependant que le système de gestion des fichiers texte inté-
gré à Excel ne soit pas suffisant. Par exemple, si vous devez importer un fichier
texte qui contient plus de 256 colonnes de données, ce qui représente la limite
d’Excel, ou si le fichier exploite un délimiteur non standard comme la barre obli-
que inverse (\).
Dans ce chapitre, vous allez apprendre à localiser des fichiers externes, ainsi qu’à
les lire et y écrire. Vous découvrirez également comment préciser vos recherches
à l’aide des caractères génériques et à rechercher des valeurs spécifiques dans les
fichiers.
303
Partie 4 : Fonctions VBA avancées
L’objet FileSearch permet de rechercher des fichiers en utilisant une large gamme
de critères : type de fichier, taille du fichier, emplacement du fichier et date de la
dernière modification. L’objet FileSearch place les noms des fichiers qu’il trou-
vent dans la collection FoundFiles.
Vous pouvez faire appel à l’objet FileSearch à la place de la fonction VBA Dir
pour effectuer séquence d’opérations sur les fichiers. L’objet FileSearch est utile
dans le cadre de la maintenance des fichiers. Il permet, par exemple, de localiser
des fichiers d’une certaine ancienneté et de les supprimer ou de les déplacer vers
un répertoire d’archive. L’objet FileSearch sert également à retrouver des données
dans un certain nombre de fichiers apparentés. Vous pouvez, par exemple,
retrouver tous les fichiers Excel se trouvant dans un répertoire relatif à la nou-
velle initiative marketing de la société Mon Jardin, avant de consolider les infor-
mations dans un fichier récapitulatif.
L’objet FileDialog a été introduit dans Office XP et amélioré dans Office 2003. Il
permet d’afficher les boîtes de dialogue Ouvrir et Enregistrer sous, ainsi qu’un
navigateur de sous-répertoire. L’objet FileDialog constitue une version plus puis-
sante des méthodes GetOpenFileName et GetSaveAsFileName de l’objet Applica-
tion Excel, disponibles dans les versions précédentes d’Excel, mais qui ne l’étaient
pas pour les autres applications Office. L’objet FileDialog, étant un objet Office,
est à la disposition de toutes les applications Office.
304
Partie 4 : Fonctions VBA avancées
Chapitre 13
Propriété ou méthode Résultat
Execute Commence la recherche.
NewSearch Efface les résultats des précédentes recherches présents
dans l’objet FileSearch.
Prenons l’exemple suivant, dans lequel la variable objet FS est déclarée comme
faisant partie de l’objet Office.FileSearch. Le préfixe Office n’est pas obligatoire,
mais il précise que l’objet FileSearch est un objet de la bibliothèque Office. Dans
le code, la propriété FileSearch de l’objet Application d’Excel retourne une réfé-
rence à l’objet FileSearch et l’assigne à la variable FS. Les valeurs sont ensuite assi-
gnées à un certain nombre de propriétés FileSearch. La propriété LookIn indique
à FileSearch le sous-répertoire à parcourir. La méthode NewSearch efface toutes
les propriétés FileSearch excepté LookIn. Ces propriétés étant maintenues tant
qu’Excel est ouvert, il est préférable d’exécuter la méthode NewSearch chaque
fois que vous utilisez la méthode FileSearch. La propriété SearchSubFolders con-
trôle si la recherche s’effectue dans les sous-répertoires qui se trouvent sous le
sous-répertoire LookIn.
Sub FindAccountingExcelFiles()
Dim FS As Office.FileSearch
Dim strPath As String
Dim vaFileName As Variant
Dim strMessage as String
Dim i As Long
Dim iCount As Long
Set FS = Application.FileSearch
strPath = "C:\GSC\Accounting"
With FS
.NewSearch
.LookIn = strPath
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks
.LastModified = msoLastModifiedAnyTime
iCount = .Execute
305
Partie 4 : Fonctions VBA avancées
End Sub
La propriété LastModified peut utiliser les constantes listées dans le tableau 13.3.
306
Partie 4 : Fonctions VBA avancées
Chapitre 13
Constantes msoLastModified Valeur
msoLastModifiedYesterday 1
msoLastModifiedToday 2
msoLastModifiedLastWeek 3
msoLastModifiedThisWeek 4
msoLastModifiedLastMonth 5
msoLastModifiedThisMonth 6
msoLastModifiedAnyTime 7
.FileName = "*.xls"
Limiter la recherche
Il peut arriver que vous deviez ouvrir un fichier ancien de plusieurs mois et que
vous ne vous souveniez pas de son emplacement. Nous rencontrons tous ce pro-
blème à un moment ou l’autre. La fonctionnalité Recherche de fichier dans Excel
permet d’accomplir cette tâche. Vous pouvez également faire appel à la collection
PropertyTests dans votre procédure VBA pour automatiser le processus de
recherche.
Par exemple, la société Mon Jardin a décidé de réorganiser ses fichiers histori-
ques. Tous les fichiers créés au cours de l’année précédente sont déplacés dans un
dossier Archive sur le serveur de la société. La procédure suivante recherche les
fichiers modifiés au cours du mois précédent :
Sub FindLastMonthFiles()
Dim FS As Office.FileSearch
Dim vaFileName As Variant
307
Partie 4 : Fonctions VBA avancées
Set FS = Application.FileSearch
strPath = "C:\GSC\Accounting"
With FS
.NewSearch
.LookIn = strPath
.SearchSubFolders = True
With .PropertyTests
For i = .Count To 1 Step -1
.Remove i
Next i
.LastModified = msoLastModifiedLastMonth
iCount = .Execute
")
strMessage = Format(iCount, "0 ""fichier(s) trouvé(s)"""
MsgBox strMessage
End With
End Sub
Sub FindWordandExcelFiles()
Dim FS As Office.FileSearch
Dim vaFileName As Variant
Dim stMessage As String
Dim i As Long
308
Partie 4 : Fonctions VBA avancées
Chapitre 13
Set FS = Application.FileSearch
strPath = "C:\GSC\Accounting"
With FS
.NewSearch
.FileType = msoFileTypeExcelWorkbooks
.FileTypes.Add msoFileTypeWordDocuments
.LookIn = strPath
.SearchSubFolders = True
.LastModified = msoLastModifiedAnyTime
iCount = .Execute
stMessage = Format(iCount, "0 ""fichier(s) trouvé(s)""")
MsgBox strMessage
End With
End Sub
Sub ListSearchScopeOptions()
Dim SS As SearchScope
Dim strMessage as String
MsgBox strMessage
End Sub
309
Partie 4 : Fonctions VBA avancées
vail et de Favoris réseau n’est pas une surprise. Le résultat du code devrait être
similaire à celui de la figure 13.1.
Sub ListScopeFolderObjects()
Dim SS As SearchScope
Dim SF As ScopeFolder
Dim strMessage as String
Application.FileSearch.RefreshScopes
Case msoSearchInMyComputer
strMessage = SS.ScopeFolder.Name & vbCr
For Each SF In SS.ScopeFolder.ScopeFolders
strMessage = strMessage & SF.Name & vbTab & vbTab
strMessage = strMessage & "Chemin d'accès = " &
SF.Path & vbCr
Next SF
Case msoSearchInMyNetworkPlaces
strMessage = strMessage & vbCr & SS.ScopeFolder.Name &
vbCr
For Each SF In SS.ScopeFolder.ScopeFolders
strMessage = strMessage & SF.Name & vbTab
310
Partie 4 : Fonctions VBA avancées
Chapitre 13
Next SF
Case msoSearchInOutlook
strMessage = strMessage & vbCr & SS.ScopeFolder.Name &
vbCr
For Each SF In SS.ScopeFolder.ScopeFolders
strMessage = strMessage & SF.Name & vbTab & vbTab
strMessage = strMessage & "Chemin d'accès = " &
SF.Path & vbCr
Next SF
Case Else
strMessage = strMessage & vbCr & "Objet SearchScope
inconnu"
End Select
Next SS
MsgBox strMessage
End Sub
Nous avons employé des instructions Select Case pour isoler et examiner chaque
structure de niveau supérieur. Chaque collection ScopeFolders de niveau supé-
rieur contient des objets ScopeFolder qui représentent les répertoires racine des
structures de fichiers disponibles. Chacun de ces objets ScopeFolder contient une
autre collection ScopeFolders qui représente les sous-répertoires se trouvant en
dessous d’elle. Il est ainsi possible de parcourir les arborescences de répertoires.
La collection SearchFolders définit d’autres chemins d’accès de répertoires à par-
courir en ajoutant les objets ScopeFolder à la collection. Elle est différente de la
collection FileTypes recréée lorsque vous assignez une valeur à la propriété
FileType. Elle n’est pas affectée si vous assignez une valeur à la propriété LookIn
311
Partie 4 : Fonctions VBA avancées
Sub SetupSearchFoldersCollection()
Dim FS As FileSearch
Dim SS As SearchScope
Dim SF As ScopeFolder
Dim sfSubFolder As ScopeFolder
Dim strMessage as String
Dim i As Long
Set FS = Application.FileSearch
312
Partie 4 : Fonctions VBA avancées
Chapitre 13
Sub Search_SearchFolders()
Dim FS As Office.FileSearch
Dim vaFileName As Variant
Dim strMessage as String
Dim iCount As Long
Set FS = Application.FileSearch
With FS
.NewSearch
.LookIn = "c:\"
.SearchSubFolders = True
.Filename = "*.xls"
.LastModified = msoLastModifiedAnyTime
iCount = .Execute
strMessage = Format(iCount, "0 ""fichier(s) trouvé(s)""")
For Each vaFileName In .FoundFiles
strMessage = strMessage & vbCr & vaFileName
Next vaFileName
MsgBox strMessage
End With
End Sub
Au Quotidien
Déterminer si un fichier existe avec FileSearch
313
Partie 4 : Fonctions VBA avancées
Important Les deux procédures suivantes supposent qu’il existe une feuille
de calcul intitulée AperçuImage dans le classeur actif.
Set FD = Application.FileDialog(msoFileDialogOpen)
With FD
Set FFs = .Filters
With FFs
.Clear
.Add "Pictures", "*.jpg"
End With
Worksheets("AperçuImages").Pictures.Insert (.SelectedItems(1))
End With
Exit Sub
Problem:
MsgBox "Vous n'avez pas sélectionné d'image valide."
End Sub
314
Partie 4 : Fonctions VBA avancées
Chapitre 13
valeurs
Constantes msoFileDialog Valeur
msoFileDialogOpen 1
msoFileDialogSaveAs 2
msoFileDialogFilePicker 3
msoFileDialogFolderPicker 4
With Application.FileDialog(xlDialogOpen)
If .Show Then .Execute
End With
315
Partie 4 : Fonctions VBA avancées
leurs noms.
Set FD = Application.FileDialog(msoFileDialogOpen)
With FD
Set FFs = .Filters
With FFs
.Clear
.Add "Pictures", "*.jpg"
End With
.AllowMultiSelect = True
intCounter = 1
End With
Exit Sub
Problem:
MsgBox "Vous n'avez pas sélectionné une image valide."
End Sub
316
Partie 4 : Fonctions VBA avancées
Au Quotidien
Chapitre 13
Déterminer si un fichier existe avec FileDialog
Au Quotidien
Ouvrir un fichier texte
Avant de pouvoir lire ou écrire dans un fichier, vous devez l’ouvrir. L’instruction
Open est relativement versatile et sa syntaxe complexe.
317
Partie 4 : Fonctions VBA avancées
du fichier à ouvrir.
● mode Élément obligatoire qui spécifie le mode utilisé par le fichier :
Append, Input, Output, Binary ou Random.
Remarque Dans le fichier d’aide VBA pour le paramètre mode, il est dit
que ce paramètre est obligatoire, mais si vous l’omettez, Excel suppose
que vous optez pour Random. Nous n’avons pas réussi à résoudre cette
contradiction, notre conseil est donc de toujours définir ce paramètre.
L’exemple suivant exporte les données d’une plage spécifiée vers un fichier texte
CSV. Notez que la procédure utilise des instructions Write #. La première ins-
truction se termine par un point-virgule, ce qui évite d’écrire la séquence retour
chariot/saut de ligne. Pour la dernière cellule d’une ligne, cependant, la
deuxième instruction Write # n’utilise pas le point-virgule, ce qui a pour consé-
quence de placer la sortie suivante sur une nouvelle ligne.
Sub ExportSelectedRange()
Dim FileName As String
Dim NumRows As Long
Dim NumCols As Integer
Dim r As Long
Dim c As Integer
Dim Data
Dim ExpRng As Range
318
Partie 4 : Fonctions VBA avancées
Chapitre 13
Write #1, Data
End If
Next c
Next r
Close #1
End Sub
Sub ImportRange()
Dim ImpRng As Range
Dim FileName As String
Dim r As Long
Dim c As Integer
Dim txt As String
Dim Char As String * 1
Dim Data
Dim i As Integer
319
Partie 4 : Fonctions VBA avancées
End If
r = 0
c = 0
txt = ""
Do Until EOF(1)
Line Input #1, Data
For i = 1 To Len(Data)
Char = Mid(Data, i, 1)
If Char = "," Then
ActiveCell.Offset(r, c) = txt
c = c + 1
txt = ""
ElseIf i = Len(Data) Then
If Char <> Chr(34) Then txt = txt & Char
ActiveCell.Offset(r, c) = txt
txt = ""
ElseIf Char <> Chr(34) Then
txt = txt & Char
End If
Next i
c = 0
r = r + 1
Loop
Close #1
End Sub
Sub FilterFile()
Open "c:\fichiertexte.txt" For Input As #1
Open "c:\résultat.txt" For Output As #2
TextToFind = "Janvier"
Do Until EOF(1)
Line Input #1, Data
If InStr(1, Data, TextToFind) Then
Print #2, Data
End If
Loop
320
Partie 4 : Fonctions VBA avancées
Chapitre 13
Les objets FileSearch et FileDialog proposent d’intéressants outils dans le cadre
de la programmation VBA. Ces objets faisant partie du modèle d’objet Office, ils
possèdent l’avantage d’être à la disposition de toutes les applications Office.
L’objet FileSearch sert à localiser les fichiers possédant des caractéristiques com-
munes, comme des noms de fichiers ou des emplacements similaires, de sorte
qu’on puisse les traiter dans le code qui suit. L’objet FileDialog sert à afficher les
boîtes de dialogue Ouvrir et Enregistrer sous pour permettre à l’utilisateur de
naviguer au sein des dossiers. Il constitue un outil plus puissant que les fonctions
GetOpenFileName et GetSaveAsFileName utilisées dans les précédentes versions
d’Excel.
Les capacités de recherche de fichiers étudiées dans ce chapitre permettent
d’optimiser les projets sur lesquels vous travaillez. Limitez vos recherches avec les
critères étudiés, comme une extension de fichier spécifique ou une valeur dans
un fichier. Les techniques de recherche peuvent être incorporées dans vos projets
ultérieurs pour améliorer les résultats obtenus. Une fois les fichiers souhaités
localisés, vous pouvez lire leur contenu puis l’écrire dans de nouveaux fichiers si
nécessaire.
321
Partie 4 : Fonctions VBA avancées
Chapitre 14
Développement de
modules de classes
Introduction aux modules Construction d’une classe . . . . . 329
de classe . . . . . . . . . . . . . . . . . . 325 Conception pratique
Propriétés, méthodes d’une classe . . . . . . . . . . . . . . . 336
et événements . . . . . . . . . . . . . . 328
323
Partie 4 : Fonctions VBA avancées
324
Partie 4 : Fonctions VBA avancées
Chapitre 14
Il existe une différence fondamentale entre une simple variable et une variable
objet. Cette dernière n’est autre qu’un pointeur en mémoire. Vous devez explici-
tement créer l’objet et enregistrer son emplacement dans la variable objet. On
appelle ce processus créer une nouvelle instance d’un objet ou instancier un objet.
Les objets étant différents des variables, Visual Basic pour Applications utilise
une instruction spéciale, Set. L’instruction Set prend deux formes. Voici la
première :"
Dans cette forme, l’instruction Set crée un nouvel objet basé sur ClassName. Cela
signifie que Visual Basic alloue de la mémoire à l’objet et enregistre l’emplace-
ment mémoire dans la classe ObjectVariable.
Dans sa deuxième forme, l’instruction Set fait deux choses. Elle libère d’abord
l’objet vers lequel elle pointait puis elle enregistre un pointeur vers un objet exis-
tant dans la classe ObjectVariable.
En général, peu importe que vous utilisiez une instruction Dim ou Set pour
créer une nouvelle instance de classe. Cependant, l’instruction Set New est
légèrement plus efficace que l’instruction Dim New. En effet, Visual Basic ne
génère pas de code supplémentaire pour vérifier qu’une nouvelle instance de
la classe a été créée.
325
Partie 4 : Fonctions VBA avancées
Si vous employez une instruction Set New à la place d’une instruction Dim
New, vous évitez également des problèmes de débogage. Supposons que vous
vous trouvez dans une situation où vous pensez avoir créé une nouvelle ins-
tance d’une classe, mais que pour une raison quelconque l’objet n’a pas été
créé. Avec l’approche Dim New, l’objet sera automatiquement créé et votre
programme va l’utiliser en supposant qu’il contient quelque information, ce qui
n’est pas le cas puisque l’objet vient d’être créé.
Avec l’instruction Set New, l’objet ne peut pas être créé à la volée et le pro-
gramme devra faire face à une erreur d’exécution s’il tente d’accéder à un
Chapitre 14
objet qui n’est pas encore créé. Bien qu’une erreur d’exécution ne soit pas
agréable, elle vous informe d’un problème dans le code. Sinon, vous ne
l’auriez éventuellement pas remarquée.
Cette deuxième forme réalise les mêmes actions que la première, mais elle crée
automatiquement un nouvel objet la première fois que l’on référence ObjectVa-
riable.
Objets et Nothing
VBA propose une valeur spéciale appelé Nothing, que vous pouvez uniquement
exploiter avec les objets. Nothing est la valeur associée à une variable objet qui ne
pointe actuellement vers aucune instance de classe. Une variable objet déclarée
avec l’instruction Dim est initialement positionnée sur Nothing.
Pour déterminer si une nouvelle instance de classe a été créée, servez-vous de Is
Nothing dans une instruction If :
326
Partie 4 : Fonctions VBA avancées
Chapitre 14
Toutefois, si plusieurs variables objet pointent vers cet objet, elles doivent toutes
être positionnées sur Nothing avant de détruire l’objet. Par exemple, dans le frag-
ment de code suivant, l’objet créé par MaClasse continue d’exister, même si on a
positionné VariableObjet1 sur Nothing.
La première instruction Set crée une nouvelle instance de MaClasse, alors que la
deuxième instruction Set crée uniquement un deuxième pointeur vers le même
objet, créé par la première instruction.
Cela signifie que les instructions suivantes effectuent la même tâche puisque
ObjetA et ObjetB pointent vers le même objet :
ObjetA.Name = "Roses"
ObjetB.Name = "Roses"
327
Partie 4 : Fonctions VBA avancées
dans l’ensemble des modules de toutes les applications, alors que ce qui est mar-
qué comme Private est uniquement accessible à partir du code de la classe.
Propriétés
Un classe contient différents éléments. On définit les variables de classe auxquel-
les on accède à partir de n’importe quel emplacement de la classe. Si une variable
de classe est marquée comme Public, elle est accessible à toutes les procédures qui
exploitent la classe et constitue une propriété de la classe.
Outre les variables de classe publiques, les propriétés peuvent être associées à du
code. Chaque propriété dans laquelle vous voulez utiliser le code est organisée en
deux routines, qui retournent la valeur au programme appelant ou changent la
valeur dans la classe. La routine Get retourne une valeur à l’appelant, alors que la
routine Let ou Set permet à l’appelant d’assigner une valeur à la propriété.
Rappelez-vous que vous pouvez définir une propriété uniquement avec une rou-
tine Get ou une routine Set ou Let. Si vous utilisez uniquement une routine Get,
la propriété est en lecture seule et le programme qui exploite l’objet ne peut pas
modifier sa valeur. De même, si vous incluez uniquement une routine Let ou Set,
la propriété est en écriture seule et le programme appelant ne peut pas afficher sa
valeur.
Méthodes
Outre les variables de classe et les routines de propriétés, une classe peut égale-
ment contenir une série de sous-routines et de fonctions. Si une fonction ou une
sous-routine est marquée comme Public, elle constitue une méthode. Vous pou-
vez invoquer les méthodes à partir du code qui réside dans la classe ou en-
dehors.
328
Partie 4 : Fonctions VBA avancées
Événements
Les événements sont des sous-routines qui existent en-dehors du code associé à
la classe et qui peuvent être appelés par des instructions résidant dans la classe.
Les événements permettent à une classe d’interrompre le programme qui a créé
une instance de l’objet à partir de la classe et, en conséquence, autorisent le pro-
gramme à réaliser son propre traitement en réponse à une situation rencontrée
par l’objet. Rappelez-vous que le code associé à un événement réside en réalité
en-dehors de la classe. La définition de l’événement, y compris les paramètres
passés au programme externe, constitue la seule information stockée dans la
Chapitre 14
classe.
329
Partie 4 : Fonctions VBA avancées
Attention Vous ne pouvez pas utiliser les propriétés simples pour retourner
un tableau, une chaîne de longueur fixe, une constante ou une structure com-
plexe créée avec une instruction Type. Si votre propriété doit retourner l’un de
ces éléments, créez une variable de classe privée appropriée puis créez une
routine de propriété qui effectue la même action. Vous pouvez, par exemple,
créer une routine de propriété qui accepte une série de paramètres permettant
à la routine de ressembler à un tableau. Vous pouvez, en outre, créer une rou-
tine de propriété qui accepte et retourne des chaînes de longueur fixe ou des
structures complexes.
330
Partie 4 : Fonctions VBA avancées
NomProduit = LeNomDuProduit
End Property
Chapitre 14
Les routines Property Let et Property Set sont appelées pour enregistrer une
valeur dans la propriété. On utilise l’instruction Property Let lorsque la propriété
est une variable normale et l’instruction Property Set si la propriété représente un
objet.
Voici la routine Property Let correspondant à la propriété NomProduit :
LeNomDuProduit = value
End Property
Remarque La seule différence entre une instruction Property Set et une ins-
truction Property Let est que vous utilisez la première pour assigner des objets
et la deuxième pour assigner des valeurs. De même, vous employez l’instruc-
tion Property Let si vous retournez n’importe quelle autre valeur.
Les routines de propriété peuvent posséder des paramètres. Ces derniers servent
essentiellement à simuler un tableau. Par exemple, le fragment de code suivant
déclare une variable de classe privée libellée MesNoms, qui représente un tableau
de 100 String. Le fragment de code contient également deux routines de pro-
priété qui représente la propriété sous forme de tableau.
NomTableau= MesNoms(index)
End Property
MesNoms = value
End Property
331
Partie 4 : Fonctions VBA avancées
Ou de la manière suivante :
Chapitre 14
CoordonnéesCarte = MesCoordonnéesCarte
End Property
CoordonnéesCarte = value
End Property
332
Partie 4 : Fonctions VBA avancées
TempLatitude = RouteMicrosoft.CoordonnéesCarte.Latitude
Puisque ceci fonctionne, vous serez tenté d’utiliser les instructions suivantes :
RouteMicrosoft.CoordonnéesCarte.Latitude = 47,63
RouteMicrosoft.CoordonnéesCarte.Longitude = 122,13
Chapitre 14
Si vous le faites, vous découvrirez que RouteMicrosoft.CoordonnéesCarte.Lati-
tude est égal à zéro !
333
Partie 4 : Fonctions VBA avancées
Else
PrixNet = PrixCatalogue
End If
End Function
Chapitre 14
Cette routine vérifie que le paramètre d’entrée est valide en s’assurant qu’il se
situe entre 0 et 1, puis calcule le prix net en fonction. Si la valeur de la remise
n’est pas valide, le tarif catalogue est retourné.
Remarque Bien qu’il soit possible de spécifier presque n’importe quel type
de paramètre utilisable dans une sous-routine, les événements ne peuvent
pas posséder d’arguments nommés, de paramètres optionnels ou d’argu-
ments ParamArray.
334
Partie 4 : Fonctions VBA avancées
Pour exploiter les événements dans une application, vous devez ajouter le mot-
clé WithEvents lors de la définition de l’objet. Sans ce mot-clé, tous les événe-
ments seront ignorés. L’instruction suivante montre comment déclarer un objet
avec des événements :
Chapitre 14
Dim WithEvents MonObjet As StéMonJardin
335
Partie 4 : Fonctions VBA avancées
336
Partie 4 : Fonctions VBA avancées
Chapitre 14
Figure 14-2. Rien de plus facile que de construire une classe simple dans
Visual Basic Editor.
NomCommun = Nom
End Property
Nom = value
337
Partie 4 : Fonctions VBA avancées
Me.Nom = Nom
Me.NomScientifique = NomScientifique
Me.Description = Description
Me.PrixDétail = PrixDétail
Me.PrixGros = PrixGros
Me.NuméroProduit = NuméroProduit
End Sub
End Sub
End Sub
338
Partie 4 : Fonctions VBA avancées
Dim i As Long
Dim s As String
i = 0
Chapitre 14
s = Item.Name
MesPlantes.Add Item, s
Do While Err.Number <> 0
i = i + 1
Item.Name = s & "(" & FormatNumber(i, 0) & ")"
Err.Clear
MesPlantes.Add Item, Item.Name
Loop
End Sub
MesPlantes.Remove key
End Sub
Count = MesPlantes.Count
End Function
339
Partie 4 : Fonctions VBA avancées
End Sub
Chapitre 14
End Function
La routine suivante est une macro qui se répète dans la classe de collection nou-
vellement créée. La macro commence par créer un nouvel objet Plantes intitulé
MesPlantes, qui contient une collection d’objets Plante. Le code appelle ensuite la
méthode SampleData qui ajoute certains objets à la collection.
Sub Test()
For i = 1 To MesPlantes.Count
Set p = MesPlantes.Item(i)
MsgBox p.Name
Next i
Set p = Nothing
Set MesPlantes = Nothing
End Sub
Il se sert ensuite d’une boucle For...Next pour itérer dans chaque élément de la
collection. La variable objet p est positionnée sur l’élément en cours de la collec-
tion et la propriété Name est affichée dans une boîte de message.
Notez que le premier élément de la collection commence à 1 et que le nombre
d’éléments dans la collection se trouve dans la propriété Count de la collection.
340
Partie 4 : Fonctions VBA avancées
Chapitre 14
source. Si vous migrez ensuite les données depuis une feuille de calcul vers
une base de données Access, seule la méthode de chargement change. Le
code qui accède à la collection ne change pas, sauf si vous modifiez les para-
mètres de la méthode LoadData.
De même, vous pouvez proposer une méthode standard appelée SaveData qui
actualise les données quel que soit leur emplacement de stockage. Avec un
peu de travail supplémentaire, vous pouvez même rendre la méthode suffisam-
ment intelligente pour qu’elle actualise uniquement les objets qui ont été
modifiés, au lieu d’actualiser toutes les données.
If Len(Name) = 0 Then
IsValid = False
Else
IsValid = True
341
Partie 4 : Fonctions VBA avancées
End Function
Else
RaiseEvent PlantError(1, "Le prix au détail est inférieur au prix
de gros.")
End If
End Property
La classe contient une variable de classe privée intitulée MonPrixDétail qui con-
tient la valeur de la propriété PrixDétail. Si la nouvelle valeur de PrixDétail est
supérieure à PrixGros, on enregistre le nouveau prix au détail dans la variable
MonPrixDétail.
En revanche, si quelqu’un tente de définir un prix au détail inférieur au prix de
gros, l’événement PlantError se déclenche et passe les détails de l’erreur au pro-
gramme auquel appartient l’objet.
Dans ce chapitre, vous avez appris la différence entre une classe et un objet. Vous
avez également appris à créer vos propres classes personnalisées et comment
définir des propriétés, des routines de propriété, des méthodes et des événe-
ments. Nous avons également étudié quelques astuces permettant de reconnaître
des objets, des propriétés et des méthodes. Pour finir, vous avez vu comment
concevoir plusieurs différents types de classes, y compris une classe simple et une
classe de collection, et comment étendre vos classes pour initialiser une classe et
mettre en œuvre des règles de métier.
342
Partie 5
Manipulation des
objets Excel
15 Graphiques 345
16 Tableaux et graphiques
croisés dynamiques 367
18 Personnalisation
des boîtes de dialogue 413
19 Création de formulaires
utilisateur 425
20 Création de formulaires
utilisateur avancés 449
343
Partie 5 : Manipulation des objets Excel
Chapitre 15
Graphiques
Tour d’horizon des graphiques . . 345 Réflexions sur la programmation
Manipulation des graphiques. . . 351 des graphiques . . . . . . . . . . . . . 364
345
Partie 5 : Manipulation des objets Excel
Avant de plonger dans les propriétés, les méthodes et les événements de l’objet
Chart, il serait intéressant de revoir les composants individuels employés pour
générer un graphique. Le tableau 15.1 détaille les objets que l’on trouve dans le
graphique que nous utiliserons tout au long de ce chapitre.
Tableau 15-1. Composants du graphique
Objet Description
Titres du graphique Décrivent les informations qui constituent le graphique : titre du
graphique, titres de l’axe des x et de l’axe des y.
Séries de données Stockent numériquement les données des plages qui définissent le
graphique et déterminent comment les informations sont affichées
dans la Zone de traçage. Un graphique contient au minimum une
série de données.
Chapitre 15
Charts.Add
346
Partie 5 : Manipulation des objets Excel
Graphiques
L’exemple suivant présente une macro de base qui crée un graphique en tant que
variable objet. La macro définit le type de graphique, la source des données et les
titres du graphique.
Sub AddChartSheet()
Dim Chrt As Chart
Chapitre 15
les exemples de ce chapitre.
Variable = ChartObject.Location(xlLocationAsObject,"Feuil1")
Lorsque vous travaillez avec des graphiques incorporés, il est préférable de nom-
mer l’objet ChartObject de sorte qu’il soit facile à référencer dans le code. Pour
renommer manuellement un graphique existant, maintenez enfoncée la touche
CTRL et cliquez sur le graphique. L’objet ChartObject est ainsi sélectionné, sans
être activé. Cliquez dans la zone Nom et tapez le nouveau nom. Vous pouvez éga-
lement nommer l’objet ChartObject à partir d’une macro en positionnant la pro-
priété Name de l’objet.
Comme le montre la figure 15.1, les poignées du graphique sont représentées par
des cercles vides pour vous permettre de distinguer un graphique sélectionné
347
Partie 5 : Manipulation des objets Excel
Figure 15-1. La zone Nom affiche le nom de l’objet ChartObject lorsqu’il est
sélectionné.
Sub AddEmbeddedChart()
Dim Chrt As Chart
ActiveSheet.ChartObjects.Delete
Set Chrt = Charts.Add
Set Chrt = Chrt.Location(where:=xlLocationAsObject,
Name:="Feuil1")
With Chrt
.ChartType = xlColumnClustered
.SetSourceData Source:=Sheets("Feuil1").Range("A4:D7"), _
PlotBy:=xlRows
.HasTitle = True
.ChartTitle.Text = "=Feuil1!L1C1"
With .Parent
.Top = Range("A9").Top
348
Partie 5 : Manipulation des objets Excel
Graphiques
.Left = Range("A1").Left
.Name = "GraphProduitGSC"
End With
End With
End Sub
Chapitre 15
L’emplacement du graphique incorporé sur la feuille de calcul a été défini avec
les propriétés Top et Left de la cellule A9. On a utilisé la propriété Parent de l’objet
Chart pour faire référence à l’objet ChartObject et on l’a définie en attribuant aux
propriétés Top et Left de l’objet ChartObject les mêmes valeurs qu’à la propriété
Top de la cellule A9 et à la propriété Left de la cellule A1. Le graphique est aligné
sur le bord supérieur de la cellule A9 et sur le bord gauche de la cellule A1. Pour
finir, la macro AddEmbeddedChart assigne le nouveau nom à l’objet ChartOb-
ject de sorte qu’il soit facile à référencer à l’avenir.
Au Quotidien
Macro enregistrée et la création de graphiques
Charts.Add
349
Partie 5 : Manipulation des objets Excel
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("A3:D7"), _
PlotBy:=xlRows
Application
Workbook
Worksheet
ChartObject
Chart
ChartTitle
Characters
Si vous travaillez sur un graphique qui se trouve sur sa propre feuille, la hiérar-
chie est plus simple. Une feuille de graphique se trouve techniquement au même
niveau que la feuille de calcul puisqu’il s’agit simplement d’un type différent de
feuille. Examinez la nouvelle hiérarchie et remarquez qu’on a supprimé deux
niveaux.
Application
Workbook
Chart
350
Partie 5 : Manipulation des objets Excel
Graphiques
ChartTitle
Characters
Chapitre 15
d’informations, reportez-vous à la rubrique « Au Quotidien : Utiliser ou ne pas utiliser les
événements Chart ». Pour revoir les procédures d’événements au niveau des objets Appli-
cation, Workbook et WorkSheet, reportez-vous au chapitre 12, « Événements ».
Worksheets("Feuil1").ChartObjects("ExempleGraph").RoundedCorners =
True
351
Partie 5 : Manipulation des objets Excel
Activer un graphique
Le graphique est activé dès lors qu’un utilisateur le sélectionne, quel que soit son
emplacement. Avec le code VBA, vous activez un graphique incorporé avec la
méthode Activate.
ActiveSheet.ChartObjects("Graphique 1").Activate
Pour activer un graphique qui se trouve sur une feuille de graphique, servez-vous
de l’instruction suivante :
Sheets("Graphique 1").Activate
Lorsque le graphique est activé, vous pouvez vous y référer dans le code avec
Chapitre 15
ActiveChart. Voici une manière fort intéressante de simplifier le code. À des fins
de dépannage, vous pouvez vérifier le graphique qui a été activé en ajoutant une
boîte de message qui en affiche le nom. Une fois que vous avez vérifié que le gra-
phique voulu est activé, vous pouvez ajouter un guillemet simple au début de la
ligne qui appelle la boîte de message pour en faire un commentaire. En conver-
tissant la ligne en commentaire, vous l’empêchez de s’exécuter. Vous pouvez,
bien sûr, supprimer le code après avoir terminé la procédure de test.
MsgBox ActiveChart.Name
Lorsque vous créez une procédure qui modifie un graphique, vous n’êtes pas
obligé d’activer le graphique. En revanche, si vous le faites, il sera plus simple à
référencer à partir du code. Les exemples suivantes modifient le type de graphi-
que et retournent les mêmes résultats, mais la première procédure active la
feuille de graphique alors que la deuxième accède à un graphique incorporé :
Sub ModifyChart1()
ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.Type = xlLine
ActiveChart.Deselect
End Sub
Sub ModifyChart2()
ActiveSheet.ChartObjects("Graphique 1").Chart.Type = xlLine
End Sub
352
Partie 5 : Manipulation des objets Excel
Graphiques
Sub ModifyActiveChart()
With ActiveChart
.Type = xlArea
.ChartArea.Font.Name = "Tahoma"
.ChartArea.Font.FontStyle = "Regular"
.ChartArea.Font.Size = 8
.PlotArea.Interior.ColorIndex = xlNone
.Axes(xlValue).TickLabels.Font.Bold = True
.HasLegend = True
.Legend.Position = xlLegendPositionBottom
End With
End Sub
Notez l’erreur d’exécution ‘91’ : « Variable objet ou variable de bloc With non
définie » lorsque vous exécutez la procédure ModifyActiveChart et que le graphi-
que n’est pas sélectionné. Pour résoudre ce problème, indiquez le graphique à
modifier à l’exécution de la procédure. Modifions la procédure précédente pour
y inclure la référence au graphique.
Sub ModifySpecificChart()
Chapitre 15
With Sheets("Feuil1").ChartObjects("Graphique 1").Chart
.Type = xlArea
.ChartArea.Font.Name = "Tahoma"
.ChartArea.Font.FontStyle = "Regular"
.ChartArea.Font.Size = 8
.PlotArea.Interior.ColorIndex = xlNone
.Axes(xlValue).TickLabels.Font.Bold = True
.HasLegend = True
.Legend.Position = xlLegendPositionBottom
End With
End Sub
Au Quotidien
Utiliser ou ne pas utiliser les événements Chart
353
Partie 5 : Manipulation des objets Excel
Une fois le nouvel objet déclaré avec des événements, il apparaît dans la liste
déroulante Objet du module de classe. Vous pouvez maintenant créer une pro-
cédure d’événement pour cet objet. Cependant, avant d’exécuter la procédure,
vous devez relier l’objet déclaré au graphique incorporé. Le code suivant peut
servir dans n’importe quel module pour obtenir le résultat souhaité :
Sub InitializeChart()
Set myClassModule.myChartClass =
Worksheets(1).ChartObjects(1).Chart
End Sub
Désactiver un graphique
Lorsque vous créez une macro avec l’enregistreur, celui-ci génère une instruction
du type :
ActiveWindow.Visible = False
ActiveChart.Deselect
Les résultats de ces deux instructions sont légèrement différents. Si vous posi-
tionnez la propriété Visible de l’objet ActiveWindow sur False, le graphique incor-
poré est toujours sélectionné, mais il n’est plus activé. La méthode Deselect
désactive et désélectionne le graphique.
Modifions la procédure d’événement AddEmbeddedChart que nous avons créée
dans la section « Créer des graphiques incorporés ou des feuilles de graphique »,
précédemment dans ce chapitre, en positionnant l’objet ActiveWindow sur False
pour désactiver le graphique.
Sub AddEmbeddedChart()
Dim Chrt As Chart
ActiveSheet.ChartObjects.Delete
Set Chrt = Charts.Add
Set Chrt = Chrt.Location(where:=xlLocationAsObject,
Name:="Feuil1")
With Chrt
354
Partie 5 : Manipulation des objets Excel
Graphiques
.ChartType = xlColumnClustered
.SetSourceData Source:=Sheets("Feuil1").Range("A4:D7"), _
PlotBy:=xlRows
.HasTitle = True
.ChartTitle.Text = "=Feuil1!L1C1"
With .Parent
.Top = Range("A9").Top
.Left = Range("A1").Left
.Name = "GraphProduitGSC"
End With
End With
ActiveWindow.Visible = False
End Sub
Maintenant que vous avez testé la méthode ActiveWindow pour désactiver le gra-
phique, utilisez la méthode Deselect. Remplacez la ligne ActiveWindow.Visible =
False par ActiveChart.Deselect.
Pour chaque procédure que vous créez, vous pouvez évaluer la méthode de
désactivation fournissant le résultat approprié au scénario.
Chapitre 15
Dépannage
Comment déterminer qu’un graphique a été activé ?
Une macro peut manipuler un graphique sélectionné par l’utilisateur. Par exem-
ple, une macro peut modifier le type de graphique, appliquer des couleurs ou
changer la taille de police. La question est la suivante : « Comment peut-on
déterminer avec du code VBA que l’utilisateur a bien sélectionné le
graphique ? ». Le graphique peut être sélectionné si on active la feuille de gra-
phique ou, s’il s’agit d’un graphique incorporé, si on a cliqué dessus. Si vous
devez activer un graphique qui se trouve sur une feuille de graphique, servez-
vous de la ligne de code suivante pour déterminer s’il a été sélectionné :
TypeName(Selection) = "Graphique"
355
Partie 5 : Manipulation des objets Excel
=SERIE(;Feui1!$A$1:$A$6;Feuil1!$B$1:$B$6;1)
Vous pouvez définir les noms de plages puis modifier la formule SERIE de sorte
qu’elle utilise des noms au lieu des références de cellules. Par exemple, si votre
feuille contient deux plages libellées Catégories et Données, vous pouvez rempla-
cer la formule par :
=SERIE(;Feui1!Catégories;Feuil1!Données;1)
Lorsque vous avez défini les noms et modifié la formule SERIE, votre code VBA
peut exploiter les noms et les changements se reflètent dans le graphique. Par
exemple, l’instruction suivante attribut le nom Données à la plage :
Range("B1:B12").Name = "Données"
Au Quotidien
Comment fonctionne la formule SERIE du graphique ?
La formule SERIE détermine les données employées dans chaque série d’un
graphique. Si vous sélectionnez une série de données dans un graphique, la
formule SERIE s’affiche dans la barre de formule. La formule SERIE n’est pas
une formule que vous pouvez saisir dans une feuille de calcul comme une for-
mule traditionnelle. Vous ne pouvez pas l’exploiter dans une cellule, ni utiliser
de fonction ou de formule dans une formule SERIE. Il est cependant possible
de l’éditer.
356
Partie 5 : Manipulation des objets Excel
Graphiques
Figure 15-2. La série de données sélectionnée est indiquée par des marques
sur les éléments correspondants du graphique.
values;o
=SERIE(name;category_labels;v order)
Chapitre 15
contient qu’une série, l’argument name sert de titre.
● category_labels (optionnel) La plage qui contient les étiquettes de l’axe
des catégories. S’il est omis, Excel se sert d’entiers consécutifs en
commençant à 1.
● values La plage qui contient les valeurs.
● order Un entier qui spécifie l’ordre de traçage des séries (approprié uni-
quement si le graphique comporte plusieurs séries).
=SERIE(;Feui1!$B$1;Feuil1!$B$2:$B$7;1)
Une référence de plage peut se composer de plages non contiguës. Si tel est
le cas, chaque plage est séparée par un point virgule et l’argument est placé
entre parenthèses. Dans la formule SERIE suivante, les plages de valeurs sont
B2:B3 et B5:B7 :
=SERIE(;;(Feuil1!$B$2;Feuil1!$B$5:$B$7);1)
Vous pouvez remplacer les références de plage par des noms de plage. Dans
ce cas, Excel change la référence dans la formule SERIE pour inclure le clas-
seur, comme dans l’exemple suivant :
=SERIE(Feuil1$B$1;;budget.xls!MesDonnées;1)
357
Partie 5 : Manipulation des objets Excel
Figure 15-3. La série Catalogue est affichée avec la formule SERIE dans la
barre de formule.
Remarque Un tableau est limité à environ 250 caractères. Cela limite le nom-
bre de points de données que l’on peut tracer avec un tableau.
Sub ConvertSeriesValuesToArrays()
Dim Ser As Series
Dim Chrt As Chart
358
Partie 5 : Manipulation des objets Excel
Graphiques
On Error GoTo Failure
Exit Sub
Failure:
MsgBox "Les données dépassent les limites du tableau."
End Sub
Pour chaque série du graphique, les propriétés XValues et Name sont égales à
elles-mêmes. Bien qu’il soit possible d’assigner des références de plage à ces pro-
priétés, elles retournent toujours un tableau de valeurs lorsqu’on s’y réfère. Vous
pouvez exploiter ce comportement pour convertir les références de cellule en
tableaux.
Rappelez-vous que le nombre de points de données contenus dans une référence
Chapitre 15
de tableau est limité à environ 250 caractères. Le code échoue si vous dépassez la
limite : récupérez les erreurs pour faire face à cette possibilité.
359
Partie 5 : Manipulation des objets Excel
Figure 15-4. Les étiquettes ont été programmées avec des formules pour
Chapitre 15
Sub AddDataLabels()
Dim seVentes As Series
Dim Pts As Points
Dim pt As Point
Dim rng As Range
Dim i As Integer
La référence B4:G4 est assignée à la variable objet rng. On a assigné une référence
à la première et unique série du graphique incorporé à la série seVentes et on a
positionné la propriété HasDataLabels de la série sur True. La boucle For
Each...Next traite chaque point de la série de données. Pour chaque point, le code
360
Partie 5 : Manipulation des objets Excel
Graphiques
assigne une formule à la propriété Text de l’étiquette de donnée de ce point. La
formule se réfère à la cellule de la feuille de calcul en tant que référence externe
au format L1C1. On applique des caractères gras à l’étiquette de données qui est
positionnée au-dessus du point de donnée.
Chapitre 15
ChartType xlChartType Définit le type de graphique ou retourne le type de
graphique en cours.
HasDataTable Boolean Définit l’affichage ou non du tableau de données associé
sur le graphique. Elle est positionnée sur False par défaut.
En conséquence, le tableau n’est pas inclus si on ne définit
pas cette propriété.
HasLegend Boolean Définit l’affichage ou non de la légende.
HasTitle Boolean Définit l’affichage ou non du titre du graphique.
PlotBy xlRowCol Définit si on utilise les colonnes des données originales
comme série de données (xlColumns) ou si on se sert des
lignes (xlRows).
Le tableau 15.4 liste les noms des propriétés de l’objet ChartObject les plus
employées et les résultats qu’elles produisent.
Tableau 15-4. Propriétés de l’objet ChartObject
Nom Retourne Description
BottomRightCell Range Retourne la plage de cellules qui se trouve sous l’angle
inférieur droit de l’objet ChartObject incorporé.
Chart Chart Retourne le graphique associé à l’objet ChartObject.
Height Double Définit la hauteur du graphique incorporé.
Left Double Définit la distance entre le bord gauche de la marge et
le bord gauche de l’objet ChartObject.
Name String Définit le nom de l’objet ChartObject.
PrintObject Boolean Indique si l’objet incorporé est imprimé lorsque la
feuille de calcul l’est.
361
Partie 5 : Manipulation des objets Excel
Chaque objet du graphique possède une série de propriétés. Par exemple, l’objet
ChartTitle peut être équipé d’une bordure bleue de 2 points ou avoir une ombre.
Vous pouvez définir ChartTitle avec les propriétés de positionnement comme
Left et Top. En fait, vous pouvez également définir l’orientation. Lorsqu’il est
Chapitre 15
Sub FormatChart()
362
Partie 5 : Manipulation des objets Excel
Graphiques
Dim chrt As Chart
Set chrt = ActiveSheet.ChartObjects(1).Chart
chrt.ChartType = xl3DBarClustered
ActiveChart.HasLegend = False
ActiveChart.HasDataTable = True
ActiveChart.DataTable.ShowLegendKey = True
End Sub
Chapitre 15
Sub ChangeChartType()
Dim chtobj as ChartObject
For Each chtobj In ActiveSheet.ChartObjects
chtobj.Chart.ChartType = xlArea
Next chtobj
End Sub
Sub PrintEmbeddedCharts()
For Each chtObj In ActiveSheet.ChartObjects
chtObj.Chart.PrintPreview
Next chtObj
End Sub
363
Partie 5 : Manipulation des objets Excel
Sub PrintWorksheetOnly()
For Each chtObj In ActiveSheet.ChartObjects
chtObj.PrintObject = False
Next chtObj
ActiveSheet.PrintPreview
End Sub
et de la modification des graphiques dans une procédure, vous verrez qu’il est
simple de créer une référence conçue par programmation pour un graphique qui
se trouve sur une feuille de graphique. L’objet Chart est membre de la collection
Charts du classeur. Le défi est de définir la référence à un graphique incorporé.
Sachez que l’objet Chart incorporé se trouve dans un objet ChartObject qui
appartient à la collection ChartObjects de la feuille de calcul. L’Explorateur
d’objets est votre meilleure atout dans le dépannage du code VBA.
Pour déplacer ou redimensionner un graphique incorporé, modifiez les proprié-
tés Top, Left, Width et Height de l’objet ChartObject. Si vous disposez d’une réfé-
rence à l’objet Chart, vous pouvez récupérer une référence à l’objet ChartObject
par le biais de la propriété Parent de l’objet Chart.
Les séries individuelles d’un graphique sont des objets Series et appartiennent à
l’objet SeriesCollection du graphique. La méthode Delete de l’objet Series sert à
supprimer une série d’un graphique. Servez-vous de la méthode NewSeries de
l’objet SeriesCollection pour ajouter de nouvelles séries à un graphique.
Vous pouvez assigner un tableau VBA, à la place de l’habituel objet Range, à la
propriété Values d’un objet Series. Vous créez ainsi un graphique indépendant
des données de la feuille de calcul que vous pouvez distribuer sans une feuille de
calcul en annexe.
Les propriétés Values et XValues retournent les valeurs des données et non les
références de plage utilisées dans le graphique. Pour déterminer les plages réfé-
rencées par un graphique, examinez la fonction SERIE dans la propriété Formula
de chaque série.
364
Partie 5 : Manipulation des objets Excel
Graphiques
Gardez à l’esprit la complexité du modèle de graphique pendant que vous créez
les procédures qui référencent les graphiques. Utilisez l’une des astuces que nous
vous proposons pour simplifier la manière de référencer le graphique et produire
du code plus propre, comme assigner une variable objet au graphique.
Dans le prochain chapitre, vous allez apprendre à configurer le classeur pour
exploiter les tableaux et les graphiques croisés dynamiques.
Chapitre 15
365
Partie 5 : Manipulation des objets Excel
Chapitre 16
Tableaux et graphiques
croisés dynamiques
Tableaux et graphiques croisés Programmation de tableaux croisés
dynamiques . . . . . . . . . . . . . . . . 367 dynamiques. . . . . . . . . . . . . . . . 384
Objets des tableaux croisés Manipulation par programmation des
dynamiques . . . . . . . . . . . . . . . . 374 tableaux croisés dynamiques . . 386
367
Partie 5 : Manipulation des objets Excel
368
Partie 5 : Manipulation des objets Excel
Excel se sert de transactions individuelles comme celles qui créent les faits affi-
chés dans le tableau croisé dynamique. Ce processus comporte deux phases :
l’extraction des clés des informations contenues dans les transactions et l’identi-
fication de la mesure correspondante.
Un tableau croisé dynamique met en œuvre des rapports multidimensionnels en
combinant les faits de différentes manières. Vous glissez-déposez des champs clé
depuis la Liste de champs du tableau croisé vers la zone de page pour déterminer
la page affichée. Vous pouvez également glisser-déposer les champs clé dans les
zones de ligne ou de colonne pour déterminer les lignes et colonnes affichées.
Glissez les mesures uniquement sur la zone de données. En effet, ces valeurs
seront calculées en fonction des autres champs. Le résultat de ces actions est un
tableau croisé dynamique, similaire à celui de la figure 16.2.
Chapitre 16
369
Partie 5 : Manipulation des objets Excel
ton Parcourir.
370
Partie 5 : Manipulation des objets Excel
Chapitre 16
371
Partie 5 : Manipulation des objets Excel
372
Partie 5 : Manipulation des objets Excel
Chapitre 16
Excel ce qui permet de préserver celles d’origine. Cette organisation permet à
l’utilisateur du tableau croisé dynamique de rafraîchir les données.
Les tableaux croisés dynamiques Excel présentent cependant une limite
importante : ils ne savent pas gérer directement les gros volumes de données.
Cette limite ne constitue pas une surprise si l’on considère qu’une feuille de cal-
cul est limitée à 65 536 lignes. Excel propose toutefois un utilitaire qui permet à
un tableau croisé dynamique d’exploiter un type spécial de serveur de base de
données externe appelé serveur OLAP (Online Analytical Processing).
Avec une base de données OLAP, les valeurs sont synthétisées au niveau du ser-
veur OLAP et non de l’ordinateur local. Celui-ci est capable de traiter des volu-
mes importants de données qu’il synthétise rapidement et efficacement en
précalculant les valeurs.
373
Partie 5 : Manipulation des objets Excel
Remarque Dans la mesure où Excel compte sur le serveur OLAP pour précal-
culer les données, chaque fois que vous modifiez la disposition d’un tableau
croisé dynamique, Excel demande une nouvelle copie des données au serveur
OLAP. Ce processus peut engendrer des délais importants pendant la transmis-
sion des données entre le serveur OLAP et Excel.
PivotTable à manipuler.
Chaque objet PivotTable contient plusieurs objets clés qui représentent les diffé-
rentes pièces d’un tableau croisé dynamique (voir figure 16.6).
374
Partie 5 : Manipulation des objets Excel
Objet Worksheet
Collection PivotTables
Objet PivotTable
Objet PivotCache
Collection PivotFields
(accessible via les propriétés :
ColumnFields, DataFields,
HiddenFields, PageFields,
RowFields, VisibleFields,
CalculatedFields)
Objet PivotField
Collection PivotItems
Objet PivotItem
Figure 16-6. Les différentes parties d’un tableau croisé dynamique sont
représentées par une collection de différents types d’objets.
Chapitre 16
Collection PivotTables
La collection PivotTables contient tous les tableaux croisés dynamiques d’une
feuille de calcul. Le tableau 16.1 liste les principales propriétés et méthodes de la
collection PivotTables. On accède à la propriété PivotTables d’un objet Worksheet
avec le code suivant :
ActiveSheet.PivotTables(1)
375
Partie 5 : Manipulation des objets Excel
Objet PivotTable
L’objet PivotTable représente un tableau croisé dynamique. Vous pouvez exploi-
ter cet objet pour accéder à un tableau croisé dynamique existant sur une feuille
Chapitre 16
376
Partie 5 : Manipulation des objets Excel
Chapitre 16
Format (format) Méthode : positionne le format du tableau croisé
dynamique sur l’un des formats spécifiés dans
XlPivotFormatType. Les formats valides sont :
xlPTClassic, xlPTNone, xlPTReport1 à xlPTReport10 et
xlPTTable1 à xlPTTable10.
HiddenFields Propriété (lecture seule) : retourne un objet
PivotField ou une collection PivotFields contenant les
champs qui ne sont actuellement pas affichés
comme champs de ligne, colonne, page ou données.
Name Propriété : contient le nom du tableau croisé
dynamique.
NullString Propriété : contient le texte affiché dans les cellules
contenant des valeurs nulles, si la propriété
DisplayNullString est positionnée sur True.
PageFields Propriété (lecture seule) : retourne un objet
PivotField ou une collection PivotFields qui contient
les champs actuellement affichés comme champs
de page.
377
Partie 5 : Manipulation des objets Excel
Collection PivotCaches
La collection PivotCaches contient tous les objets PivotCache (voir tableau 16.3).
Les objets PivotCache étant stockés au niveau du classeur, vous pouvez les exploi-
378
Partie 5 : Manipulation des objets Excel
Objet PivotCache
Chapitre 16
Les données affichées dans un tableau croisé dynamique sont stockées dans un
objet PivotCache. Pour référencer l’objet PivotCache, on utilise la méthode Pivot-
Cache associée à l’objet PivotTable ou la collection PivotCaches associées à l’objet
Workbook. Plusieurs tableaux croisés dynamiques peuvent partager le même
objet PivotCache.
Le tableau 16.4 présente une liste des principales propriétés et méthodes asso-
ciées à l’objet PivotCache.
Tableau 16-4. Principales propriétés et méthodes
de l’objet PivotCache
Propriété/Méthode Description
CommandText Propriété : contient la chaîne de commande utilisée pour
récupérer les données à partir d’une base de données
externe.
CommandType Propriété : identifie le type de données stockées dans
CommandText avec une constante de l’énumération
XlCmdType, dont les types sont : xlCmdCube, xlCmdDefault,
xlCmdList, xlCmdSql et xlCmdTable.
379
Partie 5 : Manipulation des objets Excel
380
Partie 5 : Manipulation des objets Excel
Objets PivotField
L’objet PivotField représente l’un des champs d’un tableau croisé dynamique.
Cet objet contient de nombreuses informations utiles qui décrivent le champ,
dont son nom (Name), la mémoire qu’il occupe (MemoryUsed) et le format de
nombres (NumberFormat). Les principales propriétés sont toutefois Orientation
et Position. La première détermine l’emplacement du champ dans le tableau
croisé dynamique et la deuxième la position du champ parmi tous les champs de
son orientation.
● La méthode PivotItem retourne une collection d’objets PivotItem. Chacun
de ces objets représente une valeur spécifique au sein de l’objet PivotField.
● On accède à l’objet PivotField par le biais des propriétés associées à l’objet
PivotTable. Celles-ci offrent un raccourci pour les sous-ensembles de don-
nées couramment employés.
● La collection PivotFields contient le jeu complet des objets PivotField asso-
ciés à PivotTable.
● La propriété HiddenFields retourne le jeu d’objets PivotField qui ne sont
actuellement pas affichés dans le tableau croisé dynamique ou le graphi-
que croisé dynamique.
● La propriété VisibleFields retourne le jeu d’objets PivotField qui sont
actuellement affichés dans le tableau croisé dynamique ou le graphique
croisé dynamique.
● La propriété ColumnFields retourne le jeu d’objets PivotField qui sont affi-
chés en tant que colonnes dans un tableau croisé dynamique ou un graphi-
Chapitre 16
que croisé dynamique.
● La propriété RowFields retourne le jeu d’objets PivotField qui sont affichés
en tant que lignes dans un tableau croisé dynamique ou un graphique
croisé dynamique.
● La propriété PageFields retourne le jeu d’objets PivotField qui sont affichés
dans la zone de page dans un tableau croisé dynamique ou un graphique
croisé dynamique.
● La propriété DataFields retourne le jeu d’objets PivotField qui sont affichés
dans la zone de données dans un tableau croisé dynamique ou un graphi-
que croisé dynamique.
● La collection CalculatedFields contient le jeu d’objets PivotField calculés à
partir d’autres champs du tableau croisé dynamique.
381
Partie 5 : Manipulation des objets Excel
croisé dynamique.
DragToRow Propriété : si elle est False, cette propriété signifie qu’on ne peut
pas glisser-déposer ce champ vers la position de la ligne dans le
tableau croisé dynamique.
LayoutForm Propriété : contient la manière dont les éléments du tableau
croisé dynamique s’affichent : xlTabular représente le format de
tableau, xlOutline désigne le format contours.
MemoryUsed Propriété (lecture seule) : retourne le nombre d’octets utilisés
par l’objet PivotField actuel.
Name Propriété : contient le nom de l’objet PivotField.
NumberFormat Propriété : contient les spécifications de mise en forme utilisées
pour afficher les informations provenant de l’objet PivotField.
S’applique uniquement aux champs utilisés dans la zone de
données du tableau croisé dynamique.
Orientation Propriété : indique l’emplacement du champ dans un tableau
croisé dynamique selon la spécification du type
XlPivotFieldOrientation (xlColumnField, xlDataField, xlHidden,
xlPageField ou xlRowField).
382
Partie 5 : Manipulation des objets Excel
Objet PivotItem
L’objet PivotItem représente une valeur unique spécifique d’un objet PivotField
particulier. Le tableau 16.6 présente une liste des principales propriétés et
méthodes associées à l’objet PivotItem.
Tableau 16-6. Principales propriétés et méthodes de l’objet PivotItem
Propriété/Méthode Description
Caption Propriété (lecture seule) : retourne l’étiquette du champ.
DataRange Propriété (lecture seule) : retourne un objet Range avec les
données contenues dans le champ.
Chapitre 16
Formula Propriété : contient la formule associée à l’élément en notation
de style A1. Si la cellule est vide, elle retourne une chaîne vide.
Si la cellule contient une constante, elle la retourne.
LabelRange Propriété (lecture seule) : retourne l’objet Range qui représente
les cellules du rapport de tableau croisé dynamique contenant
l’élément.
Name Propriété : contient le nom de l’objet PivotItem.
Position Propriété : contient la position relative du champ parmi tous
les champs de son orientation.
RecordCount Propriété (lecture seule) : retourne le nombre
d’enregistrements de l’objet PivotCache qui contiennent
l’élément spécifié.
Value Propriété : contient le nom de l’élément spécifié dans le champ
du tableau croisé dynamique.
Visible Propriété : positionnée sur True, cette propriété signifie que
l’élément est visible.
383
Partie 5 : Manipulation des objets Excel
Sub CreatePivotTable()
Dim pc As PivotCache
Dim ws As Worksheet
Dim tc As PivotTable
End If
Next ws
Set ws = ActiveWorkbook.Worksheets.Add()
ws.Name = "FeuilleTCD"
Set pc = ActiveWorkbook.PivotCaches.Add(xlDatabase,
"AllData!R1C1:R1117C6")
tc.PivotFields("Month").Orientation = xlRowField
tc.PivotFields("Month").Position = 1
384
Partie 5 : Manipulation des objets Excel
End Sub
On utilise une simple boucle For Each pour parcourir la collection d’objets
Worksheet associés au classeur actif à la recherche d’une feuille libellée
FeuilleTCD. Si la feuille existe, elle est supprimée. Une fois la feuille supprimée,
une nouvelle feuille de calcul portant le même nom est ajoutée à la collection
Worksheets. Le code s’assure que la feuille de calcul est vide avant d’ajouter le
tableau croisé dynamique.
Il crée ensuite un objet PivotCache avec la méthode PivotCaches.Add. L’argument
xlDatabase indique que les données sont organisées en séries de lignes et de
colonnes, alors que le deuxième paramètre indique que les données se trouvent
sur la feuille de calcul AllData dans les colonnes 1 à 6 et les lignes l à 1117.
Une fois que l’objet PivotCache est créé, le code peut créer un objet PivotTable
avec la méthode CreatePivotTable de l’objet PivotCache. Cette méthode prend
deux arguments, l’emplacement de l’angle supérieur gauche du tableau croisé
dynamique et son nom.
Par défaut, le tableau croisé dynamique est vide. Vous devez donc définir les
champs de lignes, de colonnes et de données. Pour définir les lignes et les colon-
nes, vous devez faire appel à la collection PivotFields de l’objet PivotTable et défi-
nir la propriété Orientation. La propriété Position est également positionnée sur
Chapitre 16
1, pour vous permettre d’ajouter des champs de ligne et de colonne.
Pour finir, la méthode AddDatatField définit les champs inclus dans la zone de
données du tableau croisé dynamique. Cette routine prend trois arguments :
l’objet PivotField qui doit être ajouté à la zone de données, le titre du champ et la
fonction employée pour combiner les champs de données.
Si vous exécutez la routine CreatePivotTable, vous obtenez le tableau croisé
dynamique de la figure 16.7.
385
Partie 5 : Manipulation des objets Excel
Charts.Add
ActiveChart.SetSourceData Sheets("FeuilleTCD").Range("A1")
ActiveChart.Location xlLocationAsNewSheet, "Graphique croisé
dynamique"
386
Partie 5 : Manipulation des objets Excel
Chapitre 16
Figure 16-8. Voici la disposition de base utilisée pour les manipulations de
notre exemple.
387
Partie 5 : Manipulation des objets Excel
Au Quotidien
Chapitre 16
Pour que cette macro fonctionne correctement, la zone de ligne doit contenir
trois champs. L’ordre des champs est important en ce qu’il affecte la présen-
tation des données, mais il est peu significatif si la procédure fonctionne cor-
rectement. La présence ou l’absence de l’instruction OnError produit,
cependant, une différence intéressante dans la manière dont Excel gère le
résultat de l’instruction qui place le champ Hour à la quatrième position de la
zone de ligne. Si on ignore l’instruction OnError et qu’il y a moins de trois
champs dans la zone de ligne, Excel ne parvient pas à trouver la quatrième
position de la zone et vous obtenez l’erreur : « Erreur d’exécution ‘1004’ :
Impossible de définir la propriété Position de la classe PivotField. ». En revan-
che, si on inclut l’instruction OnError, qui dirige le programme vers la ligne de
l’étiquette NotEnough: si une erreur se produit, Excel interprète l’instruction de
déplacer le champ Hour vers la quatrième position de la zone de ligne comme
une instruction de déplacer le champ Hour vers la dernière position de la zone
de ligne. Voilà la récompense d’une programmation de qualité.
388
Partie 5 : Manipulation des objets Excel
Sub ResetPivotTable()
With ActiveSheet.PivotTables("PivotTable8").PivotFields("Month")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable8").PivotFields("Week")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("PivotTable8").PivotFields("Day")
.Orientation = xlRowField
.Position = 3
End With
With ActiveSheet.PivotTables("PivotTable8").PivotFields("Hour")
.Orientation = xlColumnField
Chapitre 16
.Position = 1
End With
End Sub
Remarque Notez que le code déplace les champs par ordre de position de
sorte que le champ qui se trouve dans la position 1 de la zone de ligne soit
inséré avant le champ de la position 2.
389
Partie 5 : Manipulation des objets Excel
Sub RecordPosition()
i = 1
With Worksheets("PivotTable").PivotTables("PivotTable8")
For Each pvtMyField In .PivotFields
ActiveCell.Offset(i, 0) = pvtMyField.Name
ActiveCell.Offset(i, 1) = pvtMyField.Orientation
ActiveCell.Offset(i, 2) = pvtMyField.Position
i = i + 1
Next
End With
End Sub
Chapitre 16
Il est important de réaliser que les valeurs assignées à la propriété Position sont
représentées en interne en tant que nombres et non par les constantes Excel du
groupe XlPivotFieldOrientation. Le tableau 16.7 liste les constantes XlPivotFiel-
dOrientation et leurs valeurs numériques correspondantes.
390
Partie 5 : Manipulation des objets Excel
Chapitre 16
enregistrées. Cette macro suppose que vous utilisez le tableau croisé dynami-
que du classeur EditPivot.xls. Pour utiliser un autre tableau, modifiez l’instruc-
tion With de sorte qu’elle reflète le nom de la feuille de calcul (PivotTable dans
notre exemple) et l’identificateur du tableau (PivotTable8 dans cet exemple).
Sub ResetFromRecorded()
End With
Loop
End Sub
391
Partie 5 : Manipulation des objets Excel
Dans ce chapitre, vous avez étudié les tableaux et les graphiques croisés dynami-
ques, vous avez appris à les créer par programmation et par le biais de l’interface
Excel. Après l’étude de la création des tableaux croisés dynamiques, nous avons
approfondi le sujet en examinant quelques techniques précieuses permettant de
les manipuler par programmation. Les procédures qui clôturent ce chapitre
constituent d’intéressants outils pour toute personne qui souhaite exploiter des
données pour raconter une histoire, au lieu de combler la discussion le temps de
trouver une disposition spécifique du tableau croisé dynamique.
Chapitre 16
392
Partie 5 : Manipulation des objets Excel
Chapitre 17
Barres de commandes
Identification des différentes Contrôles des barres
parties du système de menus . . 393 de commandes . . . . . . . . . . . . . 400
393
Partie 5 : Manipulation des objets Excel
Collection CommandBars
La collection CommandBars contient toutes les barres de commandes définies
dans Excel. Pour l’essentiel, la collection CommandBars ressemble à toute autre
Chapitre 17
collection avec ses propriétés et ses méthodes comme Item, Count et Add. Elle
possède cependant quelques propriétés qui déterminent le fonctionnement des
barres de commandes, comme l’activation et la désactivation de certaines fonc-
tionnalités (menus adaptables, personnalisation des menus et animation des
menus).
394
Partie 5 : Manipulation des objets Excel
Barres de commandes
Le tableau 17.1 présente une liste des principales propriétés et méthodes de la
collection CommandBars.
Tableau 17-1. Principales propriétés et méthodes de la collection
CommandBars
Propriété/Méthode Description
AdaptiveMenus Propriété : si elle est positionnée sur True, cette propriété
signifie que les menus adaptables sont utilisés dans Excel.
Add(Name, Position, Méthode : crée une nouvelle barre de commandes et l’ajoute
MenuBar, Temporary) à la collection CommandBars. Name représente le nom de la
nouvelle barre de commandes, Position spécifie
l’emplacement de la barre, MenuBar, s’il est positionné sur
True, signifie que la barre de commandes remplace la barre
de menus actuellement active. Temporary, si True, signifie que
la barre de commandes est automatiquement supprimée à la
fermeture d’Excel.
Count Propriété (lecture seule) : retourne le nombre d’éléments
dans la collection CommandBars.
DisableCustomize Propriété : sur True, cette propriété signifie que les barres de
commandes ne peuvent pas être personnalisées par
l’utilisateur.
FindControl(Type, Id, Tag, Méthode : retourne une référence à l’objet
Visible, Recursive) CommandBarControl qui correspond à un critère défini. Type
spécifie le type de contrôle en se servant de l’énumération
MsoControlType. Id désigne le nom du contrôle. Tag recherche
les correspondances par le biais de la propriété Tag. Visible,
s’il est positionné sur True, limite la recherche aux contrôles
visibles. Si Recursive est True, la recherche s’effectue dans
l’objet CommandBar en cours et toutes ses sous-barres
d’outils contextuelles.
Item(Index) Propriété : retourne l’objet barre de commandes spécifié par
Index. Chapitre 17
LargeButtons Propriété : si elle est True, les boutons affichés dans la barre
d'outils sont agrandis.
MenuAnimationStyle Propriété : spécifie l’animation de la barre de commandes.
Voici les constantes de msoMenuAnimation :
msoMenuAnimationNone, msnMenuAnimationRandom,
msoMenuAnimationSlide ou msoMenuAnimationUnfold.
La méthode Add crée un objet barre de commandes vide associé aux propriétés
spécifiées et la méthode FindControl parcourt les barres de commandes à la
recherche d’un contrôle répondant aux critères spécifiés.
395
Partie 5 : Manipulation des objets Excel
Objets CommandBar
Les objets CommandBar représentent des conteneurs dans lesquels on place des
éléments de menu et des icônes. On référence un objet CommandBar par le biais
de la collection CommandBars. Celle-ci existe pour l’objet Application, ainsi que
d’autres collections CommandBarControls qui contiennent d’autres contrôles,
comme des contrôles de menus équipés de sous-menus. Le tableau 17.2 liste les
principales propriétés et méthodes de l’objet CommandBar.
Tableau 17-2. Principales propriétés et méthodes
de l’objet CommandBar
Propriété/Méthode Description
AdaptiveMenus Propriété : si elle est positionnée sur True, cette propriété
signifie que les menus adaptables sont utilisés avec cette barre
de commandes.
BuiltIn Propriété (lecture seule) : retourne True si la barre de
commandes fait partie d’Excel.
Controls Propriété (lecture seule) : retourne une référence d’objet à une
collection CommandBarControls qui contient tous les contrôles
de la barre de commandes.
Delete Méthode : supprime cette barre de commandes de la collection
CommandBars.
Enabled Propriété : positionnée sur True, elle signifie que l’objet
CommandBar est affiché dans la liste des barres de
commandes disponibles.
FindControl(Type, Id, Tag, Méthode : retourne une référence à l’objet CommandBarControl
Visible, Recursive) qui correspond à un critère défini. Type spécifie le type de
contrôle en se servant de l’énumération MsoControlType (voir
tableau 17.4 pour une liste complète de l’énumération). Id
désigne le nom du contrôle. Tag recherche les correspondances
par le biais de la propriété Tag. Visible, si True, limite la
recherche aux contrôles visibles. Recursive, si True, recherche
Chapitre 17
396
Partie 5 : Manipulation des objets Excel
Barres de commandes
mandes et s’il peut l’utiliser. Si on clique droit alors que le pointeur de la souris
survole une quelconque barre d’outils, une liste des barres de commandes s’affi-
che. Pour que votre barre de commandes soit présente dans cette liste, elle doit
être activée. Si la propriété Visible est True, le nom de la barre de commandes est
précédé d’une coche dans le menu contextuel, indiquant également qu’elle est
visible.
Pour déterminer si une barre de commandes est incluse d’origine dans Excel,
vérifiez si la propriété BuiltIn est True.
La méthode FindControl localise un contrôle spécifique en fonction des certaines
des valeurs de propriété du contrôle. Cette fonction est particulièrement intéres-
sante si l’utilisateur a déplacé le contrôle depuis son emplacement d’origine vers
un objet CommandBar différent.
397
Partie 5 : Manipulation des objets Excel
Sub ListCommandBars()
Dim c As CommandBar
Dim i As Long
i = 3
For Each c In Application.CommandBars
i = i + 1
ActiveSheet.Cells(i, 1) = c.Index
ActiveSheet.Cells(i, 2) = c.Enabled
ActiveSheet.Cells(i, 3) = c.Visible
ActiveSheet.Cells(i, 4) = c.Type
ActiveSheet.Cells(i, 5) = c.Name
Next c
End Sub
Chapitre 17
Figure 17-2. Les propriétés Index, Enabled, Visible, Type et Name de chaque
objet CommandBar sont copiées dans une feuille de calcul Excel.
398
Partie 5 : Manipulation des objets Excel
Barres de commandes
Sub AddFloatingCommandBar()
Dim c As CommandBar
Chapitre 17
Figure 17-3. Une barre de commandes flottante n’est pas ancrée avec les
autres barres.
399
Partie 5 : Manipulation des objets Excel
Sub SupprimerBarre()
Application.CommandBars("Excel2k3 VBA").Delete
End Sub
Collection CommandBarControls
Chapitre 17
400
Partie 5 : Manipulation des objets Excel
Barres de commandes
msoControlAutoCompleteCombo Normal
msoControlButton Contient un unique élément de menu, un bouton
d’icône, un élément de menu équipé d’une icône ou une
icône avec du texte sous l’image.
msoControlButtonDropdown Zone de liste modifiable
msoControlButtonPopup Menu contextuel
msoControlComboBox Zone de liste modifiable
msoControlCustom Bouton
msoControlDropdown Zone de liste modifiable
msoControlEdit Zone de liste modifiable
401
Partie 5 : Manipulation des objets Excel
Objet CommandBarControl
Les objets CommandBarControl permettent à l’utilisateur d’effectuer des choix.
Ceux-ci prennent la forme de boutons de commande, de listes déroulantes, de
zones de liste modifiables et de bien d’autres éléments. Le tableau 17.5 liste les
principales propriétés et méthodes de l’objet CommandBarControl.
Tableau 17-5. Principales propriétés et méthodes de l’objet
Chapitre 17
CommandBarControl
Propriété/Méthode Description
BeginGroup Propriété : si True, elle signifie que ce contrôle marque le
début d’un groupe de contrôles sur une barre de
commandes.
BuiltIn Propriété (lecture seule) : retourne True si la barre de
commandes fait partie d’Excel.
Caption Propriété : contient le texte associé au contrôle de la barre
de commandes.
402
Partie 5 : Manipulation des objets Excel
Barres de commandes
403
Partie 5 : Manipulation des objets Excel
404
Partie 5 : Manipulation des objets Excel
Barres de commandes
spécifique de la propriété Parameter de chaque contrôle.
Les méthodes Copy et Move permettre de déplacer les contrôles d’une barre de
commandes à une autre et la méthode Delete supprime le contrôle de la barre de
commandes et de l’application.
Contrôles de boutons
Il n’existe qu’un type de contrôle de bouton : msoControlButton. Cette objet sert
dans les cas où vous voulez exécuter une sous-routine en réponse à une action de
l’utilisateur : appuyer sur un bouton ou sélectionner un élément de menu. Le
tableau 17.6 liste des propriétés et méthodes uniques de l’objet CommandBar-
Button comparé à l’objet CommandBarControl.
Tableau 17-6. Propriétés et méthodes uniques de l’objet
CommandBarButton
Propriété/
Méthode Description
BuiltInFace Propriété : True si l’image du bouton de barre de commandes est son
image prédéfinie. Affecter la valeur True à cette propriété rétablit
l’image prédéfinie.
CopyFace Méthode : copie l’image du bouton dans le Presse-papiers.
FaceId Propriété : contient le numéro d’identification de l’image affichée sur
le bouton. La valeur de la propriété FaceId pour un bouton de barre de
commandes dont l’image est personnalisée est égale à 0 (zéro).
PasteFace Méthode : colle l’image du Presse-papiers vers le bouton de barre de
commandes.
ShortcutText Propriété : contient le texte de touche de raccourci affiché en regard
du contrôle bouton. Rappelez-vous que cette propriété fonctionne
uniquement pour les boutons de barre de commandes possédant une
macro OnAction valide.
State Propriété : indique l’état visuel du bouton. Voici les constantes de
msoButtonState : msoButtonDown, msoButtonMixed ou msoButtonUp.
Chapitre 17
405
Partie 5 : Manipulation des objets Excel
Figure 17-4. Vous pouvez combiner plusieurs types de boutons sur une même
barre de commandes pour créer une barre d'outils.
La routine suivante a servi à créer la barre d’outils de la figure 17.4. Le code com-
mence par localiser la barre de commandes qui doit accueillir les contrôles en
utilisant la collection CommandBars et en spécifiant le nom souhaité. La routine
utilise ensuite la méthode Add de la collection Controls pour créer un nouveau
bouton. La propriété Style du bouton est positionnée sur le style de bouton
approprié, alors que la propriété Caption contient le texte qui doit ou non s’affi-
cher selon le type du bouton.
406
Partie 5 : Manipulation des objets Excel
Barres de commandes
Sub CreateBar()
Dim c As CommandBar
Dim cb As CommandBarButton
Set cb = c.Controls.Add(msoControlButton, 2)
cb.Style = msoButtonCaption
cb.Caption = "légende de bouton avec un texte long"
Set cb = c.Controls.Add(msoControlButton, 3)
cb.Style = msoButtonIcon
cb.Caption = "bouton icône"
Set cb = c.Controls.Add(msoControlButton, 4)
cb.Style = msoButtonIconAndCaption
cb.Caption = "bouton icône et texte"
End Sub
407
Partie 5 : Manipulation des objets Excel
La liste des éléments qui s’affichent dans une zone de liste modifiable est un
tableau de chaînes. Vous trouvez ou changer un élément par le biais de la pro-
priété List en spécifiant la position relative de l’élément dans la liste. La propriété
ListIndex pointe vers l’élément actuellement sélectionné dans la liste, alors que la
propriété ListCount indique le nombre total d’éléments dans la liste.
On ajoute des éléments à la liste avec la méthode Add. Vous pouvez en option
spécifier la position relative de l’élément à ajouter. Tous les éléments, en com-
mençant par celui se trouvant à l’emplacement spécifié, seront déplacés d’une
position vers la fin de la liste. Pour supprimer des éléments de la liste, servez-
vous de la méthode RemoveItem et spécifiez la position relative de l’élément à
supprimer. Tous les éléments suivants seront déplacés d’une position vers le
début de la liste.
Sub AddCommandCombo()
Dim c As CommandBar
Dim cb As CommandBarComboBox
Chapitre 17
Set cb = c.Controls.Add(msoControlDropdown)
cb.Style = msoComboNormal
cb.AddItem "Élément 1"
cb.AddItem "Élément 2"
cb.AddItem "Élément 3"
cb.Parameter = "Liste déroulante #1"
cb.OnAction = "ThisWorkbook.TestControl"
End Sub
408
Partie 5 : Manipulation des objets Excel
Barres de commandes
au contrôle actif qui déclenche la macro, auquel on se réfère par la propriété
CommandBars.ActionControl. Vous devez exécuter la routine AddFloatingCom-
mandBar et la routine AddCommandCombo pour tester l’événement OnAction.
With Application.CommandBars.ActionControl
If .Parameter = "Liste déroulante #1" Then
MsgBox .List(.ListIndex)
End If
End With
End Sub
Sub ShowCommandPopup()
409
Partie 5 : Manipulation des objets Excel
Set cb = c.Controls.Add(msoControlButton)
cb.Style = msoButtonIconAndCaption
cb.Caption = "Bouton de menu #1"
cb.Parameter = "Menu #1"
cb.OnAction = "ThisWorkbook.TestPopup"
Set cb = c.Controls.Add(msoControlButton)
cb.Style = msoButtonIconAndCaption
cb.Caption = "Bouton de menu #2"
cb.Parameter = "Menu #2"
cb.OnAction = "ThisWorkbook.TestPopup"
Set cp = c.Controls.Add(msoControlPopup)
cb.Parameter = "Menu #1"
cp.Caption = "Choix du sous-menu"
Set cb = cp.Controls.Add(msoControlButton)
cb.Style = msoButtonIconAndCaption
cb.Caption = "Bouton du sous-menu #1"
cb.Parameter = "Sous-menu #1"
cb.OnAction = "ThisWorkbook.TestPopup"
Set cb = cp.Controls.Add(msoControlButton)
cb.Style = msoButtonIconAndCaption
cb.Caption = "Bouton du sous-menu #2"
cb.Parameter = "Sous-menu #2"
cb.OnAction = "ThisWorkbook.TestPopup"
Chapitre 17
End If
c.ShowPopup
End Sub
Pour créer un menu contextuel, vous devez créer un nouvel objet du type mso-
BarPopup. Vous ajoutez ensuite les contrôles individuels au menu contextuel.
Il suffit d’ajouter des objets msoControlButton pour créer la traditionnelle liste
des éléments de menu. Pour présenter des éléments de sous-menu, vous devez
ajouter un élément msoControlPopup. Celui-ci insère un élément équipé d’une
flèche qui indique la présence d’un sous-menu. Il agit également comme conte-
neur pour les éléments du sous-menu, que l’on peut joindre avec la même tech-
nique que celle employée pour la barre contextuelle.
410
Partie 5 : Manipulation des objets Excel
Barres de commandes
Pour finir, une fois que la barre de commandes est initialisée, on l’affiche avec la
méthode ShowPopup. Vous devez exécuter cette méthode chaque fois que vous
voulez afficher le menu contextuel. En effet, une fois que l’utilisateur a sélec-
tionné un élément du menu, celui-ci disparaît. On affiche généralement le menu
contextuel en réponse à une action de l’utilisateur comme l’exécution d’une
macro, la gestion d’une condition particulière avec une application Excel plus
importante ou la réponse à une séquence.
Sub AddMenuItem()
Dim c As CommandBar
Dim cb As CommandBarButton
Dim cp As CommandBarPopup
End If
End If
End Sub
voulez ajouter le nouvel élément de menu. Dans la mesure où tous les éléments
de menu d’Excel se trouvent dans la barre de menus Worksheet, la manière la plus
simple de commencer est de localiser cette barre de commandes. Dans cette
barre, on localise ensuite le contrôle contextuel Help.
Pour finir, par le biais de la collection Controls du contrôle contextuel Help, on
ajoute un nouveau bouton de contrôle à la fin de la liste du message À propos de
votre application. La propriété OnAction spécifie la routine appelée pour afficher
la message.
Dans ce chapitre, vous avez appris que les barres de commandes combinent les
fonctions des éléments de menu et les barres d’outils en un unique système uni-
fié. Vous avez étudié l’objet CommandBar (qui peut représenter un menu ou une
411
Partie 5 : Manipulation des objets Excel
412
Partie 5 : Manipulation des objets Excel
Chapitre 18
Personnalisation des
boîtes de dialogue
Affichage des boîtes de dialogue Planification avec des boîtes
existantes. . . . . . . . . . . . . . . . . . 414 de dialogue . . . . . . . . . . . . . . . . 424
Modification des boîtes
de dialogue existantes . . . . . . . . 418
413
Partie 5 : Manipulation des objets Excel
Sub ShowSaveAs()
Application.Dialogs(xlDialogSaveAs).Show
End Sub
Dans ce chapitre, vous allez apprendre à afficher les boîtes de dialogue intégrées
et à les manipuler en leur passant des arguments et en définissant leurs proprié-
tés.
Sub ShowOpen()
Result = Application.Dialogs(xlDialogOpen).Show
End Sub
Pour plus d’informations sur les constantes xlDialog, et une liste complète, tapez argu-
ments boîte dialogue dans la zone Poser une question de VBA et sélectionnez l’entrée
Listes d’arguments de boîte de dialogue intégrée.
414
Partie 5 : Manipulation des objets Excel
Sub GotoRange()
Application.Goto Reference:=Range("A1:C3")
End Sub
Dans certains cas, vous devrez afficher la boîte de dialogue intégrée Excel pour
permettre à l’utilisateur d’effectuer certains choix. Pour ce faire, vous disposez de
deux possibilités :
● Accéder à la collection Dialogs de l’objet Application.
● Exécuter directement un élément de menu.
Sub ShowGoto()
Application.Dialogs(xlDialogFormulaGoto).Show
End Sub
415
Partie 5 : Manipulation des objets Excel
Sub ShowGoto2()
Result = Application.Dialogs(xlDialogFormulaGoto).Show
End Sub
Sub ShowGotoSpecial()
Application.Dialogs(xlDialogSelectSpecial).Show
End Sub
Figure 18-2. Pour afficher la boîte de dialogue Sélectionner les cellules, vous
devez utiliser la constante intrinsèque de cette boîte de dialogue.
Chapitre 18
416
Partie 5 : Manipulation des objets Excel
Sub ShowAlignmentTab()
Application.Dialogs(xlDialogAlignment).Show
End Sub
Pour afficher les autres onglets de la boîte de dialogue Format de cellule, servez-
vous des constantes suivantes : xlDialogFormatNumber, xlDialogBorder, xlDialo-
gCellProtection, xlDialogPatterns ou xlDialogFontProperties. Notez qu’il n’existe
aucune logique dans le nommage de ces constantes.
Figure 18-3. Vous pouvez afficher la boîte de dialogue Format de cellule, mais
un onglet à la fois.
Au Quotidien
Variables retournées ou exécution ?
Sub GetFileName()
FullFileName = Application.GetOpenFilename("Fichiers Excel (*.xl*),
*.xl*", _
1, "Titre personnalisé", , False)
417
Partie 5 : Manipulation des objets Excel
FullFileName = Application.GetSaveAsFilename("DefaultFilename.xls", _
"Fichiers Excel (*.xl*), *.xl*, 1", "Titre personnalisé")
End Sub
Une fois le nom de fichier passé à la variable, vous pouvez l’exploiter dans la
méthode de votre choix. Il peut, par exemple, vous servir à ouvrir le fichier avec
la méthode Open.
Workbooks.Open FullFileName
Workbooks.SaveAs FullFileName
Lorsque les utilisateurs ont confirmé leur choix dans la boîte de dialogue Ouvrir
ou Enregistrer sous, ils peuvent avoir modifié le dossier en cours. En effet,
l’utilisation de ces boîtes de dialogue permet aux utilisateurs de parcourir les
lecteurs de leur ordinateur pour choisir un autre dossier. Cette méthode cons-
titue la meilleure solution pour laisser aux utilisateurs le choix de la destina-
tion des fichiers.
Sub ProtectionArgs()
Application.Dialogs(xlDialogCellProtection).Show True, True
End Sub
Chapitre 18
418
Partie 5 : Manipulation des objets Excel
Figure 18-4. Les deux cases de l’onglet Protection sont cochées par défaut par
le biais du code VBA.
Sub GotoArguments()
Application.Dialogs(xlDialogFormulaGoto).Show Range("Z100"), True
End Sub
À mesure que vous exploiterez les boîtes de dialogue, vous découvrirez qu’il faut
quelque peu tâtonner avant de parvenir à utiliser correctement la collection Dia-
logs.
419
Partie 5 : Manipulation des objets Excel
Il existe plus de 250 boîtes de dialogue que vous pouvez appeler par le biais des
constantes intrinsèques xlDialog, mais certaines sont plus utiles que d’autres. Les
trois prochains tableaux listent les boîtes de dialogue employées pour formater
les cellules, modifier les graphiques et effectuer diverses tâches pratiques.
Pour afficher la police par défaut, vous laissez le premier argument vide,
comme dans l’instruction Application.Dialogs(xlDialogFont).Show, 12.
420
Partie 5 : Manipulation des objets Excel
421
Partie 5 : Manipulation des objets Excel
Le tableau 18.3 présente certaines des boîtes de dialogue employées pour accéder
aux options disponibles par le biais de la structure d’Excel.
Tableau 18-3. Constantes xlDialog de la structure
des menus d’Excel
Constante xlDialog Description
xlDialogApplyNames name_array, ignore, use_rowcol, omit_col, omit_row, order_num,
append_last
xlDialogAutoCorrect correct_initial_caps, capitalize_days
xlDialogColorPalette file_text
xlDialogColumnWidth width_num, reference, standard, type_num, standard_num
xlDialogCreateNames top, left, bottom, right
xlDialogDefineName name_text, refers_to, macro_type, shortcut_text, hidden,
category, local
xlDialogDefineStyle style_text, number, font, alignment, border, pattern, protection
xlDialogFilterAdvanced operation, list_ref, criteria_ref, copy_ref, unique
xlDialogGoalSeek target_cell, target_value, variable_cell
xlDialogInsertObject object_class, file_name, link_logical, display_icon_logical,
icon_file, icon_number, icon_label
xlDialogOpen file_text, update_links, read_only, format, prot_pwd,
write_res_pwd, ignore_rorec, file_origin, custom_delimit,
add_logical, editable, file_access, notify_logical, converter
xlDialogPageSetup head, foot, left, right, top, bot, hdng, grid, h_cntr, v_cntr, orient,
paper_size, scale, pg_num, pg_order, bw_cells, quality,
head_margin, foot_margin, notes, draft
Chapitre 18
422
Partie 5 : Manipulation des objets Excel
Il existe bien d’autres boîtes de dialogue intégrées. Pour en localiser tous les
arguments disponibles, consultez le site web de MSDN et l’aide en ligne
d’Excel.
Sub VerifyAlignment()
Application.Dialogs(xlDialogAlignment).Show 3, 1, 2
End Sub
Chapitre 18
423
Partie 5 : Manipulation des objets Excel
424
Partie 5 : Manipulation des objets Excel
Chapitre 19
Création de feuilles
UserForm
Création d’une feuille Contrôles UserForm. . . . . . . . . . 431
UserForm . . . . . . . . . . . . . . . . . . 425
425
Partie 5 : Manipulation des objets Excel
426
Partie 5 : Manipulation des objets Excel
Chapitre 19
5 Le nom du contrôle Intitulé est Label1. Pour modifier cette valeur, chan-
gez sa propriété Caption dans fenêtre Propriétés ou cliquez sur le contrôle
et tapez un nouvel intitulé directement dans la feuille.
6 Vous pouvez tester votre feuille à tout moment en choisissant Exécution,
Exécuter Sub/UserForm. La fenêtre Excel s’affiche avec votre nouvelle
feuille au premier plan.
427
Partie 5 : Manipulation des objets Excel
428
Partie 5 : Manipulation des objets Excel
Chapitre 19
Afficher un objet UserForm
Les objets UserForm sont des objets Visual Basic que vous pouvez manipuler
avec du code en paramétrant leurs propriétés, méthodes d’appel et réponses
aux événements. Il n’est guère difficile de créer une macro qui affiche une
feuille à l’écran. Il suffit ensuite d’ajouter le code qui s’exécute en réponse
aux divers événements (en programmation, on appelle cela intercepter les
événements).
L’affichage d’une feuille dans VBA constitue un processus en deux phases. Pour
commencer, vous devez charger la feuille, puis l’afficher. Le processus de charge-
ment alloue de la mémoire et initialise la feuille pour préparer son affichage. Le
processus d’affichage crée la fenêtre graphique qui contient la feuille et la rend
visible à l’utilisateur.
Pour charger puis afficher une feuille, vous appelez sa méthode Load puis sa
méthode Show. Si la feuille ne se charge pas lorsque vous appelez la méthode
Show, elle est chargée automatiquement.
Hide est le contraire de Show et Unload celui de Load. Ainsi, si vous appelez la
méthode Hide, vous masquez une feuille sans libérer ses ressources. De même, si
vous appelez la méthode Unload, vous libérez toutes les ressources associées à
une feuille. Si vous appelez Unload alors que la feuille est visible à l’écran, elle est
automatiquement supprimée de l’affichage avant que ses ressources ne soient
libérées.
Vous pouvez afficher une feuille de deux manières : modale ou sans mode. Dans
une feuille modale, tout le traitement de l’application associée s’arrête jusqu’à ce
que la feuille soit fermée. Une boîte de message est un exemple de feuille modale.
Pour afficher une feuille sans mode, servez-vous de l’instruction suivante :
UserForm1.Show vbModeless
UserForm1.Show vbModal
429
Partie 5 : Manipulation des objets Excel
Une feuille sans mode ne bloque pas l’application lorsqu’elle est active : l’appli-
cation continue de fonctionner comme si la feuille n’était pas présente. Cette
approche répond à différentes applications, mais il est préférable de l’employer
avec parcimonie. En effet, les feuilles sans mode n’apparaissent ni dans la barre
des tâches, ni dans l’ordre de tabulation des fenêtres. Autrement dit, les utilisa-
teurs risquent de perdre une feuille sans mode lorsqu’ils basculent dans une
autre application ou une autre fenêtre de l’application en cours.
Le cycle de vie d’une feuille est lié à trois événements essentiels. L’événement
Activate se déclenche juste avant que la feuille ne devienne la fenêtre active.
L’événement Deactivate se déclenche lorsque la feuille n’est plus la fenêtre active.
L’événement Terminate se déclenche lorsqu’on décharge la feuille.
Rappelez-vous que les événements Activate et Deactivate se déclenchent unique-
ment quand on se déplace au sein de l’application VBA. Basculer vers ou depuis
une autre application avec Excel et le programme VBA ne déclenche pas ces évé-
nements.
Au Quotidien
Boîte de dialogue intégrée ou personnalisée ?
430
Partie 5 : Manipulation des objets Excel
Chapitre 19
solutions simples qui demandent peu voire pas de formation. Avec les boîtes
de dialogue intégrées, vous exploitez une interface connue de l’utilisateur et
qu’il maîtrise.
Contrôles UserForm
La Boîte à outils regroupe un assortiment de contrôles destinés aux feuilles. Cer-
tains, comme le contrôle Intitulé, sont statiques et se contentent de modifier
l’apparence de la feuille. D’autres, comme Zone de texte et Bouton de com-
mande, interagissent avec l’utilisateur pour éditer des informations ou déclen-
cher des tâches.
431
Partie 5 : Manipulation des objets Excel
432
Partie 5 : Manipulation des objets Excel
Chapitre 19
Propriété/Méthode Description
ControlTipText Propriété : contient le texte affiché lorsque l’utilisateur survole le
contrôle avec le pointeur de la souris pendant quelques
secondes.
DblClick Événement : appelé lorsque l’utilisateur double-clique sur le
contrôle avec la souris.
Enabled Propriété : Si True, cette propriété signifie que le contrôle peut
recevoir le focus et répondre aux événements générés par
l’utilisateur.
Enter Événement : appelé juste avant que le contrôle reçoive le focus
d’un autre contrôle de la même feuille.
Exit Événement : appelé juste avant que le contrôle perde le focus au
profit d’un autre contrôle de la même feuille.
Font Propriété : contient une référence à un objet Font, qui définit les
caractéristiques du texte affiché sur le contrôle.
ForeColor Propriété : contient la couleur du premier plan du contrôle.
Height Propriété : contient la hauteur du contrôle en points.
Left Propriété : contient la distance entre le bord gauche du contrôle
et le bord gauche de la feuille sur laquelle le contrôle réside.
Locked Propriété : si True, l’utilisateur n’est pas habilité à changer la
valeur du contrôle.
Name Propriété : contient le nom du contrôle.
SpecialEffect Propriété : spécifie l’aspect du contrôle à l’écran.
TabIndex Propriété : spécifie la position relative du contrôle dans l’ordre
des tabulations.
TabStop Propriété : si True, elle signifie que le contrôle accepte le focus
lorsqu’un utilisateur emploie la touche TAB pour se déplacer.
Top Propriété : contient la distance entre le bord supérieur du contrôle
et le bord supérieur de la feuille sur laquelle le contrôle réside.
Value Propriété : décrit l’état ou le contenu d’un contrôle.
Visible Propriété : si True, elle signifie que le contrôle est affiché sur la
feuille.
Width Propriété : contient la largeur du contrôle en points.
ZOrder (zPosition) Méthode : place le contrôle à l’avant-plan (fmTop) ou à l’arrière-
plan fmBottom) de la hiérarchie d’affichage.
Les propriétés Height, Width, Top et Left indiquent la taille physique et la position
du contrôle sur la feuille. La propriété Enabled détermine si le contrôle peut rece-
voir le focus, alors que la propriété Visible détermine si le contrôle est affiché.
433
Partie 5 : Manipulation des objets Excel
peut faire défiler une zone de texte à plusieurs lignes pour voir toutes les don-
nées, mais il ne peut pas les modifier. Si la propriété Enabled est positionnée sur
False, le contrôle zone de texte est visible, mais l’utilisateur ne peut pas faire défi-
ler pour afficher le texte qui n’est pas visible à l’écran.
Lorsque deux contrôles se chevauchent, la méthode ZOrder désigne celui qui est
entièrement visible et celui qui est partiellement ou totalement masqué. Si vous
placez un contrôle à l’avant-plan de l’axe des z, il est affiché en dernier : il sera
donc entièrement visible, même s’il chevauche d’autres contrôles. De même, si
vous vous servez de la méthode ZOrder pour placer un contrôle à l’arrière-plan
sur l’axe des z, il est restitué en premier : tout contrôle rendu ultérieurement peut
le masquer.
TabIndex identifie l’ordre dans lequel le focus passe d’un contrôle au suivant
lorsque l’utilisateur appuie sur la touche TAB et TabStop détermine si le contrôle
accepte le focus ou si celui-ci passe au prochain contrôle possédant la valeur
TabIndex la plus élevée. Les événements Enter et Exit se déclenchent lorsque le
focus passe d’un contrôle à l’autre au sein de la même feuille. La routine Exit
contient un unique argument, Cancel, que vous pouvez positionner sur True
pour empêcher l’utilisateur de passer à un autre contrôle.
434
Partie 5 : Manipulation des objets Excel
Note du traducteur Les contrôles des feuilles UserForm ont été traduits
Chapitre 19
dans la Boîte à outils VBA, mais conservent leur nom anglais une fois insérés
sur la feuille et dans la fenêtre Propriétés. Afin de simplifier la compréhension
des prochaines sections, nous avons choisi de conserver le nom anglais des
contrôles et de placer leur nom traduit, tel qu’on le trouve dans la Boîte à
outils, entre parenthèses à la première occurrence.
Contrôle Label
Le contrôle Label (Intitulé) permet au programme d’afficher du texte sur la
feuille que l’utilisateur ne peut pas modifier. Le contrôle Label sert essentielle-
ment à décrire le contenu des autres contrôles, comme le contrôle TextBox (Zone
de texte).
Bien que l’utilisateur ne puisse pas modifier la valeur du contrôle Label, votre
programme le peut en assignant une valeur à la propriété Caption. Contraire-
ment à la plupart des autres contrôles, le contrôle Label ne possède pas de pro-
priété Value puisque l’utilisateur ne peut rien modifier. En revanche, il répond
aux clics de souris et déclenche les événements Click et DblClick.
Contrôle CommandButton
Le contrôle CommandButton (Bouton de commande) affiche un bouton qui
déclenche l’événement Click associé si l’utilisateur clique sur le bouton. Pour le
déclencher, on peut également utiliser la touche TAB pour lui donner le focus
puis appuyer sur la touche ENTRÉE ou la barre d’espace.
La routine suivante change le texte affiché sur le bouton chaque fois que l’on cli-
que dessus. Si la propriété Caption lit « Éteint », la routine réinitialise la valeur
sur « Allumé » ; sinon, la propriété Caption est positionnée sur « Éteint ».
Else
CommandButton1.Caption = "Éteint"
End If
End Sub
435
Partie 5 : Manipulation des objets Excel
Contrôle TextBox
Le contrôle TextBox (Zone de texte) constitue le principal contrôle employé pour
accepter du texte émanant de l’utilisateur. Il existe deux types principaux de
zones de texte : à ligne unique ou à plusieurs lignes. Cet aspect du contrôle est
géré par la propriété Multiline. Si elle est positionnée sur True, le contrôle pré-
sente plusieurs lignes de texte ; si elle prend la valeur False, la zone de texte ne
comporte qu’une seule ligne de texte.
Si le texte affiché dans la zone de texte est plus long que la partie visible, vous
pouvez ajouter des barres de défilement permettant à l’utilisateur de visualiser le
texte masqué. Pour afficher une barre de défilement horizontale dans une zone
de texte à ligne unique, positionnez la propriété ScrollBars sur fmScrollBarsHori-
zontal. Dans une zone de texte à plusieurs lignes, vous pouvez également opter
pour une barre de défilement verticale (fmScrollBarsVertical) ou pour deux bar-
res de défilement (fmScrollBarsBoth). Attribuez la valeur fmScrollBarsNone à
cette propriété dans n’importe quelle zone de texte pour empêcher l’affichage
des barres de défilement.
La propriété WordWrap constitue une autre propriété intéressante des zones de
texte à plusieurs lignes. Lorsqu’elle est positionnée sur True, toute ligne trop
longue pour s’afficher complètement dans l’espace horizontal disponible est
renvoyée à la ligne suivante pour ne pas couper un mot en fin de ligne. Cepen-
dant, dans ce cas, vous ne pourrez pas afficher de barre de défilement horizon-
tale.
436
Partie 5 : Manipulation des objets Excel
Chapitre 19
Les caractères affichés dans un contrôle TextBox sont présents dans les propriétés
Text et Value et vous modifiez le contenu de la zone de texte en changeant l’une
ou l’autre propriété. Il est cependant coutume d’utiliser la propriété Text au lieu
de la propriété Value. L’événement Change se déclenche si on assigne une valeur
à l’une ou l’autre propriété.
Pour masquer les caractères saisis dans une zone de texte, spécifiez une valeur
pour la propriété PasswordChar. Cette propriété sert essentiellement à masquer
le mot de passe en le remplaçant par un astérisque (*). Pour afficher les caractè-
res saisis, attribuez à cette propriété une valeur de chaîne vide.
La propriété MaxLength spécifie le nombre maximum de caractères que l’on
peut saisir dans le contrôle TextBox et la propriété TextLength retourne la lon-
gueur totale du texte. La propriété TextLength compte également les retours cha-
riot et les sauts de ligne présents dans une zone de texte à plusieurs lignes. Si la
propriété AutoTab est positionnée sur True, le focus se décale sur le contrôle sui-
vant dans l’ordre des tabulations lorsque le nombre maximum de caractères a été
saisi dans le contrôle.
Contrôle CheckBox
Le contrôle CheckBox (Case à cocher) permet à l’utilisateur de choisir entre deux
valeurs telles que Oui/Non, Vrai/Faux ou Actif/Inactif. Le texte de la propriété
Caption s’affiche en regard de la case à cocher.
Les événements Click et Change de ce contrôle génèrent le même résultat puisque
pour en modifier la valeur, il suffit que l’utilisateur clique n’importe où sur le
contrôle, y compris sur sa légende. Pour afficher la valeur d’un contrôle Check-
437
Partie 5 : Manipulation des objets Excel
End Sub
Contrôle ToggleButton
Le contrôle ToggleButton (Bouton bascule) est similaire au contrôle CheckBox en
ce qu’il permet à l’utilisateur de choisir entre deux valeurs. La seule différence
réelle entre les deux est que le contrôle ToggleButton semble « relevé » quand la
propriété Value est positionnée sur False et « enfoncé » lorsqu’elle prend la valeur
True.
Contrôle SpinButton
Le contrôle SpinButton (Bouton toupie) simplifie le choix entre plusieurs
valeurs. La propriété Value contient la valeur actuelle du contrôle. Si on clique
sur le bouton Flèche haut on augmente la valeur et si on clique sur le bouton Flè-
che bas, on réduit la valeur.
Les propriétés Min et Max spécifient la plus petite et la plus grande valeur du
contrôle. La propriété SmallChange spécifie le nombre ajouté ou soustrait cha-
que fois que l’on clique sur l’un des boutons flèche. Par défaut, la valeur est de 1.
Chaque fois que la propriété Value de ce contrôle change, l’événement Change se
déclenche. En outre, l’événement SpinUp se déclenche si on clique sur le bouton
Flèche haut et un clic sur le bouton Flèche bas déclenche l’événement SpinDown.
438
Partie 5 : Manipulation des objets Excel
Chapitre 19
La valeur par défaut est de 500 millisecondes. Le délai entre le premier et le
deuxième appel est égal à cinq fois la valeur de Delay pour qu’il soit plus simple
pour l’utilisateur de cliquer une fois sur le bouton. Après le deuxième appel,
l’événement Change est appelé après que l’intervalle spécifié dans la propriété
Delay se soit écoulé.
En général, on place un contrôle TextBox ou Label en regard du contrôle
SpinButton pour afficher la valeur en cours. Voici un exemple de code :
TextBox1.Text = SpinButton1.Value
End Sub
Contrôle Frame
Le contrôle Frame (Cadre) permet de grouper une série de contrôles. Technique-
ment, ce contrôle est appelé conteneur. Il s’agit, en effet, du seul contrôle de
Visual Basic qui puisse contenir d’autres contrôles, appelés également contrôles
enfants.
439
Partie 5 : Manipulation des objets Excel
Si vous redimensionnez et/ou déplacez un cadre dans une feuille, tous les
contrôles qu’ils contient suivent le mouvement. La position relative entre les
contrôles enfants et l’angle supérieur gauche du cadre est constante.
Contrôle OptionButton
Le contrôle OptionButton (Bouton d’option) permet de choisir exactement un
élément dans un groupe. Le bouton d’option fonctionne comme une case à
cocher en ce qu’il possède deux états : sélectionné ou non sélectionné. Cepen-
dant, on ne peut sélectionner qu’un seul bouton d’option par feuille. Lorsque
l’utilisateur clique sur un bouton d’option différent, le bouton d’option actuel-
lement sélectionné est désélectionné au profit du nouveau. Autrement dit, si la
feuille contient 20 boutons d’option, un seul est sélectionné à la fois.
Pour afficher plusieurs groupes de boutons d’option sur une feuille, placez cha-
que groupe dans un contrôle Frame. Ainsi, le groupe de boutons d’option affecte
uniquement les valeurs des autres boutons d’option du même cadre. Les bou-
tons d’option qui se trouvent en-dehors du cadre ou dans un autre cadre ne sont
pas affectés.
440
Partie 5 : Manipulation des objets Excel
Contrôle Image
Chapitre 19
Le contrôle Image relativement simple. Il permet d’afficher une image sur une
feuille. Il supporte uniquement les formats de fichier suivants : BMP, CUR, GIF,
ICO, JPG et WMF.
La propriété Picture contient l’image binaire qui s’affiche dans le contrôle. Saisis-
sez le nom d’un fichier dans Visual Basic Editor et il charge automatiquement
l’image. Pour charger une image pendant l’exécution du programme, faites
appel à la fonction LoadPicture de la manière suivante, où <nomchemin> contient
le nom du fichier et son chemin d’accès :
Image1.Picture = LoadPicture(<nomchemin>)
Par défaut, lorsqu’une image est chargée dans un contrôle, à l’origine dans Visual
Basic Editor ou dans l’application, elle s’affiche dans sa taille normale. Cela
signifie que vous ne verrez la totalité de l’image que si le contrôle Image possède
la même taille que l’image. Si le contrôle est plus petit que l’image, vous n’en ver-
rez que l’angle supérieur gauche, mais s’il est plus grand, vous verrez toute
l’image plus l’arrière-plan du contrôle.
La propriété PictureAlignment gère le placement de l’image dans le contrôle. Par
défaut, elle s’aligne de sorte que son angle supérieur gauche soit placé dans
l’angle supérieur gauche du contrôle (fmPictureAlignmentTopLeft). Les valeurs
suivantes sont disponibles : fmPictureAlignmentTopRight, fmPictureAlignment-
Center, fmPictureAlignmentBottomLeft et fmPictureAlignmentBottomRight.
Utilisez la propriété PictureSizeMode pour redimensionner automatiquement
l’image de sorte qu’elle s’affiche entièrement. Une valeur de fmPictureSizeMo-
deStretch redimensionne l’image de sorte qu’elle remplisse tout l’espace du con-
trôle. Vous devrez éventuellement ajuster les propriétés Height et Width pour
éviter que l’image soit déformée. Si vous positionnez la propriété PictureSize-
Mode sur fmPictureSizeModeZoom, vous élargissez ou compactez l’image pour
l’adapter à la zone, mais vous ne modifiez par le rapport hauteur/largeur. Une
valeur de fmPictureSizeModeClip affiche l’image dans sa taille normale et élimine
toute partie de l’image qui n’entre pas dans le contrôle.
Lorsque la propriété PictureTiling est positionnée sur True, l’image se répète
autant de fois que nécessaire pour remplir complètement l’espace disponible
dans le contrôle Image. La première copie de l’image est placée en fonction de la
propriété PictureAlignment.
441
Partie 5 : Manipulation des objets Excel
Contrôle ScrollBar
Chapitre 19
Contrôle ListBox
Le contrôle ListBox (Zone de liste) présente une liste d’informations parmi les-
quelles l’utilisateur sélectionne une ou plusieurs entrées. Vous pouvez organiser
les éléments à sélectionner en une série de lignes et de colonnes. Le nombre de
colonnes est défini par la propriété ColumnCount. Cette valeur contient le nom-
bre de colonnes disponibles. Par défaut, cette propriété est positionnée sur 1,
442
Partie 5 : Manipulation des objets Excel
Chapitre 19
Si la propriété ColumnHeads est positionnée sur True, la première ligne de la liste
sert d’en-tête à la colonne. Cette ligne ne peut pas être sélectionnée. La propriété
ColumnWidth spécifie la taille de chaque colonne. Les tailles de toutes les lar-
geurs de colonnes sont rassemblées dans une seule et même chaîne prenant la
forme d’une suite de nombres séparés par des points virgules (;). Chaque nom-
bre indique la largeur de la colonne en points. Vous pouvez également spécifier
les largeurs en centimètres (cm) ou en pouces (in). Le séparateur décimal est
autorisé. Si vous spécifiez une valeur de 0 pour la largeur d’une colonne, celle-ci
ne sera pas affichée.
La propriété ListCount contient le nombre de lignes dans la liste. La propriété
List accède à la liste d’éléments et prend deux paramètres, le numéro de la ligne
et celui de la colonne. Ces deux paramètres commencent à zéro et possèdent une
valeur maximale inférieure de un à celle des propriétés ColumnCount et List-
Count. Si vous référencez la propriété List sans argument, vous pouvez copier un
tableau bidimensionnel de valeurs dans la propriété en une seule instruction.
La routine suivante montre comment utiliser les propriétés List et ColumnCount
pour initialiser un contrôle zone de liste :
MaListe(0, 0) = "Ligne"
MaListe(0, 1) = "Colonne A"
MaListe(0, 2) = "Colonne B"
For i = 1 To 10
MaListe(i, 0) = "#" & FormatNumber(i, 0)
MaListe(i, 1) = "A" & FormatNumber(i, 0)
MaListe(i, 2) = "B" & FormatNumber(i, 0)
Next i
ListBox1.ColumnCount = 3
ListBox1.List = MaListe
End Sub
443
Partie 5 : Manipulation des objets Excel
MsgBox ListBox1.ListIndex
End Sub
444
Partie 5 : Manipulation des objets Excel
Chapitre 19
Contrôle ComboBox
Le contrôle ComboBox (Zone de liste modifiable) est sans doute l’un des contrô-
les les plus complexes de Visual Basic. Il combine les fonctions des contrôles List-
Box et TextBox. Toutes les propriétés et méthodes que nous avons étudiées dans
la précédente section « Contrôle ListBox » s’appliquent également au contrôle
ComboBox.
La seule fonctionnalité du contrôle ListBox que le contrôle ComboBox ne prend
pas en charge est la possibilité de sélectionner plusieurs éléments dans une liste.
En conséquence, les propriétés MultiSelect et Selected ne sont pas disponibles
pour ce contrôle. En outre, les fonctionnalités relatives aux zones de texte à plu-
sieurs lignes ne sont pas présentes dans le contrôle ComboBox.
Par défaut, une zone de liste modifiable se compose d’un champ texte, dans
lequel l’utilisateur saisit des caractères, suivi d’un bouton déroulant qui affiche
une zone de liste contenant une liste de valeurs que l’on peut sélectionner. En
positionnant la propriété Style sur fmStyleDropDownList, vous empêchez l’utili-
sateur de saisir une valeur et l’obligez à choisir l’une des valeurs proposées dans
la liste déroulante. La valeur sélectionnée s’affiche dans la zone de texte.
Vous pouvez également spécifier quand le bouton déroulant s’affiche à l’extré-
mité du champ texte en définissant la propriété ShowDropButtonWhen. Voici les
valeurs possibles : fmShowDropButtonWhenNever, qui masque le bouton dérou-
lant, fmShowDropButtonWhenFocus, qui affiche le bouton uniquement lorsque
le contrôle a le focus, et fmShowDropButtonWhenAlways, qui signifie que le bou-
ton est toujours affiché.
Pour modifier le symbole affiché sur le bouton déroulant, servez-vous de la pro-
priété DropButtonStyle. Par défaut, ce bouton est équipé d’une flèche (fmDro-
pButtonStyleArrow). Vous pouvez également y afficher des points de suite (…)
avec fmDropButtonStyleEllipsis ou un caractère de soulignement (_) avec fmDro-
pButtonStyleReduce. Pour finir, vous pouvez laisser le bouton vide en choisissant
fmDropButtonStylePlain.
Si AutoSize prend la valeur True, le contrôle s’étend automatiquement pour
s’adapter à la ligne la plus longue, sinon, la liste déroulante est tronquée sur le
445
Partie 5 : Manipulation des objets Excel
Contrôle RefEdit
Le contrôle RefEdit simplifie la sélection d’une plage de cellules dans un classeur.
L’utilisateur peut saisir la valeur de texte de la plage dans la zone de texte du con-
trôle. S’il clique sur le bouton qui se trouve à droite du contrôle, il dissimule la
feuille de sorte que seul le contrôle RefEdit soit visible et transfère le contrôle à
Excel. L’utilisateur peut alors sélectionner une plage de cellules qui s’affiche dans
la zone de texte. S’il appuie à nouveau sur le bouton, il restaure la feuille qui pré-
sente la plage sélectionnée dans la zone de texte.
Contrôle TabStrip
Le contrôle TabStrip (Onglet) propose une série de conteneurs de contrôles
comme le contrôle Frame, plus un mécanisme de sélection du conteneur. Il per-
met ainsi de placer plus de contrôles sur une feuille.
Chaque onglet constitue un objet indépendant du contrôle TabStrip. La collec-
tion Tabs retourne une collection d’objets Tab. La méthode Add de cette collec-
tion permet d’ajouter un nouvel objet Tab, la méthode Delete supprime un objet
Tab et la méthode Clear vide la collection. L’onglet sélectionné peut être directe-
ment référencé par le biais de la propriété SelectedItem du contrôle TabStrip.
446
Partie 5 : Manipulation des objets Excel
Chapitre 19
l’onglet.
La propriété Style définit la manière dont les informations de l’onglet sont affi-
chées. Par défaut, sa valeur est fmTabStyleTabs, mais vous pouvez également
choisir fmTabStyleButtons pour afficher des boutons à la place des onglets. Pour
finir, vous pouvez choisir fmTabStyleNone de sorte qu’aucune information ne
s’affiche sur le contrôle.
Lorsque la propriété MultiRow est True, ce contrôle accepte plusieurs rangées
d’onglets. La propriété TabOrientation spécifie la position des onglets. Les choix
possibles sont : fmTabOrientationTop, fmTabOrientationBottom, fmTabOrienta-
tionLeft et fmTabOrientationRight.
Vous spécifiez la taille des onglets avec les propriétés TabFixedHeight et Tab-
FixedWidth. Si vous assignez la valeur 0 à ces propriétés, la taille des onglets
s’ajuste automatiquement au contenu ; sinon, la valeur indique la taille en points
de chaque onglet.
Vous exploiterez essentiellement ce contrôle au moment de la conception et
pour faire glisser les contrôles sur différents onglets. Pendant l’exécution, l’utili-
sateur clique sur le bouton approprié pour basculer sur l’onglet de son choix.
Pour ajouter ou supprimer des feuilles au contrôle TabStrip, cliquez droit sur le
contrôle et choisissez l’option appropriée dans le menu contextuel.
Contrôle Multipage
Le contrôle Multipage (Multipage) est similaire au contrôle TabStrip. Il possède
une collection d’objets Page qui correspondent directement avec les objets Tab.
La principale différence entre le contrôle TabStrip et le contrôle Multipage se
situe au niveau des propriétés et des méthodes, dont le deuxième possède une
bien plus grande collection. En fait, le contrôle Multipage contient la plupart des
447
Partie 5 : Manipulation des objets Excel
Dans ce chapitre, vous avez découvert les feuilles UserForm et les contrôles que
vous pouvez y placer. Les feuilles servent essentiellement à interagir avec l’utili-
sateur pour lui demander de saisir des informations ou d’afficher un résultat. Les
contrôles les plus courants sont les contrôles Label, TextBox et CommandButton.
Le premier affiche des informations à l’attention de l’utilisateur. Le deuxième
permet d’accepter des informations provenant de l’utilisateur, alors que le troi-
sième permet à l’utilisateur de demander à l’application d’effectuer une tâche.
Les autres contrôles disponibles pour l’objet UserForm offrent des moyens diffé-
rents de présenter les informations à l’utilisateur ou d’accepter des informations
fournies par l’utilisateur.
448
Partie 5 : Manipulation des objets Excel
Chapitre 20
Création de feuilles
UserForm avancées
Récupération de l’information . . 449 Conception d’un assistant
à plusieurs étapes . . . . . . . . . . . 463
Récupération de l’information
Il est parfois contraignant de saisir des informations dans une feuille de calcul : il
est difficile de vérifier que les données sont valides, correctement mises en forme
et intégrées à l’emplacement approprié. Dans cet exemple, vous apprendrez à
construire une feuille simple qui accepte les données émanant d’un utilisateur et
les stocke dans une feuille de calcul.
449
Partie 5 : Manipulation des objets Excel
Sur le site Le code source complet de cet exemple est publié sur le site web
de Dunod, que vous trouverez à l’adresse www.dunod.fr. Lancez une recher-
che sur le titre du présent ouvrage (Excel VBA Au quotidien) pour accéder à ces
contenus. Le classeur employé dans ce chapitre se nomme FormApp.xls. Au
lieu de saisir manuellement le code de ce chapitre, chargez le fichier qui con-
tient également des exemples de données que vous pourrez exploiter dans
vos tests.
Chapitre 20
Figure 20-1. Une feuille de calcul simple suit les informations des clients,
comme leurs noms et adresses, ainsi que la date de leur ajout à la liste.
450
Partie 5 : Manipulation des objets Excel
Pour créer une feuille qui interagit avec l’utilisateur, servez-vous de la procédure
suivante :
1 Démarrez Visual Basic Editor et choisissez Insertion, UserForm. Vous
créez ainsi un objet UserForm dans votre application.
Chapitre 20
2 Depuis la Boîte à outils, faites glisser un contrôle TextBox (Zone de texte)
et un contrôle Label (Intitulé) pour chaque colonne de la feuille de calcul.
Faites glisser un contrôle ComboBox (Zone de liste modifiable) pour y
placer la liste des états. Ajustez éventuellement la taille de la feuille pour y
placer les contrôles.
451
Partie 5 : Manipulation des objets Excel
Figure 20-2. Ajoutez des contrôles TextBox et Label pour chaque colonne de la
feuille de calcul et modifiez leurs propriétés comme décrit.
452
Partie 5 : Manipulation des objets Excel
Chapitre 20
Figure 20-3. Finition de la mise en forme.
Dim r As Long
If IsNumeric(RowNumber.Text) Then
r = CLng(RowNumber.Text)
Else
ClearData
MsgBox "Illegal row number"
Exit Sub
End If
453
Partie 5 : Manipulation des objets Excel
DisableSave
ElseIf r = 1 Then
ClearData
Chapitre 20
Else
ClearData
MsgBox "Invalid row number"
End If
End Sub
Sachant que RowNumber contient une valeur numérique, la fonction CLng con-
vertit la valeur de la variable RowNumber dans la variable r. Le reste du code uti-
lise r pour extraire les informations de la ligne appropriée et les copie dans le
champ approprié. Sinon, une boîte de message s’affiche pour indiquer à l’utilisa-
teur que la valeur du numéro de ligne n’est pas valide. La routine ClearData assi-
gne une chaîne vide à chaque champ de la feuille pour vider toutes les valeurs
déjà affichées dans la feuille (rappelez-vous que le contrôle ComboBox ne peut
pas prendre pour valeur une chaîne vide et doit être positionné sur une valeur
d’état valide).
CustomerId.Text = ""
CustomerName.Text = ""
City.Text = ""
State.Text = "AK"
Zip.Text = ""
DateAdded.Text = ""
End Sub
Le fait que le numéro de ligne soit une valeur numérique ne signifie pas que l’on
peut sans risque passer le numéro à la méthode Cells. Vous pouvez ajouter la
constante LastRow au début du module UserForm, comme dans la ligne de code
suivante, pendant que vous testez cette routine (plus loin dans ce chapitre, nous
verrons comment déterminer la dernière ligne de données dans une feuille de
calcul et vous convertirez cette constante en une variable de module).
Const LastRow = 20
Avec cette valeur, vous pouvez vérifier que le numéro de ligne se trouve toujours
dans la plage 2 à LastRow, vous assurant ainsi que la valeur qui se trouve dans r
pointe toujours vers une ligne valide de la feuille de calcul.
454
Partie 5 : Manipulation des objets Excel
Chapitre 20
Le même argument s’applique aux données de date de la sixième colonne. La
fonction FormatDateTime assure que les données sont correctement mises en
forme. Cette fonction n’est pas indispensable, mais elle permet de se rappeler
que l’on ne traite pas des données texte.
Une fois les données chargées dans la feuille, on désactive les boutons Save et
Cancel en appelant la routine DisableSave. Ces boutons sont activés uniquement
lorsque l’utilisateur modifie une information au sein de la feuille.
CommandButton5.Enabled = False
CommandButton6.Enabled = False
End Sub
GetData
End Sub
455
Partie 5 : Manipulation des objets Excel
RowNumber.Text = "2"
Les boutons Prev et Next sont peu plus complexes puisqu’il faut calculer la valeur
de la ligne précédente et de la ligne suivante en fonction de la valeur de la ligne en
cours. À l’instar de la routine GetData, celle du prochain listing commence par
vérifier que la valeur contenue dans RowNumber est numérique.
Dim r As Long
If IsNumeric(RowNumber.Text) Then
r = CLng(RowNumber.Text)
r = r – 1
If r > 1 And r <= LastRow Then
RowNumber.Text = FormatNumber(r, 0)
End If
End If
End Sub
Une fois que la routine détient une valeur numérique, elle calcule la nouvelle
position en soustrayant 1 (ou en ajoutant 1 pour trouver la ligne suivante). Pour
finir, si le numéro de ligne résultant se trouve dans la plage 2 à LastRow–1, la
valeur est enregistrée dans la zone de texte RowNumber. L’affectation déclenche
456
Partie 5 : Manipulation des objets Excel
Chapitre 20
gramme. Pour commencer, convertissez la constante LastRow en variable :
Assignez ensuite une valeur initiale à la constante lorsque la feuille est chargée.
Pour ce faire, vous disposez de deux possibilités : la manière la plus simple con-
siste à assigner un numéro de ligne valide, comme 3, et d’appeler GetData pour
récupérer les valeurs initiales dans la feuille. Servez-vous du code suivant pour
créer l’événement UserForm_Initialize.
GetData
End Sub
Si les utilisateurs souhaitent afficher la dernière ligne de la feuille, ils doivent cli-
quer sur le bouton Last. Il existe plusieurs manières de localiser la dernière ligne
en réponse à un clic de l’utilisateur sur le bouton Last. Une solution serait de par-
courir toutes les données à la recherche de la première cellule vide dans une
colonne chaque fois qu’un utilisateur clique sur le bouton Last.
Il existe une meilleure solution : parcourir la feuille de calcul et localiser la pre-
mière cellule vide de la colonne 1 et assigner la valeur à LastRow, ce que fait la
routine du prochain listing. Cette routine se trouve dans le module UserForm :
Dim r As Long
r = 2
Do While r < 65536 And Len(Cells(r, 1).Text) > 0
r = r + 1
Loop
FindLastRow = r
End Function
457
Partie 5 : Manipulation des objets Excel
LastRow = FindLastRow
LastRow = FindLastRow - 1
RowNumber.Text = FormatNumber(LastRow, 0)
End Sub
458
Partie 5 : Manipulation des objets Excel
Chapitre 20
les informations à partir de la feuille de calcul, alors que PutData copie les don-
nées sur la feuille de calcul.
Dim r As Long
If IsNumeric(RowNumber.Text) Then
r = CLng(RowNumber.Text)
Else
MsgBox "Illegal row number"
Exit Sub
End If
DisableSave
Else
MsgBox "Invalid row number"
End If
End Sub
La vérification d’erreur n’est pas indispensable, mais elle est préférable pour le
cas où l’utilisateur saisirait une valeur non valide dans la zone de texte RowNum-
ber ou bascule dans une autre application avant de revenir à cette application.
Dans ce scénario, il est possible de saisir une valeur différente dans la zone de
texte RowNumber sans retrouver aucune donnée.
Remarquez qu’après l’enregistrement des données dans la feuille de calcul, on
appelle la routine DisableSave. En effet, les données de la feuille sont à présent les
même que celles stockées dans la feuille de calcul.
459
Partie 5 : Manipulation des objets Excel
RowNumber.Text = FormatNumber(LastRow, 0)
Chapitre 20
End Sub
End If
End Sub
460
Partie 5 : Manipulation des objets Excel
Chapitre 20
MsgBox "Illegal date value"
Cancel = True
Else
DateAdded.BackColor = &H8000000F
End If
End Sub
Sur le site Vous trouverez la liste complète des états dans la routine Add
States de l’exemple de programme.
State.AddItem "AK"
State.AddItem "AL"
461
Partie 5 : Manipulation des objets Excel
End Sub
UserForm1.Show vbModal
End Sub
Comme l’implique la valeur vbModal, une fois que la feuille est affichée, il reste à
l’écran, empêchant l’utilisateur d’accéder à la feuille de calcul Excel qui se trouve
en dessous. S’il est important d’autoriser l’accès à la feuille de calcul, remplacez
la valeur vbModal par la valeur vbModeless. L’utilisateur pourra basculer entre la
feuille UserForm et la feuille de calcul (voir figure 20.4).
462
Partie 5 : Manipulation des objets Excel
Chapitre 20
sieurs étapes invoqué à partir des menus d’Excel. Cet exemple fournit la struc-
ture autour de laquelle vous pourrez développer vos propres assistants.
Dans l’étape 2 de l’assistant, l’utilisateur saisit des valeurs dans deux zones de
texte (voir figure 20.6), également intégrées dans un contrôle Frame qui permet
des fournir des informations à l’utilisateur.
463
Partie 5 : Manipulation des objets Excel
Dans la dernière étape de l’assistant, l’utilisateur peut revoir les choix qu’ils a
effectués dans les précédentes étapes (voir figure 20.7). Le bouton Next est
désactivé puisqu’il s’agit de la dernière étape. Pour terminer l’assistant, l’utilisa-
teur clique sur le bouton Cancel ou sur le bouton Finish.
Sur le site Le code source complet de cet exemple est publié sur le site web
de Dunod, à l’adresse www.dunod.fr. Lancez une recherche sur le titre du pré-
sent ouvrage (Excel VBA Au quotidien) pour accéder à ces contenus. Le clas-
seur employé dans ce chapitre se nomme WizardApp.xls.
464
Partie 5 : Manipulation des objets Excel
Dim c As CommandBar
Dim cb As CommandBarButton
Dim cp As CommandBarPopup
Chapitre 20
If Not c Is Nothing Then
Set cp = c.Controls("&Tools")
End If
End If
End Sub
UserForm1.Show vbModal
End Sub
Dim c As CommandBar
Dim cb As CommandBarButton
465
Partie 5 : Manipulation des objets Excel
End If
End Sub
Pour plus d’informations sur le contrôle Multipage et les objets Page, reportez-vous au
chapitre 19 « Création de feuilles UserForm ».
Chaque objet Page est un conteneur de contrôles, ce qui signifie que vous pouvez
placer plusieurs contrôles sur chaque page et y accéder comme s’ils étaient direc-
tement placés sur la feuille. L’avantage réel du contrôle Multipage repose sur sa
capacité à basculer d’une page à une autre en actualisant la propriété Value.
Autrement dit, vous pouvez préparer un objet Page pour chaque étape de l’assis-
tant, puis afficher l’objet qui correspond à l’étape appropriée de l’assistant.
Pour manœuvrer entre les quatre étapes de l’assistant, vous devez ajouter quatre
contrôles CommandButton dans la partie inférieure de la feuille. Ces contrôles se
trouvant en-dehors du contrôle Multipage, ils apparaissent à chaque étape de
l’assistant. Positionnez les propriétés Caption des boutons sur Cancel, < Prev,
Next > et Finish.
Puisque l’assistant comporte trois étapes, vous devez ajouter une troisième page.
Cliquez droit sur la zone des onglets et sélectionnez Nouvelle Page dans le menu
contextuel. Vous ajoutez ainsi un nouvel objet Page au contrôle Multipage (voir
figure 20.8). Remplacez ensuite la propriété Caption des pages par Step 1, Step 2
et Step 3.
466
Partie 5 : Manipulation des objets Excel
Chapitre 20
Figure 20-8. Cliquez droit sur la zone des onglets et sélectionnez Nouvelle
page dans le menu contextuel pour ajouter une page au contrôle Multipage.
End
End Sub
Dim i As Long
i = MultiPage1.Value - 1
467
Partie 5 : Manipulation des objets Excel
End If
End Sub
Dim i As Long
i = MultiPage1.Value + 1
End If
End Sub
Outre les boutons Prev et Next, l’utilisateur peut sélectionner directement l’une
des étapes de l’assistant en cliquant sur les onglets dans la partie supérieure du
contrôle Multipage. Pour masquer ces onglets, positionnez la propriété Style du
contrôle Multipage sur fmTabStyleNone.
If MultiPage1.Value = 0 Then
CommandButton2.Enabled = False
CommandButton3.Enabled = True
UserForm1.Caption = "Wizard App - Step 1 of 3"
468
Partie 5 : Manipulation des objets Excel
Else
MsgBox "Error: invalid page value"
End If
End Sub
Pour la première page (Value = 0), le bouton Prev est désactivé, le bouton Next
Chapitre 20
est activé et la propriété Caption de la feuille est mise à jour pour indiquer qu’il
s’agit de la première étape de l’assistant. Le bouton Prev est désactivé puisqu’il est
impossible de revenir avant la première étape. Si l’utilisateur souhaite arrêter
l’assistant, il lui suffit de cliquer sur le bouton Cancel.
Sur la deuxième page (Value = 1), les boutons Prev et Next sont activés, puisque
l’utilisateur peut opter pour l’un ou l’autre choix. La propriété Caption de la
feuille est également mise à jour.
Sur la dernière page (Value = 2), on désactive le bouton Next, puisqu’il s’agit de
la dernière étape. Contrairement aux autres étapes de l’assistant, une ligne de
code supplémentaire prépare les informations de la feuille avant de les présenter
à l’utilisateur. Un appel à GenerateOptions effectue la tâche nécessaire.
Si la propriété Value ne correspond pas à l’une des pages associées aux étapes de
l’assistant, une boîte de message s’affiche pour signaler une erreur. En théorie, ce
message ne devrait jamais s’afficher. Dans la pratique, il peut être particulière-
ment intéressant à l’heure de déboguer la logique de navigation.
469
Partie 5 : Manipulation des objets Excel
Dans la deuxième étape de l’assistant, un autre contrôle Frame sert à donner une
apparence cohérente par rapport à l’étape 1. Dans le cadre, deux contrôles Label
et TextBox permettent de capturer d’autres informations (voir figure 20.10). Les
zones de texte sont intitulées Header et Footer en correspondance avec les légen-
des des intitulés placés en regard.
470
Partie 5 : Manipulation des objets Excel
Chapitre 20
Figure 20-10. Un contrôle Frame encadre une collection de contrôles Label et
TextBox.
Dans la dernière étape de l’assistant (voir figure 20.11), un autre contrôle Frame
sert de conteneur à une zone de texte appelée Review. On a positionné la pro-
priété Multiline de zone de texte sur True et sa propriété BackColor sur
&H8000000F, ce qui correspond à la couleur de fond de la feuille. Cette zone
indique à l’utilisateur que les données de la zone de texte ne peuvent pas être
modifiées.
471
Partie 5 : Manipulation des objets Excel
KeyAscii = 0
End Sub
If OptionButton1.Value Then
Review.Text = Review.Text & "Option 1 was selected"
472
Partie 5 : Manipulation des objets Excel
Else
Review.Text = Review.Text & "No options were selected"
End If
Chapitre 20
Review.Text = Review.Text & "Footer: " & Footer.Text
End Sub
Cette routine se sert d’une zone de texte à plusieurs lignes dans laquelle les diffé-
rents choix de l’utilisateur sont affichés. Dans cet exemple, les informations sont
copiées dans la zone de texte. Remarquez qu’on a joint la constante vbCrLf à la
propriété Text après la génération de chaque ligne d’informations. On oblige
ainsi la ligne suivante à s’afficher en commençant sur le bord gauche du contrôle.
Exécuter l’assistant
L’assistant s’exécute lorsque l’on clique sur le bouton Finish. Dans cet exemple,
l’exécution de l’assistant consiste à afficher une boîte de message et à terminer
le programme. Dans un cas réel, on remplace l’instruction MsgBox par un
appel à une sous-routine qui récupère les informations collectées pendant les
différentes étapes de l’assistant et on effectue la tâche pour laquelle l’assistant a
été conçu.
End
End Sub
En fait, cette routine rassemble les informations collectées dans les différents
contrôles de la feuille et exécute la fonction que l’assistant est supposé effectuer.
Il est important de se rappeler que l’utilisateur peut choisir de cliquer sur le bou-
ton Finish à tout moment pendant que l’assistant est actif. En conséquence, nous
vous conseillons d’attribuer à chaque contrôle de l’assistant une valeur par
défaut significative de sorte que si l’utilisateur clique sur le bouton Finish, le
résultat soit utile.
Si vous n’attribuez pas de valeur significative aux contrôles, examinez les infor-
mations qu’ils contiennent pour déterminer si elles sont suffisantes pour pro-
duire un résultat utile. Si l’utilisateur n’a pas fourni suffisamment
473
Partie 5 : Manipulation des objets Excel
474
Partie 6
Excel et le monde
extérieur : une
collaboration
simplifiée
21 Excel et les autres
applications Office 477
475
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 21
Excel et les autres
applications Office
Démarrage d’une autre Liaisons . . . . . . . . . . . . . . . . . . . 481
application . . . . . . . . . . . . . . . . . 477 Interaction avec d’autres
Activation d’une autre applications Office. . . . . . . . . . . 487
application . . . . . . . . . . . . . . . . . 481 Conjugaison des talents . . . . . . 497
Sub RunCalculator()
On Error Resume Next
Program = "calc.exe"
TaskID = Shell(Program, vbNormalFocus)
If Err <> 0 Then
MsgBox "Impossible de démarrer " & Program, vbCritical,
"Erreur"
End If
End Sub
Pour démarrer une application, vous pouvez également faire appel à la com-
mande Start. Vous exécutez la commande Start à partir de la boîte de dialogue
Exécuter ou directement dans une fenêtre DOS. Cette commande est disponible
dans la plupart des versions de Microsoft Windows. La commande Start sert à
démarrer une application Windows à partir d’une fenêtre DOS. Elle ne nécessite
pas l’emploi de code pour ouvrir le programme associé au document ; la com-
mande se sert du programme associé au nom de fichier pour ouvrir l’application
et le fichier. Vous devez saisir le chemin d’accès complet du fichier ainsi que son
extension pour exécuter cette commande correctement. La figure 21.1 donne un
exemple de la manière d’ouvrir le fichier Fall Initiative.ppt avec la commande
Start.
478
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub OpenPresentation()
Filename = "C:\Garden Supply Company\Marketing\Fall
Initiative.ppt"
Shell "Start " & Filename
Chapitre 21
End Sub
Sub OpenFile()
File = "http://www.microsoft.com/france/"
Call ShellExecute(0&, vbNullString, file, vbNullString,
vbNullString, vbNormalFocus)
End Sub
479
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Au Quotidien
Simuler une pause dans le code VBA
Il arrive que l’on doive lancer une application, mais qu’il faille mettre le code
VBA en pause jusqu’à la fermeture de l’application. Supposons, par exemple,
que l’application lancée crée un fichier nécessaire ultérieurement dans la pro-
cédure. Puisque vous ne pouvez pas mettre le code en pause, vous pouvez
gérer cette situation en programmant une boucle qui surveille l’état des appli-
cations. La procédure suivante a été conçue pour afficher une boîte de mes-
sage lorsque l’application lancée par la fonction Shell n’est plus active.
Sub RunCharMap()
Dim TaskID As Long
Dim hProc As Long
Dim lExitCode As Long
ACESS_TYPE = &H400
STILL_ACTIVE = &H103
Program = "Charmap.exe"
On Error Resume Next
Do
GetExitCodeProcess hProc, lExitCode
DoEvents
Loop While lExitCode = STILL_ACTIVE
Tant que le programme lancé est actif, la procédure continue à boucler jusqu’à
ce que lExitCode retourne une valeur différente. Lorsque la boucle se termine,
le code VBA reprend.
480
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub ActivateCalculator()
AppFile = "Calc.exe"
On Error Resume Next
AppActivate "Calculatrice"
Chapitre 21
If Err <> 0 Then
CalcTaskID = Shell(AppFile, vbNormalFocus)
If Err = 0 Then MsgBox _
"Impossible de démarrer la Calculatrice"
End If
End Sub
Liaisons
Vous pouvez écrire une macro pour contrôler le composant le plus important de
Microsoft Word, son serveur Automation. Dans une telle macro, Excel agit
comme l’application cliente et Word se comporte comme serveur d’application.
Il est également possible d’écrire une application VBA pour contrôler Excel. Le
processus d’une application contrôlant l’autre se nomme Automation, ancienne-
ment OLE Automation.
Automation permet de développer des macros complexes capables de contrôler
des objets à partir d’un grand choix d’applications. Il s’agit d’un outil particuliè-
rement puissant à l’heure de créer des fichiers d’application. Automation permet
à l’utilisateur d’interagir avec plusieurs applications, comme Access, sans se ren-
dre compte de cette interaction. Automation offre une interface unique à l’utili-
sateur final.
Comme vous le savez, il est possible d’utiliser le menu Insertion pour ajouter
divers objets dans le classeur. Vous pouvez également faire appel à Excel VBA
pour créer le même type d’objets. Lorsque vous créez l’objet, vous disposez d’un
accès complet à ses propriétés et méthodes, comme dans son application hôte.
Les développeurs préfèrent la méthode automation à la commande Objet du
menu Insertion. Une fois l’objet incorporé, l’utilisateur doit savoir comment
exploiter l’application de l’objet Automation. Cependant, si vous vous servez de
VBA pour manipuler l’objet, vous pouvez le programmer de sorte que l’utilisa-
481
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Liaison dynamique
Dans une liaison dynamique, le processus de mise en correspondance entre la
variable objet et l’objet s’effectue pendant l’exécution de l’application. Les per-
formances sont plus lentes qu’avec une liaison statique, dans laquelle la liaison se
produit à la compilation de l’application.
Avec une liaison dynamique, il est inutile de déclarer les variables objet générales
puisque la bibliothèque d’objets appartenant à l’application extérieure n’est pas
activée. Les objets extérieurs sont plus complexes à programmer puisque leurs
propriétés, méthodes et événements n’apparaissent pas automatiquement pen-
dant la programmation de la procédure relative à ces objets. Cependant, une
Chapitre 21
liaison dynamique permet de créer un objet Application quelle que soit la version
installée sur le système de l’utilisateur. Cette méthode de liaison est préférables si
le fichier doit être distribué à des utilisateurs équipés de versions différentes d’un
logiciel : la procédure ouvre Microsoft Word, sans tenir compte de la version ins-
tallée.
Pour créer un objet, on utilise la fonction CreateObject. Pour créer une instance
de l’application, on se sert de la fonction GetObject. On déclare ensuite l’objet
comme type Object générique et on résout sa référence d’objet au moment de
l’exécution. La procédure suivante montre comment utiliser une liaison dyna-
mique avec l’application Word :
Sub UsingLateBinding()
Dim oApp As Object
Dim oDoc As Object
On Error Resume Next
Set oApp = GetObject(, "Word.Application")
482
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Voici un autre exemple de procédure qui exploite également une liaison dynami-
que, mais pour créer une entrée dans le Calendrier Outlook.
Sub MakeOutlookAppointmentLateBinding()
Dim olApp As Object
Dim olAppointment As Object
Const olAppointmentItem = 1
With olAppointment
.Subject = "Réunion Ventes de printemps"
.Location = "Radisson : Salle de réunion A"
.Start = DateSerial(2005, 3, 7) + TimeSerial(9, 30, 0)
.End = DateSerial(2005, 3, 7) + TimeSerial(11, 30, 0)
.ReminderPlaySound = True
Chapitre 21
.Save
End With
olApp.Quit
Set olApp = Nothing
End Sub
483
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Si vous exécutez cette macro dans Excel, il semble ne rien se passer. Cependant,
si vous ouvrez Outlook et localisez le 7 mars 2005, vous remarquerez qu’un ren-
dez-vous a été ajouté au Calendrier. La figure 21.2 montre le rendez-vous créer
dans le Calendrier le 7 mars 2005.
Chapitre 21
Liaison statique
Dans une liaison statique, la liaison entre la variable objet et l’objet se produit à
la compilation de l’application. Le résultat final est une meilleure performance
par rapport à la liaison dynamique. Vous ajoutez une bibliothèque d’objets par le
biais de la commande Références du menu Outils dans Visual Basic Editor et
vous pouvez alors déclarer les variables de l’objet spécifique. Cette méthode de
programmation des objets extérieurs est plus simple puisque Visual Basic Editor
affiche l’aide de programmation relative à l’objet externe.
Avant de programmer la procédure, ajoutez la référence appropriée. Pour ajou-
ter une référence à Microsoft Outlook, procédez comme suit :
1 Ouvrez Visual Basic Editor.
2 Dans le menu Outils, choisissez Références.
3 Faites défiler la liste des références disponibles et localisez la bibliothèque
d’objets Microsoft Outlook 11.0 Object Library.
484
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 21
disponibles. Pour activer une bibliothèque, sélectionnez sa référence et cliquez
sur OK.
Maintenant que vous avez ajouté la référence à Visual Basic Editor, vous disposez
de l’aide relative aux objets créés avec cette bibliothèque. Pour localiser les réfé-
rences aux types d’objets, VBA examine les bibliothèques de types, de haut en
bas dans l’ordre de tri de la boîte de dialogue Références. Si le même type d’objet
est présent dans plusieurs bibliothèques, VBA se sert du premier rencontré. Vous
pouvez sélectionner une bibliothèque et cliquer sur les boutons Priorité pour la
déplacer vers le haut ou le bas de la liste et modifier ainsi l’ordre de recherche. Il
est toutefois inutile de dépendre de la priorité : vous pouvez référencer l’objet
avec l’objet de l’application. Par exemple, au lieu d’utiliser AddressList, servez-
vous de Outlook.AddressList.
Examinez l’exemple de procédure suivant pour voir comment exploiter une
liaison statique. La procédure liste tous les noms du dossier Contacts d’Outlook
et les place dans la colonne A de la feuille de calcul active. Veillez à ajouter une
référence à la bibliothèque d’objets Outlook avant d’exécuter cette procédure.
Sub DisplayOutlookContactNamesEarlyBinding()
Dim olApp As Outlook.Application
Dim olNameSpace As Outlook.Namespace
Dim olAddresslist As AddressList
Dim olEntry As AddressEntry
Dim i As Long
485
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
olApp.Quit
Set olApp = Nothing
End Sub
Au Quotidien
Liaison statique versus liaison dynamique
486
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
La morale de l’histoire est la suivante : écrivez votre code avec des liaisons
statiques, mais avant de distribuer le fichier, modifiez le code et utilisez des
liaisons dynamiques. Il peut également être intéressant de modifier vos pro-
jets personnels pour y incorporer des liaisons dynamiques. Ainsi, vous ne
serez pas confronté à un problème lors d’une mise à jour ultérieure de votre
logiciel.
Chapitre 21
variables ont été déclarés. Nous aurions pu utiliser la fonction CreateObject pour
créer la variable objet olApp, à la place du mot-clé New, sans affecter la liaison
statique. Mais l’utilisation du mot-clé New est plus efficace.
Sub CreateNewWorkbookFromExcel()
Dim xlNew As Excel.Workbook
487
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub CreateWordDocumentFromExcel()
Dim wdApp As Word.Application
Dim docNew As Word.Document
En général, on crée une variable objet qui se réfère à l’objet Application représen-
tant l’application à laquelle on souhaite accéder par le biais d’automation. Une
Chapitre 21
Sub CreateWordDocumentFromExcel2()
Dim docNew As Word.Document
488
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Pour automatiser le démarrage d’Excel avec un objet Workbook qui contient une
feuille de calcul avec un graphique et une autre feuille de calcul, servez-vous du
code suivant :
Chapitre 21
Set wbkChart = CreateObject("Excel.Chart")
Quand on automatise Excel à partir d’un objet Workbook ou Word à partir d’un
objet Document, une référence implicite à l’objet Application se crée. Si vous
devez accéder aux propriétés et méthodes de l’objet Application, utiliser la pro-
priété Application appropriée des objets Document ou Workbook. En les utilisant
comme objets de niveau supérieur, vous réduisez le nombre de lignes de code à
écrire. Dans la majorité des cas, le code sera plus simple à suivre et plus cohérent
que lorsque vous référencez l’objet Application. Le tableau 21.1 liste tous les
objets Office de niveau supérieur que l’on peut référencer ainsi que leurs noms
de classe.
Tableau 21-1. Objets Office de niveau supérieur et leurs noms
de classe associés
Objet Office Nom de classe
Objet Application Access Access.Application
Objet Application Excel Excel.Application
Objet Workbook Excel Excel.Sheet
Objet Chart Excel Excel.Chart
Objet Application FrontPage FrontPage.Application
Objet Application Outlook Outlook.Application
Objet Application PowerPoint PowerPoint.Application
Objet Application Word Word.Application
Objet Document Word Word.Document
489
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub CopyFromExcelToWord()
Chapitre 21
ThisWorkbook.Sheets("Table").Range("A1:B6").Copy
Set wdApp = New Word.Application
With wdApp.Application
.Documents.Open Filename:="C:\test.doc"
With .Selection
.EndKey unit:=wdStory
.TypeParagraph
.Paste
End With
.ActiveDocument.Save
.Quit
End With
Set wdApp = Nothing
End Sub
490
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub CopyWordToExcel()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim tString As String
Dim tRange As Word.Range
Dim i As Long
Chapitre 21
Dim r As Long
Workbooks.Add
r = 3
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = GetObject("C:\GSC\Correspondence\Spring
Promotion.doc")
With wrdDoc
For i = 1 To .Paragraphs.Count
Set tRange = .Range(Start:=.Paragraphs(i).Range.Start, _
End:=.Paragraphs(i).Range.End)
tString = tRange.Text
tString = Left(tString, Len(tString) - 1)
ActiveSheet.Range("A" & r).Formula = tString
r = r + 1
Next i
End With
With Range("A1")
.Formula = "Contenu du fichier : " & wrdDoc.Name
.Font.Italic = True
.Font.Size = 18
End With
wrdDoc.Close
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
ActiveWorkbook.Saved = True
End Sub
491
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Au Quotidien
GetObject versus CreateObject
Remarque Cette fonction demande que Microsoft Word soit ouvert pour col-
ler les informations dans le document actif.
Sub CopyFromExcelToOpenWordDocument
Dim wdApp As Word.Application
ThisWorkbook.Sheets("Table").Range("A1:B6").Copy
492
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 21
optimiser les performances, il est préférable d’utiliser une instance ouverte
d’une application au lieu de créer une nouvelle instance.
L’exemple suivant accomplit la même tâche. Cependant, la fenêtre Word est visi-
ble et le texte est inséré au point d’insertion :
Sub AccessActivateApp()
Application.ActivateMicrosoftApp xlMicrosoftWord
Dim appWord As Word.Application
Dim doc As Word.Document
appWord.Visible = True
appWord.Activate
appWord.ShowMe
With doc
doc.Activate
doc.Application.Selection.TypeText "Ce fichier a été créé le "
& Date
End With
End Sub
493
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub CopyFromExcelToNewWordDocument()
Dim wdApp As Word.Application
ThisWorkbook.Sheets("Table").Range("A1:B6").Copy
With wdApp
.Documents.Add
.Visible = True
End With
Chapitre 21
With wdApp.Selection
.EndKey unit:=wdStory
.TypeParagraph
.Paste
End With
Sub CreateNewWordDoc()
Dim wrdApp As Word.Application
494
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 21
Contrôler Excel à partir d’autres applications Office
Pour boucler la boucle, vous devez également savoir référencer l’objet Applica-
tion d’Excel à partir des autres applications Office. Les concepts sont les mêmes :
commencez par ajouter la bibliothèque d’objets Excel à la procédure de l’appli-
cation hôte, si vous utilisez les liaisons statiques, puis créez un objet Excel
comme le décrit le tableau 21.2.
Tableau 21-2. Objets Excel et leurs fonctions
Objet Office Nom de classe
Objet Application CreateObject("Excel.Application")
Objet Workbook CreateObject("Excel.Sheet")
Objet Chart CreateObject("Excel.Chart")
La procédure suivante à été créée dans Word 2003. Nous avons inclus une réfé-
rence à la bibliothèque d’objets Excel. Pour exécuter cette procédure, vous devez
ajouter la référence Excel, saisir la procédure dans Word et créer un nouveau
classeur dans le répertoire racine du lecteur C: intitulé NewExcelWbd.xls.
Sub OpenWriteExcelWbkContents()
495
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
L’exemple précédent crée un classeur Excel basique. Maintenant que vous savez
créé un classeur, vous pouvez copier des données et un graphique dans un docu-
ment Word. La figure 21.5 montre un exemple d’un tel classeur.
Chapitre 21
Sub CreateExcelChart()
Dim XLSheet As Object
Documents.Add
WBook = "C:\GSC\Financial\Projections.xls"
Set XLSheet = GetObject(WBook, "Excel.Sheet").ActiveSheet
XLSheet.Range("StartVal") = StartVal
XLSheet.Range("pctChange") = PctChange
XLSheet.Calculate
With Selection
.Font.Size = 14
Chapitre 21
.Font.Bold = True
.TypeText "Incrémentation mensuelle : " & Format(PctChange,
"0,0%")
.TypeParagraph
.TypeParagraph
End With
XLSheet.Range("Données").Copy
Selection.Paste
XLSheet.ChartObjects(1).Copy
Selection.PasteSpecial link:=False,
DataType:=wdPasteMetafilePicture, _
Placement:=wdInLine, DisplayAsIcon:=False
Set XLSheet = Nothing
End Sub
497
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
498
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 22
Excel et SQL
Comparaison des tableurs L’instruction Insert. . . . . . . . . . . 510
et des bases de données . . . . . . 499 L’instruction Update . . . . . . . . . 511
Manipulation des bases L’instruction Delete . . . . . . . . . . 512
de données avec SQL. . . . . . . . . 503
L’instruction Select. . . . . . . . . . . 504
Parmi les nombreuses fonctionnalités proposées par Excel, l’une des plus inté-
ressante est celle qui permet d’accéder aux informations stockées dans les bases
de données. Vous pouvez copier des informations issues d’une table de base de
données dans une feuille de calcul ou inversement. Il est même possible de com-
biner des informations émanant d’une base de données Microsoft Access ou
Microsoft SQL Server avec une feuille UserForm.
Ce chapitre constitue une brève introduction à l’utilisation des bases de données
comme Microsoft Access et Microsoft SQL Server dans Microsoft Excel. La con-
ception d’une base de données sort de la portée de ce livre et nous n’en parlerons
pas. Il existe un certain nombre d’excellents ouvrages traitant de Microsoft
Visual Basic et de la programmation des bases de données. Dans le contexte de la
programmation Excel 2003, intéressez-vous de préférence aux ouvrages dédiés à
la programmation des bases de données pour Visual Basic 6 et non pour
Visual Basic .NET. Visual Basic .NET n’est pas compatible avec les fonctionnali-
tés Visual Basic pour Applications (VBA) présentes dans Excel. En revanche,
Visual Basic 6 présente de nombreuses similitudes avec VBA et exploite les
mêmes outils (en particulier ADO) pour accéder aux bases de données. Les tech-
niques de programmation de Visual Basic 6 peuvent être transposées dans Excel
et VBA sans changement.
499
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
une table virtuelle ou une vue. Les tables employées pour créer une vue sont dites
tables de base. On peut créer une vue à partir d’une ou de plusieurs tables ou
d’autres vues de la base de données. De nombreuses opérations effectuées sur
une base de données relationnelle créent ou retournent des tables virtuelles, d’où
l’importance des vues.
Contrairement aux feuilles de calcul, dont les cellules peuvent stocker divers
types de données, dans une base de données relationnelle, chaque colonne con-
tient un seul type de données : nombre binaire, chaîne de caractères, valeur boo-
léenne, valeur date/heure ou valeur binaire non formatée. En outre, une colonne
dans une ligne particulière peut contenir une valeur Null, ce qui signifie
qu’aucune valeur n’a été assignée à la colonne. Remarquez qu’une chaîne vide et
une valeur Null sont deux choses différentes : une chaîne vide est une chaîne
contenant zéro caractère, alors que Null signifie simplement que la colonne ne
possède pas de valeur.
Remarque Il est possible de créer des tables dans lesquelles les valeurs Null
ne sont pas acceptables dans une ou plusieurs colonnes. Reportez-vous à la
document de votre base de données pour plus d’informations sur la gestion
des valeurs Null.
500
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et SQL
En raison de la structure rigide imposée aux tables, les données sont générale-
ment réparties en plusieurs tables, chacune contenant des informations relatives
à une entité. Ainsi, une table peut contenir des informations sur les clients, une
autre sur les produits et une troisième sur les commandes passées par les clients.
On manipule cette organisation complexe des données avec le langage SQL
(Structured Query Language). Les instructions SQL permettent de retrouver des
données et d’actualiser des informations stockées dans les tables.
Au Quotidien
Conception et administration de bases de données
Chapitre 22
Pour créer votre propre base de données, restez simple. Si vous ne disposez
que d’une centaine de données, servez-vous de quelques feuilles de calcul
Excel. Elles seront plus simples à maintenir que de construire une base de
données réelle.
501
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Client
Serveur
Figure 22-2. Les bases de données s’organisent souvent sous la forme d’un
client communiquant avec un serveur de bases de données.
Excel accède aux bases de données par l’intermédiaire d’une API appelée ADO
(Active Data Objects). ADO est un composant standard de Microsoft Windows ;
il est donc toujours disponible pour le programme. Par le biais d’ADO, vous
502
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et SQL
pouvez vous connecter à une grande variété de bases de données différentes,
dont Access, SQL Server, Oracle et bien d’autres.
Une fois la connexion établie avec la base de données via ADO, vous pouvez exé-
cuter des instructions SQL pour retourner des données à l’application ou modi-
fier les données stockées dans une table.
Chapitre 22
nées.
● L’instruction Update spécifie comment changer les lignes de données exis-
tantes dans la base de données.
Voici par exemple une instruction Select qui trouve quelques lignes d’informa-
tions client.
Cette instruction Select retourne un jeu de lignes qui contient quatre colonnes,
IdClient, Nom, Ville et Pays, issues de la table Clients. Cependant, au lieu de
retourner chaque ligne de la table, seules celles dont la colonne Pays contient la
chaîne ‘DE’ sont retournées. Les autres instructions sont aussi simples à utiliser.
Les instructions possèdent un certain nombre de clauses communes, ce qui
signifie que si l’on sait employer l’une des instructions, il est assez simple
d’apprendre à utiliser les autres.
503
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
L’instruction Select
L’instruction Select sert à retrouver un jeu de lignes issues d’une ou de plusieurs
tables et constitue dans aucun doute l’instruction la plus couramment employée
dans le langage SQL. Voici sa syntaxe :
504
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et SQL
Tout extraire
L’instruction Select suivante extrait toutes les colonnes et lignes de la table
Clients :
Select *
From Clients
L’astérisque (*) indique que toutes les colonnes de la table doivent être récupé-
rées et la clause From indique que la commande doit extraire les enregistrements
de la table Clients.
Chapitre 22
Nous vous accordons que le temps et l’espace supplémentaires sont parfois
négligeables pour certaines requêtes, mais le fait d’exploiter uniquement les
ressources nécessaires constitue une bonne pratique de programmation.
505
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Select *
From Clients
Where IdClient = 101
Vous disposez également d’autres opérateurs comme And, Or et Not pour créer
des expressions plus complexes. Cette requête choisit chaque client ajouté en
2003.
Select *
From Clients
Where DateAjout >= '01-Jan-2003' And DateAjout <= '31-Dec-2003'
Remarque Dans la syntaxe SQL, les valeurs non numériques comme les
chaînes de caractères et les dates, doivent être placées entre guillemets sim-
ples (‘). Les guillemets doubles (") encadrent les noms de colonnes et de
tables contenant des espaces.
Expression Null
Pour déterminer si une colonne ne contient pas de valeur dans un champ parti-
culier, servez-vous de l’expression Is Null. L’exemple suivant retourne unique-
ment les lignes dans lesquelles le champ DateAjout contient une valeur Null.
Select *
From Clients
Where DateAjout Is Null
506
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et SQL
Opérateur Like
L’opérateur Like constitue un outil puissant qui permet de rechercher des valeurs
au sein d’une colonne avec des caractères génériques. Par exemple, l’instruction
Select suivante recherche chaque client dont la valeur de la colonne Nom com-
mence par les lettres Free :
Select *
From Clients
Where Nom Like 'Free*'
Le tableau 22.1 liste les caractères génériques que vous pouvez employer avec
une base de données Access. Rappelez-vous que ces caractères sont utilisables
dans n’importe quelle combinaison, comme dans l’instruction Select suivante,
qui extrait tous les clients dons les noms commencent par D, E ou F.
Select *
From Clients
Where Nom Like '[D-F]*'
Chapitre 22
False : AB, AAB
*A*
True : A, AB, CAC, DADD
False : B, BB, CCC
? Correspond à un seul caractère. A?
True : AA, AB, AC
False : AAA, BA
# Correspond à un seul chiffre. A#
True : A0, A9
False : AA, A00
[] Correspond au caractère ou à la plage de A[*]A
caractères spécifiés entre les crochets. True : A*A
Rappelez-vous que l’utilisation du point False : AAA
d'exclamation (!) signifie que les caractères A[D-F]A
qui se trouvent en-dehors de la plage True : ADA, AFA
correspondent à la valeur. False : AAA, ADAA
A[!0-9]
True : AA, AB
False : A0, A9
507
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
L’instruction Select trie les lignes par code postal puis par nom du client au sein
de chaque code postal.
Chapitre 22
508
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et SQL
Chapitre 22
mandes qu’ils ont passées. Vous joignez la table Clients à la table Commandes,
mais uniquement lorsque le champ IdClient de chaque table est identique de
sorte à mettre en relation les informations relatives à un client et ses commandes.
Select *
From Clients, Commandes
Where Clients.IdClient = Commandes.IdClient
509
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Alias
À l’instar d’Excel qui permet de créer des noms que l’on utilise pour faire réfé-
rence à des groupes de cellules, SQL permet de définir des alias pour un nom de
table. Un alias est un nom court que l’on peut employer à la place du nom de la
table. Pour définir un alias, vous faites suivre le nom de la table par son alias lors-
que vous faites référence à la table dans la clause From.
Select *
From Clients cl, Commandes cd
Where cl.IdClient = cd.IdClient
Fonctions
L’instruction Select permet d’effectuer des opérations de synthétisation sur le jeu
complet des lignes normalement retournées. À l’instar des opérations de syn-
thèse dans Excel (comme SOMME, NB ou NB.VIDE) qui retournent une valeur
unique, les fonctions récapitulatives de SQL retournent une seule ligne conte-
nant le résultat de la fonction. Par exemple, vous pouvez compter le nombre
d’enregistrements que retourne une instruction Select en vous servant de la fonc-
tion COUNT pour compter le nombre de valeurs IdClient retrouvées.
Select Count(IdClient)
From Clients
exploitent la valeur contenue dans chaque colonne. MAX et MIN retournent res-
pectivement les pus grandes et les plus petites valeurs de la colonne. La fonction
AVERAGE totalise toutes les valeurs de la colonne puis divise le résultat par le
nombre de lignes. Si vous appliquez la fonction AVERAGE à une colonne qui ne
contient pas de valeurs numériques, vous obtiendrez une erreur.
L’instruction Insert
L’instruction Insert ajoute une nouvelle ligne à la table. Voici sa syntaxe :
Où <table> est le nom de la table dans laquelle la nouvelle ligne sera ajoutée,
<colonne> représente le nom d’une colonne de la table et <value> est la valeur de
la colonne correspondante.
510
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et SQL
Chapitre 22
stocke un client dans la colonne Nom et ainsi de suite. Toute colonne non spéci-
fiée dans cette liste contient Null.
L’instruction Update
L’instruction Update change les valeurs d’une ou de plusieurs colonnes de la
table. Voici sa syntaxe :
Update <table>
Set <column> = <value> [, <column> = <value>]…
[Where <expression>]
511
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Dans cet exemple, la clause Where sert à identifier toutes les lignes qui contien-
nent une valeur Null dans le champ NouvelleDate. La colonne NouvelleDate est
ensuite positionnée sur ‘01-Jan-2003’.
Update Clients
Set NouvelleDate = '01-Jan-2003'
Where NouvelleDate Is Null
L’instruction Delete
L’instruction Delete supprimer des lignes d’une table. Voici sa syntaxe :
L’exemple suivant supprime toutes les lignes dont la valeur NouvelleDate est
antérieure au 31 Décembre 2002.
512
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et SQL
Dans ce chapitre, vous avez découvert le fonctionnement des bases de données
relationnelles, comme Microsoft Access et Microsoft SQL Server. Nous vous
avons également présenté le langage Structured Query Language, plus communé-
ment appelé SQL. Ce langage définit les instructions qui permettent d’extraire
des données d’une base de données (Select), d’ajouter des données à une base de
données (Insert), de modifier les données d’une base de données (Update) et de
supprimer les données d’une base de données (Delete).
Chapitre 22
513
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 23
Introduction à ADO
Le modèle d'objet ADO . . . . . . . 515 L’objet Command . . . . . . . . . . . 521
L’objet Connection . . . . . . . . . . . 517 L’objet Recordset. . . . . . . . . . . . 525
Les objets ADO (ActiveX Data Objects) permettent d’employer Excel VBA pour
accéder à une base de données. ADO est basé sur le modèle fournisseur de don-
nées/consommateur de données (voir figure 23.1). Le concept de ce modèle est
similaire au modèle client/serveur, excepté que ce dernier suppose généralement
que la base de données fonctionne en tant que serveur indépendant. Cette res-
triction ne s’applique pas à ADO.
Requête
Fournisseur Consommateur
de données Réponse de données
Remarque Outre ADO, vous pouvez faire appel à d’autres interfaces de pro-
grammation comme RDO (Remote Database Objects) et DAO (Data Access
Objects) pour manipuler votre base de données. Ces deux API (Application Pro-
gramming Interface) de programmation sont très limitées comparées à ADO et
c’est la raison pour laquelle nous ne les étudions pas dans cet ouvrage. ADO
est plus souple et mieux supporté que RDO, alors que DAO est spécifiquement
optimisé pour les bases de données Microsoft Access. Sauf si vous devez
employer ces API pour une raison spécifique, préférez ADO.
515
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Objet
Connection
Collection
Errors
Objet Objet
Connection Connection
Collection
Parameters
Objet Objet
Recordset Parameter
Collection
Fields
Objet
Field
En-dehors de ces objets, il existe également quelques autres objets qui suppor-
Chapitre 23
tent ces objets principaux, parmi lesquels on trouve l’objet Error qui contient les
informations relatives aux erreurs qui se produisent et l’objet Parameter qui con-
tient les informations relatives aux paramètres associés à l’objet Command.
L’objet Field contient les informations concernant une colonne retournée dans
l’objet Recordset.
516
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Introduction à ADO
3 Préparez un objet Command qui contient la commande base de données à
exécuter.
4 Ajoutez tous les objets Parameter nécessaires à l’objet Command, y com-
pris les valeurs à passer à la commande. Rappelez-vous que les comman-
des ne requièrent pas toutes des paramètres.
5 Définissez la propriété ActiveConnection sur l’objet Connection.
6 Exécutez l’objet Command.
7 Fermez l’objet Connection.
Si la commande retourne des lignes de la base de données, utilisez l’approche
suivante :
1 Créez un objet Connection pour vous connecter à la base de données de
votre choix.
2 Ouvrez l’objet Connection.
3 Préparez un objet Command qui contient la commande base de données à
exécuter.
4 Ajoutez les objets Parameter nécessaires à l’objet Command, si l’objet
Command possède des paramètres.
5 Définissez la propriété ActiveConnection sur l’objet Connection.
6 Créez un nouvel objet Recordset avec toutes les options que vous prévoyez
d’employer.
7 Positionnez la propriété ActiveCommand de l’objet Recordset sur l’objet
Command que vous avez créé.
8 Ouvrez l’objet Recordset.
9 Extrayez les lignes de l’objet Recordset.
10 Fermez l’objet Recordset.
11 Fermez l’objet Connection.
517
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
518
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Introduction à ADO
base de données, consultez votre administrateur de bases de données pour con-
naître les valeurs appropriées de la propriété Mode.
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Excel2k3\Customer.mdb
disque. Il s’agit souvent d’un chemin d’accès à un fichier, comme celui de l’exem-
ple précédent, mais on peut également référencé un fichier via le format du par-
tage de fichier (\\athena\d\Excel2k3\Customer.mdb).
Provider=SQLOLEDB.1;Data Source=athena.justpc.com;
Initial Catalog=Music;User ID=Wayne;Password=TopSecret
519
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Provider=SQLOLEDB.1;Data Source=athena.justpc.com;
Initial Catalog=Music;Integrated Security=SSPI
Si la base de données que vous voulez utiliser ne supporte pas OLE DB, mais uni-
quement ODBC, Microsoft contient un fournisseur de données spécial intitulé
Microsoft OLE DB Provider for ODBC drivers, qui convertir les appels OLE DB
en ODBC. N’exploitez toutefois ce fournisseur que si vous ne trouvez pas de
fournisseur OLE DB. En effet, les performances en seront négativement impac-
tées.
Chapitre 23
520
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Introduction à ADO
Propriété Description
Description Contient un court texte descriptif de l’erreur.
NativeError Contient un code d’erreur spécifique au fournisseur.
Number Contient le code d’erreur OLE DB.
SQLState Contient le code d’erreur ANSI SQL standard à cinq caractères.
L’objet Command
L’objet Command contient les informations relatives à la tâche exécutée par la
base de données. Selon le type de la commande à exécuter, vous devrez égale-
ment utiliser l’objet Parameter et la collection Parameters pour exécuter une pro-
cédure stockée.
521
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Pour plus d’informations sur la syntaxe SQL, reportez-vous au chapitre 22, « Excel et
SQL ».
522
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Introduction à ADO
Au Quotidien
Procédures stockées
En général, on écrit les procédures stockées avec des instructions SQL con-
nectées à d’autres instructions, comme les instructions If, les instructions de
boucle, les instructions Print et ainsi de suite. Chaque distributeur possède sa
propre syntaxe de ces instructions. En conséquence, les procédures stockées
ne sont pas portables d’un système de base de données à un autre. Elles sont
cependant bien plus rapides que l’exécution d’une instruction SQL. Lorsque
l’on crée des procédures stockées sur un serveur de bases de données, elles
sont stockées dans une forme précompilée, ce qui permet d’économiser des
ressources puisqu’il est inutile de compiler les instructions SQL chaque fois
que l’on exécute une commande.
523
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Remarque Bien que l’on puisse utiliser la méthode Refresh pour obtenir,
directement à partir de la base de données, une copie des paramètres d’une
procédure stockée, il n’est pas indispensable de le faire chaque fois que l’on
appelle la procédure stockée. La récupération des paramètres dans la base de
données est gourmande de temps système, d’autant plus si on appelle une
procédure stockée à partir d’une boucle.
524
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Introduction à ADO
L’objet Recordset
Lorsqu’une requête de base de données retourne des lignes à votre programme,
celles-ci sont mises à disposition par le biais de l’objet Recordset.
525
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Recordset.
RecordCount Propriété : contient le nombre total de lignes extraites de la base
de données.
Sort Propriété : contient la liste des noms de colonnes selon lesquels
les résultats doivent être triés.
Source Propriété : contient soit une référence à un objet Command soit
une chaîne contenant une instruction SQL.
Update Méthode : enregistre tout changement effectué sur la ligne en
cours dans la base de données.
526
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Introduction à ADO
cas, la connexion à la base de données est automatiquement ouverte lorsqu’on
ouvre l’objet Recordset.
La propriété Source contient soit une référence à un objet Command soit une
chaîne contenant le nom de la table, une procédure stockée ou une instruction
SQL. Si vous assignez un objet Command à la propriété Source, la lecture de cette
propriété retourne la valeur CommandText de l’objet Command au lieu d’une
référence d’objet.
Une fois que vous avez défini toutes les informations à extraire de la base de don-
nées, utilisez la méthode Open pour accéder aux informations qui se trouvent
dans l’objet Recordset. Une fois que vous disposez des données, servez-vous de la
méthode Close pour libérer toutes les ressources associées à l’objet Recordset.
Celui-ci expose les enregistrements retournés par la base de données ligne par
ligne. En interne, l’objet Recordset conserve un pointeur auquel on se réfère
comme le pointeur de l’enregistrement en cours et qui pointe vers l’enregistre-
ment en cours.
Dans la mesure où les enregistrements sont disponibles à raison d’un à la fois,
utilisez les méthodes de déplacement (MoveFirst, MovePrevious, MoveNext et
MoveLast) pour naviguer dans les enregistrements de l’objet Recordset. La
méthode Move permet d’avancer ou de reculer au sein de l’enregistrement du
nombre spécifié de lignes.
À mesure que vous parcourez les enregistrements de l’objet Recordset, les pro-
priétés BOF et EOF sont automatiquement redéfinies avec le déplacement du
pointeur de l’enregistrement en cours. BOF est l’abréviation de Beginning Of
File, début de fichier, et EOF celle de End Of File, fin de fichier.
Lorsque vous ouvrez l’objet Recordset, le pointeur de l’enregistrement en cours
pointe sur la première ligne. Si vous appelez la méthode MoveNext, le pointeur
de l’enregistrement en cours parcourt chaque ligne jusqu’à la dernière ligne
incluse. Si le pointeur de l’enregistrement en cours se trouve sur la dernière ligne,
en appelant la méthode MoveNext on positionne la propriété EOF sur True. Si
vous appelez à nouveau MoveNext, bien que la propriété EOF soit positionnée
sur True, vous obtenez une erreur.
Chapitre 23
527
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
528
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Introduction à ADO
La propriété Name contient le nom de la colonne tel qu’il a été défini dans la base
de données ou l’instruction Select qui a retourné les lignes. La propriété Type
décrit le type OLE DB de la colonne.
Plusieurs propriétés différentes contiennent la valeur de la colonne de l’objet
Field. La propriété Value représente la valeur en cours de la colonne telle que
l’application la voit. Si votre programme ne change pas explicitement la pro-
priété Value, elle possède la même valeur que celle qui se trouve dans la propriété
529
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Dans ce chapitre, vous avez étudié les principaux objets de l’architecture ADO.
Chacun des trois principaux objets effectue une tâche spécifique. L’objet Connec-
tion contient les informations nécessaires pour permettre à votre application de
communiquer avec le serveur de bases de données. Il héberge également la col-
lection Errors qui décrit l’erreur la plus récente rencontrée pendant l’utilisation
d’ADO. L’objet Command décrit une instruction SQL qui sera exécutée, y com-
pris la collection d’objets Parameter qui sera passée à la commande pour exécu-
tion. Pour finir, l’objet Recordset permet d’accéder aux données retournées en
exécutant un objet Command, les valeurs individuelles associées à chaque ligne
retournée étant exposées par le biais de la collection Fields et chaque colonne
étant exposée par le biais de l’objet Field.
Chapitre 23
530
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 24
Programme Excel Query
Connexion à une base Exécution d’une requête . . . . . . 542
de données . . . . . . . . . . . . . . . . 535 Utilisation du programme
Édition d’une requête. . . . . . . . . 539 Excel Query . . . . . . . . . . . . . . . . 550
Le programme Excel Query, développé pour cet ouvrage, est une application
pratique de nombreux outils et techniques étudiés tout au long de ce livre. Vous
pouvez intégrer le programme sous forme de macro complémentaire ou
l’exploiter comme modèle de classeur autonome. Il combine, en outre, différents
éléments des feuilles et des barre d’outils en un programme cohésif.
531
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Configurer le projet
Une grande partie de ce code est stockée dans le module ThisWorkbook. Le pro-
gramme contient également deux feuilles, DBInfo et DBQuery. Le module
ThisWorkbook est automatiquement créé à la création du classeur. On ajoute des
feuilles au projet en choisissant Insertion, UserForm dans le menu principal et
en modifiant le nom de la feuille dans la fenêtre Propriétés.
Ajoutez les lignes de code suivantes au début de chaque module. La première ins-
truction vous oblige à déclarer les variables avant de les utiliser, ce qui évite les
erreurs de saisie. La deuxième instruction demande à Visual Basic d’effectuer
toutes les comparaisons de chaînes sans tenir compte de la casse, ce qui réduit la
quantité de code à écrire lorsque vous comparez des chaînes.
Option Explicit
Option Compare Text
Pour exécuter le code relatif à la base de données, vous devez ajouter la bibliothè-
que d’objets ADO. Dans le menu Outils, choisissez Références et cochez la case
Chapitre 24
en regard de Microsoft ActiveX Data Objects 2.7 Library (voir figure 24.2).
Appuyez ensuite sur OK pour fermer la boîte de dialogue et mettre la bibliothè-
que à la disposition de l’application.
532
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Initialiser le programme
Lorsque le programme Excel Quer y démarre, il utilise l’événement
Workbook_Open du module ThisWorkbook pour appeler la routine AddCom-
mandBar qui ajoute la barre de commandes Excel2k3 VBA Query à Excel.
AddCommandBar
End Sub
Dim c As CommandBar
Dim cc As CommandBarComboBox
Dim cb As CommandBarButton
End If
Chapitre 24
Set cc = c.Controls.Add(msoControlComboBox, 1)
533
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Set cb = c.Controls.Add(msoControlButton, 1)
cb.Tag = "Excel2k3 VBA Query Run"
cb.Style = msoButtonCaption
cb.Caption = "Run Query"
cb.OnAction = "ThisWorkbook.RunDatabaseQuery"
Set cb = c.Controls.Add(msoControlButton, 1)
cb.Tag = "Excel2k3 VBA Query Edit"
cb.Style = msoButtonCaption
cb.Caption = "Edit Query"
cb.OnAction = "ThisWorkbook.EditDatabaseQuery"
Set cb = c.Controls.Add(msoControlButton, 1)
cb.Tag = "Excel2k3 VBA Query Database"
cb.Style = msoButtonCaption
cb.Caption = "Database"
cb.OnAction = "ThisWorkbook.ShowDatabaseInfo"
End Sub
DBInfo.Show vbModal
End Sub
DBQuery.Show vbModal
End Sub
534
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Terminer le programme
L’événement Workbook_BeforeClose appelle la routine DeleteCommandBar pour
s’assurer que tous les changements apportés aux menus Excel sont supprimés
avant la fermeture d’Excel.
DeleteCommandBar
End Sub
Sub DeleteCommandBar()
Dim c As CommandBar
End If
End Sub
535
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
536
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
DBProperties.Style = fmTabStyleNone
End Sub
537
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
DBProperties.Value = Provider.ListIndex
End Sub
If DBWindowsAuth.Value Then
DBUserId.Visible = False
DBPassword.Visible = False
DBUserIdLabel.Visible = False
DBPasswordLabel.Visible = False
Else
DBUserId.Visible = True
DBPassword.Visible = True
DBUserIdLabel.Visible = True
DBPasswordLabel.Visible = True
End If
End Sub
Chapitre 24
538
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Unload Me
End Sub
Une fois les valeurs enregistrées dans le registre, on appelle la routine Unload
pour fermer la feuille. Remarquez que l’événement Click du bouton Cancel
appelle la routine Unload pour décharger la feuille. Toute modification des
champs de la feuille est alors annulée.
Astuce Mot-clé Me
Les modules UserForm ressemblent aux modules de classe classiques. Vous
pouvez donc vous référez à l’instance en cours de l’objet en vous servant du
mot-clé Me. Cette possibilité est particulièrement intéressante avec certaines
instructions, comme Unload, pour lesquelles il faut fournir une référence à
l’objet UserForm à décharger.
Unload Me
End Sub
Chapitre 24
539
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Le code suivant s’exécute lorsque la feuille est chargée. Après avoir localisé la
barre de commandes appropriée, la méthode FindControl récupère le pointeur
d’objet du contrôle Command barComboBox en recherchant la valeur de la pro-
priété Tag appropriée. Ensuite, en supposant que le contrôle existe, la propriété
Text de la zone de liste modifiable est copiée dans le contrôle TextBox à plusieurs
lignes de la feuille.
Dim c As CommandBar
Dim cc As CommandBarComboBox
End If
Chapitre 24
End Sub
Une fois que l’utilisateur a modifié la requête à sa guise, il ferme la feuille en cli-
quant sur le bouton Close.
540
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Unload Me
End Sub
SaveData
End Sub
Sub SaveData()
Dim c As CommandBar
Dim cc As CommandBarComboBox
End If
End Sub
Sub EnterDatabaseQuery()
Dim c As CommandBar
Dim cc As CommandBarComboBox
Chapitre 24
Dim q As String
Dim i As Long
541
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
End If
i = i + 1
Loop
cc.AddItem cc.Text
End If
Remarque Cette approche possède une limite : les requêtes sont perdues si
l’utilisateur quitte Excel. Le programme ne doit pas occuper trop de place dans
le registre Windows simplement pour stocker l’historique des requêtes et, si
cette version du programme n’utilise pas de fichier externe que l’on doit char-
ger et enregistrer chaque fois qu’Excel démarre, il est relativement simple
d’ajouter un jeu de boîtes de dialogue Enregistrer/Ouvrir à cette feuille pour
enregistrer les requêtes sur le disque.
Pour plus d’informations sur l’utilisation des fonctions textuelles pour nettoyer les don-
nées, reportez-vous au chapitre 9, « Manipulation des données avec VBA ».
542
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Dim c As String
Dim q As String
c = Trim(BuildConnectionString)
q = Trim(GetDBQuery)
If Len(c) = 0 Then
DBInfo.Show vbModal
Else
RunQuery c, q
End If
End Sub
Dim c As String
543
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
End If
Case 1
DBWindowsAuth = GetSetting("Excel2k3 VBA", "Query", _
"DBWindowsAuth", True)
If Len(DBServer) = 0 Then
DBServer = "localhost"
End If
If DBWindowsAuth Then
c = c & ";Integrated Security=SSPI"
Else
c = ""
End If
End If
Case 2
c = GetRegistryValue("ConnectionString", _
Chapitre 24
End Select
BuildConnectionString = c
End Function
544
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
fournie par la valeur par défaut, elle est positionnée sur la chaîne vide.
Dim r As String
545
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
If r = default Then
r = ""
End If
GetRegistryValue = r
End Function
Récupérer la requête
Pour récupérer la requête qui se trouve dans la zone de liste modifiable de la
barre de commandes, nous utilisons la même approche que celle employée
ailleurs dans ce chapitre. Après avoir localisé la barre de commandes appropriée,
on se sert de la méthode FindControl pour rechercher le contrôle qui contient la
zone de liste modifiable. La fonction suivante se trouve également dans le
module ThisWorkbook :
Dim c As CommandBar
Dim cc As CommandBarComboBox
Else
GetDBQuery = ""
End If
End Function
Le principal avantage de cette routine repose sur le fait que l’on compare la rou-
tine avec la valeur par défaut chargée au démarrage du programme. Si elle est
vide, la fonction retourne une chaîne vide, indiquant que l’utilisateur doit saisir
une requête.
Chapitre 24
546
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
End If
cn.Errors.Clear
rs.Open
If Err.Number = 0 Then
CopyRows rs
Else
MsgBox "Query error: " & Err.Description
End If
rs.Close
cn.Close
End Sub
Pour exécuter la requête, cette routine se sert de trois objets de base de données
ADO (ActiveX Data Object ) : un objet Connection, un objet Command et un
objet Recordset. Chacun est déclaré au début de la routine. On désactive ensuite
la récupération d’erreurs via une instruction On Error Resume Next puisque cette
routine recherche les erreurs après une instruction décisive.
Chapitre 24
547
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
548
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Dim i As Long
Dim j As Long
Dim f As ADODB.Field
Cells.Select
Selection.ClearContents
i = 1
Do While Not rs.EOF
j = 1
For Each f In rs.Fields
Cells(i, j) = f.Value
j = j + 1
Next f
rs.MoveNext
i = i + 1
Loop
End Sub
Une fois réservé l’espace destiné aux variables, on vide la feuille de calcul en
sélectionnant toutes les cellules (Cells.Select) puis en vidant la sélection avec
la méthode ClearContents. On positionne ensuite la variable i sur 1, qui pointe
sur la première ligne de la feuille de calcul.
On configure ensuite une boucle qui itère dans chaque ligne de l’objet Recordset.
Cette boucle continue jusqu’à ce que la méthode EOF retourne True, ce qui signi-
fie que le pointeur de l’enregistrement en cours s’est déplacé au-delà de la der-
nière ligne contenue dans l’objet Recordset.
Dans la boucle, on positionne ensuite la variable j sur 1, qui pointe sur la pre-
mière colonne de la feuille de calcul. On se sert d’une boucle For…Each avec la
variable f pour extraire chaque objet Field de la collection Fields de l’objet
Recordset. La valeur du champ est directement copiée de la propriété Value vers la
cellule appropriée vers laquelle pointe i et j. Une fois qu’un champ est copié, on
incrémente j pour qu’elle pointe vers la colonne suivante.
Une fois que tous les champs d’une ligne ont été copiés, la méthode MoveNext
repositionne le pointeur de l’enregistrement en cours sur l’enregistrement sui-
vant. On incrémente également i pour qu’elle pointe vers une nouvelle ligne de la
Chapitre 24
feuille de calcul.
549
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Select *
Chapitre 24
From Customers
Order By CustomerId
550
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Exécuter la requête
Cliquez sur le bouton Run Query pour extraire les informations de la base de
données est les afficher dans la feuille de calcul en cours (voir figure 24.8).
Figure 24-8. Affichez les résultats de la requête sous la forme d’une feuille de
calcul classique.
Cliquer sur le bouton Database affiche une feuille dans laquelle l’utilisateur peut
saisir les informations nécessaires pour se connecter à la base de données. En cli-
quant sur le bouton Edit Query, on affiche une autre feuille qui présente la
requête en cours que l’utilisateur peut modifier. Pour finir, l’utilisateur clique sur
551
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
552
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 25
Excel et le web
HTML . . . . . . . . . . . . . . . . . . . . . 554 Exploitation de l'Internet
Exploitation de l'Internet pour publier des résultats . . . . . 568
comme source de données . . . . 562 Exploitation des solutions
Internet avec Excel . . . . . . . . . . 573
À une certaine époque, les applications types basées sur Excel avaient pour tout
partenaire d'interaction l'utilisateur lui-même. Celui-ci saisissait les données,
puis assurait la mise en forme des résultats. Pour stocker les données, on utilisait
différentes feuilles de calcul et on tentait de simuler au mieux les effets d'une base
de données relationnelle.
Avec les technologies développées à partir des pilotes ODBC (Open Database
Connectivity, connectivité ouverte de bases de données), puis des objets DAO
(Data Access Objects, objets d'accès aux données) et enfin des objets ADO (Acti-
veX Data Objects, objets de données ActiveX), il est devenu monnaie courante de
stocker des données dans des bases de données externes et même d'y récupérer
des informations et de les actualiser dans d'autres système, et ce en réseau.
Désormais, il est relativement courant de voir Excel employé comme outil fron-
tal de requête et d'analyse pour les gros systèmes de bases de données ; on se sert
de plus en plus des tables de requête et des tableaux croisés dynamiques pour
récupérer les données. Le plus souvent, les données accessibles depuis Excel
étaient celles qui se trouvaient sur le réseau de l'entreprise, et celles qui étaient
stockées dans des bases de données autorisées.
Depuis la sortie de Microsoft Office 97, Microsoft a progressivement étendu les
capacités d'Excel de manière à l'ouvrir aux technologies Internet et associées.
Excel possède désormais des fonctionnalités web dans sa propre interface, et
notamment les requêtes Web. Tout est prévu pour que les développeurs puissent
exploiter des objets externes standards, comme le contrôle ITC (Internet Transfer
Control), le contrôle Web Browser et l'analyseur MSXML. Ces objets sont auto-
matiquement installés avec Office.
Excel offre des fonctionnalités suffisamment intéressantes pour que vous envisa-
giez de reconsidérer votre approche du développement d'applications avec ce
logiciel. En matière de récupération des données, de publication de résultats, de
suivi de vos applications et de partage de données en réseau, vous pouvez désor-
mais sortir du cadre de l'environnement habituel Excel/ADO.
Ce chapitre présente les fonctionnalités que vous pouvez mettre en œuvre et
montre comment interagir avec l'Internet dans le cadre de vos applications. Vous
y apprendrez à enregistrer une feuille de calcul en tant que page web, à la publier
553
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
comme sources de données. Vous verrez comment ouvrir une page web dans
Excel, créer et utiliser les requêtes Web, puis analyser des pages web pour en
extraire des informations spécifiques. Pour terminer ce chapitre, vous verrez
comment mettre en œuvre un serveur web et communiquer avec lui.
HTML
HTML (Hypertext Markup Language) est le langage de balisage standard des
documents publiés sur le World Wide Web. Il emploie des balises pour indiquer
aux navigateurs web la manière d'afficher les éléments de page que sont les textes
et les images et de réagir aux interactions des utilisateurs.
L'idée de publier les données d'une feuille de calcul Excel sur le web relève d'une
logique simple, tant du point de vue de la disposition tabulaire des données que
des contenus calculés. Toute personne ayant déjà encodé un tableau en HTML
peut confirmer qu'il s'agit d'une tâche particulièrement fastidieuse. Même le
tableau HTML le plus simple demande du temps car vous devez déclarer les bali-
ses <TH> et </TH> pour les intitulés de colonnes, puis les balises <TR> et </
TR> pour les rangées et enfin, les balises <TD> et </TD> pour définir le nombre
et la largeur des colonnes, ainsi que les données qui vont aller les remplir.
554
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
Pour choisir l'emplacement de stockage de votre page web, sachez si celle-ci doit
se trouver sur votre disque dur ou sur un lecteur réseau, voire même si vous sou-
Chapitre 25
haitez la publier directement sur l'Internet ou sur l'intranet de votre entreprise.
Pour enregistrer une nouvelle page sur un site FTP (File Transfer Protocol), sélec-
tionnez Adresses Internet (FTP) dans la liste déroulante Enregistrer dans, puis
ouvrez le dossier FTP dans lequel enregistrer la page. Les dossiers web et/ou les
emplacements FTP doivent avoir été créés avant l'enregistrement des feuilles de
calcul sous forme de page web dans les emplacements appropriés. Vous pouvez
également ajouter un titre, qui sera centré en haut de la page, au-dessus des don-
nées et des graphiques. Cela dit, vous pouvez toujours ajouter un titre ou le
modifier après la création de la page.
Voici les étapes de la création d'une page web statique :
1 Ouvrez le classeur contenant les données à enregistrer en tant que page
web.
2 Cliquez sur le menu Fichier et choisissez Enregistrer en tant que page
Web, comme le montre la figure 25.1.
Figure 25-1. La boîte de dialogue Enregistrer sous pour les pages web
est similaire à la boîte de dialogue Enregistrer sous habituelle, mais
comporte quelques fonctions supplémentaires.
555
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Attention Excel ajoute l’extension .htm au nom de fichier que vous saisissez
dans cette zone. Il s’agit de l’extension standard d’un fichier HTML. Si vous
prévoyez de publier la page web sur un serveur web UNIX, n’oubliez pas que ce
système d'exploitation est sensible à la casse (majuscules et minuscules)
dans le nom de fichier. Les systèmes d'exploitation Macintosh et Windows ne
sont pas sensibles à la casse en ce qui concerne les noms de fichiers.
6 Spécifiez un titre pour la page web. Cliquez sur le bouton Modifier le titre
dans la boîte de dialogue Enregistrer sous. Tapez le texte du titre dans la
boîte de dialogue Définir le titre de la page et cliquez sur OK.
Lorsque vous enregistrez les données de la feuille de calcul dans une nouvelle
page web, Excel crée automatiquement un nouveau dossier portant le même
nom que celui du fichier .htm contenant tous les fichiers nécessaires à la publica-
tion sur le web, ce qui inclut les fichiers d’images et de graphiques, en plus des
données numériques. Donc, si vous déplacez la page de votre disque dur local
vers un serveur web, n’oubliez pas de copier le dossier complet, ainsi que le
fichier de la page web, afin que le navigateur de l’utilisateur puisse ouvrir
l’ensemble du contenu de la page.
556
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
Si vous ne voulez pas qu’Excel crée un dossier distinct avec les fichiers d’accom-
pagnement, modifiez ce réglage dans la boîte de dialogue Options Web. Pour
Chapitre 25
l’ouvrir, cliquez sur Outils>Options. Dans l’onglet Général, cliquez sur le bou-
ton Options Web. Dans la boîte de dialogue qui s’affiche, sélectionnez l’onglet
Fichiers. Supprimez la coche de la case Regrouper les fichiers de prise en charge
dans un dossier.
Il est également possible d’enregistrer une feuille de calcul en tant que page web
en passant par du code VBA. Voici la procédure qui permet de le faire :
Sub SaveAsWebPage()
With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, _
"C:\Page.mht", "Feuil1", "", xlHtmlStatic, _
"ProductSales_18739", "Ma page Web")
.Publish (False)
.AutoRepublish = False
End With
End Sub
C’est aussi simple que cela. N’oubliez pas de procéder à une vérification de l’affi-
chage de la page chaque fois que vous créez une page web. Cela évitera aux utili-
sateurs d’avoir des problèmes ultérieurement.
557
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Figure 25-2. La boîte de dialogue Publier en tant que page Web affiche
les options disponibles pour achever l’opération d’enregistrement. Vous y
indiquez l’emplacement, le nom du fichier ainsi que d’autres options de
publication.
Figure 25-3. L’Assistant Ajout d’un Favori réseau vous guide tout au long
de la création d’un nouvel emplacement réseau pour votre page web.
558
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
Remarque Vous pouvez retourner dans Excel après avoir terminé de configu-
Chapitre 25
rer le nouvel emplacement réseau.
Sub SaveAsWebPage()
With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, _
"C:\Page.mht", "Feuil1", "", xlHtmlStatic, _
"ProductSales_18739", "Ma page Web")
.Publish (False)
.AutoRepublish = False
End With
End Sub
559
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Au Quotidien
Chapitre 25
Que vous soyez en train de publier des informations pour les mettre à la dis-
position de l’intranet de votre entreprise ou de l’Internet, vous vous apprêtez à
partager de l’information. Celle-ci sera affichée à l’écran et devra avoir une
mise en forme visant à en faciliter la lecture. Il est intéressant de publier des
informations sous forme de tableau, mais un graphique sera peut-être plus
facile à assimiler par votre public.
Enfin, avant de publier votre page web, assurez-vous qu’elle est finalisée en
vérifiant si les liens hypertextes fonctionnent et que le rendu correspond à vos
attentes. Ouvrez votre page dans un navigateur et vérifiez bien que tout fonc-
tionne comme voulu. L’idéal est de procéder à ces tests dans plusieurs navi-
gateurs web.
560
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
● Analyser des données ;
Chapitre 25
● Effectuer des tris et des filtrages.
Voici les étapes qui permettent d’ajouter de l’interactivité à vos pages web.
1 Sélectionnez le menu Fichier, puis la commande Enregistrer en tant que
page Web.
2 Saisissez le nom de fichier dans la zone Nom de fichier.
3 Cochez la case Ajouter de l’interactivité.
4 Cliquez sur le bouton Publier.
5 Sélectionnez le type d’interactivité dans la liste Ajouter l’interactivité avec.
Le type d’interactivité dépend des types d’objets qui se trouvent dans la
feuille de calcul.
6 Cliquez sur le bouton Publier.
561
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Remarque Une fois l’opération accomplie, vous pouvez ouvrir et utiliser des
Chapitre 25
pages web interactives dans votre navigateur web. Cependant, si vous avez
besoin de modifier les données sur le site web, il n’est pas possible d’ouvrir et
de modifier des pages web interactives dans Excel. Enregistrez une copie de
sauvegarde du classeur d’origine tel que vous l’avez publié au cas où vous
auriez besoin de modifier les données. Si vous apportez des changements à la
feuille de calcul d’origine, vous devez la republier et reconfigurer l’interactivité
de la nouvelle page web.
562
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
Chapitre 25
Figure 25-4. Le site web du Trésor nord-américain montre les données
disposées dans un tableau. Ces informations seront évaluées dans les
prochaines sections.
Sub OpenUSDRatesPage()
End Sub
Cette procédure emploie la méthode Open pour ouvrir une page web existante
au lieu de passer par un navigateur. Lorsque la page web s’affiche, elle recherche
le type de devise spécifié et affiche le taux de change dans une boîte de message.
563
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Dépannage
Cadres de pages web
Il vous arrivera peut-être d’ouvrir une page dans Excel et que rien ne s’affiche.
Ce n’est pas vous qui êtes en cause, mais le fait qu’Excel ne peut pas ouvrir
de pages web avec des cadres.
Les cadres permettent de subdiviser les pages web en plusieurs sections qui
sont en fait comme autant de pages web distinctes. Chacune de ces sections
s’appelle un cadre (frame). La page de cadres est le conteneur qui accueille le
groupe de cadres. Excel ne peut pas ouvrir les pages web contenant des
cadres.
Si vous savez travailler dans le code source HTML, servez-vous d’un éditeur
HTML pour copier les informations requises, sans le code des cadres, dans un
nouveau fichier que vous pourrez alors ouvrir dans Excel.
Elles vous permettent de définir des séparateurs dans Excel afin qu’ils correspon-
dent à ceux de la page web, de lancer la requête et de redéfinir les séparateurs
564
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
ultérieurement. Pour exploiter les options d’actualisation automatique des
requêtes Web, définissez ces séparateurs dans l’événement BeforeRefresh et redé-
Chapitre 25
finissez-les ensuite dans l’événement AfterRefresh. Pour capturer ces événe-
ments, vous devez configurer des modules de classe.
La procédure suivante montre comment récupérer le tableau des taux de change
à l’aide d’une requête Web créée au sein de la procédure.
Sub RetrieveWebQueryData()
ActiveWorkbook.Worksheets.Add
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.fms.treas.gov/intn.html",
Destination:=Range("A1"))
.Name = "USD"
.HasTitle = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "2"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
La ligne qui déclare .WebTables = 2 indique à Excel que vous voulez récupérer
le troisième tableau de la page. Il s’agit en effet de la troisième occurrence d’une
balise <TABLE> dans le code source HTML de la page (la numérotation com-
mence à zéro).
Avec Excel, vous avez la possibilité d’incorporer les données que vous trouvez sur
le web dans vos feuilles de calcul. Il n’est pas nécessaire de savoir comment la
page a été créée, ni de créer un fichier de requête. Vous pouvez sélectionner les
565
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
566
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
Au Quotidien
Chapitre 25
Quel numéro pour mon tableau ?
Il peut vous arriver d’afficher des pages web contenant de nombreux tableaux,
ce qui ne vous facilite pas la tâche pour déclarer le numéro correspondant à la
propriété WebTables. Or vous avez la possibilité de vérifier que vous ne vous
êtes pas trompé.
Pour ce faire, enregistrez une macro dans laquelle vous configurez une requête
Web. Celle-ci doit importer le tableau dont vous avez besoin dans une nouvelle
feuille de calcul, de manière à éviter les problèmes ultérieurs. Une fois la
requête Web créée, arrêtez l’enregistrement de la macro.
Ainsi, le fait d’enregistrer des macros peut vous aider à retrouver des valeurs
et des propriétés qui autrement, seraient difficiles à localiser. Pensez-y au
moment de travailler avec des propriétés nouvelles pour vous. Vous découvri-
rez des propriétés et des méthodes dont vous ignoriez l’existence jusqu’à pré-
sent. Et n’oubliez pas que les macros enregistrées doivent être nettoyées.
Elles contiennent toujours des lignes de code supplémentaires qui ne servent
à rien.
Sub GetUSDtoCanadian()
567
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
strPage = webIE.Document.body.innerHTML
End Sub
Pour choisir entre une requête Web et l’analyse de la page web, réfléchissez aux
circonstances de votre recherche et au volume de données que cela implique.
Pour des éléments isolés, il est sans doute plus facile de faire une recherche dans
la page web directement. Mais si vous voulez récupérer plusieurs éléments, la
requête Web sera plus intéressante pour récupérer la page ou le tableau dans un
classeur, dans lequel vous n’aurez plus qu’à rechercher les informations voulues.
568
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
vez gérer plusieurs aspects de votre serveur web.
Chapitre 25
Le dossier Répertoire de base sert à stocker votre page web. Pour configurer les
propriétés du répertoire de base de vos serveurs web, ouvrez IIS et cliquez droit
sur le noeud Site Web par défaut. Choisissez Propriétés et cliquez sur l’onglet
Répertoire de base. Vous obtenez plusieurs options de configuration pour le site
web par défaut. Vérifiez que les cases Lecture et Écriture sont cochées et cliquez
sur OK. Voyez la figure 25.6. Ces options vous permettent de publier de nou-
veaux contenus dans le dossier.
Figure 25-6. La boîte de dialogue Propriétés de Site Web par défaut permet de
configurer IIS. Pour publier des pages sur votre serveur web, n’oubliez pas de
cocher les cases Lecture et Écriture.
Observez la zone Chemin d’accès local. Elle indique la racine de votre serveur
web. Par défaut, il s’agit de l’emplacement C:\inetpub\wwwroot. Toute page web
placée dans ce répertoire sera publiée à l’adresse URL suivante : http://localhost/
NomPage.html.
569
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub PublishResultsToWeb()
webSht.Range("Profits").Value = Workbooks("Resultats.xls") _
.Worksheets("Financiers").Range("Profits").Value
webBk.Close False
End Sub
570
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
Chapitre 25
Pour exécuter cette procédure, vous devez personnaliser la procédure
PublishInteractivePage afin qu’elle référence votre serveur web, remplacer les
noms de fichiers par les vôtres, ainsi que le nom de la feuille de calcul que
vous avez choisi pour réaliser cet exemple.
Sub PublishInteractivePage()
With ActiveWorkbook.PublishObjects
.Delete
.Add(xlSourcePivotTable, "http://localhost/page.htm",
"Sheet1", _
"PivotTable1", xlHtmlList).Publish True
.Add(xlSourceRange, "http://localhost/page.htm", "Feuil1", _
"A1:C30", xlHtmlCalc).Publish False
.Add(xlSourceChart, "http://localhost/page.htm", "Feuil1", _
"Graphique 1", xlHtmlChart).Publish False
End With
End Sub
La page web qui en résulte est très simple car on a seulement ajouté les emplace-
ments des divers Web Components. Une fois la page créée, il ne vous reste plus
qu’à la modifier pour réaliser une présentation de qualité.
Les Web Components de Microsoft Office constituent un moyen de publier des
documents Office sur le web tout en préservant l’interactivité des documents tels
qu’ils peuvent être affichés dans leurs applications d’origine. Il s’agit d’un
ensemble de contrôles ActiveX. Lorsque les utilisateurs de Microsoft Office affi-
chent une page contenant un Web Component Office, ils peuvent interagir avec
les données affichées dans le document directement depuis Internet Explorer. Ils
peuvent trier, filtrer, ajouter ou modifier les données, développer et masquer des
vues détaillées, travailler avec les listes de tableaux croisés dynamiques et générer
des graphiques à partir des résultats de leurs modifications. En outre, les Web
Components Office sont entièrement programmables, ce qui vous permet de
créer du contenu enrichi et personnalisé dans vos applications pour le web.
571
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
http://loginnet.passport.com/
login.srf?id=2&svc=mail&cbid=24325&msppjph=1&tw=0&
fs=1&fsa=1&fsat=1296000&lc=1033&_lang=FR
C’est bien différent de ce que vous avez initialement saisi, mais c’est pourtant
ainsi que vous avez atteint le site web de destination.
En incluant les paramètres dans l’URL, vous faites en sorte que l’adresse corres-
pondante puisse être stockée dans les Favoris de l’utilisateur. Cependant, Inter-
net Explorer limite les URL à une longueur de 2 083 caractères, ce qui limite la
quantité d’informations que vous pouvez transmettre à l’aide de cette méthode.
572
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et le web
Si vous choisissez d’envoyer des informations dans une section distincte de la
requête HTTP, vous utiliserez le champ POST pour transférer l’information en
Chapitre 25
direction du serveur web. Il n’existe pas de limitation effective de la quantité de
données que vous pouvez placer dans un champ POST ; c’est donc le meilleur
moyen de transférer des informations au serveur.
Mais comment retourner l’information au client ? En les présentant sous forme
de pages web selon les différentes techniques décrites tout au long de ce chapitre.
573
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Chapitre 26
Excel et XML
Introduction aux listes Ajout manuel de XML
de données . . . . . . . . . . . . . . . . 575 à un classeur . . . . . . . . . . . . . . . 587
Création de schémas XML . . . . . 582 Ajout de XML à une feuille de
Création de fichiers de calcul par programmation. . . . . 590
données XML . . . . . . . . . . . . . . . 585
575
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Figure 26-1. Une liste de données contient des en-têtes de colonnes et des
lignes de données, où chaque ligne représente un jeu complet de valeurs de
colonnes.
L’un des progrès proposés par Microsoft Office Excel 2003 est que le concept de
listes de données a été codifié en un ensemble cohérent, mettant en œuvre une
nouvelle visibilité très similaire à celle d’une table Access ou d’une feuille de don-
nées (à ne pas confondre avec une feuille UserForm).
Pour créer une liste de données avec l’interface Excel, procédez de la manière
suivante :
1 Saisissez les noms dans les cellules qui constituent la ligne supérieure de la
liste.
2 Cliquez sur Données, Liste, Créer une liste pour afficher la boîte de dialo-
gue Créer une liste (voir figure 26.2).
3 Sélectionnez les cellules à intégrer à la liste.
4 Cochez la case Ma liste comporte des en-têtes si la ligne supérieure de la
liste sélectionnée contient des en-têtes de colonnes.
5 Cliquez sur OK.
Une fois la liste créée, vous pouvez commencer à saisir les données dans la ligne
d’insertion, dont la cellule située le plus à gauche contient un astérisque.
576
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Appuyez sur la touche TAB pour vous déplacer à la colonne suivante et sur la
touche ENTRÉE pour créer une nouvelle ligne. Lorsque vous avez saisi les don-
nées de la liste, servez-vous des flèches de la première ligne (généralement la
ligne des en-têtes) pour filtrer les valeurs de la liste de la même manière qu’avec
un Filtre élaboré. Vous pouvez ajouter une ligne des totaux en cliquant dans
n’importe quelle cellule de la liste avant de choisir Données, Liste, Ligne Total.
Cliquez dans une cellule de la ligne des totaux pour afficher une flèche sur
laquelle vous pouvez cliquer pour sélectionner la fonction à employer dans cha-
que cellule de total.
Chapitre 26
Remarque Si vous ne voulez plus utiliser la fonctionnalité de liste, mais sou-
haitez conserver les données de la liste, cliquez sur l’une des cellules de la
liste et choisissez Données, Liste, Convertir en plage.
577
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
578
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Chapitre 26
l’argument LinkSource prend la valeur False, les deux objets ne
sont pas liés (aucune mise à jour de l’objet LinkObject qui a
appelé la méthode Publish ne sera reflétée dans l’objet
LinkObject du site SharePoint).
Refresh Cette méthode actualise les données et le schéma de l’objet
ListObject qui extrait ses données d’un site SharePoint.
Resize(Range) Cette méthode permet de modifier la plage de cellules
associée à la liste. Si la liste extrait ses données d’une source
se trouvant sur un site SharePoint, on peut uniquement ajouter
des lignes, mais pas de colonnes. La méthode ne supprime
aucune donnée existante.
Unlink Cette méthode supprime la liaison entre l’objet ListObject et
une source se trouvant sur un site SharePoint. Aucune donnée
n’est supprimée.
Unlist Cette méthode supprime la fonctionnalité de liste d’un objet
ListObject. Les cellules de l’objet ListObject deviennent de
simples cellules et conservent leurs données.
UpdateChanges Cette méthode met à jour la liste située sur le site SharePoint
(XlListConflict) en fonction des changements apportés à la liste se trouvant
sur la feuille de calcul. La constante XlListConflict optionnelle
peut prendre la valeur de l’une des constantes intrinsèques
suivantes : xlListConflictDialog (la valeur par défaut, qui affiche
la boîte de dialogue Résolution des conflits),
xlListConflictRetryAllConflicts (qui tente à nouveau d’actualiser
les données), xlListConflictDiscardAllConflicts (qui ignore tout
changement entrant en conflit avec les changements des
autres utilisateurs) et xlListConflictError (qui indique une erreur
et arrête la mise à jour).
Toutes les listes de données d’une feuille de calcul se trouvent dans la collection
ListObjects de l’objet Worksheet. La collection est vide au départ. Vous utilisez la
méthode Add de la collection pour créer un nouvel objet ListObject dans la feuille
de calcul qui appelle la méthode.
Voici la syntaxe de la méthode ListObjects.Add :
579
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
580
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Chapitre 26
la liste.
Au Quotidien
Une meilleure manière de créer des listes
ListObjects(0).Name = namestring
581
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Vous pouvez créer une liste basée sur ces étiquettes de colonnes par le biais de la
procédure suivante (que vous ajoutez à un module de code) :
Sub CreateListObject()
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$K$1"), _
, xlYes)<;$RD>
.Name = "Suppliers1"
End Sub
Les listes constituent un ajout majeur à votre batterie d’outils Excel, mais elles
sont encore plus puissantes lorsqu’on les combine avec des données XML. La
prochaine section de ce chapitre présente les fondements du XML (eXtensible
Markup Language) et explique comment Excel l’exploite pour simplifier la ges-
tion des données.
582
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
<element name="Supplier" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="SupplierID" type="positiveInteger"/>
<element name="CompanyName" type="string"/>
<element name="ContactName" type="string"/>
<element name="ContactTitle" type="string"/>
<element name="MailingAddress">
<complexType>
<sequence>
<element name="Address" type="string"/>
<element name="City" type="string"/>
Chapitre 26
<element name="Region" type="string"/>
<element name="PostalCode" type="string"/>
<element name="Country" type="string"/>
</sequence>
</complexType>
</element>
<element name="Phone" type="string"/>
<element name="Fax" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
Ne vous laissez pas impressionner par la longue liste des balises fermantes qui se
trouvent à la fin du listing : la structure des objets de données décrite dans ce
schéma n’est pas aussi complexe qu’elle en a l’air. La figure 26.4 décrit graphi-
quement la structure du schéma.
Figure 26-4. Les schémas XML sont détaillés, mais pas excessivement
compliqués.
583
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Remarque Vous pouvez afficher le volet Source XML, qui présente les sché-
mas assignés à un classeur en cliquant sur Données, XML, Source XML.
Les deux premières lignes du listing relèvent des détails internes qui indiquent à
l’interpréteur XML la version XML utilisée, le standard de codage des caractères
auquel se conforment les données et la référence au document en ligne relatif
aux standards du schéma sur le site web du World Wide Web Consortium.
<?xml version="1.0" encoding="utf-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
Chapitre 26
Au Quotidien
Surveillez votre langage
584
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
avoir plusieurs éléments Supplier dans tout fichier de données XML qui suit ce
schéma. Si vous ignorez ce paramètre, l’interpréteur attend une seule occurrence
de l’élément, chose pratique si vous voulez ajouter des informations relatives à
l’auteur, le service ou le code projet du document au début du fichier de don-
nées.
Considérez les éléments XML comme des objets associés à des propriétés.
L’exemple de code abrégé suivant, présente certaines propriétés associées à un
fournisseur (Supplier) :
Chapitre 26
<element name="SupplierID" type="positiveInteger"/>
<element name="MailingAddress">
<complexType>
<sequence>
<element name="Address" type="string"/>
<element name="City" type="string"/>
<element name="Region" type="string"/>
<element name="PostalCode" type="string"/>
<element name="Country" type="string"/>
</sequence>
</complexType>
</element>
Pour plus d’informations sur les types de données XML, visitez la page de référence du
World Wide Web Consortium à l’adresse http:/ www.w3.org/ et tapez xml data type
dans la zone de recherche.
585
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
<Supplier>
<SupplierID>1</SupplierID>
<CompanyName>Exotic Liquids</CompanyName>
<ContactName>Charlotte Cooper</ContactName>
<ContactTitle>Purchasing Manager</ContactTitle>
<MailingAddress>
<Address>49 Gilbert St.</Address>
<City>London</City>
Chapitre 26
<Region></Region>
<PostalCode>EC1 4SD</PostalCode>
<Country>UK</Country>
</MailingAddress>
<Phone>(171) 555-2222</Phone>
<Fax></Fax>
</Supplier>
<Supplier>
<SupplierID>2</SupplierID>
<CompanyName>New Orleans Cajun Delights</CompanyName>
<ContactName>Shelley Burke</ContactName>
<ContactTitle>Order Administrator</ContactTitle>
<MailingAddress>
<Address>P.O. Box 78934</Address>
<City>New Orleans</City>
<Region>LA</Region>
<PostalCode>70117</PostalCode>
<Country>USA</Country>
</MailingAddress>
<Phone>(100) 555-4822</Phone>
<Fax></Fax>
</Supplier>
</Root>
Pour enregistrer le schéma sous forme d’un fichier XML, procédez comme suit
dans le Bloc-notes :
1 Cliquez sur Fichier, Enregistrer.
2 Dans la liste déroulante Type, choisissez Tous les fichiers.
3 Saisissez le nom du fichier dans la zone Nom de fichier. Par exemple, si le
nom du fichier à enregistrer au format fichier XML est MySuppliers.xml,
tapez MySuppliers.xml.
Plusieurs aspects des données du fichier MySuppliers.xml sont à noter. Par
exemple, les deux premières lignes du fichier de données fournissent des infor-
mations similaires aux deux premières lignes du fichier du schéma.
586
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
La première ligne indique la version XML et le schéma de codage du texte utilisé
dans le fichier et la deuxième ligne indique l’élément de base du schéma (Root),
l’URL désignant le document standard auquel se conforme le fichier de données
et le nom du fichier du schéma (MySuppliers.xsd).
Chapitre 26
de schéma.
Les éléments ne contiennent pas tous des données, mais chaque élément doit se
présenter au sein de chaque répétition de l’élément Supplier. Par exemple, l’élé-
ment Fax ne contient pas de valeur dans les deux jeux de données, mais les bali-
ses sont présentes dans le fichier de données XML de sorte que la séquence des
éléments suive exactement le même agencement que celle définie dans le fichier
du schéma.
587
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
les cellules de la feuille de calcul, à l’emplacement de votre choix. Après avoir fait
glisser un élément sur la feuille de calcul, une flèche pour le filtre automatique
apparaît sur le bord droit de la cellule. Cliquez sur la flèche et sélectionnez où
vous voulez voir apparaître l’étiquette de l’élément (le nom de l’élément, comme
CompanyName).
Remarque Les noms des éléments que vous avez mappés dans une cellule
apparaissent en caractères gras dans le volet XML Source.
Pour ajouter un élément complet avec tous ses sous-éléments, faites glisser l’élé-
ment principal vers une cellule de la feuille de calcul. La figure 26.5 présente le
résultat du mappage de l’élément Supplier du schéma MySuppliers.xsd dans la
cellule A1.
Figure 26-5. Vous pouvez mapper un élément complet (avec tous ses sous-
éléments) sur une feuille de calcul en une opération.
588
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Après avoir ajouter les éléments de votre choix au classeur, vous pouvez les sup-
primer à l’instar de tout autre type de contenu d’un classeur. Il est également
possible de supprimer un élément de la feuille de calcul en cliquant droit sur
l’élément dans le volet Source XML et en choisissant Supprimer l’élément dans le
Chapitre 26
menu contextuel.
Pour modifier l’insertion des données XML dans la feuille de calcul, cliquez sur
le bouton Options du volet Source XML. Vous pouvez utiliser les options pour
afficher un aperçu des données dans le volet Office, masquer le texte d’aide dans
le volet Office et informer Excel que vos données possèdent des en-têtes pour
éviter qu’il vous le demande chaque fois que vous insérez un champ. Le menu
Données, quant à lui, permet de gérer l’importation des données XML : choisis-
sez XML et cliquez sur Propriétés du mappage XML. Servez-vous des contrôles
de la boîte de dialogue Propriétés du mappage XML (voir figure 26.6) pour ajus-
ter la largeur des colonnes à la taille des données, conserver le format des nom-
bres et valider les données par rapport au schéma avant d’importer ou
d’exporter les données.
589
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Remarque Inutile de mapper chaque élément d’un schéma sur une feuille de
calcul pour que les données importées fonctionnent correctement.
Chaque action relative à XML réalisée dans l’interface Excel possède sa contre-
partie dans l’objet Excel, même s’il faut parfois un peu creuser pour découvrir
comment effectuer en VBA une action simple et intuitive dans l’interface. On
peut prendre pour exemple la série d’actions à entreprendre pour créer un liste
de données (au lieu d’une série de listes) à partir d’un schéma XML.
590
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Chapitre 26
du mappage XML.
PreserveNumberFormatting Si cette valeur booléenne est positionnée sur True, le
format des nombres est conservé lors de
l’actualisation du mappage XML. La valeur par défaut
est False.
RootElementName Une chaîne en lecture seule qui contient le nom de
l’élément racine du schéma mappé.
SaveDataSourceDefinition Si cette valeur booléenne est positionnée sur True (par
défaut), Excel enregistre la définition de la source de
données du schéma mappé avec le classeur.
Schemas Une propriété qui retourne une collection XmlSchemas
qui contient chaque schéma mappé au classeur actif.
ShowImportExportValidationErrors Si cette valeur booléenne est positionnée sur True,
Excel affiche une boîte de dialogue qui détaille les
erreurs de validation du schéma lorsque les données
sont importées ou exportées par l’intermédiaire du
schéma XML spécifié. La valeur par défaut est False.
Méthode
Delete La méthode Delete supprime le schéma nommé du
classeur.
Export(Url, Overwrite) La méthode Export écrit le contenu des cellules
mappées sur l’objet XmlMap spécifié vers un fichier de
données XML. L’argument Url représente une chaîne
qui contient le chemin d’accès complet du fichier dans
lequel on écrit les données XML. L’argument Overwrite,
s’il prend la valeur True, remplace tout fichier existant
portant le même nom. La valeur par défaut est False.
La méthode Export retourne une des deux constantes :
xlXmlExportSuccess, qui indique que l’exportation s’est
effectuée sans erreur ou xlXmlExportValidationFailed,
qui indique que les données ne correspondent pas au
schéma XmlMap.
591
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
592
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Tous les schémas assignés à un classeur sont stockés dans la collection XmlMaps
de l’objet Workbook. On se réfère aux membres individuels de la collection en
notant leurs noms, comme dans l’instruction suivante :
ActiveWorkbook.XmlMaps("Root_Map")
Bien que la majorité des propriétés et méthodes que vous exploiterez dans le
cadre des mappages XML se trouvent dans l’objet XmlMap, la collection Xml-
Maps contient une méthode Add primordiale, que l’on utilise pour assigner un
schéma à un classeur. Voici la syntaxe de la méthode Add :
Chapitre 26
Add(Schema, RootElementName)
L’argument Schema est une variable de chaîne qui contient le chemin d’accès
complet du schéma à ajouter au classeur et l’argument RootElementName con-
tient le nom de l’élément racine du schéma. La procédure suivante ajoute le
schéma MySuppliers.xsd au classeur actif :
Sub ApplySchema()
Dim myMap As XmlMap
Dim xSchemaFile As String
xSchemaFile = "C:\MySuppliers.xsd"
Set myMap = ActiveWorkbook.XmlMaps.Add(xSchemaFile, "Root")
End Sub
Cette procédure définit une variable objet (myMap) qui contient la référence à
l’objet XmlMap. Après avoir assigné le chemin d’accès du fichier du schéma à la
variable xSchemaFile, on utilise la commande Set pour assigner le fichier du
schéma nommé à la collection Workbooks du classeur actif.
Lorsque vous liez un mappage à un classeur, le mappage se voit assigner le nom
de l’élément racine suivi d’un caractère de soulignement et du mot Map. Le
mappage que vous avez ajouté, dont l’élément racine est intitulé Root, se verrait
assigner le nom Root_Map.
Pour supprimer l’objet XmlMap que vous venez d’ajouter au classeur, exécutez la
procédure suivante :
Sub RemoveMap()
ActiveWorkbook.XmlMaps("Root_Map").Delete
End Sub
593
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Sub BackupXML()
ActiveWorkbook.XmlMaps("Root_Map").Export _
Url:= "C:\SuppliersBackup.xml", Overwrite:=True
If Err.Number = 0 Then
MsgBox "Data exported to SuppliersBackup.xml successfully."
Else
MsgBox "There was a problem exporting to SuppliersBackup.xml."
Chapitre 26
Exit Sub
End If
End Sub
/Root/Supplier/SupplierID
594
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Le modèle d’objet Excel contient un objet XPath accompagné des propriétés et
méthodes nécessaires à Excel pour utiliser les données XPath dans ces opéra-
tions. Le tableau 26.4 liste les propriétés et méthodes de l’objet XPath.
Tableau 26-4. Propriétés et méthodes de l’objet XPath
Name Description
Propriété
Map Une propriété en lecture seule qui retourne l’objet XmlMap
représentant le schéma assigné à l’objet XPath.
Chapitre 26
Repeating Une valeur booléenne en lecture seule qui retourne True si l’objet
XPath est assigné à une liste ou False s’il est assigné à une
cellule.
Value Retourne une chaîne qui représente le XPath de l’objet.
Méthode
Clear Supprime le mappage du schéma des cellules mappées sur
l’objet XPath spécifié.
SetValue(Map, XPath, L’argument Map (obligatoire) est une variable XmlMap qui
SelectionNamespace, représente le mappage du schéma dans lequel vous importez les
Repeating) données XML ; XPath (obligatoire) est une instruction XPath
valide ; SelectionNamespace (un argument de type Variant
optionnel) spécifie les préfixes des espaces de noms (cet
argument peut être omis si on place le XPath complet dans
l’argument XPath) ; Repeating (une valeur booléenne optionnelle)
indique si l’objet XPath doit être mappé sur une seule cellule
(False) ou sur une colonne de la liste (True).
Pour plus d’informations (très techniques) sur le langage XML Path, visitez le site web
XPath officiel à l’adresse http://www.w3.org/TR/xpath.
La méthode SetValue de l’objet XPath est la plus importante du lot : elle permet
de mapper un élément de schéma directement sur une cellule ou une plage. La
procédure suivante définit le fichier de données qui contient les données XML,
assigne le schéma à utiliser dans les appels de la méthode SetValue à la variable
objet myMap et mappe les éléments sur les plages spécifiques. La figure 26.7 pré-
sente le résultat de la procédure.
Sub AssignElementsToRanges()
Dim myMap As XmlMap
Dim strXPath As String
Dim strSelNS As String
595
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
xDataFile = "C:\MySuppliers.xml"
strXPath = "/Root/Supplier/SupplierID"
Range("B2:B10").XPath.SetValue myMap, strXPath
Range("B2").Value = "Supplier ID"
Chapitre 26
strXPath = "/Root/Supplier/CompanyName"
Range("C2:C10").XPath.SetValue myMap, strXPath
Range("C2").Value = "Company Name"
strXPath = "/Root/Supplier/ContactName"
Range("D2:D10").XPath.SetValue myMap, strXPath
Range("D2").Value = "Contact Name"
strXPath = "/Root/Supplier/ContactTitle"
Range("E2:E10").XPath.SetValue myMap, strXPath
Range("E2").Value = "Contact Title"
strXPath = "/Root/Supplier/MailingAddress/Address"
Range("F2:F10").XPath.SetValue myMap, strXPath
Range("F2").Value = "Address"
strXPath = "/Root/Supplier/MailingAddress/City"
Range("G2:G10").XPath.SetValue myMap, strXPath
Range("G2").Value = "City"
strXPath = "/Root/Supplier/MailingAddress/Region"
Range("H2:H10").XPath.SetValue myMap, strXPath
Range("H2").Value = "Region"
strXPath = "/Root/Supplier/MailingAddress/PostalCode"
Range("I2:I10").XPath.SetValue myMap, strXPath
Range("I2").Value = "Postal Code"
strXPath = "/Root/Supplier/MailingAddress/Country"
Range("J2:J10").XPath.SetValue myMap, strXPath
Range("J2").Value = "Country"
strXPath = "/Root/Supplier/Phone"
Range("K2:K10").XPath.SetValue myMap, strXPath
Range("K2").Value = "Phone"
strXPath = "/Root/Supplier/Fax"
Range("L2:L10").XPath.SetValue myMap, strXPath
Range("L2").Value = "Fax"
ThisWorkbook.XmlMaps("Root_Map").Import xDataFile
If Err.Number = 0 Then
MsgBox "Data from " & xDataFile & " was imported into " & _
596
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
"the " & xMapName & " map."
Else
MsgBox "There was a problem importing from " & xDataFile
Exit Sub
End If
End Sub
Chapitre 26
Figure 26-7. La procédure AssignElementsToRanges mappe les éléments du
schéma sur les plages de cellules de la feuille de calcul pour créer des listes.
597
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Au Quotidien
Mapper un schéma sur liste unique
Lorsque vous créez une liste à plusieurs colonnes, vous créez un objet sans
séparations dans lequel vous pouvez saisir des données. Mais en créant une
série de listes, comme dans la procédure AssignElementsToRanges de ce cha-
pitre, vous ne pouvez pas utiliser la touche TAB pour vous déplacer d’une
colonne à la suivante dans la collection de listes. Alors comment mapper une
série d’éléments de schéma de sorte que vous disposiez de toutes les fonc-
Chapitre 26
tionnalités d’une liste ? En créant une liste sur votre feuille de calcul et en
mappant les éléments du schéma sur les en-têtes de colonnes de la liste. La
procédure suivante crée une telle liste pour les fichiers MySuppliers.xsd et
MySuppliers.xml, avec le résultat illustré par la figure 26.8.
Attention Cette procédure suppose que la feuille de calcul que vous utilisez
est vide et que vous n’avez pas mappé le schéma MySuppliers.xsd sur le clas-
seur actif. En fait, il est préférable d’exécuter cette procédure sur un classeur
vide.
Sub CreateOneList()
Range("A2").Value = "SupplierID"
Range("B2").Value = "CompanyName"
Range("C2").Value = "ContactName"
Range("D2").Value = "ContactTitle"
Range("E2").Value = "Address"
Range("F2").Value = "City"
Range("G2").Value = "Region"
Range("H2").Value = "Postal Code"
Range("I2").Value = "Country"
Range("J2").Value = "Phone"
Range("K2").Value = "Fax"
xSchemaFile = "C:\MySuppliers.xsd"
Set myMap = ActiveWorkbook.XmlMaps.Add(xSchemaFile, "Root")
ActiveSheet.ListObjects.Add(xlSrcRange, Range("A2:K2"), ,
xlYes).Name = _
"List1"
Range("A3").Select
xDataFile = "C:\MySuppliers.xml"
strXPath = "/Root/Supplier/SupplierID"
598
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Excel et XML
Range("A2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/CompanyName"
Range("B2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/ContactName"
Range("C2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/ContactTitle"
Range("D2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/MailingAddress/Address"
Chapitre 26
Range("E2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/MailingAddress/City"
Range("F2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/MailingAddress/Region"
Range("G2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/MailingAddress/PostalCode"
Range("H2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/MailingAddress/Country"
Range("I2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/Phone"
Range("J2").XPath.SetValue myMap, strXPath
strXPath = "/Root/Supplier/Fax"
Range("K2").XPath.SetValue myMap, strXPath
ActiveWorkbook.XmlMaps("Root_Map").Import
URL:="C:\MySuppliers.xml"
End Sub
599
Partie 6 : Excel et le monde extérieur : une collaboration simplifiée
Dans ce chapitre, vous avez appris à utiliser les nouvelles fonctionnalités XML de
Excel 2003. Depuis Excel 2002, il était possible d’enregistrer des classeurs XML,
mais vous disposez à présent d’un meilleur accès au modèle d’objet XML. En
outre, vous pouvez importer, exporter et manipuler des données par program-
mation au sein du classeur. Les outils à votre disposition permettent de transpor-
ter les données sur une grande variétés de plates-formes, simplifiant ainsi votre
collaboration avec vos clients, vos fournisseurs et vos collègues quel que soit le
tableur qu’ils exploitent.
600
Index
AddinInstance_OnDisconnecti
Symboles ActiveChart, propriété 123,
154 on, méthode 272
##### (valeur d’erreur) 137 ActiveConnection, propriété AddItem, méthode
#, caractère générique 507 objet Command 522, 548 objet
objet Recordset 525 CommandBarComboBox
#DIV/0! (valeur d’erreur) 137
407
#N/A (valeur d’erreur) 137 ActivePrinter, paramètre 164
AddItem, propriété
#NAME? (valeur d’erreur) 137 Activer
contrôle ListBox 443
#NULL! (valeur d’erreur) 137 objet UserForm 428
AddNew, méthode 525
#NUM! (valeur d’erreur) 137 ActiveSheet, objet
Address, paramètre de la
#REF! (valeur d’erreur) 137 référencer une plage 184 méthode FollowHyperlink
#VALUE! (valeur d’erreur) 137 ActiveSheet, propriété 124 162
&, opérateur 217 méthode Delete 168 AddToFavorites, méthode 161
*, caractère générique 507 ActiveWindow, propriété 126 AddToMru, paramètre
, caractère générique 507 ActiveWorkbook, propriété méthode Open 146
128 méthode SaveAs 151
, signe différent de 506
méthode AddToSearchFolders, méthode
=, signe égal 506
Unprotect 159 313
>, signe supérieur à 506
propriété AdjustColumnWidth, propriété
>=, signe supérieur ou égal à
506 WriteReserved 157 590
?, caractère générique 507 AdaptiveMenus, propriété 395, ADO (Active Data Objects) 502
396 ajouter la bibliothèque pour
A Add, méthode 206 la base de données 532
collection modèle d’objet 515
A1, notation 196 objets de base de données
Sheets 166
Access, application 547
Workbooks 143
se connecter aux bases de ADODB.Command, objet 548
collection ListObjects 580
données 519 ADODB.Connection, objet 547
collection PropertyTests
AccessMode, paramètre 151 ADODB.Recordset, objet 548
308
Accueil, volet Office 23 Affichage, menu
collection XmlMaps 593
Activate, événement 289, 290, éléments 50
objet Chart 346
430
objet Collection 339 Afficher
Activate, méthode
syntaxe 194 constantes intrinsèques 66
activer un graphique 352
syntaxe pour l’objet AddIn feuille de calcul 166
collection Workbooks 152
264 info-bulle d’argument 56
objet Workbook 160
AddDataField, méthode 376 macro 34, 47
Active, propriété 577
AddEmbeddedChart, Aide
ActiveCell, objet procédure d’événement créer des fichiers 162
méthode End 180 349
volet Office 23
propriété CurrentRegion AddIn, objet
180 zone Tapez une question 22
afficher les valeurs 266
ActiveCell, propriété 121 Ajouter
AddinInstance_OnConnection,
ActiveChart, objet 355 méthode 272 module 60
601
Index
procédure 60 accéder à partir d’autres partager des informations
Ajouter un espion, commande applications 495 entre 477
53 activer la surveillance des Appointment, objet 483
Ajouter une procédure, boîte événements 299 arglist, élément
de dialogue collection procédure Function 110
afficher 51 Dialogs 415 procédure Sub 96
Alertes créer 482 Argument
désactiver 169 méthodes passer à une boîte de
propriété DisplayAlerts 128 ConvertFormula 196 dialogue 423
AlertStyle, propriété 205 Union 191 passer dans une procédure
Alias 510 propriété 112
Aperçu avant impression 164 démarrer à partir d’Excel sélectionner des valeurs par
477 défaut 419
API (Application Programming
Interface) 502, 515 démarrer à partir de DOS Audit de formules, barre
478 d’outils 18
AppActivate, instruction 481
état de la fenêtre 478 Authentification Windows 538
Append, méthode 523
ouvrir une présentation Auto_Activate, macro 266
AppendOnImport, propriété
PowerPoint à partir Auto_Add, macro 266
590
d’Excel 479
Application, objet 120, 488 Auto_Close, macro 266
Auto_Deactivate, macro 266
602
Index
Auto_Open, macro 266 Barre de défilement, contrôle BOF, propriété 525
Auto_Remove, macro 266 Voir ScrollBar, contrôle Boîte à outils
AutoFit, méthode 190 Barre de formule 21 afficher 51
Automation 481 masquer 21 Boîte de dialogue
AutoSize, propriété 445 Barre de titre 21 afficher avec du code 414
AVERAGE, fonction 225, 510 Barres de commandes 21 afficher la collection Dialogs
Base de données 419
B accéder à partir d’Excel 502 déterminer comment elle
clé externe 502 est fermée 416
BackColor, propriété listes d’arguments de boîte
clé primaire 501
contrôle TextBox 471 de dialogue intégrée 414
clé secondaire 502
contrôle UserForm 432 modifier les sélections par
colonne d’indentification défaut 418
objet UserForm 428 502
Background, propriété 253 passer des arguments 423
comparée aux tableurs 499
Barre d'outils récupérer le choix de
concept client/serveur 502 l’utilisateur 417
boutons agrandis 395 conception et Boîte de message
Barre d’état administration 501
boutons par défaut 77
afficher un message 130 concepts essentiels 500
créer 78
désactiver les messages extraire une ou plusieurs
130 ligne(s) 504 icônes 76
propriété StatusBar 130 instruction modalité 77
Barre d’outils Delete 512 syntaxe 75
ajouter un bouton 280 Insert 511 Boîte de message Voir aussi
MsgBox, fonction
déplacer 56 Select 504
Boîte de saisie
Mise en forme 18 Update 511
méthode InputBox 134
personnaliser 56 manipuler avec SQL 503
positionner 80
Barre d’outils Voir aussi Barre OLAP 373
de commandes syntaxe 79
se connecter à 535
Barre de commandes Boîte de saisie Voir aussi
Base_de_données, nom InputBox, fonction
ajouter des contrôles 406 réservé 199
Bold, propriété 253
animation 395 BeforeClose, événement 289,
293 BorderAround, méthode
créer 406
BeforePrint, événement 289, syntaxe 257
empêcher l'utilisateur de
personnaliser 395 292 Borders, propriété
flottante 399 BeforeRightClick, événement constantes 256
295, 297 Bordure
lister les barres existantes
398 BeforeSave, événement 289, entourer une plage de
291 cellules 257
supprimer 400
BeginGroup, propriété 402 modifier 257
temporaire 399
Bibliothèque BottomMargin, propriété 170
Barre de commandes Voir
aussi Barre d’outils Microsoft ActiveX Data BottomRightCell, propriété
Objects 2.7 Library 532 361
Barre de défilement
Bibliothèque d’objets Boucle
ajouter à un contrôle
TextBox 436 Excel 495 For…Next 33
définir pour un objet Outlook 484 Boucle itérative
UserForm 428 BlackAndWhite, propriété 170
603
Index
For Each...Next 87 Calculatrice, application afficher les formules 18
For...Next 86 démarrer 478 appliquer le format Texte
Boucle logique Calculer 213
604
Index
contrôle SpinButton 438 définition 323 enregistrer les valeurs liées
contrôle TextBox 437 événement 156
605
Index
objet dans un contrôle ListBox Command, objet
CommandBarComboBox 442 dans le modèle d’objet ADO
407 déterminer si elle contient la 521
objet Path 595 valeur Null 506 dans une requête de base
ClearContents, méthode 549 dimensionner 190 de données 547
Clés de base de données extraire d’une table 505 CommandBar, propriété 409
clé externe 502 lister les noms 511 CommandButton, contrôle
clé primaire 501 NuméroAuto 502 désactiver 458
clé secondaire 502 référencer 190 événement Click 435
Click, événement résoudre le nom 509 placer sur une feuille 452
contrôle CommandButton Color, propriété CommandButton_Click,
435 objet Borders 257 événement 458, 460
contrôle UserForm 432 objet Font 253 CommandLineSafe, sous-clé
CLng(expression), fonction 69 du registre 270
objet Interior 255
CLng, fonction 454 CommandText, propriété
ColorIndex, propriété 253,
Close, méthode 255, 257 objet Command 522
propriété ThisWorkbook 153 entre classeurs 246 objet Command 522, 548
606
Index
interface IDTExtensibility2 constantes collection Errors 521
271 xlReferenceStyle et collection Fields 529
Concaténer du texte 217 xlReferenceType 197
collection Parameters 523
ConflictResolution, paramètre convertir le style de notation
collection PivotCaches 379
151 196
collection PivotTables 376
Conflits syntaxe 197
collections Sheets et
gérer pour les classeurs Convertir
Worksheets 165
151 nombre en texte 212
COUNTA, fonction 226
Connection, objet types de données 68
COUNTIF, fonction 226
dans le modèle d’objet ADO Convertisseur 145
Courriels, envoyer 479
517 Copier
CreateBackup, paramètre 151
dans une requête de base données entre une plage et
de données 547 CreateItem, méthode 483
un tableau 202
propriétés et méthodes 518 CreateObject, fonction 482,
feuille 169
483, 489
Connection, propriété 380 feuille de calcul 16
fonction GetObject versus
ConnectionString, propriété modules entre projets 64 492
518, 519, 547
Copies, paramètre 164 CreateParameter, méthode
ConsecutiveDelimiter,
Copy, méthode 522
paramètre 148
collection Sheets 169 CreatePivotTable, méthode
Const, instruction 66
objet CommandBarControl 380
Constante
403 Creator, propriété
convertir en variable 457
CopyFace, méthode 405 collection AddIns 264
déclarer 66
CorruptLoad, paramètre 146 objet AddIn 265
Constantes
Couleur de fond Critères, nom réservé 199
couleurs de base de
contrôle UserForm 432 Cryptage
l’ordinateur 239
objet UserForm 428 clé publique, privée 42
Constantes intrinsèques
Couleurs CSng(expression), fonction 69
afficher 66
afficher la palette en cours, Ctrl (touche) 140
Contents, paramètre 174
procédure 244 CTXT, fonction
Contrôle
de base de l'ordinateur 239 syntaxe 212
ajouter à une barre de
onglet de la feuille de calcul CurrentPage, propriété 382
commandes 406
251
de menu contextuel 409 CurrentRegion, propriété 180
quadrillage 250
personnalisé 406 CursorLocation, propriété 518
système additif 240
positionner légende, texte CVar(expression), fonction 69
système soustractif 240
406
zone de liste modifiable 407
Couleurs de remplissage D
modifier 255
Controls, propriété
COUNT, fonction 225, 510 DAO (Data Access Objects)
objet CommandBar 396 515
Count, méthode 339
objet CommandBarPopup Data Source, mot-clé 519
409 Count, propriété
DataBodyRange, propriété 577
ControlTipText, propriété collection AddIns 264
DataFields, propriété 377
contrôle UserForm 433 collection
CommandBarControls DataRange, propriété
Conversion, fonctions de 69
401 objet PivotField 382
Converter, paramètre 145
collection CommandBars objet PivotItem 383
ConvertFormula, méthode 395
607
Index
DataType, paramètre 147 Delay, propriété 439 DisplayDrawingObjects,
DataType, propriété 382 Delete, méthode 206 méthode 154
608
Index
DragToColumn, propriété 382 Entrée (pavé numérique) macro complémentaire 261
DragToData, propriété 382 (touche) 140 EUROCONVERT 261
DragToHide, propriété 382 Entrée (touche) 140 Événement
DragToPage, propriété 382 EOF, propriété 526 créer automatiquement 460
DragToRow, propriété 382 EPURAGE, fonction 214 définir 460
DrawingObjects, paramètre Err, objet 520 Événements 31
174 propriétés Number et activer la surveillance 299
DROITE, fonction Description 93
activer, désactiver 287
syntaxe 219 vider 521
Class_Initialize 335
DropButtonStyle, propriété Erreur
Class_Terminate 335
445 affichage 56
de classe 329
DropDownLines, propriété 407 afficher un message 461
définir dans une classe 334
commande Resume 93
E description 93
définition 324
instruction RaiseEvent 334
ECARTYPE, fonction 226 récupérer avec la
mot-clé WithEvents 329
commande On Error 92
Écran objet Application 298
validation de schéma XML
propriété ScreenUpdating 592 objet Chart 353
131
Erreur Voir aussi Err, objet objet Workbook 288
Écrire dans un fichier externe
ErrorMessage, propriété 205 objet Worksheet 294
317
Errors, propriété 518 rechercher dans
Editable, paramètre 145
l’Explorateur d’objets 298
Éditeur, onglet 56 ErrorString, propriété 377
Terminate 335
EditMode, propriété 526 ErrorTitle, propriété 205
Excel
Effacement (touche) 140 Espace de travail partagé,
volet Office 23 description de l'interface 20
Élément de menu
Espaces modèle d’objet 119
affecter une macro 37
éliminer 215 Excel 2003
Else, clause 461
Espion autres applications Office et
Enabled, propriété 403 477
ajouter 53
contrôle CommandButton bibliothèque d’objets 495
452 commande Espion express
53 contrôler à partir d’autres
contrôle UserForm 433 applications 495
Espions, fenêtre
des boutons 458 démarrer une autre
afficher 51
objet CommandBar 396 application à partir de
ESTERR, fonction 212 477
objet UserForm 428
ESTERREUR, fonction 213 nouvelles fonctionnalités 3
EnableEvents, propriété 286
ESTLOGIQUE, fonction 213 Excel Query, programme
EnableSelection, propriété 175
ESTNA, fonction 213 copier des lignes 549
End, méthode 180
ESTNONTEXTE, fonction 213 Excel Query, programme 531
Enregistrer
ESTNUM, fonction 213 changer le fournisseur de
macro 33
ESTREF, fonction 213 base de données 538
tous les classeurs ouverts
152 ESTTEXTE, fonction 212, 213 configurer le projet 532
609
Index
éditer une requête 540 Export, méthode 591 limites 17
enregistrer les informations Exporter un module 63 mettre les données en
539 ExportXml, méthode 592 forme 170
exécuter une requête 542, Expression, paramètre modifier la couleur de
547, 551 l'onglet 16
méthode FollowHyperlink
initialiser 533 162 nombre par défaut 16
initialiser une feuille 537 méthode PrintOut 164 nommer 165
récupérer une requête 546 méthode Protect 174 options d’impression 170
saisir une requête 550 Extraction, nom réservé 199 propriété Worksheet 124
se connecter à une base de protéger 173
données 535 F recalculer les formules 173
sélectionner référencer une plage 184
l’authentification Windows F1 à F15 (touches) 140
renommer 16
538 FaceId, propriété 405
sélectionner 176
terminer 535 Favoris
sélectionner tout 21
utiliser le programme 550 ajouter le bouton à une
barre d’outils 161 supprimer 16, 168
Execute As Recordset,
méthode 522 ajouter un fichier 161 supprimer la protection 176
Execute, méthode Fenêtre Feuille de graphique
objet CommandBarControl afficher 60 ajouter 167
403 supprimer 168
déplacer 55
objet FileSearch 305, 307 Feuille UserForm
fractionner 60
Exécuter afficher 462
niveau de zoom 126
macro 35 ajouter 425
parcourir les fenêtres 60
procédure 54 ajouter un contrôle 426
propriété ActiveWindow 126
Exécuter jusqu’au curseur, boutons de navigation 456
Feuille
commande 53
ajouter à un projet 51 collecter les entées 472
Exécuter Sub/UserForm,
copier 169 créer une feuille avancée
commande 54
451
Exécution, fenêtre créer 62
désactiver les boutons 458
afficher 51 déplacer 169
événement Initialize 457
Exécution, menu Feuille de calcul
exécuter 427
éléments 54 ajouter 166
modale, non modale 429
Exit, événement ajouter un mappage de
données 587 modifier la taille 427
contrôle UserForm 433
calculer, méthode Calculate modifier le nom d’un
valider les données 461 contrôle 427
133
Explorateur d’objets sélectionner 427
comparée aux tables 499
afficher la collection Dialogs valider les données saisies
copier 16
419 460
déplacer 16
rechercher des événements Feuille Voir aussi Feuille de
298 déterminer la dernière ligne calcul, Feuille de
457 graphique
Explorateur d’objets, fenêtre
enregistrer sous 176 Fichier
afficher 51
extraire des données vers déterminer l’existence avec
Explorateur de projets, fenêtre
une zone de texte 453 l’objet FileDialog 317
afficher 51
insérer 16
description 48
610
Index
déterminer l’existence avec TextOrProperty 307 modifier les sélections par
l’objet FileSearch 313 FileSearch, propriété 304 défaut 418
écrire dans un fichier FileType, propriété 308 Format de l’éditeur, onglet 58
externe 317 Format, menu
FileTypes, collection 308
importer 52 éléments 52
Filter, propriété 526
lire un fichier externe 319 Format, méthode 377
Filters, propriété 315
localiser 303 Format, paramètre 145
Fin (touche) 140
méthode FindFile 133 FormatDateTime, fonction 455
FIND, fonction
ouvrir dans Word 491 Forme
syntaxe 222
rechercher une valeur 320 afficher, masquer 154
FindControl, méthode 395
Fichier de données protéger contre les
objet CommandBar 396
importer dans un schéma changements 174
récupérer un pointeur
XML 589 Formula, propriété 383
d’objet 540
XML, créer 585 Formula1, propriété 205
FindFile, méthode 133
Fichier texte Formula2, propriété 205
FindLastRow, fonction 458
importer 146 Formulaire Voir Feuille
FirstPageNumber, propriété
Field, objet 529 170 UserForm
FieldInfo, paramètre 148 FitToPagesTall, propriété 170 FormulaLocal, propriété
Fields, collection 529 FitToPagesWide, propriété 170 paramètres régionaux et
Fields, propriété 526 137
Flèche Bas (touche) 140
FileDialog, objet 304, 314 Formule
Flèche Droite (touche) 140
déterminer l’existence d’un afficher dans une cellule 18
Flèche Gauche (touche) 140
fichier 317 info-bulle d’argument 24
Flèche Haut (touche) 140
méthode Show 315 recalculer 172
Fonction
propriété Filters 315 FoundFiles, collection 304,
de l’instruction Select 510 307
propriété SelectedItems
marquer comme Private 335 FoundFiles, propriété 304
315
fonctionnalités Fournisseur de base de
FileDialogFilters, collection
droits relatifs à l'information données
méthode Clear 315
7 changer 538
FileDialogSelectedItems,
Fonctions Fractionner une fenêtre 60
collection 315
de conversion 69 Frame, contrôle 463
FileFormat, paramètre 150
Font, propriété 254, 433 contenant des boutons
FileFound, objet
FontStyle, propriété 253 d’option 469
propriété LastModified 306
FooterMargin, propriété 170 déplacer 439
FileName, paramètre
For Each...Next, boucle Frappes de touches
méthode Open 144
syntaxe 87 méthode SendKeys 140
méthode OpenText 147
For...Next, boucle FriendlyName, sous-clé du
méthode SaveAs 150
syntaxe 86 registre 270
FileName, propriété 304, 307
ForeColor, propriété 433 From, clause 508
FileSearch, objet 304
FormApp.xls, exemple From, paramètre 164
déterminer l’existence d’un
d’application 450 FullName, méthode 155
fichier 313
Format de cellule, boîte de FullName, propriété
méthode Execute 307
dialogue objet AddIn 265
propriété
afficher les onglets avec du Function, procédure
FileType 308 code 417
611
Index
ajouter à un module 110 nommer 348 HasLegend, propriété 361
comparée avec une propriété ActiveChart 123 HasTitle, propriété 361
procédure Sub 95 Graphique croisé dynamique HeaderMargin, propriété 170
exécuter 111 créer avec l’assistant 372 HeaderRowRange, propriété
créer par programmation 577
G 386 Height, propriété
612
Index
redimensionner l’image 441 Insertion, menu ISERR, fonction 212
répéter l’image 441 éléments 51 ISERROR, fonction 213
Import, méthode 592 InsertRowRange, propriété IsExportable, propriété 590
Importer 577 ISLOGICAL, fonction 213
fichier 52 Installed, propriété ISNA, fonction 213
module 62 objet AddIn 265 ISNONTEXT, fonction 213
texte 146 Installer ISNUMBER, fonction 213
ImportXml, méthode 592 complément COM 282 ISREF, fonction 213
Impression_des_titres, nom complément ISTEXT, fonction 212, 213
réservé 199 d’automatisation 275
Italic, propriété 253
Imprimer macro complémentaire 261,
Item(Index), propriété
263
définir collection AddIns 264
Integrated Security, mot-clé
nombre de hauteurs/ 520 Item, méthode
largeurs de pages 170
Interface Excel collection PivotCaches 379
orientation 170
barre d’état 23 collection PivotTables 376
première page 170
barre d’onglets 23 objet Collection 340
sauts de page 171
barre de formule 21 Item, propriété
en noir et blanc 170
barre de titre 21 accéder aux objets Chart
graphiques 363 351
barres de commandes 21
plage Zone_d_impression collection
200 bouton Sélectionner tout 21
CommandBarControls
supprimer les caractères commandes de la fenêtre 401
non imprimables 214 du classeur 22
collection CommandBars
InCellDropdown, propriété 205 commandes de la fenêtre 395
du programme 22
InchesToPoints, méthode 171 collection Errors 521
volets Office 22
Index de tableau 72 collection Fields 529
zone Nom 21
Index, propriété collection Parameters 524
zone Tapez une question 22
objet CommandBar 396
objet CommandBarControl
Intersect, méthode 137 J
403 Intitulé, contrôle 435
INTPER, fonction Jet, moteur de base de
objet PivotCache 380 données 519
Info-bulle d’argument 24 syntaxe 229
Jointure de tables 508
afficher/masquer 56 Investissement
613
Index
LargeButtons, propriété 395 dimensionner 190 ListHeaderCount, propriété
LargeChange, propriété 442 extraire d’une base de 407
614
Index
protéger avec une signature objet PivotCache 380 objet Application 120
numérique 42 objet PivotField 382 Modificateurs de touche
rechercher 49 Menu codes 140
sécurité 40 ajouter des éléments 411 Modifier un espion, commande
sélectionner 55 Menu contextuel 53
signer numériquement 43 afficher 409 Modify, méthode 206
Macro complémentaire, boîte contrôles 409 Module
de dialogue 260 ajouter 60
créer 409
Macros complémentaires ajouter à un projet 52
MenuAnimationStyle,
boîte de dialogue Macro propriété 395 ajouter une procédure
complémentaire 260 Function 110
Menus
collection AddIns 264 ajouter une procédure Sub
afficher l’intégralité 20
créer dans Excel 262 96
Menus adaptatifs
décharger 261 copier entre projets 64
activer/désactiver 395
enregistrer 263 créer 62
Méthodes 31
enregistrer du disquette, exporter 63
de classe 328
CD-ROM 264 importer 62
définir dans une classe 333
installer 261, 263 ouvrir 60
définition 132, 324
présentation 259 renommer 105
objet Connection 518
Macros complémentaires Voir supprimer 63
aussi Compléments COM, Mettre en forme
Module de classe
Compléments cellule 18, 213
d’automation ajouter 329
code 56
Maj (touche) 140 ajouter à un projet 52
plage de cellules 19
MakeConnection, méthode créer 62
Microsoft OLE DB Provider for
380 définition 325
ODBC drivers 520
Map, propriété 595 Modules complémentaires
Microsoft Jet 519
Mappage des données 587 COM, boîte de dialogue
MID, fonction
Marges afficher 268
syntaxe 221
définir 170 Mot de passe
MIN, fonction 226, 510
Masquer forts 160
Min, propriété
barre de formule 21 pour modifier un classeur
contrôle ScrollBar 442 157
feuille de calcul 166
contrôle SpinButton 438 pour ouvrir un classeur 157
MatchEntry, propriété 444
Mise en forme conditionnelle Motif de remplissage
MatchFound, propriété 446
pièges 99 modifier 255
MatchRequired, propriété 461
Mise en forme, barre d’outils visualiser 256
MAX, fonction 226, 510 18
Move, méthode
Max, propriété Mises à jour du document,
volet Office 23 collection Sheets 169
contrôle ScrollBar 442
Modalité des boîtes de objet CommandBarControl
contrôle SpinButton 438
message 77 403
MaxLength, propriété 437
MODE, fonction 226 objet Recordset 526
Me, mot-clé 336, 539
Mode, propriété 518 MoveFirst, méthode 526
MEDIAN, fonction 226
Modèle d’objet Excel MoveLast, méthode 526
MEDIANE, fonction 226
description 119 MoveNext, méthode 549
MemoryUsed, propriété
objet Recordset 526
615
Index
MovePrevious, méthode 526 objet ChartObject 361 Noms réservés 199
MOYENNE, fonction 225 objet Command 522 Not, opérateur 506
MsgBox, fonction objet CommandBar 396 Notations
syntaxe 75 objet Field 529 convertir 196
MsgBox, procédure objet ListObject 578 Nothing, valeur
syntaxe 114 objet Parameter 524 utiliser avec les objets 326
msoButtonState, constantes objet PivotField 382 Notify, paramètre 145
405 objet PivotItem 383 Nouveau classeur, volet Office
msoButtonStyle, constantes objet PivotTable 377 23
405 nouveautés Excel 2003
objet UserForm 428
msoControlType, constantes comparer des classeurs 8
objet XmlMap 591
401
Names, propriété compléments Office 2003
msoMenuAnimation, 13
constantes 395 plages nommées 194
documents intelligents 6
Multiline, propriété 436 NativeError, propriété 521
espace de travail intelligent
contrôle TextBox 471 NB, fonction 225 7
Multipage, contrôle NB.SI, fonction 226 fonctions statistiques
ajouter une page 466 NB.VIDE, fonction 226 optimisées 3
contenant des informations NBA, fonction 226 mappage données avec
de connexion 536 NBCAR, fonction 215 schémas XML 12
incrémenter la propriété NBCOUNTBLANK, fonction 226 volet Recherche 8
Value 468 XML étendues 10
New, mot-clé
masquer les onglets 468, NPV, fonction
créer une nouvelle instance
537
de Word 491 syntaxe 233
transitions visuelles 448
créer une variable objet 487 Null, valeur
Multipage_Change,
dans une instruction, Dim, dans une colonne de base
événement 468
Public ou Private 325 de données 500
MultiRow, propriété 447
NewSearch, méthode sélectionner des lignes
MultiSelect, propriété 444 contenant 506
objet FileSearch 305
NullString, propriété 377
N NewSheet, événement 289,
291 Number, propriété
name, élément NewWindow, paramètre de la objet Error 521
méthode FollowHyperlink NumberFormat, propriété
procédure Function 110
162
procédure Sub 96 objet PivotField 382
NewWorkbook, événement
Name, instruction 298 objet Range 213
nommer les séries de Niveau de sécurité NumericScale, propriété 524
données d’un graphique NuméroAuto, colonne 502
définir pour les macros 44
356
Nom complet d’un classeur
Name, propriété 253
155 O
collection ScopeFolders
Nombre Objet
310
convertir en texte 212 accéder 325
collection Sheets 165
valider la saisie 461 ajuster la taille 52
contrôle ComboBox 451
Nommer une plage de cellules aligner 52
contrôle TextBox 451
19
contrôle UserForm 433 aligner sur la grille 52
directives 195
objet AddIn 265
616
Index
avec plusieurs variables OnDisconnection, méthode Ordre de tabulation, boîte de
objet 327 269 dialogue
centrer 52 Onglet afficher 51
déclarer 326 modifier la couleur 16, 251 Ordre des tabulations
définition 323 Onglet, contrôle Voir TabStrip, définir pour un contrôle
déterminer la création d’une contrôle UserForm 433
nouvelle instance 325 OnKey,méthode 138 Orientation, propriété 170
détruire 327 OnStartupComplete, méthode objet PivotField 382
dissocier 53 269 Origin, paramètre
empilement 53 Open, événement 289, 290, méthode Open 145
464
encapsulation 30 méthode OpenText 147
Open, instruction
enfants 488 OriginalValue, propriété 529
syntaxe 317
espacement horizontal 52 Other, paramètre 148
Open, méthode
espacement vertical 52 OtherChar, paramètre 148
collection Documents 491
grouper 52 Outils pour l’Euro, macro
collection Workbooks 144 complémentaire Excel
rechercher dans
l’Explorateur d’objets 298 objet Connection 518 261
617
Index
personnaliser avec palette de couleurs à partir référencer sur la feuille de
l’interface Excel 244 de l’interface Excel 244 calcul active 184
personnaliser avec VBA 245 palette de couleurs à partir référencer sur une feuille de
réinitialiser 246 de VBA 245 calcul inactive 185
Parameter, objet 522 Visual Basic Editor 56 référencer une cellule 185
618
Index
PreserveNumberFormatting, paramètres d’entrée/sortie Public, élément
propriété 591 525 procédure Function 110
Presse-papiers, volet Office 22 Procédures Voir aussi Sub, procédure Sub 96
Prêt procédure et Function,
Public, instruction 328
procédure
calculer la mensualité 228 déclarer une variable 71
ProgId, propriété
calculer la part des intérêts mot-clé New 325
229 objet AddIn 265
Public, mot-clé 101
calculer la part du principal Programmation
Publish, méthode 579
230 orientée objet 30
PV, fonction
Preview, paramètre 164 procédurale 29
syntaxe 232
PRINCPER, fonction 230 Programme Excel Query Voir
PrintObject, propriété 361 Excel Query, programme
619
Index
Recherche objet ListObject 579 Retour chariot
expressions complexes 506 objet PivotCache 380 supprimer 215
expressions simples 506 RefreshDate, propriété 380 RGB, fonction
Rechercher RefreshPeriod, propriété 380 syntaxe 240
dans un contrôle ListBox RefreshTable, méthode 378 RIGHT, fonction
444 Registre syntaxe 219
valeur dans un fichier 320 compléments COM 270 RightMargin, propriété 171
Rechercher des fichiers entrées du complément RootElementName, propriété
collection PropertyTests d’automatisation 276 591
307 sous-clé CommandLineSafe RoundedCorners, propriété
limiter la recherche 307 270 362
objet FileSearch 304 sous-clé Description 270 Routine de propriété
Rechercher, volet Office 23 sous-clé FriendlyName 270 définir dans une classe 331
RECHERCHEV, fonction sous-clé LoadBehavior 270 Row, objet
Syntaxe 24 Remove, méthode 339 propriété Height 190
RecordCount, propriété RemoveItem, méthode RowFields, propriété 378
objet PivotCache 380 objet RowGrand, propriété 378
objet PivotItem 383 CommandBarComboBox RowIndex, propriété 397
408
objet Recordset 526 Rows, propriété 190
RemoveItem, propriété
Recordset, objet
dans le modèle d’objet ADO
contrôle ListBox 444 S
525 Renommer
feuille de calcul 16 SampleData, méthode 340
dans une requête de base
de données 547 module 105 Saut de page
620
Index
Schéma XML règles de création 100 SetSourceData, méthode 356
ajouter au classeur actif syntaxe 84 SetValue, méthode 595
582, 593 Select, instruction 504 Shadow 362
créer un schéma clause Order By 508 SharePoint
personnalisé 582
clause Where 506 volet Office Espace de
documents standards 584 travail partagé 23
extraire des
élément Root complexe 584 enregistrements 505 volet Office Lises à jour du
enregistrer en tant que mot-clé Desc 508 document 23
fichier XML 585 SharePointUrl, propriété 578
opérateur Like 507
importer des données 589 Sheet, objet
utiliser des caractères
mapper des éléments sur génériques 507 méthode Protect 173
des cellules 594
Select, méthode 180 SheetActivate, événement
mapper sur une feuille de 289, 298
collection Worksheets 176
calcul par programmation
Selected, propriété 444 Sheets, collection
590
SelectedItems, propriété 315 méthode
Schemas, propriété 591
Selection, objet 179 Add 166
ScopeFolder, objet 310
Selection, propriété 129 Copy 169
méthode
AddToSearchFolders 313 SelectionChange, événement Move 169
ScopeFolders, collection 310 295, 297 propriété
ScreenUpdating, propriété 131 Sélectionner les cellules, boîte Count 165
de dialogue Delete 168
Scroll, événement 442
afficher avec du code 416 Name 165
ScrollBar, contrôle
constante 416 Visible 166
définir
Semicolon, paramètre 148 Shell, fonction 478
distance de déplacement
de l’ascenseur 442 SendKeys, méthode ShellExecute, fonction 479
valeurs minimum et syntaxe 140 ShortcutText, propriété 405
maximum 442 Séparateur Show, méthode 415
ScrollBars, propriété autre que les virgules 147 objet FileDialog 315
contrôle TextBox 436 de cellules 146 objet UserForm 429
objet UserForm 428 virgules 146 ShowAllItems, propriété 383
ScrollColumn, propriété 126 Séquence clavier ShowAutoFilter, propriété 578
ScrollRow, propriété 126 affecter à une macro 35 ShowDropButtonWhen,
SEARCH, fonction SERIE, formule 356 propriété 445
syntaxe 222 syntaxe 357 ShowError, propriété 206
Search_SearchFolders, Séries de données ShowImportExportValidationEr
procédure 312 rors, propriété 591
définir la source 361
SearchFolders, collection 311 ShowInput, propriété 206
propriété HasDataLabels
SearchScopes, collection 309 360 ShowPopup, méthode 397
SearchSubFolders, propriété Series, objet 356 ShowTotals, propriété 578
304
Set New, instruction 325 Signature numérique
Section des déclarations
Set, commande 81 fonctionnement 42
créer 102
Set, instruction 135 protéger macro 42
Sécurité
syntaxes XE 325 protéger une macro, un
des macros 40, 44 classeur 43
Set, routine 328
Select Case, instruction
621
Index
Signature numérique, boîte de Static, mot-clé 108 Do While…Loop 89
dialogue 55 StatusBar, propriété 130 Do…Loop Until 90
Size, propriété 253 STDEV, fonction 226 Do…Loop While 90
SmallChange, propriété 442 STR, fonction For Each...Next 87
contrôle SpinButton 438 syntaxe 212 For...Next 86
SOMME, fonction 226 Strikethrough, propriété 253 fonction
SOMME.SI, fonction 226 String, variable RGB 240
Sort, propriété 526, 528 déclarer 67 fonctions
Source XML, volet Office 23 STXT, fonction CHERCHE 222
Source, propriété 526 syntaxe 221 CTXT 212
SourceType, propriété 578 Style, propriété DateAdd 235
Sous-routine contrôle ComboBox 445, DateDiff 236
marquer comme Private 335 461 DROITE 219
Space, paramètre 148 contrôle Multipage 468, FIND 222
SpecialCells, méthode 537
GAUCHE 219
syntaxe 192 contrôle TabStrip 447
InputBox 79
SpecialEffect, propriété 433 objet CommandBarButton
INTPER 229
405
SpinButton, contrôle IPMT 229
objet
définir CommandBarComboBox LEFT 219
incrémentation 438 408 MID 221
intervalle entre Sub, procédure NPV 233
événements Change ajouter à un module 96 PMT 228
439
comparée avec une PV 232
valeurs minimum et procédure Function 95
maximum 438 RATE 231
définir la portée 101
SQL (Structured Query RECHERCHEV 24
Language) 501 exécuter à partir d’une autre
REPT 218
procédure 104
SQL Server RIGHT 219
instruction Call et 104
se connecter à des bases SEARCH 222
de données 519 SubAddress, paramètre de la
méthode FollowHyperlink STR 212
SQLState, propriété 521 162 STXT 221
Start, commande 478 Subscript, propriété 253 TAUX 231
StartRow, paramètre 147 SUM, fonction 226 TROUVE 222
StartUpPosition, propriété 428 Superscript, propriété 253 VA 232
State, propriété SUPPRESPACE, fonction 215 VAN 233
objet CommandBarButton Supprimer VPM 228
405
caractères non imprimables formule SERIES 357
objet Connection 518 214 instruction
statements, élément espaces blancs 215 Delete 512
procédure Function 110 feuille de calcul 16 Insert 510
procédure Sub 96 Supprimer ou Supp. (touche) Open 317
Static, élément 140
Select 504
procédure Function 110 Syntaxe
Update 511
procédure Sub 96 boucles
instructions
Static, mot clé 70 Do Until…Loop 89
622
Index
GoTo 91 copier dans un document TabStop, propriété 433
If...Then...Else 83 Word actif 492 TabStrip, contrôle
Select Case 84 créer 72 accepter plusieurs rangées
méthode créer un graphique 358 d’onglets 447
623
Index
ThisWorkbook, propriété 132 abstrait 30 afficher les contrôles
méthode Type de graphique masqués 468
624
Index
UserForm_Terminate, créer 81, 487 vbIgnore, constante 78
événement 541 objets avec plusieurs 327 vbInformation, constante 77
UserInterfaceOnly, paramètre référencer des applications vbLf, constante 75
174 483 vbMagenta, constante 240,
utf-16, codage des schémas Variable statique 241
584
déclarer 70 vbModal, valeur 462
utf-8, codage des schémas
Variables vbModeless, valeur 462
584
marquer comme Private 335 vbMonday, constante 237
Utilitaire d’analyse - VBA,
macro complémentaire Variables de classe vbMsgBoxHelpButton,
Excel 260 définir 330 constante 77
Utilitaire d’analyse, macro référencer 336 vbMsgBoxRight, constante 77
complémentaire Excel vbMsgBoxRtlReading,
Variables locales, fenêtre
260 constante 77
afficher 51
vbMsgBoxSetForeground,
V Variant, variable 68 constante 77
copier des données 202 vbNo, constante 78
VA, fonction
VBA pour l’Assistant Internet, vbOk, constante 78
syntaxe 232 macro complémentaire
Excel 261 vbOkCancel, constante 76
Valeur
vbAbort, constante 78 vbOkOnly, constante 76
rechercher dans un fichier
320 vbAbortRetryIgnore, constante vbQuestion, constante 77
Valeur actuelle nette, calculer 76 vbRed, constante 239, 241
233 vbApplicationModal, constante vbRetry, constante 78
Valeur actuelle, calculer 232 77 vbRetryCancel, constante 76
Validation, propriété 205, 217 vbBlack, constante 239, 241 vbSaturday, constante 237
Valider vbBlue, constante 240, 241 vbSunday, constante 237
données 205 vbCancel, constante 78 vbSystemModal, constante 77
Value, propriété 206 vbCr, constante 75 vbThursday, constante 237
contrôle Multipage 468 vbCritical, constante 76 vbTuesday, constante 237
contrôle UserForm 433 vbCrLf, constante 75, 473 vbUseSystem, constante 237
objet Field 529 vbCyan, constante 240, 241 vbWednesday, constante 237
objet Parameter 525 vbDefaultButton1, constante vbWhite, constante 240, 241
77
objet Path 595 vbYellow, constante 239, 241
vbDefaultButton2, constante
objet PivotField 383 vbYes, constante 78
77
objet PivotItem 383 vbYesNo, constante 76
vbDefaultButton3, constante
VAN, fonction 77 vbYesNoCancel, constante 76
syntaxe 233 vbDefaultButton4, constante Verr. Maj (touche) 140
Variable 77 Verr. Num (touche) 140
assigner une valeur 71 vbExclamation, constante 77 Virus macro 40
déclarer 65 vbFirstFourDays, constante Visible, propriété 362
durée de vie 69 237
collections Sheets et
publique/privée 71 vbFirstFullWeek, constante Worksheets 166
237
réinitialiser 54 contrôle UserForm 433
vbFirstJan1, constante 237
visibilité 70 objet ActiveWindow 354
vbFriday, constante 237
Variable objet objet CommandBar 397
vbGreen, constante 239, 241
625
Index
objet CommandBarControl Where, clause méthode
404 dans une instruction Select Activate 160
objet PivotItem 383 506 Protect 158
VisibleFields, propriété 378 dans une instruction Update méthode ResetColors 246
Visual Basic .NET 512
propriété
générer le complément 281 opérateurs de comparaison
Saved 293
506
installer le complément propriété Colors 243
COM 282 Width, propriété
propriété Names 194
Visual Basic 6 contrôle UserForm 433
propriété ThisWorkbook 132
créer un complément objet ChartObject 362
Workbook_Activate,
d’automatisation 272 objet CommandBar 397
événement 290
installer un complément objet CommandBarControl
Workbook_Activate, macro
d’automatisation 275 404
266
Visual Basic Editor objet UserForm 428
Workbook_BeforeClose
afficher une macro 47 Window, objet
dans le programme Excel
ouvrir 47 propriété Caption 126 Query 535
personnaliser 56 With...End With, commande Workbook_BeforeClose,
Visual Basic .NET 82 événement 293, 466
créer un complément COM WithEvents, mot-clé 329, 353 Workbook_BeforePrint,
277 WizardApp.xls, exemple événement 292
Volets Office d’application 464 Workbook_BeforeSave,
Accueil 23 Word, application événement 291
626
Index
événement XlBordersIndex, constantes xlHide, constante 155
BeforeRightClick 297 257 xlInputOnly, type de validation
Change 296 xlBorderWeight, constantes 206
257 xlLess, constante 205
SelectionChange 297
xlCalculate, constantes 173 xlLessEqual, constante 205
méthode
xlChart, constante 167 xlLineStyle, constantes 257
Calculate 172
XlCmdType, énumération 379 XlListConflict, constantes 579
Protect 173
xlColorIndexAutomatic, XlListObjectSourceType,
propriété
constante 251, 257 constantes 580
PageSetup 170
xlColorIndexNone, constante xlLocationAsNewSheet,
Worksheet_BeforeRightClick, 257 propriété 347
événement 297
xlColumnDataType, constantes xlLocationAsObject, propriété
Worksheet_Change, 148 347
événement 296
xlDialog, constantes 414 xlLocationAutomatic, propriété
appel itératif 286 347
xlDialogAlignment, constante
Worksheet_SelectionChange, 417 xlLogical, constante 193
événement 297
xlDialogBorder, constante 417 xlNoRestrictions, constante
WorksheetFunction, objet 175
xlDialogCellProtection,
appeler des fonctions en constante 417, 418 xlNoSelection, constante 175
tant que propriétés 215
xlDialogDataValidation, xlNotBetween, constante 205
appeler la fonction PMT 229 constante 414
xlNotEqual, constante 205
appeler les fonctions xlDialogDefineName,
SEARCH et FIND 223 xlNumbers, constante 193
constante 414
utiliser 214 XlPattern, constantes 255
xlDialogFont, constante 420
Worksheets, collection XlPivotFieldDataType,
xlDialogFontProperties,
énumération 382
méthode constante 417
XlPivotFieldOrientation, types
Calculate 172 xlDialogFormatNumber,
382
constante 417
Select 176 XlPivotFormatType, formats
xlDialogFormulaGoto,
propriété 377
constante 415
Count 165 xlPlaceHolders, constante 155
xlDialogOpen, constante 414
Delete 168 XlQueryType, constantes 380
xlDialogPatterns, constante
Visible 166 417 xlReferenceStyle, constantes
Write #, instruction 318 197
xlDialogSelectSpecial,
WriteReserved, propriété 157 constante 416 xlReferenceType, constantes
197
WriteResPassword, paramètre xlDisplayShapes, constante
155 XlSaveConflictResolution,
méthode Open 145
constantes 151
xlDot, constante intrinsèque
méthode SaveAs 151
66 xlSheetHidden, constante 166
xlSheetVeryHidden, constante
X xlEqual, constante 205
166
xlErrors, constante 193
xlBackgroundAutomatic, xlSheetVisible, constante 166
xlExcel4IntMacroSheet,
constante 253 constante 167 XlTextParsingType, constantes
xlBackgroundOpaque, 147
xlExcel4MacroSheet,
constante 253 constante 167 XlTextQualifier, constantes 148
xlBackgroundTransparent, xlGreater, constante 205 xlTextValues, constante 193
constante 253
xlGreaterEqual, constante 205 xlUnderline, constantes 253
xlBetween, constante 205
627
Index
xlUnlockedCells, constante ajouter manuellement à un
175 classeur 587
xlValidAlertInformation, ajouter une feuille de calcul
constante 205 par programmation 590
xlValidAlertStop, constante éléments 585
205 importer des données 589
xlValidAlertWarning, constante mappage 590
205
supprimer un élément 589
xlValidateCustom, constante
XmlMap, propriété 578
206
XmlMaps, collection 593
xlValidateCustom, type de
validation 206 XValues, propriété 359
xlValidateDate, constante 206
xlValidateDate, type de Z
validation 207
Zone de liste modifiable,
xlValidateDecimal, constante contrôle Voir ComboBox,
206 contrôle
xlValidateDecimal, type de Zone de liste, contrôle Voir
validation 207 ListBox, contrôle
xlValidateInputOnly, constante Zone de texte, contrôle Voir
206 TextBox, contrôle
xlValidateList, constante 206 Zone Nom 21
xlValidateList, type de Zone Tapez une question 22
validation 207
Zone_d_impression, nom
xlValidateTextLength, réservé 199
constante 206
Zone_d_impression, plage 200
xlValidateTextLength, type de
Zone_de_consolidation, nom
validation 207
réservé 199
xlValidateTime, constante 206
Zoom
xlValidateTime, type de
fenêtre, niveau de 126
validation 207
Zoom, propriété 126, 171
xlValidateWholeNumber,
constante 206 ZOrder, méthode 433
xlValidateWholeNumber, type
de validation 207
xlWorksheet, constante 167
xlXmlExportSuccess,
constante 591
xlXmlExportValidationFailed,
constante 591
xlXmlImportElementsTruncate
d, constante 592
xlXmlImportSuccess,
constante 592
xlXmlImportValidationFailed,
constante 592
XML
628