Informatique de Gestion part I – Macro begins L3 – IO MER Pierre.sournac@gmail.com
Prise de connaissance du contexte de travail L’objectif principal de ce cours est de consolider et améliorer vos connaissances concernant la production automatisée d’information par le traitement de données. La réalisation d’outils de gestion passera par l’apprentissage du langage de programmation VBA, et la maitrise des concepts avancés des tableurs. Prérequis : maitrise des bases des tableurs concept d’algorithmique
Concepts pour la programmation avancée EXCEL VBA (Visual Basic pour Application) est un langage de programmation permettant d’exécuter les nombreuses fonctionnalités de l’Application EXCEL Une macro (=programme écrit en VBA) permet : D’automatiser des tâches répétitives Créer des boites de dialogue pour rendre l’outil Excel plus « convivial » Une macro peut être créer à partir de l’enregistreur de Macros ++ aucune connaissance du langage VBA nécessaire -- exécution limitée à une plage de cellules, code produit pas toujours efficace Moralité : pour avoir des macros propres, efficaces et interactives, il est nécessaire de programmer en VBA (ou du moins de comprendre le code pour l’adapter).
Application en contexte Outils de planification : Outil de reporting : Formulaire de saisie :
Enregistreur de macro Création d’une macro avec enregistreur : Écrire Hello dans la cellule B3 et World dans la B5 Attention particulière : Choix de la cellule de départ (définie ou active) Par défaut l’enregistrement d’une macro se fait avec les références absolues de la cellule Sub Ecrire_Hello_World() ' ' Ecrire_Hello_World Macro Range("B3").Select ActiveCell.FormulaR1C1 = "Hello" Range("B5").Select ActiveCell.FormulaR1C1 = "World" Range("B8").Select End Sub Sub Ecrire_Hello_World2() ' ' Ecrire_Hello_World Macro Cells(3, 3).Value = "Hello2" Cells(5, 3).Value = "World2" End Sub
L’environnement Visual Basic Editor Explorateur de projet Propriétés Module de code
L’environnement Visual Basic Editor L’explorateur de projet Présentation hiérarchisée des projets ouvert : 1 classeur excel = 1 projet VBA un dossier MICROSOFT EXCEL OBJETS qui contient les éléments du projet Le classeur Les feuilles de calcul le composant le dossier MODULES qui contient les modules de code du projet Exemple : le module MODULE1 qui contient les macros Ecrire_Hello_World Les procédures Une procédure est un enchainement d’instructions ne retournant pas de valeur. L’enregistreur de macro ne génère que des procédures. Syntaxe : Début de déclaration : Sub / fin de déclaration end Sub
L’environnement Visual Basic Editor Les objets VBA est un langage orienté Objet, chaque élément est un objet : Excel est l’objet Application Le classeur est l’objet Workbook Une feuille est l’objet Worksheet Une plage de cellule (ou 1) est l’objet Range L’accès aux objets Il existe différent moyen d’appeler/faire référence aux objets : Workbooks("Classeur1.xls").Worksheets("Feuil1") Application.Workbooks("Classeur1.xls").Worksheets("Feuil1") Range("A1:C5") Mise en application : faire un copier coller vers une autre feuille.
L’environnement Visual Basic Editor Les propriétés des objets Les objets possèdent des caractéristiques, ce sont les propriétés : Syntaxe : Objet.propriété Exemples : Les méthodes des Objets Il s’agit des actions réalisables sur l’objet : Syntaxe : Objet.méthode Mise en application : écrire le résultat de la multiplication des cellules A2 et B2 de la feuille « donnees », dans la cellule A3 de la feuille total, afficher le résultat à l’écran. Cells(3, 3).Value = "Hello2" Range(“A13”).Value = "World2" Cells(5, 3).Font.Bold = True ActiveCell.Font.Bold = True Selection.Copy Range(“A13”).Select Range(“A1:B16”).ClearContents
Interro Surprise Que réalise cette macro ? Celle-ci ? Quelle cellule a une valeur en italique ? Celle-ci ? Modifier la macro pour : Afficher Hello dans la colonne C et E. Afficher Hello dans la colonne A, World dans la colonne F Sub quoi1() Worksheets("Classe").Range("A2").Select ActiveCell.Value = “Hello" Sheets("Classe").Range("A1").Value = ActiveCell.Value Selection.Font.Italic = True End Sub Sub quoi2() Worksheets("Classe").Range("A1").Select ActiveCell.Value = "Hello" Sheets("Classe").Range("A2:B7").Value = ActiveCell.Value Selection.Font.Italic = True End Sub
Exemples Range Les méthodes des Objets Ecrire un numéro dans plusieurs cellules: ActiveSheet.Range("A1:B10").Value = 1 Range("A1","B10") = 1 Ecrire un numéro dans l’intersection entre deux « Range » Range("C1:C10 A6:E6") = 1 Ecrire un numéro dans 5 cellules non contigües Range("A1, A3, A5, A7, A9") = 1 Les méthodes des Objets Ecrit la valeur 7 dans la cellule D3 (ligne 3, colonne 4) ActiveSheet.Cells(3,4) = 7 ActiveCell.Cells(1,1) = 5 Ecrit le 200 dans la cellule A2 (5ième position dans le range de 40 positions) Range("A1:D10").Cells(5) = 200 ActiveSheet.Cells.ClearContents
Exemples Offset Retourne un objet Range, comme pour les propriétés Range et Cells Offset s’applique uniquement à un objet Range object.Offset(decalageligne, decalagecolonne) Deux arguments: correspondent à la position relative à partir de la cellule supérieure de l’objet range spécifié. Les arguments peuvent être positives (vers le bas ou vers la droite), négatifs (vers le haut ou vers la gauche) ou nuls ActiveCell.Offset(1,0).Value=12 ActiveCell.Offset(-1,0).Value=15 L’objet Range est contenu dans un objet WorkSheet, 3 façons de le référencier: Avec la propriété Range de la classe Worksheet ou Range Avec la propriété Cells d’un objet Worksheet Avec la propriété Offset d’un objet Range
Principes de la programmation VBA Syntaxe et saisie Variables Les variables sont des « boites » permettant de stocker des données pour les réutiliser au besoin. Règles de nommage : Toujours une lettre comme premier caractère, ensuite peu importe. VBA ne distingue pas la casse Attention certains noms sont réservés et caractères interdit (Next, $, # …) Sub Soleil() ' Commentaire i=1 Dim i As Integer For i = 1 To 4 If i < 4 Then MsgBox (i) ElseIf i = 4 Then MsgBox ("soleil") End If Next i End Sub Déclaration de la procédure ' Commentaire Déclaration d’une variable Affectation de la variable Structure de boucle for structure conditionnelle Instruction VBA Déclaration de fin de procédure
Les structures For each - Next If - Then Réalisation d’actions sans avoir à connaitre le nombre d’éléments : If - Then Syntaxe For Each élément In groupe [instructions] [Exit For] Next [élément] Sub CompterFeuilles() Dim Item As Worksheet For Each Item In ActiveWorkbook.Worksheets Msg Item.Name Next Item End Sub If condition_1 Then Instructions_1 ElseIf condition_2 Then Instructions_2 ElseIf condition_3 Then Instructions_3 ... Else Instructions_n End If If Condition Then Instructions_si_vrai Else [Instructions_si_faux] End If
Les structures For each - Next If - Then Réalisation d’actions sans avoir à connaitre le nombre d’éléments : If - Then Syntaxe For Each élément In groupe [instructions] [Exit For] Next [élément] Sub CompterFeuilles() Dim Item As Worksheet For Each Item In ActiveWorkbook.Worksheets Msg Item.Name Next Item End Sub If condition_1 Then Instructions_1 ElseIf condition_2 Then Instructions_2 ElseIf condition_3 Then Instructions_3 ... Else Instructions_n End If If Condition Then Instructions_si_vrai Else [Instructions_si_faux] End If
Les structures Do - Loop For - next Réalisation d’actions de façon répétées Variante pour que l’instruction soit exécutée au moins une fois For - next Répétition d’actions X fois. ‘ GO Tant que la condition est vraie, Do While Condition [Instructions] Loop ‘ GO Tant que la condition n'est pas vraie, Do Until Condition [Instructions] Loop ‘ GO Tant que la condition est vraie, Do [Instructions] Loop While Condition ‘ GO Tant que la condition n'est pas vraie, Do [Instructions] Loop Until Condition For compteur = nbdébut To nbfin [Step nbpas] Instructions ‘ exécuter nb fois Next compteur