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.