0% ont trouvé ce document utile (0 vote)
48 vues110 pages

Cours Excel VBA

Le document présente une initiation au langage de programmation VBA (Visual Basic for Applications) utilisé pour automatiser des tâches dans les applications Office, notamment Excel. Il décrit l'environnement de développement intégré (IDE) pour coder des macros, les étapes pour configurer Excel pour le codage, et les éléments fondamentaux du langage VBA. Enfin, il souligne l'importance de la sécurité lors de l'utilisation de macros et fournit des conseils pour apprendre à coder efficacement.

Transféré par

88kcvznp22
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
48 vues110 pages

Cours Excel VBA

Le document présente une initiation au langage de programmation VBA (Visual Basic for Applications) utilisé pour automatiser des tâches dans les applications Office, notamment Excel. Il décrit l'environnement de développement intégré (IDE) pour coder des macros, les étapes pour configurer Excel pour le codage, et les éléments fondamentaux du langage VBA. Enfin, il souligne l'importance de la sécurité lors de l'utilisation de macros et fournit des conseils pour apprendre à coder efficacement.

Transféré par

88kcvznp22
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

VBA – INITIATION : Présentation

En quelques mots :

VBA pour : Visual Basic Applications :


- un langage de programmation, le Visual Basic => pour les Applications Office
- un Environnement de Développement Intégré (EDI / IDE)

En VBA on met au point des macros, encore appelées applications ou programmes.

Ces macros sont ‟attachées” aux applications Office, plus précisément à un document d’Office
- attachée à un classeur Excel, Une application VBA ne peut pas se lancer si
- attachée à un document Word, aucun des produits Office n’est installé

- attachée à une présentation Powerpoint, …

Une macro, ou application VBA, est un ‟texte” en langage spécial (le VBA) composé d’éléments :
- commandes,
VBA et son IDE sont proposés ‟en standard”
- instructions, avec toute applications Office
- objets spéciaux (tels que les interfaces)

L’ensemble de ce qui est ‟fait” en VBA et attaché à un classeur Excel se nomme le ProjetVBA (VBAProject)
ainsi, deux fichiers Excel différents auront chacun leur ProjetVBA.

L’ensemble de ces termes seront explicités par la suite, de façon pratique.

Méthode de travail : nous allons alterner entre exercices pratiques et éléments théoriques.
1
VBA – INITIATION : Parcours pratique

1°) Observons Excel :

- Est-il configuré pour coder du VBA ?

Ici, non. Car l’onglet Développeur n’est pas présent dans le ruban.

Allons dans le menu :  Fichier  Options  Personnaliser le ruban

Avant de débuter un cas pratique, commençons par vérifier que les outils de codage (écriture) des macros sont accessibles…

2
Étape de réglage préliminaire

Il faut que l’onglet principal Développeur soit coché !


Ici, il est décoché.

3
Étape de réglage préliminaire

On coche, puis, on valide par le bouton OK (en bas de cette fenêtre, non visible sur cette capture d’écran).

4
L’onglet Développeur est désormais disponible

Ouvrons l’outil (EDI) à partir duquel nous allons pouvoir coder du VBA :

• soit en cliquant sur le bouton encadré ci-dessus,


• soit en composant au clavier la séquence Alt+F11

L’éditeur Visual Basic est un ‟IDE” c’est-à-dire un environnement de développement : ensemble d’outils qui facilitent le développement
d’applications (de la plus petite, voire inutile…, à la plus importante et complexe).

5
Cet outil se nomme l’éditeur Visual Basic

Il comprend différentes zones que nous allons apprendre à utiliser.

Cet IDE comporte différentes fenêtres que l’on peut fermer/ouvrir à volonté, notamment grâce au menu Affichage.
6
Pour écrire notre premier code, insérons un ‟module”
définition : les modules de code contiennent toutes les macros
utilisées par le tableur : déclarations, procédures et fonctions

C’est ici que l’on écrit les lignes de codes, et autres sortes
de lignes utiles pour commenter le code.
C’est un ‟traitement de texte” avec de bonnes propriétés.

Dans le menu de l’éditeur Visual Basic :  Insertion  Module N.B. Nous ne parlons, ici, que
Par défaut, il est nommé Module1, et le curseur attend la saisie de lignes de code, des modules ‟standards”

Notre nouveau Module sera lié à notre fichier Excel, et sauvegardé avec ce dernier quand nous sauvegarderons ce fichier (au bon format). 7
Rédigeons notre premier code !
définition : une procédure est un bloc d’instructions
Le bloc de code ‟de base” s’appelle une ‟procédure”. délimité par 2 Mots-clés (un pour le début, un pour la fin)
le code qui s’exécute est toujours celui d’une procédure

3 types de procédure :
- 2 courantes : Sub et Function
- 1 complexe : Property

Insérons le texte ci-dessus dans le Module1. Ce petit programme doit avoir un nom, ici c’est ‟essai”
Puis, retournons dans la feuille Excel. Attention à la syntaxe pour dénommer un Sub (il y a des caractères interdits…)
Mettons la souris dans la cellule B3 (par exemple).
Retournons maintenant dans Excel. Là, dans l’onglet Développeur, cliquons sur le bouton Macro (voir slide suivant). 8
Lançons l’exécution de notre première macro VBA (nom courant d’un code ou programme VBA)

Réalisons les deux étapes suivantes :

1°) dans l’onglet Développeur d’Excel, puis 2°) cliquons sur Exécuter pour exécuter la seule
groupe Code, cliquons sur : macro ici présente

Le fait d’avoir écrit (page précédente) Sub essai() a nommé cette macro ‟essai”, et nous retrouvons ce nom dans cette boîte de dialogue de
lancement des macros.

Un type de Sub spécial : la Fonction. Elle renvoie obligatoirement un résultat (telle que le fait une fonction courante d’Excel). Nous les verrons plus loin. 9
Observons le résultat de cette macro

Puisque le curseur était en B3 (qui est donc la cellule active), la macro a écrit "Bonjour le monde !" en B3.

Résultat certes modeste, mais nous venons de respecter la coutume informatique qui consiste à débuter l’apprentissage d’un langage en ‟codant”
le message "Hello world !" 10
Observons notre premier code et détaillons ses éléments :

Une macro porte un nom unique.


1°) cette macro est attachée, par défaut, à notre fichier courant. Conseil : choisir un nom parlant.

2°) le texte commence par un mot-clé :


Sub

3°) puis le nom que nous lui attribuons :


essai
(Attention : la casse compte en ce sens que l’IDE vous
Ce nom doit respecter une
empêche de créer un autre Sub avec le même nom mais syntaxe; certains caractères sont
avec une casse légèrement modifiée) interdits, pas d’espaces ni accents.
4°) en validant par ‟Entrée”, nous
constatons que l’éditeur VB complète
automatiquement le code par 2 éléments :
- les parenthèses après essai (on verra plus loin qu’à l’intérieur de ces () il est possible d’y écrire des arguments)
- les mots-clés End Sub à la fin de notre code (C’est normal, VBA a ‟besoin” de ces MOTS-CLÉS pour terminer).

5°) nous avons inséré le code à proprement parlé, à savoir ActiveCell = "Bonjour le monde !"
ActiveCell est un mot-clé qui représente la cellule active de la feuille Excel (il est ‟réservé”)
= est un symbole d’affectation (de la partie à droite dans la partie à gauche du signe =)
"Bonjour le monde !" est une chaine de caractère, car délimitée par les ""

Commentaire du 2°) : Sub est un mot-clé (spécial) du langage VBA, il se met automatiquement en bleu.
Nous reprendrons en détail chacun de ces éléments.
2ème Niveau de lecture : ActiveCell est un objet
Il s’agit, ici, d’une prise de contact avec les éléments de langage du VBA. dont on modifie ici la propriété par défaut : Value
Il n’est pas nécessaire de l’indiquer 11
Enregistrons (sauvegardons…) notre Fichier Excel contenant maintenant notre première macro

1°) nous pouvons quitter l’éditeur Visual Basic :  Fichier  Fermer et retourner à Microsoft Excel

2°) Dans Excel : Lieu d’enregistrement d’une macro : 3 possibilités


 Fichier  Enregistrer sous - Le classeur actuel (ce qui est montré à gauche)
- Un nouveau classeur
- Un classeur spécial : le classeur de macros personnelles
3°) puis choisir le type de fichier :
Classeur Excel (prenant en charge les macros) (*.xlsm)
Type obligatoire pour que le fichier sauvegarde les macros !!

4°) Et enfin Enregistrer Usage encore plus avancé :


une macro complémentaire =
enregistrée dans un fichier *.xlam
N.B. Usage avancé : un classeur de macros personnelles ?? On parle de compléments ou add-in
Fichier créé lors de la création d’une 1ère macro et
sauvegardé sous le nom PERSONAL.XLSB (puis quitter Excel et relancer…)

Nom bizarre, mais c’est comme ça!

Le nom est caché (par défaut). Il faut donc aller l’afficher (ruban)
On y mettra des macros pratiques et souvent utilisées, telles que du
formatage de feuille,…

ATTENTION, ne pas confondre avec l’enregistrement du code d’une macro !

On peut créer des macros par enregistrement des manipulations d’Excel recherchées. Ce mode de création par enregistrement n’est pas optimal et
génère des lignes inutiles (on l’utilise quand on cherche comment écrire quelques lignes dont la syntaxe est complexe – pour le codeur…) 12
L’avertissement de sécurité au lancement d’un fichier Excel qui contient des macros

Quand nous lançons un fichier Excel et qu’apparaît le message :


Choix

1°) si nous connaissons l’origine de ce fichier, et qu’elle est sans risque


 Alors cliquons sur le bouton

2°) dans le cas contraire, ne cliquons pas sur ce bouton


 Les macros sont un moyen simple et très fréquent de transmission de virus informatiques

Paramétrage de ces messages, dans Excel :


 Fichier Options

Centre de gestion de la confidentialité


 Paramètres du centre de gestion …

13
Que permet le VBA ?
Ce n’est pas de la théorie !
Juste de la terminologie => c’est donc très pratique !

VBA permet à un utilisateur d'Excel d'utiliser toutes les fonctionnalités d’Excel


 de façon automatisée (répétitives, et très rapides)

par des applications nommées macros (en informatique, on parle de programmes)

En 1ère approche : une macro est liée (attachée) à un fichier Excel

Un fichier Excel peut disposer de plusieurs macros;


cet ensemble de macros d’un même fichier s’appelle le projet

Une macro est :


- une liste de commandes (on dira aussi d’instructions)
- qui s’exécutent (un truc technique : la pré-compilation…)
- dans l’ordre où on les a écrites (il y a des exceptions)
attention, si on change l’ordre des instructions alors ça change la macro

C’est une synthèse en première approche…

14
Éléments théoriques Histoire du langage BASIC : Beginner's All-purpose Symbolic Instruction Code
C’est un langage publié le 1er mai 1964 par John G. Kemeny et Thomas E. Kurtz et
mis en œuvre sous leur direction par une équipe d'étudiants du Dartmouth College.

Excel VBA : Visual Basic pour Application


langage de programmation : code Visual Basic pour automatiser des fonctionnalités d’Excel.
Un ‟programme” VBA est souvent appelé une macro (remonte aux premières versions d’Excel).

Objectif d’une macro :


- Automatiser des tâches répétitives sous Excel (1),
- Rendre conviviale une application développée sous Excel.
- Permettre à l’utilisateur d’interagir avec Excel
- saisir des données,
- faire des choix,
- Renvoyer des résultats (de quel que type que ce soit, pas forcément retourner une valeur)
- lorsqu’un Sub renvoie obligatoirement un résultat ‟valeur”, c’est une fonction (alors, Mot-clé Function)

Pour apprendre à ‟coder” des macros, plusieurs aspects sont à maîtriser :


• L’environnement de développement, c’est l’éditeur Visual Basic (IDE),
• Le langage Visual Basic,
• Les bases de l’algorithmique (séquencement logique et approprié des opérations/étapes)
• La correction des erreurs (le ‟débogage”)

Donc : procédons par étapes simples !

Il existe Word VBA, PowerPoint VBA, Access VBA… même si les macros concernent le plus souvent Excel.
Une macro peut faire ‟communiquer” toutes les applications Office entre elles (Word, Excel, Powerpoint, Access…).
Une macro peut aussi faire ‟communiquer” toutes les applications Office avec d’autres applications extérieures, par exemple; une base de données,
de simples fichiers textes, un site internet, un système complexe comme Bloomberg,… 15
Éléments théoriques : première description de l’éditeur de code VBA

Un module peut contenir autant de Sub


et Function que l’on veut.
Souvent on les regroupe selon une logique
métier et/ou informatique.

L’éditeur comprend différentes ‟parties” ou encore ‟fenêtres” :


- l’explorateur de projet, la fenêtre propriétés, la fenêtre module de code, la fenêtre exécution.

D’autres fenêtres peuvent s’ouvrir à l’aide du choix Affichage du menu de l’IDE. 16


Éléments théoriques

Chaque classeur Excel possède son projet associé (Project). L’explorateur de projet :

Si vous avez ouvert plusieurs fichiers Excel, l’explorateur de


projet affiche une liste hiérarchisée des différents projets.

Pour chaque classeur, le projet VBA regroupe des dossiers :


Ici :
Le dossier VBAProject associé au classeur Mise au Point.xlsm
qui contient : les Objets Excel (notion importante, nous y reviendrons)
- l’objet classeur Mise au Point (ThisWorkbook)
- l’objet feuille de calcul Feuil1
Le dossier Modules
qui contient :
- le module de code Module1
qui contient la macro essai() : non visible ici (il faut ouvrir Module1 …

L’insertion d’un nouveau module se fait :


soit par le menu de l’éditeur VB :
 Insertion  Module

Un clic-droit sur le dossier Modules permet aussi d’insérer un nouveau module de code

Précaution : Enregistrer régulièrement le travail de codage à l’aide de  Fichier  Enregistrer … xlsm


17
Éléments théoriques : le langage VBA Généralités : un code est un ensemble
de ‟séquences d’instructions”

À l’aide du langage VBA, on peut :


• Manipuler des ‟objets”, variables : élément essentiel
• Générer des séquences d’opérations dans un ordre déterminé, d’un langage de programmation.
✓ Créer et manipuler des ‟variables” de différents types On y stocke des informations
✓ Écrire des instructions animant et manipulant ces variables et objets
Parmi ces instructions, certaines sont importantes, car elles permettent de : On parle de
- gérer des tests sur des conditions (si… Alors… Sinon…) structures
- effectuer un certain nombre de fois ‟la même chose” (les boucles) algorithmiques
• Réagir à des événements dans le fichier/la feuille Excel.

C’est pourquoi, VBA est un langage puissant, mais fragile à utiliser


▪ Manipuler des ‟objets”  on parle de ‟langage objet”
▪ Générer des séquences d’opérations dans un ordre déterminé  on parle de langage procédural
▪ Réagir à des événements dans le fichier/la feuille Excel  on parle de langage événementiel

Ce mélange est très pratique (grande souplesse d’utilisation, de création), mais potentiellement risqué

Les informaticiens professionnels n’apprécient pas cela car DANGEREUX si mal maîtrisé.
 Les langages professionnels sont évalués – entre autres – par rapport à la sécurité offerte dans
l’écriture du code (test de celui-ci…).

CONSÉQUENCE :  Coder nos macros par petites étapes et tester celles-ci.

Comment apprendre VBA ? Apprendre par morceau; chaque morceau de code ou d’outil lié au code s’apprend seul. Puis, par exercices simples, on
apprend à les combiner. Enfin, on apprend à ‟penser” l’application que l’on souhaite élaborer. Aussi petite soit-elle, il faut la penser ‟sur le papier”
avant que de se lancer dans l’écriture de celle-ci.
18
Pratique : première modification de notre macro et premier contact avec un objet
On parle aussi d’une procédure l’Affectation en informatique : mettre ce qui est à droite du signe =
dans ce qui est à gauche (un objet ou une variable)

BUT : Nous allons écrire notre salutation dans une autre cellule que la cellule active, quelle que soit celle-ci.
Ai-je bien compris l’affectation ??
Préparation de l’exercice : dans la feuille Excel Test :
25 = Range ("A2")
 effaçons le texte en B3. Possible ou impossible ??

Écriture :
Allons dans l’éditeur, dans le module 1.
dans le texte de essai() :
 remplaçons ActiveCell
par Cells(1,3)

Exécution :
Voir slide 13 pour le lancement
Ou encore : la lancer par ALT+F8

Résultat :
Au moment où l’on tape "(" , on voit apparaître une aide à la saisie
Le texte s’est écrit dans la cellule C1 qui nous indique les paramètres attendus par le mot-clé "Cells"

Explication : nous avons affecté à l’objet ‟la cellule d’adresse C1” le texte "Bonjour le monde !"
La cellule est désignée par ‟Cells” puis ses coordonnées (ligne, colonne).
Puissance et difficulté du VBA : plusieurs moyens de désigner une cellule : ici,
‟de la collection des cellules, on considère celle de coordonnées Row = 1, Column = 3”
Autrement dit : la cellule 1ère ligne et 3ème colonne; soit en Excel de base : C1

Excel contient différents objets, organisés dans le ‟modèle d’objets” d’Excel.


3ème Niveau de lecture : chaque logiciel
Au plus haut niveau, il y a le fichier Application (ici, Excel) de la suite Office possède son modèle
Au plus bas niveau, il y a la cellule, d’une feuille, dans un classeur donné d’Objets. À connaître car sera à utiliser
La cellule est un ‟objet”, la feuille est un autre ‟objet”, le classeur est un autre ‟objet”, … pour coder des macros dans ce logiciel. 19
Pratique : deuxième macro et premier contact avec une boîte de dialogue
VBA nous permet d’échanger avec ‟le code”
Conseil : indenter les lignes de code
pour plus de clarté. Cela ne change
rien à l’exécution du code !
BUT : Nous allons écrire notre salutation dans une boite de dialogue très simple.

Préparation de l’exercice :
dans Excel, effaçons le texte précédent.

Écriture :
Allons dans l’éditeur, dans le module 1.
plus bas que essai(), écrivons un nouveau :
Sub : essai_1()
MsgBox "Bonjour le monde"

Après les deux lignes délimitant le début


et la fin de cette procédure…

Exécution :
Voir slide 13 pour le lancement, ou encore ALT+F8
et choisissons cette fois-ci essai_1

Résultat : la boîte de dialogue apparaît sur la page :

Pour quitter cette boîte de dialogue, il suffit de cliquer sur OK

Nous n’avons pas encore utilisé la richesse de cette fonction. Dans le slide suivant, nous allons utiliser plusieurs de ses paramètres,
Précision, pour quitter cette boite, on peut aussi valider par Entrée au clavier.

VBA dialogue/communique soit avec les données présentes dans les cellules Excel, soit avec l’utilisateur pour demander/fournir des données. 20
Boîte de dialogue : où trouver les paramètres de réglage de celle-ci ?
VBA nous permet d’observer cet élément à l’aide de l’explorateur d’objet

Dans l’éditeur VBA :  Affichage  Explorateur d’objet (ou le raccourci F2)

Dans la zone encadrée en rouge


Saisir le mot dont on cherche une
Explication (objet, fonction,…)

Ici, VBA nous indique que Msgbox


fait partie de la classe Interaction.

C’est un membre de celle-ci, et ses


Paramètres sont indiqués dans la
zone du bas de l’explorateur.

Pour le détail des valeurs possibles


de chaque paramètre, voir la
Documentation de VBA ->

Le ? dans l’IDE VBA

21
Résultats de la consultation de l’aide Microsoft Office pour VBA
Ici :
https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/msgbox-function

22
Bonne méthode pour apprendre à utiliser un ‟objet” de l’environnement VBA :
Tester, une par une, les possibilités des paramètres

Dans le code de essai_1(), nous avons déjà saisi, sans le savoir, le 1er paramètre, le message dit ‟prompt”
Ajoutons une virgule après ce prompt,

Pour la valeur du 2ème paramètre


bonne nouvelle ! VBA nous guide
à l’aide de l’outil d’assistance à la saisie

Et nous pouvons tester ce qui apparaîtra


selon la valeur choisie pour ce 2ème paramètre

Ce sont des constantes auxquelles VBA a attribué un nom.


Plutôt que de ‟manipuler” les valeurs, on manipule les noms liés,
plus faciles à retenir que les valeurs des variables!

Notons que les paramètres obligatoires


sont distingués des paramètres optionnels,
eux encadrés de crochets [ et ]

En informatique, une constante est une variable dont…


la valeur ne change pas !! obligatoire optionnels

C’est une variable, c’est-à-dire une ‟boîte” en mémoire vive de l’ordinateur : elle a une taille et un usage => le type de donnée qu’elle peut contenir. 23
Voici quelques résultats possibles, selon le choix du paramètre buttons

Pour vbApplicationModal Pour vbAbortRetryIgnore

Pour vbCritical Pour vbExclamation

Faite vos propres tests !!

En fait, on peut remplacer ces constantes par leurs valeurs numériques liées (nombres entiers). Un slide, plus loin, donne plus d’explication…
La documentation les fournit (ainsi que leur combinaison).
Exemple : vbAbortRetryIgnore = 2, vbCritical = 16,
Et … si je veux les deux ensembles, il me suffit d’additionner 2 + 16 (soit 18 !) 24
Mais, la fonction MsgBox permet d’enrichir encore l’interface avec l’utilisateur
Si le 2ème paramètre est une chaine de caractère alors ce sera le titre de la boîte de dialogue

Essayons, avec quelques adaptations, le code que propose l’aide Microsoft :


Il nous permet de découvrir plus, comment rédiger un code simple : première utilisation des variables

1°) dimensionner les variables qui vont


nous être utiles  Dim

2°) initialiser les valeurs de ces variables

3°) envoyer la fonction MsgBox


4°) recevoir la réponse dans la variable
créée à cet effet : Response
5°) faire un test selon la valeur de
Response

Ici, ce test utilise la structure conditionnelle If… Then… Else… End If Macro en plusieurs lignes ;
attention à l’ordre de ces lignes
(que l’on abordera bientôt)

Bonne usage d’une variable : bien respecter les étapes :


- Déclarer la variable : bien la nommer, bien la typer, bien définir sa portée
- Initialiser la variable
- Surveiller les valeurs que prend la variable au fur et à mesure du code (pour les codes assez importants, pour débusquer les erreurs afin de les corriger) 25
Enrichissement de l’interface à l’aide d’un Contrôle
Lançons notre code à l’aide d’un bouton posé sur la feuille là où nous voulons.

Le Bouton est le contrôle le


1°) quelque part dans la feuille (peu importe où), posons un bouton. plus simple !!
Pour cela, dans l’onglet développeur d’Excel :
- choisissons Insérer,
puis - cliquons sur le bouton,
puis - dessinons-le sur la feuille.

L’IDE nous propose alors d’affecter à ce bouton une macro,


Ce que nous faisons, puis nous validons notre choix.

Maintenant, depuis la feuille Excel,


il suffit de cliquer sur ce bouton pour lancer la macro qui lui est affectée.

Si deux/trois/n… boutons sont posés sur la feuille, et que l’on souhaite affecter à chacun une macro différente,
c’est possible (bien sûr).

Alors on peut retrouver la macro affectée chaque bouton par simple clic-droit sur celui-ci puis – dans le menu
contextuel – aller sur "affecter une macro". Là, il nous indique quelle est la macro déjà affectée à ce bouton
(on peut garder ou modifier ce choix).

Il est aussi possible d’affecter la macro à une image (=> lancement de la macro en cliquant sur l’image).

Afin de tester plus simplement nos petits morceaux de code, nous lancerons leur exécution à l’aide d’un simple clic sur un bouton.
2ème Niveau de lecture : deux familles : les contrôles de formulaires
(anciens) et les contrôles ActiveX (plus récents). Microsoft maintient
les anciens pour compatibilité entre les versions. 26
Avant d’aller plus loin, On parle, ici, des Types
Éléments théoriques : les différents types de données que manipule VBA prédéfinis par le langage

À l’aide du langage VBA, on peut : - manipuler des données ‟objets Excel” (on les verra plus loin),
- manipuler des données (propres au programme) : ci-dessous

Les données appartiennent forcément à un Type


Chaque Type a une appellation officielle à respecter Fastidieux… mais incontournable
▪ Les valeurs numériques : du Type le plus ‟léger” au plus ‟lourd”
✓ Entières : Byte, Integer, Long
✓ Décimales : Single, Double Les données
▪ Les chaines de caractères : String se combinent
▪ Les dates : Date à l’aide
d’opérateurs
▪ Les variables logiques : Booléen
▪ Voiture balai : le type Variant (par défaut)

VBA manipule des constantes ou des variables (*)


Caractères interdits dans les noms de variables : +, -, *, /, \, :
Caractères possibles en fin de nom : %, &, !, $, #, @
Une constante ou une variable a :
- un nom, donné par le développeur (nous… au moment de l’écriture de la macro) et différent des mots-clés
- Un type, bien qu’optionnel il est recommandé de le définir dans les premières lignes du Sub
- une valeur initiale, qui peut changer (par le code, par l’utilisateur)

Les différentes ‟manipulations” d’une variable : la 1ère est sa création (**). 2 modes : prudent, dangereux
- prudent : création par déclaration (explicite) en début du code de la procédure (= avant utilisation)
- dangereux : création lors de la 1ère utilisation dans le code de la procédure

Complément :
* VBA manipule aussi des tableaux et des objets, voir plus loin
** La 2ème manipulation d’une variable est son changement de valeur, la 3ème son changement de type (un peu plus complexe…).
Une utilisation un peu spéciale : la vérification du Type (dans le but d’éviter une erreur en corrigeant le type) => slide 36 27
Les différents types de données que manipule VBA : précision
Principe : ne pas prendre
un type trop « lourd »

Chaque Type a un usage précis qui dépend de ses limites à respecter; valeur minimale, valeur maximale, pas
▪ Les valeurs numériques : À ne pas savoir par cœur, mais avoir une idée de l’ordre de grandeur
✓ Entières :
Byte occupe 1 octet : nombre entier entre 0 et 255
Integer occupe 2 octets : nombre entier entre -32768 et 32767
Long occupe 4 octets : nombre entier long entre -2 147 483 648 et 2 147 483 647
✓ Décimales :
Single simple précision : nombre à virgule flottante compris entre
-1,401298 10-45 et -3,402823 1038 ou 1,401298 10-45 et 3,402823 1038
Double double précision : nombre à virgule flottante compris entre
-1,79769373486232 10308 et -4,94065645841247 10308 ou …
Currency occupe 8 octets : monétaire : nombre à virgule fixe, avec 15 chiffres avant la virgule
pour la partie entière, et 4 chiffres après (pour la décimale)
▪ Les chaines de caractères : String (limitée à  65000 caractères, la plus petite est la chaine vide : "")
▪ Les dates : Date occupe 8 octets : de 01/01/100 à 31/12/9999 nombre dont jour est la partie entière

La création explicite d’une constante ou d’une variable : mot clé Const ou Dim
exemple : pour une variable
Dim Prénom as String : contient des chaines de caractères On peut déclarer plusieurs
Dim Total as Single : contient des nb décimaux simple précision variables sur une même ligne,
mais il faut à chaque variable
Dim Effectif as Integer : contient des entiers courts indiquer son type :
exemple : pour une constante Dim Var1 as Type1, Var2 as Type2

Const TVA as Single = 20 : contient un nombre décimal, fixé ici à 20

28
Un type de données spéciale : créé par l’utilisateur lui-même ! Tous les grands langages
possèdent ce type de donnée

C’est le user defined type (ou UDT)


▪ Facilite l’écriture, la compréhension et le maintien du code :
✓ Si un ensemble de caractéristiques reviennent pour un grand nombre d’éléments métiers :
le Nom
l’Age
le Poids
✓ Alors, un code – pour un médecin – créera un Type Client :
Type InfoPatient
Nom as String
Age as Byte
Poids as Single
End Type

Attention, un type personnalisé ( = un UDT ) doit se créer en haut du module, avant toute procédure !!
Et ainsi le complément automatique d’instruction s’en servira lorsque vous utiliserez ce type…

Usage fréquent, (et très pratique, pour la lisibilité du code) :


On utilise ce type personnalisé comme type de donnée des éléments d’un tableau
Dim Patients(1000) as InfoPatient

On utilise alors un élément particulier de ce Tableau : On peut utiliser des UDT dans d’autres UDT.
Patients(1).Nom = ‟Dupont” Attention à la complexité, car le but est de
Patients(1).Age = 31 réduire celle-ci et non l’inverse.
Patients(1).Poids = 68,3

29
Compléments sur les données
À ne pas savoir par cœur, mais savoir les retrouver dans la doc

Les chaines de caractères : String


pour intégrer certains caractères, on utilise leur code ASCII à l’aide de la fonction Chr(code)
Les dates : Date
Partie entière => le jour, partie décimale => l’heure
Valeur de la Date >0 => Date au-delà de 31 /12 /1899 Date <0 => Date avant le 31 /12 /1899

Les constantes symboliques prédéfinies : VBA propose des noms représentant des valeurs constantes qui reviennent souvent !
Constantes générales
Null : valeur d’une variable Variant qui ne contient aucune valeur valide
Error : valeur d’une variable Variant pour signaler une erreur
Empty : valeur d’une variable ou propriété non initialisée

Constantes de touche ou combinaison clavier :


pour Saut de ligne, ou chr(13) : vbLf
pour Retour chariot + nouvelle ligne, ou Chr(13) + Chr(10) : vbCrLf
Constantes de type fichier :
vbNormal, vbdirectory, vbHidden, vbSystem, etc…

Dernier type un peu spécial : l’énumération : on liste toutes les valeurs possibles du Type (voir la doc et slide suivant)
ENUM Nom_choisi
choix 1 = …
choix 2 = …
END ENUM

Enfin : le type Variant est à réserver à des usages précis, car trop gourmand et rend le code difficile à comprendre

30
Exemple de variable de type avancé : l’énumération
À lire en 2ème lecture… La plupart des langages possèdent ce type
Slide à passer en première lecture !

Créons, par exemple, une liste des jours ouvrés : de Lundi à Vendredi
On nomme la liste en commençant par e de façon à retrouver plus vite notre liste dans l’Intellisense
On liste toutes les valeurs possibles du Type (voir la doc)
On écrit cette énumération en dehors des Sub et Function et en tête du module

ENUM eJourOuvré
eLundi = …
eMardi = …

eVendredi = …
END ENUM

Utilisation de notre énumération :

1°) Déclaration d’une nouvelle variable avec ce type


Dim LeJour As eJourOuvré

2°) Affectation
LeJour = eJourOuvré.

Usage avancé de VBA.


Pour les passionnés, voir le tuto :
https://www.alcya.com/vba-enumeration.html

31
Déclaration, Affectation, Modification de la valeur d’une Variable
On peut s’obliger à déclarer toute variable d’un
module : Option Explicit en tête du module

Après avoir été déclarée (mode prudent…) Le mode imprudent consiste à utiliser un mot comme variable dès sa première
utilisation. On peut empêcher ce mode par une option en en-tête de module…

La variable se voit attribuée/affectée sa (première) valeur : c’est l’étape d’initialisation


exemple : pour une variable String
Dim Prénom as String 1. déclaration

Prénom = "Martin" 2. initialisation En fait, dès cet instant la variable acquiert
une valeur par défaut.
Pour un String, c’est la chaine vide "".
exemple : pour une variable numérique Le lancement par F8 permet de s’en
Dim Effectif as Integer rendre compte. Et de la retrouver si on l’a
oubliée.

Effectif = 28

La variable subit un changement de valeur : affectation d’une autre valeur


 par le code Dernière action sur une variable :
exemple : pour une variable String => accéder à son contenu
En l’appelant, tout simplement
Prénom = "Jean" & Prénom (elle est alors à droite du symbole d’affectation)
exemple : pour une variable numérique
Classe2 = Effectif*2

 par interaction avec le modèle objet et/ou l’utilisateur Voir exemple slide précédent

La pratique rend tout ceci simple. Mais, les possibilités sont très vastes.
Il existe des variables tableaux (autrement dit des ‟matrices”), voir Slide 39,
et enfin il existe un type ‟global” qui convient à tout : Variant.
À utiliser avec précaution. C’est le type par défaut, et il est ‟lourd” en ressources mémoire de l’ordinateur. 32
Conversion d’une Variable : les fonctions C…

Après avoir été déclarée (mode prudent…)

La variable se voit attribuée son type initial


exemple : pour une variable Integer
Dim Numéro as Single 1. déclaration

Numéro = 12,56 2. initialisation

exemple : conversion en entier court de type Byte


Dim Num as Byte

La valeur de la variable Numéro subit un changement de type


lors de son affectation dans Num :
Num = CByte(Numéro)
 maintenant Num contient la valeur 12 (limitée à 255 car Byte)

exemple de conversion en une chaine de caractères


Dim Ch_num as String
Ch_num = CStr(Num)
 maintenant Ch_num contient "12"
CLIC pour atteindre
la doc Microsoft

Liste non exhaustive : Cbool (renvoie un booléen : VRAI ou FAUX)


CCur (renvoie une valeur au format devise) CDate (renvoie un valeur date)
CDbl (renvoie un Double)
CInt (renvoie un Entier) 33
Portée de la valeur d’une Variable : Durée de vie d’une variable :
où peut-on ‟accéder” à une variable ? = temps pendant lequel elle conserve sa valeur

Selon l’endroit où on déclare la variable,


ET Valable aussi pour les constantes
Selon le mot-clé avec lequel on déclare la variable

Après avoir été déclarée (mode prudent…)

La variable a telle ou telle portée :


1. la plus petite portée : limitée à la procédure (ou la fonction) Variable de niveau procédure : n’est accessible que
Sub exemple () dans la procédure où elle est déclarée.
Dim Prénom as String
Durée de vie limitée à la vie de la procédure =>
… détruite après End Sub
End Sub

2. au-dessus = le module : accessible à l’ensemble des procédures du module


Dim Effectif as Integer Variable de niveau module privé : accessible dans
Private Effectif as Integer l’ensemble des procédures du module.
Elle doit être déclarée à l’extérieur des procédures =>
… dans la section Déclarations du module = en haut de
Effectif = 28 celui-ci à l’aide des mots-clés Dim ou Private (équivalent)

3. au-dessus = le projet : accessible à l’ensemble des modules du projet


Public Effectif as Integer Déclaration dans l’un des modules du projet :
recours au MOT-CLÉ Déclarations du module : en haut de celui-ci

Portée limitée à la procédure signifie qu’une fois l’exécution de la procédure finie, la variable est détruite. Et, lors de l’exécution suivante on
recommence comme si rien ne s’était passé précédemment avec cette variable.
Signifie aussi qu’une autre procédure peut utiliser le même nom pour une autre variable dans un tout autre contexte, d’une tout autre façon.
34
Accessibilité d’une procédure
Bien lire le pavé du bas de cette page

D’où peut-on appeler une procédure ?

a. la plus petite portée : la procédure (ou la fonction) est appelée uniquement depuis le module où elle se trouve
Private Sub exemple ()
Dim Prénom as String

End Sub

b. au-dessus : la procédure est appelable par l’ensemble des procédures de tous les modules
Public Sub calcul()

End Sub

c. autre cas : que deviennent les variables locales de la procédure une fois celle-ci finie ?
leurs valeurs conservées pour repartir de celles-ci lors d’une éventuelle relance de la procédure
Static Sub dessine()

End Sub

d. appel d’une procédure : appel direct (depuis une procédure, d’une autre procédure)
Call dessine()

ATTENTION : nous pouvons interrompre – ou quitter – une procédure avant sa fin, grâce à l’instruction EXIT Sub, ou Exit Function

Très pratique et souvent utilisé suite à un test


35
Appel d’une procédure en lui ‟passant” des arguments

Revenons au cas d. appel direct d’une procédure : (depuis une procédure, d’une autre procédure)
1ère façon : les arguments sont simplement listés
Sub dessine()
Call crayon(Argument1, Argument 2)

End Sub


Sub crayon(Arg1, Arg2)

End Sub

2ème façon : les arguments sont listés avec leur type


Sub dessine()
Call crayon(Argument1, Argument 2)
End Sub


Sub crayon(Arg1 as String, Arg2 as Integer)

End Sub

3ème façon : les arguments sont listés avec leur type, certains sont optionnels

Sub crayon(Arg1 = "Lundi", Arg2 as Integer, Optional Arg3)

End Sub
36
Opérations sur Variables :
opérateurs arithmétiques : +, -, *, /, \, ^ et Mod

Essayons les exercices suivants : Essayons les exercices suivants :

Sub exercice1() Sub exercice4()


Dim A as Integer, B as Integer Cells(1,1) = "villa" & "Mon rêve"
A = 1 End Sub
B = A + 3 La variable se voit attribuée sa (première) valeur
A = 3 Sub exercice5()
End Sub Dim Chaine as String
La variable se voit attribuée sa (première) valeur Chaine = "Mon rêve"
Sub exercice2() cells(1,1) = "pate " & chaine
Dim A as Integer, B as Integer, C as Integer End Sub
A = 5 Puis
B = 3
Sub exercice6()
C = A + B
Dim Chaine as String
A = 2
Chaine = InputBox("Donnez une chaine de
C = B - A
caractères")
B = B + 1
cells(1,1) = "La chaine de l'utilisateur : "
End Sub & Chaine
Puis End Sub
Sub exercice3()
Dim A as Integer, B as Integer Sub exercice7()
A = 5 Dim nb as Integer
B = 2 Nb = inputBox("Donner un nombre entier")
A = B cells(1,1) = "le nombre de l'utilisateur : " & nb
B = A Msgbox "le nombre de l'utilisateur : " & nb
End Sub End Sub

Chaque type de variable possède ses opérations possibles sur son type.

Exemple : STRING : la seule opération possible est la concaténation


37
Exercice classique (parfois difficile pour le débutant)

Essayons d’échanger la valeur de 2 variables : Correction :

Sub exercice1() Sub exercice4()


Dim A as Integer, B as Integer Cells(1,1) = "villa" & "Mon rêve"
A = 1 End Sub
B = 3 La variable se voit attribuée sa (première) valeur
… Sub exercice5()
End Sub Dim Chaine as String
Comment faire, sans recourir à une 3ème variable Chaine = "Mon rêve"
Pour qu’à la fin du code : cells(1,1) = "pate " & chaine
- A ait la valeur initiale de B A = A + B
- B ait la valeur initiale de A

38
Variables très différentes mais indispensables : les Tableaux
Groupe d’éléments d’un même type, qui possèdent un nom identique
et référencés par un rang, ou encore numéro d’index

Déclaration :
La variable Tableau se voit attribuée son nom, éventuellement ses limites et son type
Déclaration simpliste mais valable
Dim Mon_Tableau()

Déclaration plus complète, on précise le type des données. Ici, pour un ensemble de chaines de caractères
Dim Prénoms() as String

Déclaration plus complète pour un ensemble de notes d’étudiants (on suppose des classes <= à 50 étudiants)
Dim Les_Notes(1 to 50) as Integer

Et comme toujours ici, il faut signaler la ‟bizarrerie” informatique :


Dim Notes(50) as Integer

Le tableau comportera 51 notes possibles :


de Notes(0) pour la 1ère valeur du tableau Notes()
à Notes(50) pour la 51ème et dernière valeur de ce tableau

Car par défaut, le 1er indice est 0


Mais il est possible, par souci de simplicité recherchée, de changer ce paramètre en insérant en tête du module :
Option Base 1
Alors 1ère valeur du tableau : Notes(1) et dans ce cas, il n’y a que 50 éléments dans ce tableau

On accède à un élément par son rang, exemple : le 4ème élément de Notes()


var = Notes(3) lecture de la 4ème valeur du tableau Notes() et écriture dans la variable var
Il existe des Tableaux multidimensionnels : par exemple déclaration d’un tableau à 2 dimensions :
Dim Mon_Tableau(1 To 10, 1 To 20) 39
Pratique : connaître le type d’une variable !

Nous allons tester cette fonction sans rien faire dans Excel, à l’aide de l’exécution pas-à-pas détaillé (touche F8)

Ecrivons le code suivant :


qui teste le type des
Variables créées

En laissant le curseur
quelque part dans le
code de ce Sub,

Lançons l’exécution en mode Pas à pas détaillé


Chaque ligne en cours d’exécution apparaît en jaune
Et permet de voir la valeur de toutes les variables du code
Au stade d’exécution de celui-ci,
juste avant l’exécution de la ligne en jaune

On peut aussi consulter la fenêtre ‟Variables locales”

Ce mode d’écriture du code, en le testant par petits morceaux, est très pratique et prudent.

40
Et enfin , dernière opération sur les variables : destruction d’une variable …
À lire après avoir étudié le slide 50,
mais logique de présenter ce point ici

Rarement nécessaire, quoique…

Dans tout langage, donc en VBA, il est possible de détruire une variable !
Pourquoi ?  pour libérer de l’espace mémoire

Donc, à ne faire que si vous en avez besoin : le faire au bon moment (= au bon endroit du code)
exemple : un tableau ! Quand – vraiment – je n’en n’ai plus besoin
exemple de moins en moins utile : à la fin du code (très souvent, le système le fera de lui-même)

L’informaticien parlera de ‟libérer de la mémoire”.

En VBA : ce sont surtout les variables Objets qu’on peut libérer

Set plage = Nothing

Même si vous ne l’utilisez pas, bon à savoir pour la compréhension générale d’un code et d’un ordinateur…

41
Opération prudence pour tout un code, s’obliger à déclarer toutes les variables du projet

On va utiliser l’EDI et ses options:


Dans le Menu, on choisit Outil  Options  Éditeur:
 on coche Déclaration des variables obligatoires

(et on valide par OK)

Encore plus radical que l’option


explicit en tête de module

Maintenant, on est tranquille sur ce point…

42
Pratique : troisième macro et premier contact avec le modèle objet de VBA pour Excel
Un objet correspond aux éléments d’Excel

L’objet Excel le plus ‟petit”, ou plutôt élémentaire : la cellule (et le groupe de plusieurs cellules = plage)

Désignation absolue d’une cellule :


Cells(1,3)
Soit, de manière générale :
Cells(Ligne, Colonne)
ou, très pratique :
Range("B2")

Désignation absolue d’une zone de cellules


Range("A1","A2","A3")
Soit de manière générale
Range("<Liste>")
Une plage cellules désignée par sa diagonale :
Range("C4:D6") désigne les cellules : C4, D4, C5, D5, C6, D6

Une fois l’objet cellule désigné, VBA permet 2 actions : Ecrivons le code ci-dessus
et affectons le à un bouton.
- Accéder ou modifier une propriété de l’objet ( un état, une caractéristique, de celui-ci) Observons le résultat
- Appliquer une méthode à l’objet

Chaque objet a ses caractéristiques : sa liste de propriétés, et ses comportements : sa liste de méthodes
Il suffit de les connaître et de savoir les utiliser…

Dans le modèle objet d’Excel, il y a :


La propriété, qui se lit (dans une variable) ou se modifie L’ensemble des valeurs prises par les propriétés d’un
La méthode, qui s’applique objet forment ce que l’on appelle l’état de l’objet
L’ événement, qui est une action subie/reconnue par un objet 43
Les façons de désigner une cellule, une plage de cellule
Point important pour toute écriture de macro…

Rappel : désignation absolue d’une cellule :


Cells(1,3) Soit de manière générale : Cells(Row,Column)
ou, très pratique mais moins bien manipulable par le code ensuite,
Range("B2")

Désignation absolue d’une plage de cellules : Bien noter la position des guillemets : début et fin
écriture : Range("A1, A2, A3") Soit de manière générale : Range("<Liste>")
la virgule permet de désigner des plages ou cellules non contigües

Une plage de cellules désignée par sa diagonale :


Range("C4:D6") désigne les cellules : C4, D4, C5, D5, C6, D6

Une multi-plage de cellules désignée par ses diagonales :


Range("A1:B2, C4:D6") désigne les cellules : A1, A2, B1, B2, C4, C5, C6, D4, D5, D6

Une multi-plage de cellules :


Range("A1:B2, C3, D4:E6")

On peut préciser, entre guillemets, la feuille concernée si ce n’est pas la feuille active :
Range("Feuil2!A1:B2") qui est équivalent à Worksheet("Feuil2!").Range("A1:B2")

On peut construire à l’aide de variable String les chaines de caractères représentants des adresses !
Dim Adr as String, NomFeuille as String, NumLigne as Integer
Adr = NomFeuille + "!A" + Cstr(NumLigne)
Range(Adr) 44
Les façons de désigner une cellule, une plage de cellule :
Cas classiques, intéressants et pratiques

Désignation absolue de toute une colonne :


Columns(2)
ou, moins bien manipulable par le code ensuite,
Range("B:B") ou encore Columns("B:B")

Désignation absolue de plusieurs colonnes contigües :


Columns("2,4") attention, là, il faut mettre les guillemets et la virgule !!
Columns("B:D") et là, il faut les ‟:”
ou, moins bien manipulable par le code ensuite,
Range("B:D") ou encore

Désignation absolue de plusieurs colonnes non contigües :


Range("A:B, D:D") attention à la colonne D! écrire 2 fois D séparé du ‟:”
Pour ce cas, ne pas utiliser Columns

Et, réciproquement pour les lignes : par exemple, la ligne 6


Row("6:6")
Et, par exemple, différentes méthodes intéressantes peuvent alors être mises en œuvre
Row("6:6").EntireRow.Autofit
qui donne une hauteur automatiquement adaptée au contenu de la ligne

On précise donc que :


Row("6:6") est équivalent à Range("6:6")
Columns("B:D") est équivalent à Range("B:D")
45
Un peu de théorie et de la pratique : lire et modifier une propriété d’un objet

Nous lisons la propriété ‟par défaut” d’une cellule (= sa valeur/son contenu)

Et nous l’indiquons à, l’utilisateur à l’aide


d’une boîte de dialogue
On commence par dimensionner
les variables nécessaires

Attention, A1 contient une valeur num


Il faut la convertir en chaine
CStr(Range("A1").Value)
soit de manière générale

N.B. Il y a toujours plusieurs façons d’écrire un code, même aussi simple que celui-ci

Une fois l’objet cellule désigné, VBA permet 2 actions :


Ecrivons le code ci-dessus
- Accéder (lecture) ou modifier (écriture) une propriété de l’objet et affectons le à un bouton.
la valeur d’une propriété pourra – évidemment – être stockée dans une variable Observons le résultat
- Appliquer une méthode à l’objet
Deux versions : avec ou
sans la propriété Value
Chaque objet a sa liste de propriétés et de méthodes …

Une propriété se lit (dans une variable) ou se modifie


L’explorateur d’objet permet de consulter la liste des
Une méthode s’applique propriétés & méthodes & événements d’un objet
46
Un peu de pratique et explications théoriques : modifier une propriété d’un objet

Nous avons déjà vu, depuis le début de ce manuel, comment modifier la propriété Value de cellules :

Voir slide 8 : le code ActiveCell = "Bonjour le monde !"


est une modification de la propriété par défaut d’un range, soit le contenu des cellules du range, ou d’une cellule
– ici la cellule active – par un nouveau contenu
Avant

2 façons équivalentes d’écrire, pour cette propriété par défaut

Après

Ce cas, ultra-simple, pour illustrer la modification d’une propriété d’un objet (ultra-simple – lui aussi – mais ultra-utile en VBA).

Allez… faisons du apparemment compliqué avec l’écriture générale de modification d’une propriété : On se détend : les crochets <> indiquent
<Expression>.<nom de propriété> = <Valeur> la présence d’un argument obligatoire 47
Un peu de pratique (et explications théoriques) :
on peut récupérer une propriété d’un objet dans une variable,
variable dont on peut faire l’usage que l’on veut par la suite
Bien sûr, il faut d’abord créer la variable dans laquelle on récupère la propriété :

Notez bien l’ordre dans lequel l’ordinateur exécute la ligne : 1°) évaluation de la multiplication, 2°) affectation

Avant

Après

Là encore, puisque qu’on modifie la propriété par défaut du range A6, pas besoin de préciser cette propriété

Ce cas, ultra-simple, pour illustrer la récupération d’une propriété d’un objet dans une variable et l’exploitation de celle-ci dans un calcul.

Bien sûr, toute propriété d’un objet peut se récupérer et s’affecter à un autre objet (couleur, taille et type de police,…) : code très classique!!
48
Une première liste (non exhaustive) de propriétés d’un Range (ou d’une seule cellule)

L’aide à la saisie nous permet de découvrir les propriétés et méthodes attachées à un objet
Ici, le Range A1 :
Propriétés :
Mise en forme du texte
- Font. Avec des sous-propriétés
Méthode

- Font.Bold = True
texte en gras (booléen) Propriété

- ClearContents
efface tout (méthode)

- Borders.Value = 1
ajoute des bordures à A1

Mais aussi :
- Range("A2").Font.Size =
Range("A1").Font.Size
donne au texte de la cellule A2 la taille Une propriété peut avoir des sous-
propriétés, qui peuvent avoir, elles-
du texte de la cellule A1 mêmes, des sous-sous-propriétés…

En informatique, on appelle une propriété un attribut d’un objet.


Quelques exemples de propriétés :
- d’une cellule : Valeur, couleur, police, taille de celle-ci, gras/pas gras, italique/pas italique,…
- d’une feuille : Nom, couleur d’onglet,… 49
Pratique et syntaxe : appliquer une méthode à une cellule, un range, ou plus généralement
à un objet :
Objet.Méthode
Nous voulons effacer les deux cellules A1 et A2

Ecrivons le code suivant :


Range("A1","A2").Clear
qui efface tout : Données et formats

Alors que :
Range("A1","A2").ClearContents
n’efface que le contenu, pas le formatage

Chaque objet a sa liste de méthodes


Action qui s’exerce sur (ou à partir) d’un objet
la méthode peut – ou non – prendre des paramètres
Ecrivons le code ci-dessus
Ecrivons cet autre exemple de code : et affectons le à un bouton.
Observons le résultat
Range("A3").Activate
peu importe la cellule active quand on a lancé cette macro,
désormais la cellule active est A3. Cette méthode peut s’appliquer à d’autres objets (feuille, classeur,…).
Pratique mais prudence !!
Méthode équivalente : Workbooks.Close : ferme tous les classeurs ouverts
Range("A3").Select attention au paramètre de vérification si sauvegarde

Une propriété se lit (dans une variable) ou se modifie. Ok, certaines propriétés ne sont ‟accessibles » qu’en lecture ! => voir exemples Slides 68,69
l’explorateur d’objets permet de le savoir !! (tout en bas)
Une méthode s’applique, quelques exemples de méthodes :
pour une cellule : copier, coller, effacer,… pour une feuille : déplacer, supprimer, renommer,… 50
Pratique : deuxième contact avec une boîte de dialogue : InputBox
VBA permet à notre utilisateur de saisir des données utiles à la macro Dans l’aide, cette fonction a
5 paramètres disponibles

L’utilisateur peut être amené à saisir des informations, demandées par la macro et récupérées par celle-ci.
1er moyen : la fonction InputBox
Ici, écriture directe de la réponse du NOM en cellule A1
Et écriture en 2 temps du Prénom, en cellule A2, après récupération de la réponse dans une variable Prénom

L’utilisation du 2ème paramètre


changera avantageusement le titre

51
Pratique : La boîte de dialogue : InputBox
Usage plus complet avec la méthode Sert à la saisie et à d’autres
actions sur la feuille

2ème moyen : la méthode InputBox, en fait Application.InputBox


Ici, on gère le paramètre title à l’aide d’une variable
Et écriture en 1 temps du Nom, en cellule A1, après récupération de la réponse bien typée (2 => String)

L’utilisation du 2ème paramètre


change avantageusement le titre
et guide l’utilisateur

Un type utile est le type 8 : référence de cellule sous forme d’un objet Range

La syntaxe de la méthode est :


Application.InputBox(prompt,[title,[default,] [left,] [top,[helpfile,] [helpcontextID,] [type])
La documentation fournit les types possibles, ainsi que la manière de les combiner par addition de leurs valeurs
52
Les Objets : Hiérarchie d’accès aux objets : le chemin (facultatif)

Écrivons le code :
Cells(1, 3) = "Bonjour le monde !"
il s’agit de la cellule C1 de la feuille dans laquelle se trouve le curseur
L’application Excel ‟sait” toujours dans quelle feuille se trouve ce curseur
Cette feuille est d’ailleurs manipulable en VBA, désignée par ActiveSheet

Écrivons le code :
Worksheets("Feuil1").Cells(1, 3) = "Bonjour le monde !"
il s’agit de la cellule C1 de la feuille Feuil1 quelle que soit la feuille où est le curseur
Là, j’impose – par mon code – la manipulation de telle cellule dans telle feuille
par défaut il s’agit du classeur actif, lui encore connu et désigné par ActiveWorkbook

Écrivons le code :
Application.Workbooks("Classeur2.xlsx").(Worksheets("Feuil1").Cells(1, 3) = "Salut!"
il s’agit de la cellule C1 de la feuille Feuil1 du classeur Classeur2.xlsx
Là, j’impose – par mon code – la manipulation de telle cellule dans telle feuille dans tel classeur
quel que soit le classeur actif (celui où est le curseur!)

Observez l’opérateur point (.) qui est utilisé

2ème lecture : La notion d’objet actif est à la fois puissante et demande d’être comprise et maîtrisée.
À chaque instant, il y a :
- l’application Excel : Application Application est parent de la collection Workbooks
- un classeur actif : ActiveWorkbook Workbook est parent de la collection Worksheets
- une feuille active : ActiveSheet et de la collection Charts
- une cellule active : ActiveSheet
Worksheet est parent de la collection Names, des objets Range,…
53
Les Objets actifs : comment y accéder…

De façon un peu technique, on dit qu’ils font partie de la classe <globales>,


Donc, à chaque fois, deux écritures possibles :
le classeur lequel s’exécute la macro en cours (son code) :
Application.ThisWorkbook l’écriture complète
ThisWorkbook l’écriture minimale

le classeur actif :
Application.ActiveWorkbook l’écriture complète
ActiveWorkbook l’écriture minimale

la feuille active du classeur actif (ou spécifié) :


Application.ActiveSheet l’écriture complète
ActiveSheet l’écriture minimale

la sélection en cours (le type d’objet renvoyé dépend de la sélection en cours!) :


Application.Selection l’écriture complète
Selection l’écriture minimale

la cellule active de la feuille active ou spécifiée :


Application.ActiveCell l’écriture complète
ActiveCell l’écriture minimale

MAIS, pour les propriétés de l’application Excel, il est nécessaire de spécifier Application :
Exemple : la barre de titre d’Excel est modifiable par :
Application.Caption = "Mon tableau mensuel"
l’omission de Application ne fonctionnerait pas
54
Pratique : les références de champs

Nous allons référencer un champ de la Feuille(1) alors que la cellule active est dans une autre feuille lors du
lancement de la macro.

Ecrivons le code :
Worksheets("Feuil1").Cells(1, 3) = "Bonjour le monde !"

Autre façon de référencer cette cellule :


Cells(1, 3)
il s’agit alors de la cellule C1 dans la feuille active
WorkBooks("Essai.xlsm").Worksheets("Feuil1").Cells(1, 3)
il s’agit alors de la cellule C1 dans le classeur précisé dans la feuille précisée

Essayons de lancer cette macro (ALT+F8) après avoir placé auparavant le curseur dans une autre feuille !

Non seulement le résultat est bien en C1, mais la cellule active reste bien là où l’on se trouve lors du lancement
de la macro.
Bien sûr cette macro peut se terminer en rendant active la cellule où l’on vient d’écrire, ou bien n’importe
quelle autre cellule.

Exercice simple : à l’aide de MsgBox comptons le nombre de feuilles dans notre classeur

On pourrait, de même, référencer une feuille dans un autre classeur,


référencer une feuille dans un autre classeur, dans un autre répertoire (folder),
N.B. certains Objets sont très proches…
Sheets et Worksheets : Sheets contient aussi des feuilles graphiques alors que Worksheets non. 55
Allons plus loin dans : les objets et collections d’objets,
les références de champs

Nous allons créer une feuille après la ‟Feuil1” de notre classeur

Une feuille est un objet Worksheet, elle fait partie de la collection de feuilles (observez le "s" à la fin du nom)
Worksheets

On désigne la nième feuille du classeur par : Worksheets(n)


ou par son nom, exemple : Worksheets("Feuil1")

Bien sûr, pour connaître le nombre d’éléments dans une collection, on dispose de la propriété : Count

Ecrivons le code : dans un Sub AjouterFeuille()


Worksheets.Add
- sans aucun paramètre, la nouvelle feuille est devant l’actuelle (et 1 seule feuille a été créée)

Ecrivons le code : (attention à la syntaxe…)


Worksheets.Add After:= Worksheets("Feuil1")
- avec ce paramètre, la nouvelle feuille est après la feuille spécifiquement désignée, mais le nom n’est pas choisi

Ecrivons le code :
Worksheets.Add(After:= Worksheets("Feuil1")).Name = "MaFeuille"
- maintenant la nouvelle feuille est après la feuille spécifiquement désignée et le nom est choisi

Ecrivons le code :
Sheets.Add(After:= Worksheets(Worksheets.Count)).Name = "NouvelleFeuille"
- maintenant la nouvelle feuille est après la dernière feuille du classeur et le nom est choisi
c’est un truc simple et classique de codage, même quand on ne connaît pas le nombre d’éléments de la collection manipulée
56
Allons plus loin dans : les références de champs
Un ensemble de cellules : une zone, une sélection

Les zones ou plages multi-cellules.

Un ensemble de cellules peut se manipuler comme un objet : on le créé sur mesure, on le modifie…
Écrivons le code : Attention, rappel :
Dim plage as range Un objet défini, et utilisé, comme
L’objet plage vient d’être créé, par sa déclaration, mais il ne ‟contient” rien ! une variable doit être :
Nous disposons, pour cet objet, de propriétés et de méthodes. - déclaré et typé,
- affecté ( initialisé)

Définissons la zone de cet objet multi-cellules, première méthode :


plage = Range("A1" ; "A2"; "B1"; "B2")
Et, afin de vérifier sélectionnons cette zone
Plage.Activate

Problème, VBA nous annonce une erreur ! L’affectation ne fonctionne pas comme pour les autres variables.
Dans l’IDE :
 Exécution  Réinitialiser
pour réparer notre erreur !

Rappel : la plus petite plage est une seule cellule.

57
Abordons la création d’objets : création de champs Mot-clé Set
Définition d’un champ : une zone, une sélection

Les zones ou plages multi-cellules.

Corrigeons le code :
Dim plage as Range Après créations de la variable plage de type Range,
Set plage = Range("A1" ; "A2"; ; "B1"; "B2") nous lui affectons une plage concrète !
Et, afin de vérifier, sélectionnons cette zone
Plage.Select

Problème, VBA nous annonce une erreur. En fait, il y en a deux !


- l’affectation ne fonctionne pas comme pour les autres variables, Celle-ci est corrigée
- la syntaxe de description de la zone multi-cellules.
Corrigeons le code par :
Set plage = Range("A1,A2,B1,B2") 1ère syntaxe possible, cellules figées
deuxième syntaxe possible :
Set plage = Range(Cells(1, 1), Cells(2, 2)) Les indices peuvent être des variables, très pratique

Cette 2ème syntaxe est puissante uniquement pour les zones où toutes les cellules sont contigües et
forment un rectangle, puisqu’on donne les coordonnées des coins opposés.

Troisième syntaxe, très pratique. Si nous avons déjà nommé un champ dans Excel (exemple TABLO).
Set plage = Range("TABLO")
Si le champ TABLO n’existe pas dans Excel, une erreur surviendra !

Bien lire la documentation Excel/VBA pour les syntaxes de définition des zones multi-cellules. Ca va du plus simple au plus surprenant.
Pratique : on peut aisément sélectionner toute une colonne. Exemple : Range("C:C") est la colonne C. (voir slide 41)
Enfin, si on a nommé une colonne on pourra utiliser le nom de ce champ colonne pour sélectionner toute la colonne!
58
Quelques propriétés utiles d’un champ zone multi-cellules

Le nombre d’éléments de cette collection de cellules :


À partir du code précédent, la ligne de code ci-dessous indique le nombre de cellules de plage
Msgbox plage.Count

Chaque cellule de cette zone a un numéro dans la collection que constitue le champ.
Pour illustrer ce point, inscrivons dans chaque cellule son numéro :

Plage.Cells(1) = 1
Nous découvrons dans quel ordre VBA
Plage.Cells(2) = 2 numérote les éléments de la collection,
Plage.Cells(3) = 3 ici les cellules
Plage.Cells(4) = 4

Puissance de VBA pour Excel (et source d’erreurs si mal maîtrisé) : désignation relative
Inscrivons 12 en une adresse relative à Plage. Corrigeons le code par :
Plage.Cells(Cells(7, 4)) = 12

mais, plus généralement, en prenant comme ancrage de départ n’importe quelle cellule :
Range("B11").Cells(-1, 2) = "Target"

Cette syntaxe écrit bien en ligne 9 (= 11-2) et en colonne C (1 à droite de B).

Enfin, la propriété Offset qui permet un pilotage précis de désignation d’une zone Offset : on parle de la gestion
des déplacements dans la feuille
Plage.Cells(3).Offset(5, 4) = "Cible"

Décalage : la syntaxe générale est : Offset : pratique, puissant, délicat…


<cellule de départ>.Offset(<nb-lignes>,<nb-colonnes>)

Si <nb-lignes> >0 décalage vers le bas (ou à droite), donc attention à ne pas provoquer une erreur en allant en dehors de la feuille Excel. 59
Éléments théoriques : le modèle OBJET d’Excel
et sa hiérarchie…

Au sommet (…) : Application (l’application Excel) Et bien sûr, chaque Objet


dispose de :
Application contient les objets suivants : • Propriétés,
Workbooks; collection des objets Workbook (= les classeurs) • Méthodes,
• Événements
Windows; collection des objets de fenêtres

AddIns; collection de tous les objets de macros complémentaires

L’objet Workbook peut, lui-même contenir d’autres objets :


Worksheets; collection d’objets Worksheet (= les feuilles de calculs)

Charts; collection d’objets Chart (= les graphiques)

Names; collection d’objets Name

L’objet Workbook peut, lui-même contenir d’autres objets :


ChartObjects; une collection d’objets ChartObject
Range;
PageSetup;
PivotTables; une collection d’objet PivoTable (= les TCD)

Ni compliqué, ni simple, mais indispensable d’en prendre l’habitude…


Hiérarchie très logique, très structurée et – à la longue – elle aide à programmer correctement en VBA.

60
Utilisation des Objets du modèle OBJET d’Excel
Quelques trucs et astuces
2ème Niveau de lecture

La propriété Parent d’un objet renvoie l’objet qui le contient :

Exemple : quelle que soit une plage de cellule dans une feuille,
NOMFEULLE = plage.Parent.Name

Sans argument, la propriété Cells renvoie la plage de toutes les cellules de la feuille active, donc :
TotalCellules = Cells.Count
donne le nombre de cellules d’une feuille Excel
NonVide = WorkSheetfunction.CountA(Cells)
donne le nombre de cellules non vides d’une feuille Excel (l’équivalent de NBVal)

Attention, la propriété Name renvoie un Objet ! Donc, pour le nom prendre Name de Name !
Exemple : NomPlage = Plage.Name.Name
et renvoie erreur si la plage n’a pas été nommée, à récupérer suite à On Error Resume Next

On Error Resume Next


NomPlage = Plage.Name.Name
If Err.Number <> 0 Then NomPlage = ""

Beaucoup de possibilité, quand on prend le temps de les découvrir…

61
Avançons dans l’écriture du code : élément de base d’un algorithme, la structure de contrôle
les Boucles
Vitesse de l’ordinateur…

Plutôt que d’écrire ligne à ligne toutes les cellules de la plage,


Grâce à une boucle, parcourons tous les éléments de la collection de cellules :
À partir du code précédent, nous savons compter le nombre d’éléments de la collection plage
plage.Count

Structure simple d’une boucle :


Pour illustrer ce point, inscrivons dans chaque cellule son numéro :

FOR compteur = 1 to Plage.Count


Plage.Cells(compteur) = compteur
NEXT

Attention, comme nous écrivons ceci dans un nouveau Sub,


plage n’est pas encore défini (portée des variables)
Augmentons la taille du champ TABLO
(directement depuis Excel, 4 lignes 3 colonnes) :

Lançons ce Sub pas à pas ! À l’aide du raccourci F8

Le compteur varie de 1 en 1 et il est décommandé de modifier


sa valeur dans le code de la boucle (très mauvaise idée!!)

Ce mode de lancement d’un code permet de suivre l’évolution de telle ou telle variable afin de traquer les erreurs.

Structure générale d’une boucle : FOR i = val_dep To val_fin Step j


Sachant que par défaut Step = 1, mais qu’il peut prendre une autre valeur (entière > 0 ou < 0, attention – dans ce cas – aux val_dep et val_fin) 62
Les Boucles propres aux objets Excel : For… Each – Next

Les Objets Excel contiennent parfois une famille d’éléments :


un classeur contient un ensemble de feuilles, un ensemble de charts, …
une plage de cellule contient un ensemble de cellules

Grâce à une boucle For Each – Next parcourons tous les éléments de la collection de cellules :
Reprenons le comptage d’éléments de la collection plage
plage.Count

Structure simple de cette boucle : on parle – parfois – d’énumération quand on parcourt une collection
Pour utiliser cette technique, créons la variable cellule :
Dim cellule As Range
For Each cellule In Plage
‘ code utilisant cellule
Next

Attention, comme nous écrivons ceci dans un nouveau Sub,


plage n’est pas encore défini (portée des variables)

Comment gérer l’erreur d’une boucle qui ne s’arrête jamais ??


On parle de boucle infinie…
On tape au clavier (pendant l’exécution de celle-ci) CTRL+PAUSE

63
Deuxième structure algorithmique de base : les Tests

Dans la littérature informatique, les Tests font partie des instructions de contrôle
On parle de TEST car il y a un CONDITION qui est exprimée, puis testée :
Selon que la CONDITION soit VRAI ou FAUSSE, telle ou telle ACTION est exécutée ou non

Structure simple d’un TEST :

IF Condition THEN
‘ action si la condition est VRAI

ELSE
‘ action si la condition est FAUSSE

End If

L’écriture de la CONDITION est souvent de tester si telle valeur est supérieure, égale ou inférieure à telle autre :
Par exemple :
IF Time > 0,5 THEN
‘ action si la condition est VRAI
MsgBox "Nous sommes le matin"
ELSE
‘ action si la condition est FAUSSE

End If

Il y a une écriture simplifiée de IF sans ELSE : IF Condition THEN ‘ action End If

C’est la structure de contrôle la plus simple, mais la plus pratique lors d’un codage rapide.
Slide suivant : les écritures plus puissantes de la structure de Test!

64
Le Test : Deuxième construction : SELECT CASE

Cette construction est très pratique pour tester plusieurs conditions, les unes après les autres
Structure simple d’un SELECT CASE :
SELECT CASE Variable
CASE ‘ expression de cette 1ère condition : la Variable est dans tel état1
‘ action si la condition1 est VRAI

CASE ‘ expression de cette 2ème condition : la Variable est dans tel état2
‘ action si la condition2 est VRAI

CASE ELSE
‘ action si aucunes conditions précédentes n’est vraie

End Select

L’exemple de la structure précédente IF … THEN … ELSE se code maintenant :


Select Case Time
CASE Is < 0,5
Salut = "Nous sommes le matin"
CASE 0,5 To 0,75
Salut = "Bon après-midi"
CASE Else
Salut = "Bonsoir"
End Select
MsgBox

Il y a des variantes…

C’est la structure de contrôle la plus pratique pour traiter des cas qui s’enchainent bien.
Il faut, néanmoins, bien veiller à cet enchainement

65
Conditions d’un Test : les structures de contrôles utilisent des
opérateurs de comparaison

Égalité Comme (égalité de deux chaines de caractères)


IF A = B THEN IF AA Like BB THEN
‘ action si A = B est VRAI ‘ action si chaines AA et BB identique
… …
ELSE ELSE
‘ action si A = B est FAUX ‘ action si A = B est FAUX
… …
End If End If

Supériorité stricte
IF A > B THEN
Égalité de deux objets
‘ action si A > B est VRAI IF A is B THEN
… ‘ action si l’objet A et l’objet B
ELSE sont identiques
‘ action si A > B est FAUX …
… ELSE
End If ‘ action si A > B est FAUX

End If
Infériorité large
IF A <= B THEN
‘ action si A <= B est VRAI Opérateurs logiques : de même entre 2 expressions

ELSE
‘ action si A > B est FAUX Or : X Or Y au moins l’une des 2 est VRAIE
… Xor : X Xor Y une seule des 2 est VRAIE
End If
And : X And Y les 2 sont VRAIES
Différence
IF A <> B THEN Eqv : X Eqv Y les 2 sont VRAIES ou
‘ action si A <> B est VRAI les 2 sont FAUSSES

ELSE
‘ action si A > B est FAUX Not : Not X FAUX si X est VRAIE
66
VRAIE si X est FAUX
Avançons dans le VBA pour Excel : les événements et leur programmation :

Événement : action déclenchant l’appel d’une méthode (afin qu’elle s’exécute)

VBA avancé

67
Les formulaires personnalisés : UserForm

En VBA ces boîtes sont appelées feuilles ou encore formulaires :


deux phases :
1. le développement visuel de la feuille : son dessin => on créé l’interface dont on a besoin
2. l’association de code aux différents éléments de ce formulaire

1. Dessin du formulaire :
on place des ‟contrôles” sur la feuille (parmi une liste fournie par l’IDE)
chaque contrôle a ses propriétés, ses méthodes et ses événements

il y a les contrôles qui interagissent avec l’utilisateur => contrôle interactifs


il y a les contrôles statiques => seulement modifiables par le code

2. Créer un nouveau formulaire :


sélectionner le VBAProject concerné
Menu : Insertion : UserForm

68
Les formulaires personnalisés : UserForm (2)

Premiers éléments de dessin

En VBA ces boîtes sont appelées feuilles ou encore formulaires :


Menu : Insertion : UserForm : une fenêtre UserForm s’ouvre, la boîte à outils aussi

la boîte à outils contient des contrôles :


objets que l’on peut poser sur le
formulaire, qui disposent donc :
- de propriétés
- de méthodes
- d’événements

69
Les formulaires personnalisés : UserForm (3)

En VBA ces boîtes sont appelées feuilles ou encore formulaires :


La fenêtre propriétés permet de modifier directement (sans code) certaines d’entre elles

le redimensionnement de la feuille se fait manuellement


ou bien par lignes de code

la propriété Caption = libellé apparaissant dans la barre de titre


F1 après avoir sélectionné une propriété ouvre la page d’aide de Microsoft !

70
Les formulaires personnalisés : UserForm (4)

Listons quelques contrôles :

Outil Sélection
Contrôle Label : zone texte pour identifier

Contrôle TextBox : zone de texte saisie par l’utilisateur


Contrôle ComboBox : liste modifiable par l’utilisateur
Contrôle ListBox : liste déroulante de choix possibles
Contrôle CheckBox : case à cocher
Contrôle OptionButton : choix parmi plusieurs options
Contrôle ToggleButton : option activable ou désactivable par bouton bascule
Contrôle Frame : permet de regrouper logiquement un ensemble de contrôles
Contrôle CommandButton : bouton associé à une action
Contrôle TabStrip : ajoute des onglets à l’UserForm
Contrôle MultiPage : plusieurs pages dans l’UserForm
Contrôle ScrollBar : barre de défilement horizontale ou verticale
Contrôle SpinButton : toupie de 2 flèches pour sélectionner une valeur
Contrôle Picture : permet d’insérer une image
Contrôle RefEdit : récupère l’adresse d’une plage de cellules

Les contrôles sur un Userform permettent de se recréer une interface très complète, mais l’apprentissage prend un peu de temps…

La boîte à outils en présente un certain nombre, de base, mais il est possible d’en ajouter.
71
Un formulaire classique : la saisie d’un nouvel article dans une base de données

Tout d’abord, créons le formulaire (ou Userform) ! Deux boîtes apparaissent alors :

Dans le Menu de l’IDE : lançons l’insertion d’un :

La boîte à outils de gestion du UserForm n’apparaît que quand on clique sur le UserForm

72
Un formulaire classique : la saisie d’un nouvel article dans une base de données (2)

Dans la fenêtre de Propriétés du UserForm :


Modifions sa propriété (Name) par F_Saisie

Le Nom de l’objet est changé, mais pas l’affichage de celui-ci


(constatez-le avant de faire la suite)

Modifions sa propriété Caption par Nouvel article


=> La barre du UserForm est changé !
(constatez-le avant de faire la suite)

73
Notre formulaire de saisie d’un nouvel article : premier aperçu

Dans la fenêtre de Propriétés du UserForm :

74
Notre formulaire de saisie d’un nouvel article : Ajoutons les zones de notre Formulaire
soit 6 intitulés et 6 zones de texte à l’aide de la boîte à outils

Dans la fenêtre de Propriétés du UserForm :

On recopie cinq fois ce bloc de deux Controls

75
Exemple de question

76
À l’aide de l’explorateur d’objet : premier élément de réponse

Voir l’exemple de code


utilisant cette propriété

77
Une fois l ’élément sélectionné, cliquer sur le point d’interrogation, lecture de la doc Microsoft

78
Exemple de question

Vous créez une ligne de code juste dans le but de surligner le mot, puis cliquez sur le point d’interrogation pour consulter la doc
Microsoft
Voir page suivante la réponse

79
Réponse trop imprécise, on tape alors le mot Integer dans la barre de recherche de l’aide en
ligne Microsoft

Là, cette nouvelle requête va nous fournir la solution ! Réponse compliquée à trouver.

Notez un autre site beaucoup plus simple à utiliser :

80
Exemple de question

Ne pas confondre le Nom et le Caption


Ici : Nom = UserForm1
Caption = MonFormulaire
81
Les objets ‟formulaires” en VBA

Un objet UserForm c’est : une fenêtre, ou une boîte de dialogue, qui entre dans la composition d’une interface utilisateur

ce n’est pas un classeur, ce n’est pas une feuille de calcul !

Un objet UserForm, le plus souvent, se construit dans l’environnement de développement,


puis s’utilise dans le cadre d‘un projet Excel.

Comme tout objet du modèle Excel, l’Userform :


a des propriétés,
a des méthodes,
a des événements

Voir l’explorateur d’objets

Premier travail : 1°) afficher un formulaire vide Par défaut, notre première boîte de dialogue
à partir de la fenêtre propriétés : sera modale, c’est-à-dire que l’utilisateur
personnaliser son nom : frmVide devra la refermer avant de pouvoir effectuer
personnaliser le titre de celui-ci : Mon premier formulaire tout autre opération

2°) afficher ce formulaire :


à partir de l’environnement de développement : fenêtre Explorateur de projet, ligne frmVide : Clic_droit, choix : code
Là, on peut taper du code

Notre premier code : Sub AfficherFrmVide()


frmVide.Show
End Sub
82
Les objets ‟formulaires” en VBA (2)

Deuxième travail : 1°) afficher une boîte de dialogue : formulaire non modale, et posons dedans quelques contrôles
à partir de la fenêtre propriétés :
personnaliser son nom : frmTestNonModal
personnaliser le titre de celui-ci : Mon formulaire Test

2°) afficher ce formulaire :


à partir de l’environnement de développement : fenêtre Explorateur de projet, ligne frmVide : Clic_droit, choix : code
Là, on peut taper du code

Notre premier code : Sub AfficherFrmVideNonModal()


frmTestNonModal.Show vbModeless
End Sub

Par défaut, notre première boîte de dialogue


sera modale, c’est-à-dire que l’utilisateur
devra la refermer avant de pouvoir effectuer
tout autre opération

83
Exemple de question

84
Exemple de question

85
Exemple de question

Premiers constats :
Nous allons devoir créer :
- Une Input Box
- Une Msgbox

Sub essai_accueil()
' solution questionnaire d'accueil
Dim Reponse As String, Reponse_Accueil As String
Dim Texte_dans As String, Texte_Entete As String

Texte_dans = "Bonjour, quel est votre nom ?"


Texte_Entete = ""

Reponse = InputBox(Texte_dans, Texte_Entete)

Reponse_Accueil = MsgBox "Bonjour " + Reponse

86
Exemple de question

87
Exemple de question

88
Exemple de question

Exemple de macro infini :

Sub essai_infini()
' solution
For i = 1 to 2
i = i – 1
Next i
End Sub

89
Exemple de question :
Ecrire une macro qui écrive une donnée quelconque dans une cellule choisie de la Feuil1
Puis, permettez à l’utilisateur de lancer cette macro par un clic sur un bouton présent sur cette Feuille

Choisissons, par exemple, d’écrire en C2 (donc 2ème ligne, 3ème colonne)

Première possibilité :
Sub essai_1()
Cells(2, 3) = 37
End Sub

Deuxième possibilité :
Sub essai_ecrit()
Range("C2") = 37
End Sub

Troisième possibilité :
Sub essai_ecrit()
Worksheets("essai").Cells(2, 3) = 37
End Sub

Quatrième possibilité :
Sub essai_ecrit()
Worksheets("essai").Range("C2") = 37
End Sub

90
Exemple de question : Portée d’une variable

A l’intérieur d’une procédure, la variable est uniquement utilisable, accessible, à l’intérieur de cette procédure, et pendant la
durée de vie de celle-ci
Sub Exemple_1 ()
Dim X

End Sub

Pour qu’elle garde cette valeur (et resserve…) après la fin de l’exécution de la procédure, il faut la déclarer avec le mot STATIC
Sub Exemple_1 ()
Static X
X = X + 1

End Sub

A l’extérieure des procédures d’un module MAIS déclarée en tête de celui-ci, section Déclarations (avant, donc, toute procédure),
la variable est alors utilisable, accessible, dans toutes les procédures de ce module
Dim X

Sub Exemple_1 ()

End Sub

Pour qu’une variable soit accessible par toutes les procédures de tous les modules des Projets VBA ouverts, il faut la déclarer
dans la section Déclarations de n’importe quel module, à l’aide du mot-clé : Public

91
Exemple

92
Exemple de question : procédure événementielle

Il faut aller écrire dans le code lié à la Feuil1


En haut à gauche, choisir Worksheet
En haut à droite, choisir l’evt Activate
Alors l’IDE créé le sub qui va bien, et on le remplit

93
Exemple de question

94
Exemple de question :

Cliquer sur le ? Du Menu de l’IDE, puis, dans la doc MSFT écrire en zone de recherche le mot-clé ChDir (et choisir le résultat « avec VBA »)

95
Exemple de question :

Faire clic-droit sur le Mot-Clé


Et choisir : VBAProject Propriétés du projet
pour ouvrir la boîte de dialogue, là onglet Protection !

Ne sera effectif qu’après sauvegarde du dossier, fermeture de celui-ci, lors de la prochaine ouverture.

96
Exemple de question :

97
Exemple de question :

98
Exemple de question :
quelles sont les propriétés de l’objet Application qui sont en lecture seule

99
Exemple de question :

100
Exemple de question :

Pour chacune des propriétés proposées


On la sélectionne, partie de droite,
Et on lit en bas si elle est en lecture seule
Ou non !

101
Exemple de question :

102
Exemple de question :

103
Exemple de question :

104
Exemple de question :

105
Exemple de question :

106
Exemple de question :

107
Exemple de question :

108
Exemple de question :

109
Info pratique : les macros complémentaires

Voir le tutoriel sur :


https://www.developpez.net/forums/blogs/346483-philippe-tulliez/b9941/vba-excel-creer-macro-complementaire/

110

Vous aimerez peut-être aussi