Introduction aux Macros Excel

Transcription

Introduction aux Macros Excel
Tableur
Macro auto enregistrée
Le langage VBA (Visual Basic For Application) est intégré aux Applications
bureautiques Microsoft. Comme tout langage informatique, il permet
d’écrire des programmes, mais autorise également l’automatisation de
manipulations faites par l’utilisateur. On peut alors parler dans ce dernier
cas de « Robot bureautique ».
Toute automatisation d’actions manuelles va se traduire par la génération
d’une « procédure ». Toute procédure commencera par le mot-clé « Sub »
et se terminera par le mot-clé « End Sub ».
L'automatisation d'un ensemble d'actions (ou instructions) prend la
dénomination de "MACRO" (abréviation de macro-instructions).
Nous allons, dans un premier temps, illustrer la notion de macro à partir de l’exemple suivant :
Tous les ans le comptable de
l’organisation, utilise un
tableau récapitulatif des
charges. Nous ferons
l’hypothèse que le contenu
des lignes est stable dans le
temps.
Notre comptable doit ajouter
une colonne correspondant à
la nouvelle année, pour
pouvoir saisir le montant des
charges de l’année en cours.
Il doit ensuite archiver les
informations de la colonne B,
car il ne veut conserver à
l’écran que les 4 dernières
années.
Quelles manipulations doit-il faire pour obtenir le résultat escompté ?
Il doit, dans un premier temps rendre la cellule F1 active, puis, générer la valeur de la nouvelle année.
Deux options possibles :
•
Soit frapper cette valeur à l’aide du clavier numérique, mais alors cette opération lui demande
de calculer cette valeur ;
•
Soit faire calculer cette nouvelle valeur en ajoutant +1 à la valeur adjacente.
C’est cette dernière solution que nous choisirons. Il faut alors élaborer une formule de calcul qui
pointe sur la cellule précédente et faire + 1. Il faut ensuite transformer le résultat en une valeur non
calculée. On peut arriver à la solution en copiant la cellule active puis en la recopiant à la même place
à l’aide de la commande « collage spécial – Valeurs ».
Il faut ensuite centrer la valeur obtenue et l’écrire en caractère gras.
Jacques Chambon
1/6
Tableur
Chaque poste budgétaire principal (Energie, Carburant…) donne lieu à la somme
des dépenses correspondantes. Il faut donc générer la somme correspondante et
ceci pour chaque poste principal.
Il faut ensuite appliquer le
format
à chaque
somme.
Plutôt que de réaliser l’ensemble de ces opérations à la main, il est possible de les écrire sous forme
de programme et de les faire exécuter par l’ordinateur.
Pour créer votre premier programme, vous allez utiliser le générateur intégré au tableur.
L'enregistreur de macros
C'est la méthode la plus simple pour obtenir une procédure VBA. On obtient du code VBA
correspondant à l'exécution d'une succession de commandes Excel.
Pour démarrer l'enregistrement, on utilise les commandes
Outils / Macro / Nouvelle Macro ..........ou bien
Ajoute une nouvelle procédure dans la feuille des modules
Pour mettre fin à l'enregistrement :
Outils / Macro / Arrêter l'enregistrement
ou bien
Remarque :
L'enregistreur de macros enregistre tout ce que vous faites, y compris vos erreurs et manipulations
parasites.
Lorsque l'enregistrement est terminé, il est souvent nécessaire de se replacer dans le module et
d'épurer le code : on éliminera une à une les lignes de code inutiles.
L’utilisateur répétera donc les manipulations préalablement décrites
l’enregistrement. Une fois la colonne créée, il suffit d’arrêter l’enregistrement.
après
avoir
lancé
Pour voir le résultat des instructions générées, il faut appeler l’Editeur de programmes en utilisant les
touches Alt + F11.
On obtient alors , dans la partie droite de l’éditeur le contenu du programme généré.
Jacques Chambon
2/6
Tableur
Sub Nouvelle_Annee()
'
' Nouvelle_Annee Macro
' Macro enregistrée le xx/xx/xxxx par jacques
'
' Touche de raccourci du clavier: Ctrl+o
'
Range("F1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]+1"
Range("F1").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues,
Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Selection.Font.Bold = True
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("E2").Select
Selection.Copy
Range("F2").Select
ActiveSheet.Paste
Range("E5").Select
Application.CutCopyMode = False
Selection.Copy
Range("F5").Select
ActiveSheet.Paste
Range("E10").Select
Application.CutCopyMode = False
Selection.Copy
Range("F10").Select
ActiveSheet.Paste
Range("E14").Select
Application.CutCopyMode = False
Selection.Copy
Range("F14").Select
ActiveSheet.Paste
Range("E22").Select
Application.CutCopyMode = False
Selection.Copy
Range("F22").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=23
Range("E30").Select
Application.CutCopyMode = False
Selection.Copy
Range("F30").Select
ActiveSheet.Paste
Range("E36").Select
Application.CutCopyMode = False
Selection.Copy
Range("F36").Select
ActiveSheet.Paste
ActiveWindow.ScrollRow = 1
Range("F1").Select
Jacques Chambon
Sub est le mot clé qui indique le début du programme.
Nouvelle_Annee est le nom du programme. Les
parenthèses sont obligatoires et peuvent contenir des
variables.
Les apostrophes précèdent des commentaires, c’est à dire
des lignes qui ne seront pas exécutées.
Positionne le pointeur sur la cellule F1
On écrit dans la cellule active la formule =LC(-1)+1
Positionne le pointeur sur la cellule F1
Copie de la sélection active
Paste = Collage donc PasteSpecial = Collage Spécial
avec comme paramètre Paste = xlvalues, c’est à dire
Collage des valeurs
Bold = caractère gras
XlCenter = centrer le contenu de la sélection.
La cellule active devient E2
Copie du contenu
On se positionne sur la cellule F2
On colle la formule précédente qui correspond à la somme
du poste « Energie »
Copie de la formule de calcul du poste « Carburant »
Copie de la formule de calcul du poste « Entretien des
Espaces Verts »
Copie de la formule de calcul du poste « Assurances »
Copie de la formule de calcul du poste « Publicité»
Cette commande correspond à un déplacement vers le
bas de la barre de défilement de 23 lignes (un écran
complet)
Copie de la formule de calcul du poste « Télécom»
Copie de la formule de calcul du poste « Transport»
3/6
Tableur
End Sub
Exécution d'une macro
Au moment de la création l’utilisateur est
sollicité pour associer une lettre à la macro
créée.
Il suffit donc pour exécuter le programme de
taper Ctrl + o
A partir des commandes Excel :
Outils / Macros/Macros et sélectionner son nom dans la liste :
Lorsque plusieurs macros sont associées à un classeur, il devient difficile de se souvenir de la lettre
associée à chaque programme. Il est donc plus intéressant de déclencher les programmes à partir de
boutons disponibles sur la feuille de calcul.
Affectation d'une macro à un bouton d'action
Dans la barre d'outils « formulaire », sélectionnez l'objet bouton et créez le sur la feuille Excel un
nouveau Bouton
Utiliser le menu contextuel et choisir dans la boite « Affecter une macro », le nom de la macro à
exécuter.
Tant que le bouton est sélectionné, il est possible d’en changer le titre.
Sinon il faut à nouveau le sélectionner en utilisant l’outil
de dessin.
dans la barre
En cliquant à l’extérieur de la sélection, le bouton devient actif et il est possible
d’exécuter le programme en cliquant bouton gauche sur ce bouton.
Pour éviter les erreurs de manipulations de l’utilisateur, il est nécessaire de prévoir l’opération
d’annulation d’une opération automatique.
Jacques Chambon
4/6
Tableur
Macro d’annulation de la colonne de Nouvelle Année
Cette action est très simple puisqu’il suffit de sélectionner la colonne F et de lancer la commande
Edition / Supprimer.
Sub Sup_Nouvelle()
'
' Sup_Nouvelle Macro
' Macro enregistrée le xx/xx/xxxx par jacques
'
' Touche de raccourci du clavier: Ctrl+s
'
Columns("F:F").Select
Selection.Delete
Range("F1").Select
End Sub
Sélection de la colonne F
Commande Edition / Supprimer
Sélection de la cellule F1
Macro d’Archivage de la plus ancienne Année
La plus ancienne année sera toujours positionnée en colonne B. Le traitement à effectuer consistera
à sélectionner les données de la colonne B, les couper, basculer sur l’onglet « archive », se
positionner sur la cellule B2, coller les données puis revenir sur la feuille « charges » et supprimer la
colonne B.
Sub Archivage()
'
' Archivage Macro
' Macro enregistrée le xx/xx/xxxx par jacques
'
' Touche de raccourci du clavier: Ctrl+a
'
Range("B1:B42").Select
Sélection des données de la colonne B
Selection.Cut
Couper
Sheets("Archive").Select
Sélection de la feuille « Archive »
Range("B2").Select
La cellule B2 devient active
ActiveSheet.Paste
Coller
Sheets("Charges").Select
Sélection de la feuille « Charges »
Columns("B:B").Select
Sélection de la colonne B
Selection.Delete
Suppression
End Sub
Macro d’annulation de l’Archivage
Sub Annule_Archive()
'
'
Columns("B:B").Select
Selection.Insert
Sheets("Archive").Select
Range("B2:B43").Select
Selection.Cut
Sheets("Charges").Select
Range("B1").Select
ActiveSheet.Paste
Columns("B:B").ColumnWidth = 11.14
Range("F1").Select
End Sub
Jacques Chambon
Sélection de la colonne B
Insertion d’une colonne
Sélection de la feuille « Archive »
Sélection des cellules B2 à B43
Couper
Sélection de la feuille « Charges »
La cellule active devient B1
Coller
Largeur de la colonne B : 11.14
5/6
Tableur
Vous aurez constaté en
créant et annulant
successivement une
nouvelle année que les
boutons d’actions se
déplacent
automatiquement à l’issue
d’une suppression de
colonne.
Il est donc nécessaire, de
modifier le format de
contrôle des boutons.
Méthode pour créer une macro
•
Testez la procédure sans l'enregistrer. Notez bien les manipulations que vous devez faire.
•
Lancez l'enregistreur de macro, donnez un nom significatif et donnez une lettre de raccourci.
•
Exécutez les manipulations, notez les différentes erreurs que vous avez pu faire.
•
Arrêtez l'enregistrement.
•
Replacez vous sur la feuille initiale et lancez la macro pour vérifier son action.
•
Visualisez le code (Alt + F11) et faites les corrections voulues.
•
Créez un nouveau bouton et affectez la macro correspondante.
Jacques Chambon
6/6