CoursVBA BFNI Niveau1&2
CoursVBA BFNI Niveau1&2
CoursVBA BFNI Niveau1&2
http://www.labri.fr/perso/hocquard
Algorithmie Programme
1. Déterminer les besoins et fixer les objectifs : que doit faire le logiciel, dans quel cadre va-
t-il servir, quels seront les utilisateurs types ? On rédige un cahier des charges avec le
commanditaire du logiciel (Remarque : commanditaire = maître d’ouvrage ; réalisateur =
maître d’œuvre)
2. Conception et spécifications : quels sont les fonctionnalités du logiciel, avec quelle
interface ?
3. Programmation : modélisation et codage
4. Tests : obtient-on les résultats attendus, les calculs sont corrects, y a-t-il plantage et dans
quelles circonstances ? (tests unitaires, tests d’intégration, etc.)
5. Déploiement : installer-le chez le client (vérification des configurations, installation de
l’exécutable et des fichiers annexes, etc.)
6. Maintenance : corrective, traquer les bugs et les corriger (patches) ; évolutive (ajouter
des fonctionnalités nouvelles au logiciel : soit sur l’ergonomie, soit en ajoutant de
nouvelles procédures)
Alt + F11
• Un objet est constitué d’attributs (ou propriétés) et de méthodes qui lui sont
associées
• Les objets existants sont constitués en hiérarchie (relation de composition)
Application
• Concept clé
• On rajoute un « s »!
– Workbooks : collection des objets Workbook
– Worksheets : collection des objets Worksheet
– … etc.
• Opérateur point ( . )
– Exemple:
Application.Workbooks("Classeur1.xlsx").Worksheets(1).Range("A1").Value=9
– Worksheets(1).Range("A1").Value=9
• Exemples:
– Worksheets("Feuil1").Activate
– Range("A1").Copy Range("B1")
Visual Basic n’est pas « case sensitive », il ne différencie pas les termes écrits en
minuscule et majuscule.
• Numérique qui peut être réel (double) ou entier (long). Les opérateurs
applicables sont : +, -, *, / (division réelle), \ (division entière), mod (modulo)
Exemple : 5 / 2 2.5 ; 5 \ 2 2 ; 5 mod 2 1
• Booléen (boolean) qui ne prend que deux valeurs possibles : True et False. Les
opérateurs sont : not, and, or.
Exemple : True and False False
• Chaîne de caractères (string) qui correspond à une suite de caractères délimitée par des
guillemets ‘’ ’’. Les opérateurs possibles sont la concaténation, la suppression d’une sous-
partie, la copie d’une sous-partie, etc.
Exemple : ‘’toto’’ est une chaîne de caractères, toto on ne sait pas ce que c’est (pour l’instant)
• Type • Valeurs
• Boolean • Vrai, faux
• Integer • Entiers
• Long • Entiers
• Single • Réels
• Double • Réels
• Currency • 4 chiffres après la ,
• Date • 1/1/100 à 31/12/9999
• String • Chaines de caractères
• Object • Tout objet
• Variant • N'importe quel type
Exemples
Les variables correspondent à des identifiants auxquels sont associés des valeurs d’un type
donné. Elles matérialisent un espace mémoire avec un contenu que l’on peut lire ou écrire.
FONCTIONS PERSONNALISÉES
Une fonction personnalisée est une fonction VBA qui peut être
appelée dans un classeur Excel. Elle prend en entrée des
informations en provenance des feuilles du classeur
(principalement) et renvoie une valeur insérée dans une cellule (le
plus souvent également).
Formalisme Function NomFonction(paramètres) As type de donnée
STRUCTURES ALGORITHMIQUES
If condition Then
bloc d’instructions
Syntaxe
Permet d’activer une partie du code en fonction des valeurs prises par une
variable de contrôle. Peut se substituer au IF, mais pas toujours, tout dépend
de la forme de la condition (condition composée, on doit passer par un IF).
Case valeur 2
bloc d’instructions
...
Case Else
bloc d’instructions
End Select
(1) Variable est la variable de contrôle, elle peut être de n’importe quel type en VBA, y compris un
réel ou une chaîne de caractères
(2) Valeur doit être de type compatible avec variable
(3) La partie Case Else est facultative
(4) L’imbrication avec un autre IF ou un autre Select Case (autre variable de contrôle) est possible.
Case Else
bloc d’instructions
End Select
bloc d’instructions
...
Next indice
Entrée : n (entier)
Sortie : S (réel)
Calcul : S = 1² + 2² + … + n²
Do While condition
Syntaxe
Bloc d’instructions...
...
Loop
Entrée : n (entier)
Sortie : S (réel)
Calcul : S = 1² + 2² + … + n²
Syntaxe Do
Bloc d’instructions
...
...
Loop While condition
Les boucles DO contrôlées par une condition sont très riches en VBA.
LE TYPE RANGE
Le type RANGE désigne une plage de cellules, c’est un type spécifique à Excel.
LE TYPE VARIANT
Le type de variant peut gérer tout type de valeurs. Il est très souple,
particulièrement commode quand on ne connaît pas à l’avance le type à
utiliser. Mais attention, il ne faut pas en abuser, il est très lent parce que
multiplie les vérifications à chaque accès à la variable correspondante.
On peut s’en servir pour renvoyer un tableau. Une fonction peut donc renvoyer
plusieurs valeurs d’un coup, à l’instar des fonctions matricielles d’Excel (il faut valider
la saisie de la fonction avec la séquence de touches CTRL + MAJ + ENTREE).
Une manière simple de générer une macro est de lancer l’enregistreur de macros.
Du code VBA est automatiquement généré.
Un nouveau module
« Module1 » est
automatiquement créé.
Avantages :
• Il n’y a pas plus simple pour produire du code, on peut créer et exécuter une macro
sans aucune notion de programmation
• Il nous donne des indications précieuses sur les commandes associées aux objets
Excel
Inconvénients :
• On travaille à structure fixée, si la configuration de la feuille change, il n’est pas
possible de lancer la macro
• On ne bénéficie pas de la puissance des structures algorithmiques
En définitive :
• Il peut nous aider à rédiger notre code en nous donnant des pistes sur la syntaxe
des commandes et les objets adéquats à manipuler (ex. imprimer automatiquement
des feuilles, on lance l’enregistreur une fois, on intègre son code dans le notre à
l’intérieur d’une boucle).
Ecrire directement des macros est simple une fois assimilé la philosophie de
l’approche, et identifié les principaux objets et l’accès à leurs propriétés et méthodes
(l’enregistreur peut nous y aider).
Activer (sélectionner) le
Classeurs Workbooks(‘’classeur1.xlsm’’).Activate classeur dont le nom de
fichier est ‘’classeur1.xlsm’’
Sub MonMinBleu()
'variables intermédiaires
'min va servir de cellule témoin
Dim cellule As Range, min As Range
'initialisation du témoin sur la 1ère cellule
Set min = Selection.Cells(1, 1)
'parcourir
For Each cellule In Selection Range est un objet. Une
'comparer avec le contenu de la cellule témoin affectation pour une variable
If (cellule.Value < min.Value) Then objet doit être réalisée à
'màj de la cellule témoin
l’aide de l’instruction Set
Set min = cellule
End If
Next cellule
'mettre la couleur pour la cellule minimale
min.Font.ColorIndex = 5
End Sub
Une sélection peut être multiple aussi c.-à-d. contenant plusieurs ‘’zones’’
Un exemple de sélection
multiple avec 3 zones.
Sub MesBoitesDeDialogue()
'var. intermédiaire
Dim prenom As String
'saisie
prenom = InputBox("Entrer votre prénom", "Saisie", "")
'affichage
MsgBox ("Bonjour " & prenom)
End Sub
• Déclaration
– Dim MonTableau(1 to 100) As Integer
– Index débute à 0 par défaut;
• Option Base 1
• Tableaux multidimensionnels
– Dim MonTableau(1 to 10, 1 to 10) As Integer
• Affectation
– MonTableau(3,4) = 125
• Tableaux dynamiques
• Création
– Dim MonTableau() As Integer
• Redimensionnement
– ReDim MonTableau(NombreElements)
– Ou alors…
LES ENREGISTREMENTS
• Syntaxe :
Type NomEnregistrement
Champ1 As type1
Champ2 As type2
…
End Type
Champs
• Exemple : simples
• Exemple :
Type ouvrage Type MaDate
code as Integer jour As Integer
titre As String*40 mois As Integer
auteur As String*50 annee As Integer
editeur As String*50 End Type
dateparution As Madate
End Type
Un étudiant est défini par son nom, son prénom, sa date de naissance et
sa note :
Private Type Etudiant
nom As String * 40
prenom As String * 40
dateNaissance As Date
note As Double
End Type
• Longueur: Len(chaîne)
• MAJ, min:
• LCase("BonjouR") retourne "bonjour"
• UCase("BonjouR") retourne "BONJOUR"
• Format(Date, "yy/mmmm/dd")
– La fonction Date retourne la date actuelle. Celle-ci doit être formatée
avant affichage dans une boîte de dialogue, sinon elle sera affichée
sous la forme spécifiée dans les options régionales (dd/mm/yy)
DÉVELOPPEMENT RAPIDE
D’INTERFACES
• La case à cocher
– Accelerator
– Value
• Zone de liste modifiable
– ListRow
– RowSource
– Value
• Bouton
– Annuler
– Default
• Image
– picture
• Lorsque l'on tape Range("A1"). Visual Basic propose toute une liste de
méthodes et de propriétés disponibles pour cet objet.
• Une méthode est une action que l'on peut exécuter sur un objet.
– Sheets(1).Range("A1").Borders.Color = vbRed
Ou
– Sheets(1).Range("A1").Borders.ColorIndex = 13
• Syntaxe :
Type NomEnregistrement
Champ1 As type1
Champ2 As type2
…
End Type
• Exemple :
– caractériser l’objet
+
– ensemble de programmes (méthodes) servant à modifier les attributs.
• Intérêts :
• Problèmes :
– Impossible de créer une propriété en lecture (ou écriture) seule.
– Impossible de savoir quand une propriété est modifiée.
– Impossible de vérifier la validé des valeurs (par exemple une date de
naissance doit toujours être une date révolue).
• Exemples :
Merci
Hervé Hocquard ([email protected])
http://www.labri.fr/perso/hocquard/Teaching.html
Ricco Rakotomalala
http://eric.univ-lyon2.fr/~ricco/