Microsoft 365)
Créez des applications professionnelles : Exercices et
corrigés
Ce livre est destiné aux utilisateurs d’Excel 2021 ou d’Excel Microsoft 365 voulant se former
à une véritable utilisation pratique du langage VBA appliqué à Excel. Il est donc
recommandé d’aborder l’ouvrage en ayant une connaissance suffisante des fondamentaux du
langage.
Avec plus de 230 exercices de difficulté croissante, basés sur des exemples concrets,
l’ouvrage couvre les domaines suivants : l’automatisation des tâches répétitives, l’ajout de
fonctions personnalisées, le contrôle des principaux objets d’Excel (classeur, feuille,
cellule, graphique), la collaboration et l’échange de données avec les autres applications de
la suite Office (2021 ou Microsoft 365), la prise en charge des informations au format XML,
la publication de documents Excel sur le Web, l’analyse de données, la gestion du
multimédia, la gestion du système de fichiers, ou encore la mise en oeuvre de requêtes
basées sur la technologie Power Query.
Au terme de cette mise en pratique, vous pourrez étendre les fonctionnalités d’Excel pour
répondre à vos besoins. Vous disposerez de tous les éléments qui vous permettront de
développer une application professionnelle avec VBA pour Excel 2021 ou Microsoft 365.
Les fichiers nécessaires à la réalisation des exercices, ainsi que les corrigés, sont en
téléchargement depuis cette page. 179 QCM - 238 travaux pratiques et leurs corrigés - Plus de
40 H de mise en pratique.
Auteur(s)
Claude DUIGOU
Ingénieur et MBA HEC, Claude DUIGOU exerce ses activités de Formateur et de Consultant
en entreprise depuis plus de 20 ans. Ses différentes missions le conduisent à intervenir auprès
d'entreprises de tailles diverses pour la réalisation, notamment en VBA, de logiciels dans des
domaines tels que l'aide à la décision, le contrôle de gestion, la gestion des stocks, la gestion
du temps, le contrôle budgétaire. Les systèmes qu'il développe font largement appel aux
possibilités et fonctionnalités avancées d'Excel. Cette expérience complète et variée lui
permet de proposer un livre très pragmatique sur VBA Excel.
Réf. ENI : TP21EXCV | ISBN : 9782409033353
Public du livre
Vous êtes utilisateur d’Excel Microsoft 365 ou d’Excel 2021 et vous souhaitez vous initier à
VBA (Visual Basic for Application) pour Excel ou approfondir vos connaissances de ce
langage, ce livre vous est destiné. Des notions élémentaires en programmation sont
recommandées mais non indispensables dans la mesure où la première partie de l’ouvrage est
consacrée aux fondamentaux et propose une introduction à la programmation objet. S’agissant
d’un recueil d’exercices pratiques basés sur des exemples concrets, nous vous recommandons
pour tout complément théorique de vous reporter au livre VBA Excel (versions 2019 et Office
365) - Programmer sous Excel : macros et langage VBA, dans la collection Ressources
informatiques des Éditions ENI.
Objectif du livre
Au terme de votre pratique, vous serez en mesure d’automatiser des tâches répétitives,
d’ajouter des fonctions et caractéristiques répondant à des besoins spécifiques, de
personnaliser totalement votre espace de travail et d’ouvrir Excel à son environnement
(applications Microsoft et Internet). Vous disposerez en définitive de tous les éléments qui
permettent de développer une application "clés en main".
Utilisation du livre
Bien qu’il soit possible d’aborder chaque chapitre indépendamment, l’ordre prévu influe sur
le bon déroulement de l’apprentissage. Il est donc conseillé de suivre la chronologie du livre
pour obtenir une meilleure efficacité.
Objectifs
Prérequis
Énoncés
Indices
Corrigés (en fin d’ouvrage)
1. Objectifs
Cette section décrit le contenu des exercices qui vont être abordés tout au long du chapitre.
2. Prérequis
Cette section permet de vérifier vos connaissances théoriques. Elle se compose de questions à
choix multiples ou de questions ouvertes portant sur les notions qui doivent être acquises
avant d’aborder la réalisation des exercices.
Chacune des questions de cette section est numérotée afin de retrouver plus facilement la
réponse à la fin de l’ouvrage.
3. Énoncés et corrigés
Cette section regroupe les énoncés des exercices. Comme pour les prérequis, chaque énoncé
et sa correction sont numérotés.
Pour réaliser certains exercices, vous devez télécharger ou visualiser des éléments. Les fichiers
correspondants sont disponibles en téléchargement depuis la page Informations générales. Pour la
4. Indices
Les indices fournis pour certains points de l’énoncé rappellent les points importants de théorie
à connaître. Ils permettent d’avancer plus vite dans la suite de l’exercice sans toutefois
dévoiler les solutions.
Pour écrire vos procédures, vous devez accéder à l’éditeur de Visual Basic, Visual Basic
Editor (VBE). Sous Excel, choisissez dans le ruban l’onglet Développeur puis l’icône Visual
Basic, ou utilisez le raccourci-clavier : [Alt][F11].
Attention ! si l’onglet Développeur n’apparaît pas dans le ruban, faites Fichier - Options -
Personnaliser le ruban et cochez la case Développeur dans la liste des onglets à droite de la
boîte de dialogue.
L’espace où vous saisissez votre code VBA est appelé "fenêtre de code". Elle comporte deux
parties : la partie déclaration et la partie procédures. Il faut écrire toutes les procédures après
les déclarations.
Vous pouvez constater que VBE n’est qu’une partie de l’environnement de développement
VBA pour Excel, l’IDE (Integrated Development Environment). La fenêtre Projet affiche les
projets ouverts avec trois types de dossiers contenant respectivement : les objets Excel
(feuilles de calcul et classeur), les formulaires (maladroitement désignés par "feuilles") et les
modules. La fenêtre Propriétés présente les propriétés de l’objet sélectionné, ici l’objet
ThisWorkBook. La fenêtre Exécution permet de tester du code et d’observer le résultat en
mode "console". D’autres fenêtres sont disponibles permettant de personnaliser son
environnement de développement. Les intitulés de ces fenêtres sont disponibles dans le menu
Affichage.
Les modules
Pour créer un module, choisissez dans le menu Insertion - Module. Les modules sont
destinés à recevoir les procédures et fonctions publiques.
La précision (ou déclaration) du type de données que peuvent stocker les variables ne fait pas
partie des options proposées. Toujours dans un souci d’efficacité, lors de l’écriture de votre
code toutes les variables doivent être déclarées en précisant le type de données. Choisissez le
plus spécifique. Par exemple, pour une variable destinée à stocker des entiers courts, le type
Integer (-32 768 à 32 767) convient mieux que le type Long (-2 147 483 648 à 2 147 483
647).
Le caractère de continuation
Une instruction VBA peut être longue et dépasser la largeur d’une page écran. Pour l’écrire
sur plusieurs lignes, il faut insérer le caractère de soulignement à l’endroit où vous voulez
effectuer une coupure, précédé d’un espace, puis appuyer sur la touche [Entrée]. Exemple :
L’indentation
L’exemple précédent vous montre la structure d’une procédure avec indentation. Les
décalages correspondent à des blocs logiques de prise de décision ou de structures répétitives.
Le code est ainsi plus lisible et plus aisé à corriger en cas d’erreur.
Pour indenter une ligne ou plusieurs lignes (à sélectionner auparavant), appuyez sur la touche
[Tab] pour une tabulation et sur la combinaison de touches [Shift][Tab] pour effectuer un
retrait. Vous pouvez préciser la largeur de la tabulation par le menu Outils - Options.
L’appui sur la touche [Tab] reporte votre choix à la suite du curseur. La touche [Entrée]
effectue la même action avec en plus un saut de ligne.
Pour bénéficier de l’aide complète, accédez à la boîte d’options (cf. ci-dessus) puis vérifiez
que toutes les options de la partie Paramètres du code sont cochées. La Vérification
automatique de la syntaxe et le Complément automatique des instructions sont des
assistances particulièrement utiles. Exemple :
Une fois le code validé, vous pouvez si nécessaire créer un bouton formulaire dans une feuille
de calcul Excel qui appelle cette procédure lorsque vous cliquez sur le bouton. Pour cela, dans
l’onglet Développeur, groupe Contrôles, cliquez sur Insérer, puis choisissez le bouton dans
la liste des Contrôles de formulaire.
Une fois le bouton de formulaire implanté par tracé de sa diagonale, VBA vous propose de lui
affecter une procédure :
Vous pouvez aussi créer un bouton de type Contrôle ActiveX dans une feuille de calcul. Une
fois le bouton placé sur la feuille de calcul, cliquez à l’aide du bouton droit et choisissez
l’option de menu Visualiser le code. Vous accédez alors à la procédure événementielle Click
du bouton. À l’intérieur de la procédure Click vous pouvez soit inclure directement le code
VBA du traitement voulu, soit appeler une procédure déjà existante. Exemple :
En cas d’erreur lors du test, VBE bloque le déroulement de la procédure et vous informe de la
nature du problème par un message. Exemple :
VBE vous signale ensuite la procédure où l’erreur s’est produite.
4. Débogage
Il est possible de procéder à une vérification syntaxique globale du code, en choisissant dans
la barre de menus Débogage - Compiler VBAProject. Ceci est particulièrement intéressant
pour des projets conséquents comportant de nombreuses procédures.
Vous disposez également d’un environnement complet pour le débogage de vos procédures.
Nous allons utiliser le débogueur au travers d’un exemple simple. Le tableau suivant doit être
rempli avec des nombres de 1 à 5. Ensuite le total est affiché.
Pour interrompre l’exécution d’un programme, appuyez sur les touches [Ctrl][Pause/Attn].
Faites un essai par exemple avec :
Cet arrêt forcé est bien utile pour sortir d’une boucle sans fin. L’IDE affiche une boîte de
dialogue.
Le bouton Débogage permet de revenir au code VBA, à l’instruction où l’arrêt s’est produit,
que cet arrêt soit forcé ou qu’il soit dû à une erreur.
Pour faire apparaître cette barre d’outils, utilisez le menu Affichage - Barre d’outils.
Le point d’arrêt apparaît sous forme d’un cercle marron dans la barre grise à gauche de la
fenêtre de code.
La procédure s’arrête à l’instruction comportant le point d’arrêt (celle-ci n’est pas exécutée).
Cette fonctionnalité permet d’exécuter la procédure instruction par instruction. Ainsi, pour la
boucle For-Next de la procédure Exemple, l’exécution va se répéter 5000 fois !
‘Debug.Print intCompteur
...
‘MsgBox lngTotal
Nous allons recourir à un espion pour connaître la valeur des variables intCompteur et
lngTotal.
Lancez une exécution pas à pas détaillée. Le programme s’arrête une première fois à la
ligne 5. Sélectionnez la variable intCompteur puis cliquez sur le bouton Espion Express .
Le principe est le même qu’il s’agisse d’une variable de type scalaire ou de type objet. Il est
ainsi possible de connaître les valeurs des propriétés d’un objet si celles-ci sont appelées à être
modifiées. Il est également possible de sélectionner une variable et de la faire glisser dans la
fenêtre Espions.
Consultez l’aide en ligne de VBA pour plus d’informations sur l’utilisation du débogueur.
5. Commenter le code
Il est particulièrement recommandé de commenter le code. Les commentaires facilitent la
compréhension du code, sa maintenance et les évolutions possibles. VBA utilise l’apostrophe
pour ouvrir une ligne de commentaire.
6. L’onglet Développeur
Nous avons vu précédemment dans ce chapitre comment faire apparaître l’onglet
Développeur si celui-ci n’est pas affiché.
Contrôles de formulaire
Contrôles ActiveX
Placez un contrôle sur la feuille de calcul puis effectuez un clic droit sur celui-ci. Choisissez
ensuite Visualiser le code. Vous basculez alors dans la fenêtre de VBE.
Complétez la procédure en saisissant votre code.
Pour tester le contrôle, désactivez le mode Mode Création en cliquant sur le bouton .
8. Création de formulaire
Accédez à l’IDE et créez un nouveau formulaire.
Au besoin, affichez la boîte à outils par le menu Affichage. Choisissez ensuite les contrôles à
ajouter et déposez-les dans le formulaire.
Lancez l’application.
Testez la visionneuse.
Pour fonctionner, VBA dispose d’un minimum de librairies (ou bibliothèques) référencées par
défaut.
Référence pour les formulaires
Lors de la création d’un formulaire, la DLL Microsoft Forms 2.0 Object Library est
automatiquement ajoutée :
Il suffit de cocher, dans la boîte de références, celles qui sont utiles au projet.
Mots-clés
Objectifs
Connaître les différents types de procédure et leur portée. Savoir les utiliser pour structurer le
code en unités logiques pour une meilleure maintenance et évolutivité. Découvrir la
possibilité de constituer des bibliothèques de procédures pouvant être utilisées dans différents
projets.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions ci-après
(certaines questions peuvent nécessiter plusieurs réponses) :
Note
Le curseur étant placé dans la procédure, appuyez sur la touche [F5] pour l’exécuter.
Indice
Pour l’affichage :
Exemple :
Indice
Pour l’affichage :
Créez un nouveau module nommé Module2. Créez dans ce module une procédure nommée
TestAppelExtérieur qui appelle la procédure BonjourVous du module Module1.
Exemple :
Énoncé 1.5 Appeler une procédure à partir
d’un contrôle VBA
Durée estimative : 10 minutes
Créez dans la feuille Feuil1 un bouton de commande VBA. Complétez le code du bouton
VBA ci-après avec un appel à la procédure BonjourVous.
Indice
Créez une procédure événementielle qui affiche le message de bienvenue grâce à un appel à la
procédure BonjourVous à chaque fois que la deuxième feuille du classeur (Feuil2) est
activée.
Indice
La procédure doit être saisie dans la zone de code de la feuille de calcul concernée. Effectuez
un clic droit sur l’onglet de la feuille Feuil2.
Énoncé 1.7 Utiliser une procédure à partir
d’un classeur Excel
Durée estimative : 5 minutes
Créez une procédure événementielle qui, à chaque ouverture du classeur, affiche le message
de bienvenue.
Indice
Créez dans Module1 une fonction nommée CalculCarré qui calcule le carré d’un nombre.
Indice
Créez dans Module1 une procédure nommée RechercheCarré qui permet de calculer le carré
d’un nombre saisi par l’utilisateur et qui affiche le résultat.
Énoncé 1.10 Utiliser des paramètres
nommés
Durée estimative : 5 minutes
Indice
Prérequis
1. a., c. et d.
2. a. et b.
La procédure générale est appelée explicitement par le programme et réalise
une tâche particulière. La procédure événementielle est appelée par un objet
qui est programmé pour réagir à un événement précis suite à une action de
l’utilisateur. La meilleure technique de programmation consiste à placer des
instructions communes dans une procédure générale qui peut être appelée par
des procédures événementielles.
3. c.
4. b.
5. a. et b.
6. a.
7. a. et c.
8. b. Sans paramètres attendus, la procédure MaProcédureB, appelée par la
procédure MaProcédureA, ne doit pas comporter de parenthèses. Il est
possible aussi d’utiliser l’instruction facultative Call. Les deux instructions ci-
dessous sont équivalentes :
Call MaProcédureB
MaProcédureB
Commentaire
Par défaut les procédures sont de type Public. On peut aussi le mentionner explicitement :
Public Sub DemandeNom()
Le mot-clé Private indique que la procédure ne peut être appelée que par les procédures de
son module.
Commentaire
DemandeNom
Pour une meilleure lisibilité du code VBA, il est toutefois conseillé d’utiliser le mot-clé Call.
Les procédures d’un même module peuvent s’appeler mutuellement quel que soit leur type
(Public ou Private).
Commentaire
La procédure BonjourVous du module Module1 est une procédure publique. Toutes les
procédures du projet peuvent donc l’appeler. Notez qu’elle contient elle-même un appel à la
procédure privée DemandeNom appartenant aussi au module Module1. Ceci ne pose aucun
problème de portée puisque la procédure TestAppelExtérieur n’appelle pas directement cette
dernière.
Commentaire
L’appel d’une procédure à partir d’un contrôle VBA obéit aux même règles que celles vues
précédemment (exercice 1.4).
Le code est à placer dans le bouton VBA. Il peut être lu et modifié aussi à partir du code de la
feuille de calcul Excel (clic droit sur l’onglet de la feuille Feuil1).
Corrigé 1.6 Utiliser une procédure à partir
d’une feuille de calcul Excel
Private Sub Worksheet_Activate()
Call BonjourVous
End Sub
Commentaire
L’appel d’une procédure à partir d’une feuille de calcul obéit aussi aux mêmes règles vues
précédemment (exercice 1.4).
Commentaire
Les exercices 1.5, 1.6 et 1.7 font intervenir le concept d’événement, concept très important
dans la programmation orientée objet. Il est l’objet de nombreux exercices dans les chapitres
Formulaires et Contrôles.
Commentaire
Lorsqu’on utilise des valeurs décimales, il est préférable de les typer en Double plutôt qu’en
Single. On obtient ainsi la meilleure précision possible.
Il est impossible d’exécuter directement une procédure Function. Elle doit être appelée par
une procédure Sub, ou par une autre Function.
Commentaire
Pour toute demande de saisie, le risque d’erreur est présent. Les chapitres suivants traitent le
contrôle de saisie et la gestion des erreurs.
Commentaire
La constante Visual Basic vbCrLf permet de générer à l’affichage un saut de ligne forcé.
Sub TestParamètresNommés()
Dim strMessageAffiché As String
strMessageAffiché = Message(strDébutPhrase:="Bonjour ", _
strFinPhrase:="à tous")
MsgBox strMessageAffiché
End Sub
Commentaire
Également :
Sub TestParamètresNommés()
Dim strMessageAffiché As String
' Le deuxième argument facultatif est omis.
strMessageAffiché = Message("Hello", , "A bientôt")
MsgBox strMessageAffiché
End Sub
Introduction
Durée : 1 heure 05
Mots-clés
déclaration, portée, durée de vie, type, affectation, argument, type de données VBA, type de
données utilisateur, membre, conversion, variable de type objet
Objectifs
Maîtriser l’emploi des variables et des constantes pour l’écriture des procédures et la
réalisation de programmes.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions ci-après
(certaines questions peuvent nécessiter plusieurs réponses) :
Dans le module Module1, déclarez une variable publique nommée strMessagePublic de type
String.
Indice
Dans un deuxième module nommé Module2, créez une procédure nommée AppelExtérieur
qui utilise la variable strMessagePublic du Module1 pour afficher le message suivant :
Indice
Dans le module Module1, déclarez une variable privée nommée strMessagePrivé de type
String.
Dans le module Module1, créez une procédure nommée MessageLocal. Celle-ci utilise une
variable locale nommée strMessageLocal de type String. Résultat :
Dans le module Module1, créez une procédure nommée VariablesLigne dont voici le code :
Sub VariablesLigne()
Dim intv1, intv2, intv3 As Integer
MsgBox ("intv1 : " & VarType(intv1) & vbCrLf & "intv2 : " _
& VarType(intv2) & vbCrLf & "intv3 : " & VarType(intv3))
End Sub
Résultat :
Corrigez la déclaration de sorte que les trois variables soient effectivement de type entier.
2.2.1 : Conversion
Dans le module Module1, déclarez une constante publique nommée sglPouce de type Single.
Affectez-lui la valeur 25,4.
Indice
2.2.2 : Utiliser des constantes VBA pour le choix des boutons des boîtes de messages
VBA possède de nombreuses constantes internes qui simplifient la programmation. Avec
elles, il est possible par exemple de choisir facilement les boutons de la boîte de dialogue
standard.
Sub ConstanteVBA()
Dim intRésultat As Integer
intRésultat = MsgBox("Bouton OK seul", vbOKOnly)
End Sub
Indice
Créez la procédure ConversionDate qui effectue une conversion de la date système en type
String. Procédez aux deux affichages suivants.
Exemple :
Indice
Syntaxe : CStr(expression)
Utilisez la fonction VBA Format pour la présentation de la date après conversion en texte.
Créez un type public nommé Région. Les membres de ce nouveau type sont : Nom,
Superficie, ChefLieu et Population.
Indice
Public . . . Région
NomRégion As . . .
SuperficieRégion. . .
ChefLieuRégion . . .
PopulationRégion . . .
End Type
Complétez la procédure NouvelleRégion ci-après. Elle permet de saisir une nouvelle région et
affecte chaque saisie à une cellule de la première feuille de calcul Excel.
Sub NouvelleRégion()
Dim uneRégion As ...
On Error GoTo Erreur
With Worksheets("Feuil1")
uneRégion.NomRégion = InputBox("Saisir le nom")
.Range("I2").Value = ...
... = InputBox("Saisir le chef-lieu")
.Range("I3").Value = uneRégion.ChefLieuRégion
.
.
.
End With
Erreur:
End Sub
Prérequis
1. a. et b.
Il est toutefois fortement recommandé de déclarer toutes les variables
explicitement et de les typer pour disposer d’un code rigoureux et du contrôle
de VBE.
2. b. et c.
3. b. et c.
Préférez toutefois l’instruction Private à Dim dans la partie déclaration.
4. b. La déclaration Static concerne habituellement des variables locales (au sein
d’une procédure).
5. a. et b.
Dans la partie déclaration, les variables doivent être précédées par les
instructions Public, Private ou Dim.
6. b. Lorsque plusieurs variables sont présentes dans une même déclaration, le type
de données ne concerne que la dernière variable. Les autres reçoivent le type
par défaut, à savoir le type Variant.
7. a.
8. c.
9. b.
10. Les trois réponses sont bonnes.
11. a.
12. b. Le type de données Currency est utile pour les calculs monétaires et pour les
calculs à virgule fixe dans lesquels la précision revêt une importance
particulière.
13. a.
14. a.
15. c. Par défaut, les constantes sont de type Private.
Écriture de la procédure.
Sub Message()
strMessagePublic = "Utilisation d'une variable publique"
MsgBox strMessagePublic
End Sub
Sub AppelExtérieur()
strMessagePublic = "Utilisation d'une variable publique" & _
vbCrLf & vbCrLf & "Appel à partir d'un autre module"
MsgBox strMessagePublic
End Sub
Écriture de la procédure.
Sub MessageInterne
strMessagePrivé = "Utilisation d'une variable privée"
MsgBox strMessagePrivé
End Sub
Sub MessageLocal()
Dim strMessageLocal As String
strMessageLocal = "Utilisation d'une variable locale"
MsgBox strMessageLocal
End Sub
Écriture de la procédure.
Sub ConversionPouceEnmm()
Dim dblNBPouce As Double
Dim dblRésultatmm As Double
On Error GoTo Sortie_Sur_Erreur
dblNBPouce = InputBox("Nombre de pouces")
dblRésultatmm = dblNBPouce * dblPouce
MsgBox dblNBPouce & " pouces = " & dblRésultatmm & " mm"
Sortie_Sur_Erreur:
End Sub
2.2.2 : Utiliser des constantes VBA pour le choix des boutons des boîtes de
messages
Sub ConstanteVBA()
Dim intRésultat As Integer
intRésultat = MsgBox("Bouton OK seul", vbOKOnly)
intRésultat = MsgBox("Boutons Oui et Non", vbYesNo)
intRésultat = MsgBox("Boutons Recommencer et Annuler", _
vbRetryCancel)
End Sub
L’écriture peut être plus concise. Celle qui est présentée ici permet de bien dissocier
la conversion du formatage du texte.
Introduction
Durée : 1 heure 15
Mots-clés
Objectifs
Utiliser les fonctions et connaître les principaux opérateurs pour effectuer des
calculs, des comparaisons, des concaténations et des opérations logiques.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
1. Note préliminaire
Dans ce chapitre, ainsi que dans toute la suite de l’ouvrage, les fonctions intégrées de
VBA seront préfixées par le nom de leur bibliothèque. Ainsi, on écrit VBA.Right plutôt
que Right. La deuxième syntaxe, bien que correcte, peut, et de façon aléatoire, ne pas
fonctionner sur certaines installations d’Excel. L’utilisateur prudent, amené à
distribuer ses développements sur plusieurs postes de travail, s’imposera donc la
discipline d’écriture du code spécifiée ici.
Exemple :
Indice
Utilisez la constante vbCrLf pour obtenir un saut de ligne
Créez une fonction TrouvePetit qui compare deux nombres et affiche le plus petit
d’entre eux. Testez ensuite cette fonction dans une procédure RéponsePetit.
Exemple :
Indice
Pour la fonction, utilisez la structure conditionnelle : If ... Else ... End If.
Indice
Créez une fonction TestChaîne qui compare deux chaînes de caractères. Testez
ensuite cette fonction dans une procédure EX5. Exemple, saisissez les mots suivants
: SOLEIL et Soleil.
Note
VBA fait une distinction entre minuscules et majuscules, de même pour les accents.
Créez une fonction nommée Factorielle qui calcule la factorielle d’un nombre entier.
Testez ensuite cette fonction dans une procédure qui demande la saisie d’un nombre
entre 1 et 20 puis affiche le résultat. Exemple :
Indice
Le résultat retourné par la fonction doit être de type Double car le calcul factoriel
donne rapidement de très grands nombres.
Note
Indice
Indice
Créez une procédure ChercheMot qui permet de vérifier la présence d’un mot dans
une phrase ou dans un texte. Un message est affiché en fonction du résultat de la
recherche. Exemples :
Indice
Utilisez la fonction VBA.InStr().
La cotation suivante d’un des titres du CAC 40 a été importée d’un site boursier :
« 2021-09-
08,5052.879883,5061.600098,4935.379883,4973.520020,4973.520020,85589800 ».
Elle est structurée selon sept champs : Date, Open, High, Low, Close, Adj Close,
Volume. Créez la procédure ExtraireInfo permettant d’extraire la date de cette chaîne
de caractères.
Indice
Prérequis
1. a.et b.
2. c.
3. b.
4. b.
5. a.
6. b.
7. b. et c.
Corrigé 3.1 Diviser deux nombres
Sub Division()
Dim dblNombre1 As Double
Dim dblNombre2 As Double
Dim dblRésultat As Double
On Error GoTo Sortie_Sur_Erreur
dblNombre1 = InputBox("Entrez le dividende")
dblNombre2 = InputBox("Entrez le diviseur")
dblRésultat = dblNombre1 / dblNombre2
MsgBox "Résultat : " & dblRésultat
Sortie_Sur_Erreur:
End Sub
Commentaire
Pour toute demande de saisie, le risque d’erreur existe. Les chapitres Structures de
contrôle et Tableaux traitent du contrôle de saisie. La gestion des erreurs est traitée
au chapitre Introduction à la programmation objet.
Code de la procédure :
Sub RéponsePetit()
Dim dblNombre1 As Double
Dim dblNombre2 As Double
Dim dblNBPetit As Double
On Error GoTo Sortie_Sur_Erreur
dblNombre1 = InputBox("Entrez le 1er nombre")
dblNombre2 = InputBox("Entrez le 2ème nombre")
dblNBPetit = TrouvePetit(dblNombre1, dblNombre2)
If dblNombre1 = dblNBPetit And dblNombre2 = dblNBPetit Then
MsgBox "Nombres égaux"
ElseIf dblNombre1 = dblNBPetit Then
MsgBox dblNombre1 & " < " & dblNombre2
ElseIf dblNombre2 = dblNBPetit Then
MsgBox dblNombre2 & " < " & dblNombre1
End If
Sortie_Sur_Erreur:
End Sub
Code de la procédure :
Sub EX5()
Dim strMot1 As String
Dim strMot2 As String
Dim strRésultat As String
strMot1 = InputBox("Entrer le premier mot")
strMot2 = InputBox("Entrer le deuxième mot")
strRésultat = TestChaîne(strMot1, strMot2)
MsgBox strRésultat
End Sub
Commentaire
Cette fonction est dite récursive puisque la fonction Factorielle s’appelle elle-même.
Elle peut être écrite de manière plus classique :
Sub AppelFactorielle()
Dim intNombreEntier As Integer
Dim dblRésultat As Double
On Error GoTo Sortie_Sur_Erreur
intNombreEntier = _
InputBox("Saisir un nombre entier entre 1 et 20")
dblRésultat = Factorielle(intNombreEntier)
MsgBox intNombreEntier & "! =" & dblRésultat
Sortie_Sur_Erreur:
End Sub
Note
VBA.Format(dblRésultat, "##,##0")
Exemple :
Code de la procédure :
Sub AppelPourcentage()
Dim dblNumérateur As Double
Dim dblDénominateur As Double
Dim dblPourcentage As Double
On Error GoTo Sortie_Sur_Erreur
dblNumérateur = InputBox("Numérateur")
dblDénominateur = InputBox("Dénominateur")
dblPourcentage = CalculPourcentage(dblNumérateur, dblDénominateur)
dblPourcentage = VBA.Round(dblPourcentage, 2)
MsgBox "Pourcentage :" & dblPourcentage & "%"
Sortie_Sur_Erreur:
End Sub
Introduction
Durée : 1 heure 55
Mots-clés
condition, choix, alternative, branchement conditionnel, compteur, itération,
incrémenter, décrémenter, sortie, boucle, test
Objectifs
Maîtriser les structures de décision afin de tester des conditions puis effectuer des
actions différentes selon le résultat obtenu. Maîtriser les instructions d’itération qui,
associées aux instructions conditionnelles, permettent d’écrire du code Visual Basic
pour la prise de décision et la répétition des actions. Vous retrouverez ces structures
dans la suite du livre. Dans ce chapitre, nous nous limitons à l’emploi des boîtes de
dialogue déjà rencontrées.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Créez la procédure ContrôleSaisie qui propose une boîte de saisie et vérifiez qu’il
s’agit d’un nombre. Si c’est le cas, effectuez l’opération qui consiste à multiplier le
nombre par lui-même, sinon affichez un message. Exemple :
Indice
Exercice 2
Complétez la procédure précédente qui vérifie que l’utilisateur a cliqué sur le bouton
OK. Dans le cas contraire, affichez un message. Exemple :
Énoncé 4.2 Dire au revoir
Durée estimative : 5 minutes
Sub AuRevoir()
Dim strMessage As String
Dim intStyle As Integer
Dim intChoix As Integer
strMessage = "Souhaitez-vous quitter Excel ?"
intStyle = vbYesNo + vbDefaultButton2
... = MsgBox(strMessage, intStyle)
If ... = vbYes Then
MsgBox "A bientôt."
...
MsgBox "Poursuivons."
...
End Sub
Indice
Voici un extrait de l’aide VBA en ligne. L’aide complète se trouve à l’adresse suivante :
https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-
help/msgbox-function
varChoix = VBA.UCase(varChoix)
0 - 17 ans : "Gamin"
Pour les femmes, un seul message : "On ne demande pas son âge à une femme".
Exemple :
Indices
Créez la procédure Bonjour10FoisAvecFor avec la structure For ... Next qui dit 10
fois bonjour.
Note
Avec les structures répétitives pour un énoncé donné, il existe souvent plusieurs
solutions possibles. Les solutions dans la partie Corrigés ne sont donc pas uniques.
Exemple :
Exemple :
Note
Saisissez d’abord des lettres (exemple : ENI) pour tester le contrôle puis un nombre
(exemple : 13).
Créez la procédure TexteALenvers qui renvoie les caractères saisis en ordre inverse.
Exemple :
Note
Utilisez des nombres aléatoires pour générer une suite de nombres. Voir dans l’aide :
l’instruction Randomize et la fonction VBA.Rnd.
Prérequis
1. a. et c.
2. a.
3. b., c. et d.
4. b. et c.
5. c. et d.
6. b.
7. a.
8. b.
9. e.
Commentaire
Au chapitre précédent, nous avons utilisé la méthode Inputbox qui permet également
de contrôler la saisie.
Exercice 2
Sub ContrôleSaisiebis()
. . .
MsgBox "Vérifier votre saisie"
End If
Else
MsgBox "Annulation de l'opération"
End If
End Sub
Sub Bonjour10FoisAvecFor()
Dim intCompteur As Integer
Dim strMot As String
Dim strMessage As String
intCompteur = 0
strMot = "Bonjour..."
For intCompteur = 1 To 10
strMessage = strMessage & " " & strMot
Next intCompteur
intCompteur = intCompteur - 1
MsgBox strMessage & vbCrLf & vbCrLf _
& "Je vous ai dit " & _
intCompteur & " fois bonjour."
End Sub
Sub Bonjour10FoisAvecDo()
Dim intNombre As Integer
Dim strMot As String
Dim strMessage As String
intNombre = 0
strMot = "Bonjour..."
Do While intNombre < 10
intNombre = intNombre + 1
strMessage = strMessage & " " & strMot
Loop
MsgBox strMessage & vbCrLf & vbCrLf _
& "Je vous ai dit " & intNombre & " fois bonjour."
End Sub
Sub CompterDe13en13()
Dim intNombreDépart As Integer
Dim intAjout As Integer
Dim intNewNombre As Integer
Dim strMessage As String
strMessage = "0"
intNombreDépart = 0
intAjout = 13
Do While intNombreDépart <= 100 - intAjout
intNombreDépart = intNombreDépart + intAjout
intNewNombre = intNombreDépart
strMessage = strMessage & "..." & VBA.CStr(intNewNombre)
Loop
MsgBox strMessage
End Sub
Sub CompterDeNenN()
Dim intNombreArrivée As Integer
Dim intNombreDépart As Integer
Dim intAjout As Integer
Dim intNewNombre As Integer
Dim vMessage As String
On Error GoTo Erreur
vMessage = "0"
intNombreDépart = 0
intAjout = InputBox("Compter de ... en ...")
intNombreArrivée = InputBox("jusqu'à :")
Do While intNombreDépart <= intNombreArrivée - intAjout
intNombreDépart = intNombreDépart + intAjout
intNewNombre = intNombreDépart
vMessage = vMessage & "..." & VBA.Cstr(intNewNombre)
Loop
MsgBox vMessage
Erreur:
End Sub
Commentaire
Note
Code de la procédure :
Sub NombrePremier()
Dim blnRéponse As Boolean
Dim lngNombre As Long
Dim varTestSaisie As Variant
varTestSaisie = InputBox(prompt:="Entrer un nombre", _
Title:="Nombre premier")
Do While varTestSaisie <> ""
If VBA.IsNumeric(varTestSaisie) Then
lngNombre = varTestSaisie
blnRéponse = DétermineNombrePremier(lngNombre)
Select Case blnRéponse
Case False
MsgBox lngNombre & " n'est pas un nombre premier"
Case True
MsgBox lngNombre & " est un nombre premier"
End Select
Else
MsgBox "Vérifier votre saisie"
End If
varTestSaisie = InputBox(prompt:="Entrer un nombre", _
Title:="Nombre premier")
Loop
MsgBox "Fin de l'opération"
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
1. Tous les éléments d’un tableau :
a. ont le même type de données que le type déclaré du tableau.
b. peuvent être de type différent si le tableau est déclaré de type Variant.
c. peuvent être de type String ou Integer si le tableau est déclaré de type
String.
2. Les tableaux statiques :
a. ont une limite supérieure et inférieure.
b. n’ont aucune limite.
c. ont seulement une limite inférieure.
3. Les éléments d’un tableau sont indexés :
a. de manière relative.
b. séquentiellement.
4. Le numéro d’indice par défaut du premier élément d’un tableau VBA est :
a. -1
b. 1
c. 0
5. Un numéro d’index référence :
a. un seul élément d’un tableau.
b. plusieurs éléments d’un tableau.
6. Un tableau de type Variant peut contenir d’autres tableaux s’il est :
a. statique
b. dynamique
7. Un tableau déclaré avec le mot-clé Dim dans une procédure est
accessible :
a. par toutes les procédures du module.
b. par toutes les procédures du projet.
c. uniquement à l’intérieur de sa procédure.
8. Le nombre maximum de dimensions d’un tableau VBA est :
a. 10
b. 100
c. 60
9. Il est possible de préciser les indices de début et de fin avec la clause :
a. To
b. For
c. Next
10 La procédure ci-après est incorrecte car :
.
Sub ProcTest(
Private strTabTest(19) As String
strTabTest(19) = "paradis
Debug.Print "20ème élément :"; strTabTest(19
End Sub
a. les bornes ne sont pas précisées.
b. Private est utilisé au sein de la procédure.
c. le signe d’affectation pour les tableaux est :=.
Note
Tous les exercices sont à réaliser avec l’option de base par défaut : Option base 0.
Exercice 1
Déclarez un tableau de mots de 100 éléments. Ce tableau est local à une procédure
nommée EX3. Nommez-le strTabMots.
Exercice 2
Indice
Note
Utilisez le tableau intTabPublic (énoncé 5.1) dans une procédure nommée EX4.
Affectez au dernier élément le nombre 123. Affichez cet élément avec Debug.Print.
Énoncé 5.5 Initialiser un tableau avec une
boucle
Durée estimative : 5 minutes
Dans une procédure EX5, remplissez un tableau local nommé intTabInit avec 10
nombres entiers aléatoires de 1 à 100. Affichez tous les nombres avec le total du
tableau.
Indice
Exemple :
Exercice 1
Dans une procédure EX8, créez un tableau dynamique, de niveau module, à une
colonne comportant des nombres. Nommez ce tableau dblTabDynamique. Proposez
une boîte de saisie pour affecter au dernier élément la taille du tableau. Affichez cet
élément.
Note
Évitez de saisir une taille exagérément grande pour ne pas saturer la mémoire.
Indice
Créez la procédure EX10 qui affiche une table de multiplication selon le choix de
l’utilisateur.
Exemple :
Énoncé 5.11 Afficher un tableau dans un
formulaire
Durée estimative : 10 minutes
Vous disposez du formulaire frmMois. Il contient deux contrôles : une zone de liste
déroulante cboMois et une zone de liste lstMois. Créez une procédure qui permet de
consulter les noms des mois de l’année dans ces contrôles tout en construisant un
tableau contenant ces mêmes noms de mois.
Indice
Utilisez les fonctions VBA.Format et VBA.DateSerial.
Prérequis
1. a. et b.
2. a.
3. b.
4. c.
5. a.
6. b.
7. c.
8. c.
9. a.
10. b.
Ce tableau n’est accessible que par les procédures du module. Vous pouvez
également utiliser le mot-clé Dim, mais préférez-lui au niveau module celui de Private.
Sub EX3()
Dim strTabMots(99) As String
End Sub
Commentaire
Ce tableau ne peut pas être utilisé par les autres procédures. En l’état, la procédure
ne fait rien car elle ne comporte qu’une déclaration de tableau.
Exercice 2
Sub EX3()
Dim strTabMots(99) As String
strTabMots(0) = "océan"
Debug.Print "Limite inférieure :"; Lbound(strTabMots)
Debug.Print "Limite supérieure :"; Ubound(strTabMots)
Debug.Print "Premier élément : "; strTabMots(0)
End Sub
Commentaire
Avec l’option base par défaut, les deux instructions suivantes sont dans notre
exemple équivalentes :
Commentaire
Rappel
Les mots-clés Public et Private ne peuvent être utilisés au sein une procédure. VBA
afficherait un message d’erreur.
Commentaire
Par défaut on a : Option Base 0. La déclaration suivante est donc aussi correcte :
Dim intTab2D(4, 4)
Cette déclaration implique une modification des indices.
Exercice 2
Sub EX7()
intTab3D(10, 10, 50) = 777
Debug.Print "5000ème élément :"; intTab3D(10, 10, 50)
End SubI
Commentaire
Code de la procédure :
Sub EX8()
Dim intTaille As Integer
On Error GoTo Erreur
intTaille = Application.InputBox(prompt:="Indiquer la taille du tableau" _
& "(entre 1 et 10 000)", Type:=1)
intTaille = VBA.CInt(intTaille)
ReDim dblTabDynamique(1 To intTaille)
dblTabDynamique(intTaille) = intTaille
Debug.Print "dernier élément avec taille du tableau :"; _
dblTabDynamique(intTaille)
Erreur:
End Sub
Commentaire
ReDim permet de modifier la taille d’un tableau dynamique aussi souvent que
nécessaire. Attention, ReDim ne peut être utilisé que dans une procédure.
Commentaire
Introduction
Durée : 1 heure 50
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Note
Vérifiez avant de commencer que les options Déclaration des variables obligatoire et
Complément automatique des instructions sont bien cochées dans les options de
VBE. Pour accéder à la fenêtre d’options dans l’environnement VBE : Outils - Options.
Énoncé 6.1 Accéder à un objet
Durée estimative : 5 minutes
Note
Pour les énoncés de 6.1.2 à 6.1.4, laissez ces deux classeurs ouverts lors de
l’écriture et du test de vos procédures.
6.2.2 : Connaître le nom d’une feuille de calcul en utilisant une variable objet
Sous Excel, saisissez la valeur 789 dans la cellule B2 de la feuille Accueil du premier
classeur. Par programmation et sans instruction d’activation, transformez la valeur
de cette cellule en texte VBA Excel.
Modifiez les propriétés de la cellule B2 de sorte que le contenu soit en gras italique et
de couleur bleue, que la police soit Comic Sans MS et que le contexte apparaisse en
bleu italique.
Note
Vous pouvez agir simplement sur la couleur de la police avec la propriété ColorIndex.
Voici les dix premières constantes pouvant être affectées à cette propriété :
Énoncé 6.4 Utiliser les méthodes d’un objet
Durée estimative : 10 minutes
Affichez dans une boîte tous les noms des feuilles du classeur en utilisant la
collection Worksheets.
Indice
Pour la gestion des lignes alternées, vous pouvez faire appel à l’opérateur Mod.
Collections utiles : Range, Rows, Columns
Créez la procédure qui affiche le contenu d’une cellule par un double clic sur une
cellule non vide de la feuille Accueil.
Note
Note
Note
Les numéros d’erreurs et leurs significations sont consultables dans l’aide en ligne.
En voici un extrait :
6.7.3 : Gérer les erreurs avec poursuite du traitement
Mise en place
les procédures de classe Let Property et Get Property pour gérer les propriétés
spécifiées ci-dessus.
la procédure Class_Initialize() déclenchée à l’instanciation de l’objet et
permettant l’affichage d’un message de bienvenue.
l’événement EclatementPneu.
Note
Note
Cette procédure comprendra une boucle Do... Loop dans laquelle sera effectuée une
saisie de la variation de vitesse.
Exemple :
Essayez d’utiliser la propriété Puissance en écriture et vérifiez que vous obtenez bien
un code d’erreur.
Énoncé 6.10 Déclencher l’événement de
classe
Durée estimative : 5 minutes
Note
Indice
Sub ActiveClasseurN2()
Workbooks("Classeur N2.xlsx").Activate
End Sub
ou :
Sub ActiveClasseurN2Bis()
Workbooks(2).Activate
End Sub
Commentaire
Le numéro d’index indique l’ordre dans lequel les classeurs ont été ouverts ou créés.
Après une suppression, un numéro d’index peut alors référencer un autre classeur.
6.1.2 : Accéder à une feuille d’un classeur
Sub SélectionFeuille()
Workbooks("Classeur N2.xlsx").Activate
Worksheets("Feuil3").Select
End Sub
Sub SélectionCellule()
Workbooks("Classeur N2.xlsx").Activate
Worksheets("Feuil1").Select
Range("B2").Select
End Sub
Commentaire
Sub SélectionPlage()
Workbooks("Classeur N2.xlsx").Activate
Worksheets("Feuil1").Select
Range("A1:C3").Select
Range("B3").Activate
End Sub
Sub NomFeuille(
MsgBox "Nom de la première feuille : " _
& Workbooks("Introduction Programmation Objet.xlsm"). _
Worksheets(1).Name
End Sub
6.2.2 : Connaître le nom d’une feuille de calcul en utilisant une variable objet
Sub NomFeuilleDéclaration()
Dim wksFeuille As Worksheet
Dim strNom As String
Set wksFeuille = Workbooks("Introduction Programmation Objet.xlsm") _
.Worksheets(1)
strNom = wksFeuille.Name
MsgBox "Nom de la première feuille : " & strNom
End Sub
Sub NombreFeuilles().Activate
MsgBox "Nombre de feuilles de calcul : " _
& Workbooks("Introduction Programmation Objet.xlsm"). _
Worksheets.Count
End Sub
Sub RenommeFeuilleCalcul()
Dim wksFeuille As Worksheet
Set wksFeuille = Workbooks("Introduction Programmation Objet.xlsm") _
.Worksheets(2)
wksFeuille.Name = "Essai"
End Sub
Sub ChangeValeur()
Dim wksFeuille As Worksheet
Dim rngPlage As Range
Set wksFeuille = Workbooks("Introduction Programmation Objet.xlsm") _
.Worksheets("Accueil")
Set rngPlage = wksFeuille.Range("B2")
rngPlage.Value = "VBA Excel"
End Sub
Sub EnGras()
Dim wksFeuille As Worksheet
Dim rngPlage As Range
Set wksFeuille = Workbooks("Introduction Programmation Objet.xlsm") _
.Worksheets("Accueil")
Set rngPlage = wksFeuille.Range("B2")
rngPlage.Font.Bold = True
End Sub
Sub ModifProprietes()
Dim wksFeuille As Worksheet
Dim rngPlage As Range
Set wksFeuille = Workbooks("Introduction Programmation Objet.xlsm") _
.Worksheets("Accueil")
Set rngPlage = wksFeuille.Range("B2")
With rngPlage.Font
.Italic = True
.ColorIndex = 5
.Name = "Comic Sans MS"
End With
End Sub
Corrigé 6.4 Utiliser les méthodes d’un objet
6.4.1 : Ajouter une nouvelle feuille au premier classeur
Sub AjoutFeuille()
Dim wkbClasseur As Workbook
Dim wksFeuille As Worksheet
Set wkbClasseur = Workbooks("Introduction Programmation Objet.xlsm")
wkbClasseur.Sheets.Add After:=Worksheets(Worksheets.Count)
Set wksFeuille = wkbClasseur.Worksheets(Worksheets.Count)
wksFeuille.Name = "Tempo"
End Sub
Sub SupprimeFeuille()
Sheets("Tempo").Delete
End Sub
Sub NomsDesFeuilles()
Dim wkbClasseur As Workbook
Dim wksFeuille As Worksheet
Dim strNoms As String
Set wkbClasseur = Workbooks("Introduction Programmation Objet.xlsm")
For Each wksFeuille In wkbClasseur.Worksheets
strNoms = strNoms & wksFeuille.Name & vbCrLf
Next
MsgBox strNoms
End Sub
Sub ModifLigne_1sur2()
Dim rngPlage As Range
Dim intLigne As Integer, intColonne As Integer
WorkSheets("Accueil").Select
Set rngPlage = Range("B2:D20")
For intLigne = 1 To rngPlage.Rows.Count
If (intLigne Mod 2 = 0) Then
For intColonne = 1 To rngPlage.Columns.Count
With rngPlage.Cells(intLigne, intColonne)
.Interior.ColorIndex = 6
With .Font
.Name = "Arial"
.Size = 10
.ColorIndex = 5
.Bold = True
End With
End With
Next intColonne
End If
Next intLign
End Sub
Sub GèreErreurSimple()
On Error GoTo Sortie_Sur_Erreur
Workbooks("Classeur N2.xlsx").Activate
Sortie_Sur_Erreur:
End Sub
Sub GèreErreurNumMessage()
On Error GoTo Sortie_Sur_Erreur
Workbooks("Classeur N2.xlsx").Activate
Sortie_Sur_Erreur:
If Err.Number = 9 Then
MsgBox "Le classeur N2.xlsx n'est pas ouvert"
Else
MsgBox "Activation du deuxième classeur"
End If
End Sub
Commentaire
Sub GèreErreurNumMessage2()
On Error GoTo Sortie_Sur_Erreur
Workbooks("Classeur N2.xlsx").Activate
' poursuite du traitement
MsgBox "Je poursuis d'autres actions car aucune erreur ne s'est produite."
Exit Sub 'Arrêt de la procédure --> si OK, le message d'erreur n'est pas affiché
Sortie_Sur_Erreur:
MsgBox "Ce classeur n'est pas ouvert"
End Sub
Option Explicit
Private WithEvents maMustang As FordMustang
Sub TestClasseMustang()
Dim variationVitesse As String
' Instanciation d'un objet de la classe FordMustang
Set maMustang = New FordMustang
With maMustang
'.Puissance = 200 ' erreur car propriété en lecture seule
.Immatriculation = InputBox("Quelle est l'immatriculation
de cette merveille ?")
MsgBox Prompt:="La Ford Mustang immatriculée " & .Immatriculation & "
est prête à démarrer"
' Boucle sur les changements de vitesse
Do While True
variationVitesse = InputBox(Prompt:="Accélérez ou
ralentissez par paliers (en km/h)" & vbCrLf & _
"nombre positif pour accélérer, négatif pour ralentir" & vbCrLf & _
"Cliquez sur Annuler pour terminer le voyage" & vbCrLf & _
VBA.IIf(.Vitesse = 0, "Vous êtes à l'arrêt", "Vous
roulez actuellement à " & _
.Vitesse & " km/h"), _
Title:="Conduite de la Mustang " & .Immatriculation, _
Default:=20)
If variationVitesse = "" Then
Exit Do
Else
.Vitesse = .Vitesse + VBA.CInt(variationVitesse)
If .Vitesse < 0 Then maMustang.Vitesse = 0
MsgBox Prompt:="La Ford Mustang " & .Immatriculation
& VBA.IIf(.Vitesse = 0, " est à l'arrêt", _
" roule à " & .Vitesse & " km/h."), Title:="Conduite
de la Mustang " & .Immatriculation
End If
Loop
.Vitesse = 0
MsgBox Prompt:="Le voyage est terminé. La Mustang " &
.Immatriculation & " est maintenant à l'arrêt", _
Title:="Conduite de la Mustang " & .Immatriculation
End With
End Sub
Introduction
Durée : 2 heure 05
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
1 Il peut y avoir :
.
a. plusieurs classeurs actifs en même temps.
b. un et un seul classeur actif.
c. au maximum 20 classeurs actifs en même temps.
2 Le classeur actif peut être contenu dans plusieurs fenêtres dont une seule
. est active :
a. oui
b. non
c. oui mais toutes les fenêtres sont actives
3 Un classeur peut être désigné par :
.
a. son index
b. son nom
c. une combinaison index - nom
4 La méthode Open pour ouvrir un classeur appartient :
.
a. à l’objet Workbook.
b. à la collection Workbooks.
c. à l’objet Application.
5 Les procédures d’événements des classeurs sont placées dans :
.
a. les modules.
b. la partie code des feuilles.
c. la partie déclaration des feuilles.
6 L’événement VBA pour exécuter du code automatiquement à l’ouverture
. du classeur est :
a. Workbooks_Open
b. Workbook_Open
c. Workbooks_Open_Auto
7 Il est possible de forcer l’enregistrement d’un classeur avant sa fermeture
. en gérant l’événement :
a. Workbook_BeforeClose
b. Workbooks_BeforeClose
8 La liaison des données peut être réalisée :
.
a. par Excel.
b. par programmation.
c. uniquement par programmation.
9 Les mises à jour sont possibles si les classeurs :
.
a. sont ouverts.
b. sont fermés.
Dans Excel, créez deux nouveaux classeurs. Enregistrez l’un d’entre eux sous le nom
de Classeurs. Créez la procédure NomClasseurActif qui affiche le nom du classeur
actif.
Exemple :
Énoncé 7.2 Afficher le classeur actif
Exercice 1
Créez la procédure NouvelleFenêtre qui affiche le classeur actif dans une deuxième
fenêtre sans aucune réorganisation particulière.
Exercice 2
Indice
Indice
Utilisez la méthode Add. Vérifiez dans l’aide en ligne de VBA s’il s’agit d’une méthode
de l’objet Workbook ou de la collection Workbooks.
Pour consulter la liste des classeurs ouverts, choisissez l’onglet Affichage, groupe
Fenêtre, bouton Changer de fenêtre.
C:\0.TEMPO\TestSimple.xlsx
Exemple :
Indice
ThisWorkbook.Path
Indice
Indice
WorkSheets("Feuil3").Select
ou :
WorkSheets(3).Select
Excel permet de lancer la mise à jour des calculs à la demande. Pour cet exercice,
choisissez l’option manuelle en sélectionnant l’onglet Fichier - Options - Formules
puis :
Créez une procédure événementielle qui force la mise à jour des calculs avant la
fermeture du classeur. Exemple :
Indice
Application.CalculateBeforeSave = True
Exemple :
Indice
Application.Calculate
Énoncé 7.13 Consolider des données à
partir de plusieurs classeurs
Durée estimative : 15 minutes
Fermez tous les classeurs. Créez trois nouveaux classeurs nommés Classeur
N1.xlsx, Classeur N2.xlsx et Classeur principal.xlsm. Bâtissez les tableaux suivants
sans données numériques pour Classeur principal.xlsm.
Classeur principal
Classeur N1
Classeur N2
Contraintes
Indice
Créez la procédure événementielle qui effectue la mise à jour des calculs dès
l’ouverture du classeur de consolidation.
Indice
strChemin = ThisWorkbook.Path
Créez la procédure LienPermanent qui établit une mise à jour permanente des
calculs.
Indice
Dans Excel, ajoutez un nouveau classeur nommé Menu et bâtissez le menu ci-après
dans la première feuille. Pour le premier élément, ajoutez directement avec Excel un
lien hypertexte. Pour les deux autres éléments, créez une procédure événementielle
sans lien hypertexte mais qui exécute la même action que celui-ci.
Indice
strAdresse = ActiveCell.Address
Auparavant, créez ces références, par exemple en incluant dans une formule des
informations présentes dans les classeurs N1 et N2.
Indice
Prérequis
1. b.
2. a.
3. a. et b.
4. b.
5. b.
6. b.
7. a.
8. a. et b.
9. a.
Sub NouvelleFenêtre()
ActiveWorkbook.NewWindow
End Sub
Exercice 2
Sub NouvelleFenêtreMosaique()
ActiveWorkbook.NewWindow
Windows.Arrange ActiveWorkbook:=True
End Sub
Important
Pour retrouver l’option par défaut de réaffichage en mosaïque pour tous les
classeurs ouverts, modifiez la valeur du paramètre ActiveWorkbook et relancez la
procédure.
Windows.Arrange.ActiveWorkbook:=False
Commentaire
Commentaire
Sub Auto_Open()
MsgBox ("Bonjour. Il est " & Time)
WorkSheets("Feuil3").Select
End Sub
Commentaire
La procédure peut être testée aussi bien avec l’impression directe qu’en mode
aperçu.
Commentaire
Commentaire
Note
Commentaire
Commentaire
Avec les réponses obtenues, il est facile de retrouver toutes les cellules où les
références externes sont utilisées.
Introduction
Durée : 1 heure 40
Mots-clés
Objectifs
Savoir manipuler la feuille active par programmation. Différencier feuille active et
classeur actif. Connaître et gérer les principaux événements auxquels réagissent les
feuilles de calcul. Se familiariser avec les principales propriétés et les méthodes des
feuilles de calcul.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent avoir plusieurs réponses) :
1. Il peut y avoir :
a. plusieurs feuilles actives en même temps.
b. une et une seule feuille active.
c. au maximum 20 feuilles actives en même temps.
2. Pour connaître le nom de la feuille active :
a. Sheet.Name
b. ActiveSheet.Name
c. ActiveSheet.Caption
3. La feuille active peut être contenue dans plusieurs fenêtres dont une
seule est active :
a. oui.
b. non.
c. oui mais toutes les fenêtres sont actives.
4. Méthode pour activer une feuille de calcul :
a. Activate
b. Open
c. First
5. Les procédures d’événements des feuilles de calcul sont placées dans :
a. les modules
b. la partie code des feuilles de calcul.
c. dans la partie code de l’objet ThisWorkbook.
6. L’événement feuille de calcul qui réagit dès qu’une cellule quelconque
est modifiée est :
a. Worksheet_SelectionChange
b. Worksheet_Change
c. Worksheet_Deactivate
7. Il est possible avec une procédure d’événements de feuille de calcul
d’écrire du code pour connaître :
a. l’adresse de la cellule qui a été modifiée.
b. l’adresse de la cellule active.
c. l’adresse de la future cellule active.
8. L’événement feuille de calcul Worksheet_Deactivate se produit lorsque
l’on désactive :
a. un classeur.
b. une feuille de calcul.
c. une feuille graphique.
9. Pour créer une nouvelle feuille de calcul, le type d’objet le plus approprié
est :
a. Worksheets
b. Sheets
c. Worksheet
10 Pour supprimer une feuille de calcul, on utilise :
.
a. Delete
b. Erase
c. Del
11 Une feuille est dupliquée avec la méthode :
.
a. Move
b. Copy
c. Add
12 Pour connaître le nombre de feuilles de calcul d’un classeur, il faut :
.
a. utiliser une boucle avec la propriété Count.
b. écrire la propriété Count après l’objet Worksheets.
c. écrire la propriété Count après l’objet Worksheet.
Dans Excel, créez un classeur nommé Feuilles de calcul. Créez ensuite la procédure
NomFeuilleActive qui donne le nom de la feuille de calcul active. Exemple :
Énoncé 8.2 Renommer la feuille active
Durée estimative : 5 minutes
Dans Excel, renommez les deux premières feuilles respectivement Note et Moyenne.
Créez ensuite la procédure Renommer qui renomme la troisième feuille de calcul
selon un nom saisi par l’utilisateur. Exemple :
Exemple :
Indice
Créez une procédure Aperçu qui présente un aperçu avant impression de la feuille
active.
Indice
Ne pas oublier de saisir une donnée quelconque dans la feuille avant de tester la
procédure.
Indice
Créez une procédure événementielle concernant la première feuille qui réagit dès que
l’on clique sur une cellule. Exemple :
Indice
With ActiveCell.Font
.Bold = True
.Size = 14
.ColorIndex = 5
End With
With Selection
.Interior.ColorIndex = 36
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Exemple :
Énoncé 8.8 Déclencher une action dès que
l’on double clique sur une cellule de la
feuille active
Durée estimative : 5 minutes
Résultat :
Fermez le classeur Suite Feuilles de calcul. Ajoutez un nouveau classeur sous Excel
et enregistrez-le sous le nom Fin Feuilles de calcul. Créez la procédure Ajout qui
ajoute à ce classeur une nouvelle feuille de calcul nommée Nouvelle ; celle-ci est
placée en dernière position.
Énoncé 8.10 Supprimer une feuille de calcul
Durée estimative : 5 minutes
Créez une procédure qui copie la première feuille après la dernière feuille.
Exemple :
, etc.
Indice
affiche dans cette feuille les noms de toutes les feuilles de calcul sous forme
de liste pour faciliter la lecture.
Exemple :
Indice
Worksheets(1)
Créez la procédure ChercherFeuille qui recherche une feuille dont on spécifie le nom.
Si la feuille est trouvée, elle devient la feuille active.
Exemple :
Énoncé 8.16 Protéger toutes les feuilles de
calcul
Durée estimative : 5 minutes
Créez la procédure Protection qui protège toutes les feuilles de calcul d’un classeur.
Prérequis
1. b.
2. b.
3. a.
4. a.
5. b.
6. b.
7. a. et b.
8. b.
9. c.
10. a.
11. b.
12. b.
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Créez un classeur avec Excel. Créez la procédure Activer qui active la cellule K2 de la
première feuille et y inscrit le texte "Cellule K2".
Classeur CellulesEtPlages.xlsm
Créez la procédure RécupFormule qui donne la formule contenue dans une cellule
donnée. Exemple pour la cellule K9 qui donne le cosinus d’un angle :
Indice
Exemple :
Indice
VBA.Chr(ActiveCell.Column + 64)
Créez la procédure Tout qui sélectionne toutes les cellules d’une feuille de calcul.
Créez la procédure Plage qui sélectionne toutes les cellules de la plage de cellules
B2 à E6 dans la feuille Feuil2.
Exercice 2
Idem que l’exercice 1 mais en utilisant une variable objet nommée. Créez pour cela la
procédure Plage2.
Commentaire
Indice
Application.Goto Reference:="Nom_Choisi"
Exemple :
Indice
Exemple :
Énoncé 9.14 Attribuer la formule d’une
cellule à une autre cellule
Durée estimative : 5 minutes
Dans la feuille Feuil1, saisissez les nombres ci-après. Utilisez dans Excel la fonction
SOMME pour obtenir le total dans la cellule K16. Créez ensuite la procédure
FormuleAutreCellule qui écrit en cellule K19 la même formule qu’en K16.
=$K$16
Indice
Exemple :
Exercice 2
Indice
Indice
Créez la procédure ListeZones qui affiche successivement les adresses de toutes les
zones d’une plage de cellules à sélections multiples.
Indice
Prérequis
1. a., b. et c.
2. b.
3. a. et c.
4. b., c. et d.
5. b. Par rapport à la cellule A1, Offset permet de sélectionner la cellule se
trouvant quatre lignes plus bas et deux colonnes à droite.
6. a. et b.
7. c.
8. b.
9. c.
10 a. et b.
.
11 a. et c.
.
12 b.
.
13 b.
.
Commentaire
Sub Plage()
Worksheets(2).Activate
Range("B2:E6").Select
End Sub
Exercice 2
Sub Plage2()
Dim rngZone As Range
Worksheets(2).Activate
Set rngZone = Range("B2:E6")
rngZone.Select
End Sub
Commentaire
Range("K19").Formula = Range("K16").Formula
Pour écrire la fonction Excel en français dans le code VBA, utilisez la propriété
FormulaLocal.
Range("K19").FormulaLocal = "=SOMME(K12:K15)"
Commentaire
Sub RechercheDansPlage()
Dim rngTableau As Range
Dim rngCellule As Range
Dim intNombre As Integer
Dim blnTrouvé As Boolean
Worksheets(1).Activate
Set rngTableau = Range("M6:N11")
intNombre = InputBox("Saisir le nombre à chercher")
For Each rngCellule In rngTableau.Cells
If rngCellule.Value = intNombre Then
rngCellule.Font.Bold = True
blnTrouvé = True
End If
Next rngCellule
If Not blnTrouvé Then
MsgBox ("Le nombre " & intNombre & " n'est pas dans le tableau.")
End If
End Sub
Commentaire
La recherche avec une structure répétitive est très lente pour de grandes plages de
données.
Exercice 2
Sub RechercheDansPlageFind()
Dim rngTableau As Range
Dim intNombre As Integer
Worksheets(1).Activate
Set rngTableau = Range("M6:N11")
intNombre = InputBox("Saisir le nombre à chercher")
rngTableau.Find(what:=intNombre, LookIn:=xlValues, _
lookat:=xlWhole).Select
ActiveCell.Font.Bold = True
End Sub
Commentaire
Mots-clés
Objectifs
Maîtriser les opérations de base et se familiariser avec les événements portant sur
les graphiques.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Dans Excel, ouvrez un nouveau classeur puis implantez le tableau ci-après dans la
feuille Feuil1. Créez ensuite la procédure CréerGraphiqueFeuille qui crée le
graphique suivant dans une feuille graphique :
Indice
ChartType = xlColumnClustered
Dans Excel, complétez le tableau avec les données du mois d’avril. Créez ensuite la
procédure EtendreSérieGrapheIncorporé qui ajoute cette nouvelle série au graphique
incorporé dans la feuille Feuil1.
Énoncé 10.6 Étendre la source de données
d’un graphique implanté dans une feuille
graphique
Durée estimative : 10 minutes
Vous pouvez utiliser ChartWizard, méthode simple pour modifier les propriétés d’un
graphique.
Gallery:=xl3DBar
Indice
Utilisez la propriété Path pour obtenir le chemin du dossier où se trouve le dossier
Excel.
Créez la procédure événementielle qui affiche le message suivant dès que la feuille
graphique Graphe Ventes est activée.
Classeur Graphiques.xlsm
On affichera dans le titre du graphique le descriptif du type, pris dans la 3ème colonne
de la table des types.
Prérequis
1. b.
2. a.
3. b.
4. a.
5. b.
6. a.
7. a.
8. a.
9. a., b. et c.
Commentaire
Introduction
Durée : 1 heure 05
Mots-clés
Utiliser des fonctions VBA dans les feuilles de calcul et utiliser les fonctions Excel
dans le code VBA.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
1 La plupart des fonctions de calcul Excel peuvent être utilisées avec VBA :
.
a. directement.
b. par le biais de l’objet WorksheetFunction.
2 Propriété qui permet d’utiliser les fonctions Excel en français dans le code
. VBA :
a. Formula
b. FormulaLocal
3 Certaines fonctions de calcul Excel en français :
.
a. ont leur équivalent dans Visual Basic.
b. ont le même nom qu’une fonction VBA mais produisent des résultats
différents.
4 Séparateur d’arguments des fonctions VBA :
.
a. le point-virgule.
b. le trait d’union.
c. la virgule.
5 Dans le code VBA, il est possible d’utiliser les fonctions Excel :
.
a. uniquement en anglais.
b. uniquement en français.
c. en anglais ou en français.
Énoncé 11.1 Calculer une commission dans
une feuille de calcul Excel avec une fonction
VBA
Exercice 1
Construisez dans Excel le tableau ci-dessous, sans aucune saisie dans la cellule B3.
Créez ensuite la fonction VBA Commission. Utilisez cette fonction dans le tableau
Excel.
Exercice 2
Construisez dans Excel le tableau ci-dessous, sans aucune saisie dans la cellule B8.
Créez ensuite la fonction VBA CommissionAvecFixe. Utilisez cette fonction dans le
tableau Excel.
Énoncé 11.2 Calculer le prix HT à partir du
taux de TVA et du prix TTC avec une
fonction VBA
Durée estimative : 5 minutes
Construisez dans Excel le tableau ci-dessous, sans aucune saisie dans la cellule B12.
Créez ensuite la fonction VBA PrixHT. Utilisez cette fonction dans le tableau Excel.
Construisez dans Excel le tableau ci-dessous, sans aucune saisie dans la cellule E4.
Créez ensuite la fonction VBA Placement. Utilisez cette fonction dans la cellule E4.
Énoncé 11.4 Rechercher le minimum dans
une plage de cellules avec une fonction
Excel dans du code VBA
Durée estimative : 10 minutes
Exemple :
Indice
Exercice 2
Exemple :
Indice
Dans une feuille de calcul vierge, saisissez les cellules A1, A2 et A3 en insérant
volontairement des espaces supplémentaires entre les mots.
Exemple :
Indice
Utilisez la fonction locale Excel SUPPRESPACE().
Prérequis
1. b.
2. b.
3. a. (exemple : Alea - Rnd)
b. (exemple : Log)
4. c.
5. c.
Commentaire
N’oubliez pas que le séparateur d’arguments d’Excel est le point virgule (sauf pour les
plages qui requièrent le séparateur :). Pour utiliser la fonction VBA dans Excel, vous
devez donc saisir :
=Commission(B1;B2)
Exercice 2
Sub NombreAléatoireFr()
Worksheets("Feuil1").Range("H10").FormulaLocal = "=ALEA()*100"
End Sub
Exercice 2
Sub NombreAléatoireAng()
Worksheets("feuil1").Range("H11").Formula = "=RAND()*100"
End Sub
Commentaire
Sub NombreAléatoire3()
Worksheets("feuil1").Range("H12").Formula = VBA.Rnd() * 100
End Sub
Introduction
Durée : 1 heure 45
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Sub AfficheFormulaire()
frmBoîtesWindows.Show
End Sub
Énoncé 12.4 Appeler la boîte de dialogue
"Couleurs" de Windows
Durée estimative : 10 minutes
Note
Pour réaliser et comprendre ce TP, consultez la partie Aide sur les API Windows du
chapitre Introduction.
Indice
Créez la procédure ChoixBoutons qui affiche la boîte de dialogue ci-après avec les
boutons Oui - Non.
Résultat :
Créez la procédure BoucleSaisie qui calcule la racine carrée d’un nombre tant que
l’utilisateur entre un nombre strictement positif. Si la saisie est correcte, la procédure
affiche la racine carrée du nombre entré. Si l’utilisateur saisit un nombre négatif ou
clique sur le bouton Annuler, la procédure s’arrête.
Exemple :
Indice
Créez la procédure CouleurCellules qui présente, à partir d’un bouton placé sur une
feuille de calcul, la boîte de dialogue intégrée permettant de choisir une nouvelle
couleur pour une plage de cellules.
Indice
Prérequis
1. a.
2. b. et c.
3. a. et c.
4. b.
5. a. et b.
6. a.
7. b.
Commentaire
Commentaire
Option Explicit
' CHOOSECOLOR structure
' https://msdn.microsoft.com/en-us/library/windows/desktop/ms646830(v=vs.85).aspx
Private Type StructureChoixCouleur ' Structure utilisée comme argument
' de la fonction ChooseColorA
lStructSize As Long ' longueur de la structure en octets (calculée)
hwndOwner As LongPtr ' Le handle de la UserForm
hInstance As LongPtr ' par défaut 0
rgbResult As Long ' résultat de la fonction = valeur de la couleur
lpCustColors As String ' chaîne Unicode = les couleurs de la palette
flags As Long ' constantes fixant le style de la boîte de dialogue
lCustData As LongPtr
lpfnHook As LongPtr
lpTemplateName As String
End Type
' Constantes permettant de fixer le style de la boîte de dialogue standard
Private Const CC_RGBINIT = &H1
Private Const CC_FULLOPEN = &H2
Private Const CC_PREVENTFULLOPEN = &H4
Private Const CC_SHOWHELP = &H8
Private Declare PtrSafe Function APIChoixCouleur Lib "comdlg32.dll" _
Alias "ChooseColorA" (pChoosecolor As StructureChoixCouleur) As Long
Private CustomColors() As Byte ' déclaration du tableau des couleurs
Commentaire
Note
par :
Note
Pour que l’accès soit possible à partir de tout module du projet, il suffit de rendre
tous les accès publics.
Introduction
Durée : 1 heure 35
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Note
Dans l’IDE, dessinez un second formulaire tel que ci-après (ou téléchargez-le).
Indice
Indice
Exemple :
Indice
Indice
Indice
Indice
RGB(0, 0, 255)
Pour la couleur de fond de la zone de texte :
fmScrollBarsVertical
Note
Indice
Prérequis
1. a.
2. a., b. et c.
3. a., c. et d.
4. a. et b.
5. c.
6. c.
Corrigé 13.1 Afficher un formulaire
Sub AfficherFrmVide()
frmVide.Show
End Sub
Commentaire
La procédure doit être écrite dans la zone de code du formulaire. Dans l’IDE, effectuer
un double clic sur le formulaire ou un clic droit puis choisir Code. Par défaut, un
formulaire est affiché en mode modal. Il faut alors le fermer pour pouvoir accéder à
un autre formulaire ou une autre fenêtre.
Sub AfficherFrmContrôles()
frmContrôles.Show
End Sub
Corrigé 13.4 Fermer un formulaire et
libérer la mémoire
Private Sub cmdQuitter_Click()
Unload Me
End Sub
Commentaire
La procédure doit être écrite dans la zone de code du formulaire contenant le bouton.
En mode VBE, effectuez un double clic sur le bouton Quitter ou un clic droit puis
choisissez Code.
Commentaire
Il ne s’agit pas d’une procédure événementielle. On peut donc l’écrire dans n’importe
quel module.
Introduction
Durée : 3 heures 30
Mots-clés
contrôle, bouton de commande, zone de liste, liste modifiable, zone de texte, intitulé,
label, bouton à option, case à cocher, objet multipage, image, méthode, propriété,
événement, contrôle ActiveX
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Note
formulaire frmAjout
Indice
Formulaire frmGénéral
Indice
Exemple :
Exemple :
Énoncé 14.5 Faire réagir les contrôles à la
frappe clavier
Durée estimative : 10 minutes
Créez la procédure événementielle qui affiche un message dès que la lettre "a" est
saisie dans l’une des zones de texte.
Indice
Noms des contrôles utilisés :
Exemple :
Formulaire frmComboBox
Exemple :
Indice
Résultat :
Énoncé 14.12 Utiliser une liste déroulante à
deux colonnes et affecter le choix à une
plage Excel
Durée estimative : 15 minutes
Formulaire frmLD2Colonnes
Exemple :
Indice
Formulaire frmOptionàCocher
Exemple :
Indice
Exemple :
Indice
Formulaire frmGénéral
Indice
Rédigez la procédure "secrète" Sub Maintenance() dont le contenu peut être, dans le
cas de l’exercice, un simple MsgBox.
Formulaire frmGénéral
Formulaire frmGénéral
Dans le formulaire frmGénéral, remplissez la zone de texte txt1 avec la date du jour
et l’heure avant l’affichage du formulaire et présentez ce contenu présélectionné à
l’utilisateur. Placez le focus sur txt1 pour pouvoir effectuer une modification
éventuelle dès l’affichage du formulaire.
Indice
Formulaire frmImages
Indice
Prérequis
1. a., b. et c.
2. a.
3. c.
4. a. et b.
5. a. et b.
6. a.
7. b.
8. b. et c.
9. b. et c.
10. a.
Commentaire
Commentaire
Introduction
Durée : 1 heure 30
Mots-clés
Objectifs
Enrichir son application avec des ressources externes. Exploiter les possibilités des
autres applications Microsoft dans Excel. Distinguer objet incorporé et objet lié.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Note
Pour réaliser les exercices, ouvrez le classeur Objets Liés Incorporés.xlsm fourni en
téléchargement. Le dossier contenant ce classeur possède un sous-dossier
Ressources Projet.
Ressources :
Paradis.jpg
Ouvrez un nouveau classeur. Créez la procédure PhotoIncorporée qui incorpore cette
photo (Paradis.jpg dans le dossier Ressources Projet) d’un petit coin de paradis
dans la feuille Feuil1. Pour le coin supérieur gauche, prenez la cellule B2 pour
positionner la photo.
Exemple :
Note
Résultat :
Note
Ce document étant incorporé dans Excel, il n’est pas visible à l’extérieur de celui-ci.
Le document est externe à Excel et visible par les autres applications. Celui-ci peut
être modifié de manière interne ou externe.
Créez la procédure VidéoIncorporée qui incorpore une vidéo à Excel avec une simple
représentation sous forme d’icône. Un double clic sur l’icône déclenche la séquence
vidéo. Pour le coin supérieur gauche de l’objet OLE, prenez la cellule E2.
Énoncé 15.6 Lier une vidéo
Durée estimative : 10 minutes
Créez la procédure VidéoLiée qui lie une vidéo à Excel avec présentation de la
première image. Un double clic sur l’image déclenche la séquence vidéo. Pour le coin
supérieur gauche de l’objet OLE, prenez la cellule E8.
Énoncé 15.7 Créer un menu pour les objets
liés ou incorporés
Durée estimative : 25 minutes
Formulaire frmMenu
Sub CheminRessources()
strChemin = ThisWorkbook.Path & "\Ressources Projet\"
End Sub
Commentaire
Le chemin indiqué ici précise que les ressources (photos, vidéos) sont dans le sous-
dossier Ressources Projet.
Sub PhotoIncorporée()
Call CheminRessources
With Worksheets(1)
.Range("B2").Select
.OLEObjects.Add Filename:=strChemin & "Paradis.jpg", _
Link:=False
End With
End Sub
Corrigé 15.2 Incorporer WordPad dans
Excel
Sub IncorporeWordPad()
Dim strCheminWordPad As String
'====================================================
' La valeur de la variable strCheminWordPad
' doit être adaptée à votre installation
'====================================================
strCheminWordPad = "C:\Windows\WinSxS\wow64_microsoft-windows-wordpad_
31bf3856ad364e35_10.0.19041.1_none_ee00310940a3cd37\wordpad.exe"
Worksheets(1).Range("B13").Select
Worksheets(1).OLEObjects. _
Add(ClassType:="Wordpad.Document.1", _
DisplayAsIcon:=True, IconFileName:=strCheminWordPad, _
IconIndex:=0, IconLabel:="Document WordPad").Activate
End Sub
Sub Menu()
frmMenu.Show
End Sub
Introduction
Durée : 2 heures 45
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après (certaines questions peuvent nécessiter plusieurs réponses) :
Note
Note
Indice
Bilan.docx
Société FMP
Indice
Titre : centré
Taille de police : 20
Indice
Exemple :
Société FMP
Ceci est la suite
Note
Selon votre version de Windows et les protections installées, vous aurez à confirmer
l’envoi.
Note
BDClients.accdb
Note
Note
Exemple :
Énoncé 16.13 Importer les enregistrements
d’une base de données en utilisant une
liaison ODBC
Durée estimative : 15 minutes
Aide ODBC.pdf
Indice
Une QueryTable doit être créée avec deux arguments obligatoires, Connection et
Destination.
Prérequis
1. a.
2. b.
3. a., b. et c.
4. a.
5. a.
6. b.
7. c.
8. a. et b.
9. c.
10. b.
11. b.
12. a. et b.
Commentaire
Le mot-clé New est utilisé pour créer une nouvelle instance de la classe.
Sub Chemin()
strchemin = ThisWorkbook.Path & "\Ressources\"
End Sub
Sub CréerDocWord()
Dim wd As Word.Application
Dim docWord As Word.Document
Call Chemin
Set wd = New Word.Application
Set docWord = wd.Documents.Add
With docWord.Sections(1).Range
.Text = "Société FMP" & Chr(10)
.Font.Bold = True
.Font.Size = 20
.ParagraphFormat.Alignment = wdAlignParagraphCenter
End With
With docWord
.SaveAs (strchemin & "Bilancréé.docx")
.Close savechanges:=wdDoNotSaveChanges
End With
wd.Quit
Set docWord = Nothing
Set wd = Nothing
MsgBox strchemin & "Bilancréé.docx a été créé"
End Sub
Note
N’oubliez pas de libérer la mémoire. Pour cela, affectez la valeur Nothing aux
variables objets.
Note
Note
Une occurrence d’Access est créée mais n’est pas visible. Dans la pratique, la
création d’une instance d’Access est peu utilisée. On préfère en général utiliser le
moteur Jet grâce à la technique ADO (cf. ci-après).
Sub ImportEnrBDdansExcel()
Dim qtRésultatRequête As QueryTable
Dim strSQL As String
Dim strConnexion As String
Call Chemin
'=========================================================
strSQL = "Select * From Clients"
strConnexion = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=" & strchemin & "BDClients.accdb"
'=========================================================
With ActiveSheet.QueryTables. _
Add(Connection:=strConnexion, _
Destination:=Range("E2"), Sql:=strSQL)
.Refresh
End With
MsgBox "Requête " & strSQL & " effectuée"
End Sub
Note
La valeur de l’argument Provider dépend de votre version d’Access.
'===================================================================
strSQL = "Select Numéro, Nom, Prénom From Clients
'Where Nom Like Durand'"
'===================================================================
'========================================================
strSQL = "Select Clients.Numéro, Clients.Nom," _
& "Clients.Prénom, Commandes.Montant, Commandes.Date" _
& " From Clients, Commandes" _
& " Where Clients.Numéro = Commandes.NuméroClient" _
& " And Commandes.Montant > 1000"
'========================================================
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après :
Note
Le classeur ne doit pas être protégé. Dans le cas contraire, VBA vous informe du
problème.
Note
Pour les exercices qui suivent, nous continuerons à utiliser le classeur Web.xlsm.
Note
Cliquez sur Parcourir pour mettre à jour le chemin du fichier .htm, en fonction de
l’arborescence de votre disque dur. Rappel de la structure des dossiers à créer :
Créez la procédure PublieMAJ_Classeur qui met à jour le classeur publié en tant que
page web. Testez la procédure en suivant les étapes suivantes :
1. Faites Fichier - Enregistrer sous… et choisissez Type : Page Web (*.htm,
*.html).
Cochez le bouton Classeur entier puis cliquez sur le bouton Modifier le
2.
titre.
3. Saisissez ClasseurWeb comme titre.
4. Cliquez sur le bouton Publier.
Dans la nouvelle boîte de dialogue, décochez la case Republier
5.
automatiquement....
6. Cliquez sur le bouton Publier.
7. Effectuez des modifications sur les différentes feuilles.
8. Enregistrez le classeur.
9. Lancez la procédure PublieMAJ_Classeur.
10 Vérifiez dans votre navigateur Internet que les mises à jour ont bien été
. effectuées sur la page web (appuyez sur [F5] pour l’actualiser).
Créez la procédure PublieMAJ_Feuille qui met à jour la page web liée à la première
feuille du classeur. Pour tester la procédure, procédez comme précédemment, en
donnant comme titre PageExcelWeb.
À ce stade, trois pages web sont présentes. La première est liée au classeur, la
deuxième à la première feuille de ce classeur et la troisième à la plage de données du
tableau Piscine. Créez la procédure PublieMAJBoucle qui met à jour en même temps
ces trois pages web. Testez la procédure. N’oubliez pas d’appuyer sur la touche [F5]
pour réactualiser l’affichage.
Indice
La propriété SourceType de l’objet à publier pour spécifier une plage de données est
xlSourceRange.
Créez la procédure LienInternet qui ajoute à la cellule E29 un lien hypertexte vers le
site des Éditions ENI (http://www.editions-eni.fr/).
Créez la procédure ExtraireCours qui extrait un cours de bourse, mis à jour en temps
réel, sur une page web.
Indice
Prérequis
1. b.
2. c.
3. a.
4. b.
5. c.
Sub Chemin()
strChemin = ActiveWorkbook.Path
End Sub
Sub WebStatique1()
Dim strCheminRessources As String
Call Chemin
strCheminRessources = strChemin & _
"\Ressources\Web Statique\"
' ouverture du classeur à transformer en page html
Workbooks.Open Filename:=strCheminRessources _
& "\Exemple.xlsx"
ActiveWorkbook.SaveAs Filename:=strCheminRessources _
& "Classeur Web Statique 1.htm", _
FileFormat:=xlHtml
MsgBox "Classeur " & ActiveWorkbook.Name & " enregistré."
ActiveWorkbook.Close savechanges:=False
End Sub
Note
Un clic droit sur le tableau du document HTML permet d’exporter les données vers un
classeur Excel.
Introduction
Durée : 1h30
Mots-clés
Objectifs
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après :
Exemple de résultat :
Prérequis
1. c.
2. a.
3. a.
4. d.
5. a.
6. b.
7. c.
Corrigé 18.1 Gérer et utiliser les unités
logiques
Sub ListeUnitésLogiques()
Dim fso As Scripting.FileSystemObject
Dim intLigne As Integer
Dim drvUnité As Scripting.Drive
' Instanciation de l'objet FileSystemObject
Set fso = New Scripting.FileSystemObject
With Worksheets("Unités")
.Range("A1").CurrentRegion.Offset(1, 0).ClearContents
intLigne = 2
' Balayage de la collection des unités logiques
For Each drvUnité In fso.Drives
.Cells(intLigne, 1).Value = drvUnité.DriveLetter
' Test pour déterminer si l'unité logique est prête
If drvUnité.IsReady Then
.Cells(intLigne, 2).Value = drvUnité.AvailableSpace
.Cells(intLigne, 3).Value = drvUnité.FileSystem
.Cells(intLigne, 4).Value = drvUnité.VolumeName
' Détermination du type d'unité logique
' Les types sont récapitulés à l'adresse suivante :
' https://docs.microsoft.com/en-us/office/vba/
language/reference/user-interface-help/drivetype-constants
Select Case drvUnité.DriveType
Case 0
.Cells(intLigne, 5).Value = "Inconnu"
Case 1
.Cells(intLigne, 5).Value = "Disque mobile"
Case 2
.Cells(intLigne, 5).Value = "Disque fixe"
Case 3
.Cells(intLigne, 5).Value = "Disque réseau"
Case 4
.Cells(intLigne, 5).Value = "CD ROM"
Case 5
.Cells(intLigne, 5).Value = "Disque RAM"
End Select
End If
intLigne = intLigne + 1
Next drvUnité
End With
MsgBox "Listage des unités terminé !"
End Sub
Commentaire
Le mot-clé New est utilisé pour créer une nouvelle instance de la classe.
Corrigé 18.2 Créer, gérer et supprimer les
dossiers et les sous-dossiers
Sub CréerMonde()
Dim fso As Scripting.FileSystemObject
Dim drvUnité As Scripting.Drive
Dim strRacine As String
Dim intNbContinents As Integer
Dim intNoContinent As Integer
Dim intNoPays As Integer
Dim intNbPays As Integer
Dim rngPays As Range
Dim strContinent As String
Dim strPays As String
Set fso = New Scripting.FileSystemObject
Set rngPays = Worksheets("Pays").Range("A1").CurrentRegion
intNbContinents = rngPays.Columns.Count
intNbPays = rngPays.Rows.Count
' Création du dossier Monde
fso.CreateFolder (ThisWorkbook.Path & "\Monde")
' Balayage des continents
For intNoContinent = 1 To intNbContinents
' Création du dossier continent
strContinent = rngPays.Cells(1, intNoContinent).Value
fso.CreateFolder (ThisWorkbook.Path & "\Monde\" & strContinent)
' Balayage des pays
For intNoPays = 2 To intNbPays
strPays = rngPays.Cells(intNoPays, intNoContinent).Value
If strPays <> "" Then
fso.CreateFolder (ThisWorkbook.Path & "\Monde\" &
strContinent & "\" & strPays)
End If
Next intNoPays
Next intNoContinent
MsgBox "Création de l'arborescence des pays terminée !"
End Sub
Note
N’oubliez pas de libérer la mémoire. Pour cela, affectez la valeur Nothing aux
variables objets.
Option Explicit
Private dicFonctions As Scripting.Dictionary
______________________________________________________________
Private Sub cmdQuitter_Click()
Unload Me
End Sub
______________________________________________________________
Private Sub lstFonctions_Click()
lblFonctionAnglais.Caption =
dicFonctions(lstFonctions.List(lstFonctions.ListIndex))
End Sub
______________________________________________________________
Private Sub UserForm_Initialize()
Dim rngFonction As Range
Set dicFonctions = New Scripting.Dictionary
' Balayage des fonctions Excel en français
For Each rngFonction In Worksheets("FonctionsExcel").Range("A1").
CurrentRegion.Columns(1).Cells
' Garniture de la zone de liste
lstFonctions.AddItem rngFonction.Value
' Garniture du dictionnaire
dicFonctions.Add Key:=rngFonction.Value,
Item:=rngFonction.Offset(0, 1).Value
Next rngFonction
' On pointe sur le 1er élément de la liste
lstFonctions.ListIndex = 0
lblFonctionAnglais.Caption = dicFonctions(lstFonctions.List(0))
End Sub
Durée : 2 heures
Mots-clés
Objectifs
Utiliser une application VBA Excel pour tirer parti des fichiers utilisant le format
d’échange de données XML.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après :
Fichier Exemple.xlsx
Fichier Clients.xml
Utilisez le fichier Clients.xml placé dans le sous-dossier \Ressources\Documents
XML\. Créez la procédure ImportDonnéesXML qui réalise l’importation des données
de ce fichier dans la feuille de calcul Données XML Importées.
Note
Avant l’importation, il faut supprimer tous les mappages et toutes les listes
concernés du classeur.
Créez la procédure ExportXLSenXML qui exporte cette liste modifiée au format XML
dans le dossier Documents XML.
Créez la procédure OuvreXML qui ouvre directement dans Excel Microsoft 365 un
fichier natif XML. On prendra comme exemple le fichier RANDO.gpx présent dans le
dossier Documents XML.
Indices
Les contenus des balises et attributs <name>, lat (latitude en degrés décimaux), lon
(longitude en degrés décimaux), <ele> (altitude) et <time> (date et heure) sont à la
discrétion du programmeur. Ces données seront prises dans des cellules Excel d’une
page dédiée
Créez la procédure NomRando qui lit la valeur renseignée dans la balise <name>
contenue dans la balise <metadata> elle-même contenue dans la balise <gpx>. On
utilisera les données du fichier RANDO.gpx.
Indice
Utilisez la bibliothèque d’objets Microsoft XML V6.0, à référencer dans VBA par
Outils - Références, pour utiliser les objets XML.
Sub SupprimeMapEtListeXML()
Dim MapXML As XmlMap
Dim lo As ListObject
' Supprime tous les mappages du classeur
' et toutes les listes de la feuille Données XML Importées
For Each MapXML In ActiveWorkbook.XmlMaps
MapXML.Delete
Next MapXML
For Each lo In ActiveWorkbook. _
Worksheets("Données XML Importées").ListObjects
lo.Delete
Next lo
End Sub
Sub ImportDonnéesXML()
Dim MapXML As XmlMap
Dim strCheminRessources As String
Call Chemin
strCheminRessources = strChemin & _
"\Documents XML\"
Call SupprimeMapEtListeXML
ActiveWorkbook.XmlImport _
URL:=strCheminRessources & "Clients.xml", _
ImportMap:=MapXML, Overwrite:=True, _
Destination:=Worksheets("Données XML Importées").Range("A1")
MapXML.Name = "Clients"
MsgBox "Données du fichier clients.xml importées"
End Sub
Introduction
Durée : 1 heure 40
Mots-clés
Objectifs
Utiliser des API Windows dans une application VBA Excel Microsoft 365 pour
accéder aux fonctionnalités les plus fines du système d’exploitation.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions
ci-après :
Les déclarations des fonctions API sont disponibles en téléchargement sous le nom
de fichier : Win32API_PtrSafe.TXT
Fermez tous les classeurs ouverts. Ouvrez un nouveau classeur. Créez une
procédure événementielle faisant en sorte qu’un bip soit émis chaque fois que l’on
clique sur une cellule de la feuille Feuil1.
Formulaire frmPageMotdePasse
Complétez ces deux procédures de façon à afficher pour chacune d’entre elles le
temps d’exécution.
Créez une procédure Liste_fenêtres qui inscrit dans une feuille Excel vierge et active :
Prérequis
1. a.
2. c.
3. a.
Corrigé 20.1 Générer un son bref (bip)
Dans la partie déclarations du module de la feuille Feuil1 :
private Declare PtrSafe Function Beep Lib "kernel32" (ByVal dwFreq As Long, _
ByVal dwDuration As Long) As Long
Commentaire
La déclaration peut aussi être mise dans un module standard. Il faut alors la déclarer
publique pour qu’elle puisse être atteinte par la procédure événementielle de la feuille
Feuil1.
Code de la procédure :
Sub Types_Unités_Logiques()
Dim lngMasqueUnités As Long
Dim strUnités As String
Dim strUneUnité As String
Dim intNoUnité As Integer
Dim strtype As String
lngMasqueUnités = GetLogicalDrives
strUnités = "Unités logiques:" & vbCrLf
For intNoUnité = 0 To 25
If (lngMasqueUnités And 2 ^ intNoUnité) <> 0 Then
strUneUnité = VBA.Chr$(65 + intNoUnité)
' Détermination du type d'unité
'-------------------------------------------
Select Case GetDriveType(strUneUnité & ":\")
Case 2
strtype = "disque amovible"
Case 3
strtype = "Disque fixe"
Case 4
strtype = "Disque réseau"
Case 5
strtype = "Cd-Rom"
Case 6
strtype = "Disque Mémoire"
Case Else
strtype = "Type inconnu"
End Select
strUnités = strUnités & strUneUnité & " : " & _
strtype & vbCrLf
End If
Next intNoUnité
MsgBox strUnités
End Sub
Commentaire
Sub RemplitUne_a_Une()
' Remplir une à une les cellules A1 à A10000
Dim une_cellule As Range
Dim topDépart As Long
Dim topFin As Long
topDépart = GetTickCount
For Each une_cellule In Range("A1:A10000").Cells
une_cellule.Value = "Editions ENI"
Next une_cellule
topFin = GetTickCount64
MsgBox "durée remplissage une à une : " & (topFin - topDépart) / 1000 & " sec."
End Sub
Sub Remplit_Global()
' Remplir globalement les cellules A1 à A10000
Dim topDépart As Long
Dim topFin As Long
topDépart = GetTickCount
Range("A1:A10000").Value = "Editions ENI"
topFin = GetTickCount
MsgBox "durée remplissage global : " & (topFin - topDépart) / 1000 & " sec."
End Sub
Sub Dossiers_système()
Dim strTEMP As String
Dim strSystème As String
strTEMP = Space$(250)
GetTempPath 251, strTEMP
strTEMP = Left(strTEMP, InStr(strTEMP, Chr(0)) - 1)
strSystème = Space$(250)
GetSystemDirectory strSystème, 251
strSystème = Split(strSystème, Chr(0))(0)
MsgBox "Dossier temporaire : " & strTEMP & vbCrLf & _
"Dossier système : " & strSystème
End Sub
Sub Liste_fenêtres()
intLigne = 1
Call EnumWindows(AddressOf EnumérationFenêtres, 0)
MsgBox "Fin d'énumération"
End Sub
Function EnumérationFenêtres(ByVal lngHandle As Long,
ByVal lngParamètres As Long) As Long
Dim strTitre As String
Dim lngLongueurTitre As Long
' Valeur du handle de la fenêtre
ActiveSheet.Cells(intLigne, 1).Value = lngHandle
' Détermination du titre
strTitre = VBA.Space(GetWindowTextLength(lngHandle) + 1)
lngLongueurTitre = GetWindowText(lngHandle, strTitre,
VBA.Len(strTitre))
strTitre = VBA.Left(strTitre, lngLongueurTitre)
ActiveSheet.Cells(intLigne, 2).Value = strTitre
intLigne = intLigne + 1
' Résultat de la fonction forcé à True
' pour continuer l'énumération
EnumérationFenêtres = True
End Function
Introduction
Durée : 1 heure 10
Mots-clés
Objectifs
1 Propriété qui permet d’utiliser les fonctions Excel en français dans le code
. VBA :
a. Formula
b. FormulaLocal
2 La propriété Address de l’objet Range renvoie une valeur de type :
.
a. Integer
b. String
3 PivotTables représente la collection des :
.
a. tableaux croisés dynamiques.
b. objets contenus dans un tableau croisé dynamique.
4 Name est une propriété de :
.
a. PivotTables
b. PivotTable
5 Présentation d’un champ d’un tableau croisé dynamique en tant
. qu’étiquette de colonne :
a. ColumnField
b. xlColumnField
c. ColumnHeads
6 Méthode pour ajouter un champ de données à un tableau croisé
. dynamique :
a. AddDataField
b. AddField
Classeur Exemple.xlsm
Indice
Différentes fonctions Excel sont disponibles pour effectuer une recherche. Vous
pouvez par exemple faire appel aux fonctions INDEX et EQUIV.
Utilisez la propriété FormulaLocal pour pouvoir intégrer les fonctions Excel dans le
code VBA. Revoyez si nécessaire le chapitre « Échanges de fonctions entre Excel et
VBA ».
Énoncé 21.2 Rechercher une valeur avec
doublons dans une plage de données
Durée estimative : 15 minutes
Classeur Exemple.xlsm
Indice
Vous disposez dans la feuille Commandes d’un tableau (5 colonnes par 800 lignes)
regroupant les commandes réalisées sur trois ans. Écrivez les procédures
permettant d’afficher dans le formulaire le total en fonction du choix du représentant
et du pays.
Indice
Classeur Exemple.xlsm
Créez la procédure Pays qui ajoute au TCD le champ Pays en tant qu’étiquette de
colonne. Votre procédure devra comporter un appel à la fonction ExisteTCD, chargée
de vérifier auparavant la présence effective du TCD.
Énoncé 21.6 Gérer les champs de valeurs
Durée estimative : 5 minutes
Prérequis
1. b.
2. b.
3. a.
4. b.
5. b.
6. a.
Introduction
Mots-clés
Objectifs
Note importante
Créez la procédure Tout_CAC40 qui récupère dans la cellule active le contenu d’une
partie de page web correspondant au tableau instantané des valeurs du CAC40.