Programmation VBA

Transcription

Programmation VBA
Activer l’onglet Développeur (Excel)
Programmation VBA
Michel Reid
• Cliquez sur le bouton Office (coin supérieur
gauche)
• Cliquez sur le bouton Options Excel
• Dans la section Standard, cochez la case
Afficher l’onglet Développeur dans le ruban
Identificateurs
• Suite de caractères ( lettres, chiffres ou _ ) qui
commence par une lettre.
• Caractères de ponctuations interdits ainsi que
#, blanc , ? , …
• Maximum de 255 caractères
• Pas sensible à la casse.
Déclaration d’une variable
• Une variable est une information dont la valeur peut
changer au cours de l’exécution du programme.
• Syntaxe de la déclaration :
Types de base
•
•
•
•
•
•
Entier
Réel
Booléen
Chaîne de caractères
Un caractère
Quelconque
Integer
Single
Boolean
String
String * 1
Variant
Commentaires
• La fin d’une ligne à partir d’un apostrophe
• Une ligne débutant par Rem
– DIM nom de variable AS type, nom de variable AS type
• Dim intL eChiff re As Intege r
• Dim intC hiffre A AS I nteger , intC hiffre B As
Integer
• Dim intC hiffre 1, int Chiffr e2 as Intege r
– Pour cette dernière déclaration, seule la
variable intChiffre2 sera de type Integer.
1
Opérateurs arithmétiques
(en ordre de priorité)
Affectation
• En utilisant l’opérateur =
age = 23
a
= age
Range(“A1”).value = age
age = Range(“D2”) „value est la propriété
par défaut pour Range.
• La variable ou la propriété située du coté gauche du
= représente un contenant, l’endroit où sera déposée
la valeur, alors que la variable, ou la propriété du
côté droit représente la valeur contenu dans la
variable ou la propriété.
• ^
• • *, /
• \
• MOD
modulo ( le reste de la division, n’est possible
qu’entre 2 entiers )
• +, addition et soustraction
• & (ou +) Concaténation
Opérateurs logiques
(En ordre de priorité)
Opérateurs relationnels
• =
• <>
• NOT
•
•
•
•
• OR
• Xor
•
•
est égale à
est différent de
<
est inférieur à
<=
est inférieur ou égale à
>
est supérieur à
>=
est supérieur ou égale à
Pas d’ordre de priorité (entres eux)
Moins prioritaire que opérateurs arithmétiques
Constantes
puissance
négation
multiplication et division (réelle)
division entière (sans reste)
• AND
le contraire de (non)
et logique
ou logique
ou excl usif
• Moins prioritaires que les opérateurs relationnels
Saisie de donnée avec InputBox
• Utilise le mot clé Const
• Syntaxe :
• Syntaxe:
InputBox(prompt[, title ] [, default] [,
xpos] [, ypos ] [, helpfile, context])
Const nom de la constante
AS type = valeur
Exemple : Const TPS AS Single = 0.07
• L’affectation ne peut se faire qu’à la déclaration.
– Résultat : Retourne un String
– Arguments :
•
•
•
•
Prompt : Le message incitatif
Title : le titre de la boîte de dialogue (facultatif)
Default : la valeur suggérée par défaut (facultatif)
xpos et ypos : Positions, en twips (environ 1440 par pouce) à partir du
coin supérieur gauche de l’écran (facultatif, si omis, la boîte de dialogue
est centrée)
• Les autres ne seront pas utilisés dans le cadre de ce cours.
2
Afficher un message avec msgBox
Syntaxe
• Syntaxe :
MsgBox( prompt [, buttons ] [, title] [,
helpfile, context])
– Résultat : Le bouton appuyé
– Arguments :
• Prompt : le message à afficher.
• Buttons : le(s) bouton(s) à affichés (facultatif, par défaut
vbOkOnly, constante dont la valeur est 0).
• Title : Titre affiché par la boîte de dialogue (facultatif).
Instructions de contrôle if…else…end if
Instructions simples
Ex: total = prix + taxes
Instruction structurée
if (if
Bloc d’instructions
Plusieurs instructions simples ou structurées entre then et
else ou entre else et end if
S’il n’y a pas de clause else et que l’instruction est simple alors on
utilise : if condition then instruction Dans ce cas il n’y a pas de
end if
Instructions de contrôle select case
• Syntaxe:
Select case expression
Case cte1, cte2
Instruction1
Case borne1 To borne2
Instruction2
Case is opérateur relationnel cte3
instruction3
Case else
Instruction4
End select
if condition Then
Instruction1
else
Instruction2
end if
La condition est une expression dont le résultat est booléen.
Si celle-ci est vraie, dans ce cas l’instruction1 est exécutée.
Sinon, l’instruction2 est exécutée.
Le else est facultatif
Instruction1 et instruction2 sont soit des instructions
simples, structurés ou encore composés (blocs
d’instructions)
Instructions de contrôle select case
Cas particulier du if imbriqué lorsque l’on test l’égalité
d’une expression avec plusieurs valeurs qui sont,
habituellement, mutuellement exclusives.
Exemple:
Expression, habituellement sur une ligne.
Instruction de contrôle comme un if…else…end
imbriqué), Select case ou une boucle
Instructions de contrôle if…else…end if
Select C ase un Chiffr e
case 1
a = b + c
case is >= 2
a = b * c
Case else
a = b / c
End sele ct
Instructions de contrôle select case
• Le case else est facultatif, s’il est présent, c’est
le point d’entrée de toutes les valeurs qui ne sont
pas spécifiées dans un case.
• La virgule , est utilisée pour séparer les valeurs
dans une liste de valeurs.
• To est utilisé lorsque l’on définie une intervalle de
valeurs successives.
• Is est utilisé lorsque l’on évalue une relation (=,
<, >, etc.) avec une seule borne
• Si 2 clauses Case correspondent à l’expression
évaluée, la première définie prévaut.
3
Instructions de contrôle boucle while
• Syntaxe
while condition
instruction
wend
Instructions de contrôle boucle for… next
• Syntaxe
for compteur=expr1
instr uction
next compteur
to expr2 step expr3
• L’instruction peut être simple, structurée ou un bloc,
le bloc se termine avec le mot clé wend.
• Si la condition est vraie, l’instruction de la boucle est
exécutée.
• La condition est évaluée au début de la boucle, donc
il est possible que l’instruction dans la boucle ne soit
jamais exécutée.
• L’instruction peut être simple, structurée ou un bloc.
• expr1: initialisation avant la 1ière itération.
• expr2: Valeur limite, dernière valeur pour laquelle il y aura
une itération
• expr3: le pas utilisé pour l’incrémentation à la fin de
l’itération. Facultatif, par défaut = 1
• Compteur après next facultative, par défaut même que pour
expr1.
Instructions de contrôle boucle do…Loop
Instructions de contrôle boucle do…Loop
• Syntaxe
• Syntaxe alternative
do
do
instruction
Loop while condition
instruction
Loop until condition
• L’instruction peut être simple, structurée ou un bloc.
• Si la condition est vraie, l’instruction de la boucle est
ré-exécutée.
• L’instruction sera exécutée au moins une fois.
• Si la condition est vraie, l’instruction de la
boucle n’est pas ré-exécutée.
• L’instruction sera exécutée au moins une fois.
Instructions de contrôle boucle do…Loop
Instructions de contrôle boucle do…Loop
• Syntaxe alternative
• Syntaxe alternative
Do while condition
instruction
Loop
Do until condition
instruction
Loop
• Si la condition est vraie, l’instruction de la
boucle est exécutée.
• L’instruction peut ne jamais être exécutée
• Si la condition est fausse, l’instruction de la
boucle est exécutée.
• L’instruction peut ne jamais être exécutée
4
Fonctions
• Sous-routine qui retourne une valeur
• Syntaxe
Private Function nomDeFonction( liste de
paramètre(s)) as type de retour
déclarations locales si nécessaire
traitement
nomDeFonction = resultat
End Function
• La valeur retournée par la fonction est celle affecté
au nom de la fonction
Fonctions (suite)
• Dans la déclaration, chaque paramètre est précédé de son type
de transmission ByVal ou ByRef. Par défaut, c’est ByRef.
– Chaque paramètre doit être suivi de son type.
• À l’appel, seuls les noms de paramètres sont écrits
• Par défaut, la référence vers la valeur est passée en paramètre
(ByRef), donc tous changements dans la valeur d’un paramètre
se répercute sur la variable passée à l’appel.
• La correspondance entre les paramètres de l’appel et de la
fonction dépend de la position dans la liste des paramètres
• Les variables locales et les copies locales des paramètres
n’existent plus lorsque l’exécution de la fonction est terminée,
sauf les variables statiques.
Sous-routine
•
•
Sous-programme qui sert à regrouper les instructions d’un traitement qui va se
répéter souvent ou encore a diviser un traitement compliqué en plusieurs blocs
distincts.
Syntaxe
Visibilité sub nomDeSousRoutine( liste de paramètre(s))
déclara tions l ocales si néce ssaire
traitement
End Sub
•
La visibilité peut être:
•
•
Paramètres au besoin seulement.
Appel:
Fonctions (suite)
• Exemple :
définition :
Private Function plusGrand(byVal val1 as single,
byVal val2 as single, byVal val3 as single)
dim grand as single
if val1>val2 then
grand = val1
else grand = val2
end if
if grand > val3 then
plusGrand = grand
else plusGrand = val3
End if
End Function
• Appel : plusG
= plusGrand( taille1, taille2, 2.15)
Fonctions
• L’appel de la fonction « vaut » le résultat retourné
• La valeur retournée est la dernière affectée au nom
de la fonction.
• Une fonction ne peut retourner qu’une seule valeur
avec son nom.
• Par contre, plus d’un résultat peut être transmis en
modifiant la valeur des paramètres par référence.
• L’appel d’une fonction peut être placée n’importe où
une valeur est valide : côté droit d’une affectation,
paramètre de fonction, condition, etc.
Sous-routine
• Ne retourne pas de valeur.
• Comme une fonction, elle peut aussi recevoir une
liste de paramètres.
• Les paramètres sont traités de la même façon que
pour une fonction.
– Private : la sous-routine ne peut être appelée que du module où elle est définie
– Public : la sous-routine peut être appelée de partout
– nomDeSousRoutine liste de paramètres
– call nomDeSousRoutine ( liste de paramètres)
5
Sous-routine, arguments transmis par
références
Private sub litValeur(ByRef valALire1 as
Integer,ByRef valALire2 as integer)
valAlire1 = Val(InputBox("Entrez un entier"))
valAlire2 = Val(InputBox("Entrez un autre entier"))
End Sub
• Cette sous-routine transmet 2 résultats par
référence
• L’appel :
Objets d’Excel
•
•
•
•
Application : le programme Excel
Workbook: un classeur
Worksheet : une feuille de calcul
Range : un plage de cellules
litValeur(unEntier1,unEntier2)
Collections
• Sheets : toutes les feuilles du classeur
• Cells : toutes les cellules de la feuille (par
défaut) ou de la plage de cellules.
• Rows : toutes les lignes de la feuille ou plage.
• Columns: les colonnes de la feuille ou plage.
– Count : propriété de toutes les collections
indiquant le nombre d’éléments contenus.
Range
• On détermine la plage en donnant son
adresse:
– Range ("A1"), Range ("A1:C4")
• Comme pour tout objet, si l’on veut changer la
référence d’une variable Range, on utilise Set.
– Set unRange = Range("A1")
• Pour changer le contenu, l’attribut value:
– Range ("A1").value = 2 ou Range ("A1")=3
• Pour obtenir la plage des données contigües
– Range ("A1").currentRegion
Range
• Pour spécifier une cellule relative à la cellule
courante, on utilise offset(dep. ligne, dep col)
– Range ("A1").offset(2,3) représente la cellule D3
•
•
•
•
Une cellule d’une plage de cellule, Cells(l,c)
Range ("B2:G34").Cells(20,4) : cellule E21.
La cellule courante : ActiveCell
L’adresse de la plage de cellule courante:
– ActiveCell.address
Range
• La plage de cellules contenant l’intersection entre 2
plages de cellules:
– Intersect(Range("A1:G34"), Range("B12:F36")) : vaut
B12:G34
• Une cellule est-elle vide?
– isEmpty(Range("A1" ))
• La couleur de fond d’une cellule :
– Range("A1" ).Interior.colorIndex
• Rendre une cellule active:
– Range("A1" ).Activate
6
Événements
• Nouvelle feuille dans le classeur :
– Sub Workbook_NewSheet(ByVal Sh As Object)
• Une feuille vient d’être activée:
– Sub Worksheet_Activate()
• La plage de cellules actives d’une feuille vient de
changer (par exemple, un click de souris dans une
cellule):
– Sub Worksheet_SelectionChange(ByVal Target As Range)
• La valeur d’une cellule vient de changer:
– Sub Worksheet_Change(ByVal Target As Range)
Formulaire et contrôles
• Contrôles
– SetFocus: devient le contrôle actif (courant) pour
boutons, boîtes de texte, bouton d’option, etc.
– Bouton : cmdButton
•
•
•
•
•
•
name : nom du bouton
enabled : actif vrai ou faux
caption: libellé sur le bouton
accelerator : raccourci clavier
visible: visible vrai ou faux
tabIndex : ordre d’activation avec touche tabulation
formulaire et contrôles
– Boîte de texte: textBox
• name
• Text : la chaîne de caractère affichée dans la boîte de
texte
• enabled : Peut être modifiée par l’usager
• multiline: peut afficher sur plusieurs lignes
• tabIndex
• visible
Formulaire (UserForm) et contrôles
• Ajouter un formulaire: dans Éditeur VB, menu
insertion|UserForm
• Quelques propriétés des formulaires:
– name : le nom du formulaire
– caption : le titre du formulaire
– height: hauteur
– width: largeur
• Activer un formulaire: nomForm.show
• fermer le formulaire: End
formulaire et contrôles
• Contrôle (suite)
– bouton d’option: option button (1 actif par
groupe)
• name
• caption
• tabIndex
• value : vrai ou faux, il est sélectionné
• enabled
• accelerator
Formulaire et contrôle
– Étiquette: label
• name
• accelerator
• tabIndex
– Cadre : frame, un conteneur
• permet de regrouper des boutons d’option
• caption: titre
• enabled : le contenu est actif vrai ou faux
• tabIndex : pour le groupe
7
Formulaire : évènements
– nomDuBouton_click : évènement click sur le
bouton
– nomtextBox_change: chaque fois que le contenu
change
– nomtextBox_afterUpdate: après la saisie d’un
nouveau contenu
– nomtextBox_beforeUpdate: tout juste avant
d’effectuer la saisie d’un nouveau contenu
– nomFormulaire_activate lorsque le formulaire
devient actif.
8

Documents pareils