Professional Documents
Culture Documents
net
www.excelabo.net
Votre portail Excel et VBA
Recherche
Accueil
Application-Tableur-Jeux
Donnes-Outils
Formules-Macros
Ressources Web
Autres Pages
Recherche
Tutoriels
r
Application Tableur Donnes Outils Fonctions et formules Le temps Macros, VBA, Formulaires
s
L'diteur VBA Utiliser un code L'enregistreur de macros Mots clefs VBA Les variables Proprits et Mthodes Manipuler un range ou plage de donnes, en VBA
Modules de classe
Les userforms Arrays : utilisation des tableaux internes pour acclrer vos macros
Connexion utilisateur
Nom d'utilisateur : *
Mot de passe : *
Se connecter
q
2007-2011
Sur Excelabo
2 203 pages dont
q
En Ligne
Il y a actuellement 1 utilisateur et 6 invits en ligne.
Introduction Dfinitions L'enregistreur de macros L'diteur Visual Basic (VBE) Les objets Microsoft Excel
r
Structurer une macro Les instructions conditionnelles Les plages de cellules : l'objet range
les boucles
Les modules
s
VBA en Franais ou en Anglais ? Conventions d'critures Macros ou fonctions Excuter une macro Les modules de feuille
Introduction
Vous avez entendu parler de "macros", de Visual Basic, d'enregistreur de macros, de modules mais vous ne savez pas du tout ce que sont ces btes l ? Alors cette fiche est pour vous. Nous n'aborderons ici que les notions de base, indispensables pour pouvoir utiliser ensuite l'aide fournie par Excel, (accessible avec la touche F1 depuis l'application) par les astuces et classeurs exemples d'Excelabo et par le forum MPFE. Beaucoup des notions indispensables pour dmarrer avec les macros sont en fait dj expliques sur excelabo. L'objectif de cette page est de les prsenter de faon plus didactique et ordonne. Les liens vers les explications plus dtailles vous seront indiqus.
Quelques dfinitions
Macros : Une macro (sous entendu macro-commande) est une suite d'instructions permettant d'effectuer une tache rptitive simplement. Cette macro peut tre trs simple, comme reproduire une mise en forme, ou beaucoup plus complexe, incluant par exemple des tests sur la valeur d'une cellule ou des calculs complexes. Les macros peuvent aussi "sortir d'excel", aller ouvrir des fichiers dans un rpertoire, transfrer des fichiers par FTP sur un serveur distant, ouvrir d'autres applications... Les possibilits sont innombrables. Une macro fait souvent appel des variables.
q
Variables : Si je veux multiplier par deux la valeur de toutes les cellules sur fond bleu de ma feuille, je peux crire une macro qui balaiera toute la feuille et ralisera cette opration. Maintenant, si je veux faire la mme chose mais en cherchant les cellules sur fond rouge et les multiplier par 3, au lieu de refaire toute la macro, je peux utiliser une "variable" pour la couleur et
une pour l'opration effectuer. En dbut de macro, j'affecterai une valeur rouge la variable que j'appelle 'couleur' et la valeur 3 ma variable 'opration'. Dans la macro, j'utiliserai ensuite les variables en lieu et place des valeurs qui leurs sont affectes. Vous pouvez lire d'autres infos sur ce sujet sur la page lexique.
q
Visual Basic pour Application ou VBA : VBA est une forme spcialise de Visual Basic pour une application donne. Il existe un VBA pour word, pour excel, pour outlook... VBA est driv du langage de programmation basic. Il fait partie des langages dits "orients objets".
Objet : Un objet VBA est un lment que l'on peut manipuler par le langage de programmation. Il possde des proprits et des mthodes ou des vnements lui sont associs. Une feuille excel d'un classeur est un objet. Elle possde des proprits comme sa taille, son index. Certaines sont modifiables comme le nom, la proprit visible ou cache. Les mthodes ou vnements associs une feuille sont par exemple les methode open (ouvrir), close (fermer), beforeprint (s'effectue avant l'impression)... Il y a de trs nombreux objets dans excel (les cellules, les boutons des barres d'outils, le classeur lui mme, les graphiques...). Il n'est pas question d'en dresser la liste exhaustive avec les proprits, mthodes et vnements associs puisqu'Excel le fait pour nous dans l'aide de visual basic et dans la fentre "explorateurs d'objets" dans l'diteur VBA.
L'diteur VBA ou VBE : Pour crire des macros, il faut ouvrir l'diteur visual basic ou VBE (Visual Basic Editor). Depuis excel, vous pouvez y accder en cliquant droit sur le nom d'un onglet en bas et en choisissant "voir le code", par le menu outils/ macros/visual basic editor ou bien en cliquant sur alt+F11. Vous pouvez galement personnaliser vos barres d'outils et "monter" l'icone de VBE. Nous verrons plus loin ce que contient une fentre VBE.
L'enregistreur de macros
L'enregistreur de macros est un outil de base pour dbuter en programmation mais aussi lorsque, programmateur chevronn, on ne se souvient plus de la syntaxe d'une instruction. Le principe: vous dclenchez l'enregistreur, vous effectuez une srie d'actions, vous arrtez l'enregistreur. En "rejouant" la macro enregistre, les mmes actions sont rptes. Si vous avez besoin de faire la mme suite
http://www.excelabo.net/pasapas/vba-bases (5 sur 21)23/01/2012 08:10:01
d'oprations 300 fois, vous voyez vite l'intrt d'automatiser la chose... Vous trouverez plus d'explications sur la page consacre l'enregistreur de macros.
Les modules
Double cliquez sur "module1". Vous voyez apparaitre dans la fentre centrale le code enregistr. Dans la fentre centrale, vous pouvez bien sur crire directement votre code, ou copier celui que vous avez trouv sur le forum ou sur excelabo. Faites juste attention aux sauts de ligne. Si le code est crit en rouge, c'est qu'excel n'est pas d'accord avec votre syntaxe. Sur le forum, les lignes sont souvent coupes par un retour chariot et VBE ne comprend plus. Si pour des raisons de lisibilit, vous devez couper une ligne, insrez un espace suivi d'un underscore (_) l ou vous voulez couper.
Vous pouvez crire plusieurs macros dans un mme module. Thoriquement, le nombre de modules par classeur n'est pas limit, sauf par la mmoire de votre PC. Cependant, pour conomiser de la place, mais aussi pour faciliter la lecture des codes, il est plus judicieux de regouper dans un mme module des macros destines fonctionner plus ou moins ensemble. Les modules sont identifis par dfaut par des numros. Vous pouvez modifier ceci pour mettre des noms plus parlants. Il vous suffit dans la fentre des proprits, cot de (name) de taper le nom de votre choix, sans espaces et sans caractres interdits.
conventions d'criture
L'criture d'une macro commence par Sub suivi du nom de la macro et de deux parenthses vides. Ces parenthses peuvent recevoir des paramtres qui seront passs la macro. Vos premires macros n'en contiendront gnralement pas. La fin de la macro se termine par End Sub, mot clef rserv qui indique la fin de la procdure (ou "Sub")
http://www.excelabo.net/pasapas/vba-bases (7 sur 21)23/01/2012 08:10:01
Sub Test() ... 'ceci est un commentaire qui ne sera pas excut par le programme
Entre les deux vous voyez le code crit par l'enregistreur. Celui-ci est toujours trs complets. Si plusieurs attributs sont possibles pour un objet, l'enregistreur les prcise tous, mme ceux dont vous ne vous servez pas. Pour vous en convaincre, enregistrez une macro changeant les bordures d'une cellule. Vous verrez que le code gnr est trs "bavard". Vous pouvez gnralement simplifier largement ce code. Pour voir quels sont les paramtres ncessaires, le plus simple c'est d'effacer ceux qui vous paraissent superflus et de voir si la macro fonctionne toujours. Plutt que d'effacer rellement et de devoir retaper en cas d'erreur, mettez en commentaires le code oublier. Pour cela, il suffit de mettre une apostrophe simple en dbut de ligne. Le texte change de couleur pour vous signaler ce changement (les couleurs sont paramtrables via le menu options de VBE). Vous pouvez mettre d'un coup tout un bloc de lignes ou revenir l'tat "non comment" facilement en utilisant les boutons adquats. Ceux-ci ne sont pas mis par dfaut dans VBE, je vous conseille vivement de les installer en personnalisant VBE (menu affichage, barres d'outils, personnaliser, commandes, dition, commenter bloc et ne pas commenter bloc.
Les noms des macros sont trs libres. Cependant, ils ne doivent pas dpasser 32 caractres ni contenir certains caractres comme des espaces, apostrophes, guillemets... Pour faciliter la lecture, je vous conseille de donner des noms assez explicites et d'introduire des majuscules dans le nom (pas forcment au dbut) comme MaPremiereMacro. L'intrt est que si vous appellez cette macro depuis une autre par la suite, lorsque vous taperez en minuscules mapremieremacro, Excel mettra de lui mme les majuscules, vous signifiant par
l qu'il a reconnu que vous appelliez cette macro. C'est trs pratique pour viter de faire des fautes d'orthographe.
Macros et fonctions
Vous entendrez parler de macros et de fonctions. Les deux s'crivent dans VBE et leur fonctionnement est assez similaire. La fonction, qui s'identifie par
reoit une valeur et en renvoie une autre. Par exemple, la fonction reoit un nombre et renvoie celui ci au carr. Elle peut aussi recevoir du texte et renvoy celui ci modifi (supression de caractres interdits) ou renvoy le rsultat d'un test avec vrai/faux. Une fonction reoit, modifie et renvoie des valeurs. Une macro effectue plus gnralement un traitement. Une macro peut par exemple si la valeur saisie en A1 est suprieure 3 crire "vrai" dans les cellules A2 A20. Une fonction n'crit rien dans la feuille ni ne modifie de format de cellule.
soit rester dans VBE et passer par le menu excution/excuter la macro. La macro qui s'excute est celle dans lequel votre curseur est prsent (peu importe o).
Faire F5 vous mettre dans la feuille Excel et choisir la macro depuis le menu outils/macro
Pour que ce soit plus pratique, vous pouvez galement associer la macro un bouton que vous placez sur la feuille. Cette procdure est dcrite dans le classeur associ ce fichier.
Vous pouvez galement excuter vos macros pas pas pour en suivre le droulement. Dans VBE, placez le curseur dans votre macro et appuyez sur la touche F8. Chaque instruction est excute puis le programme attend un nouvel appui su F8 pour continuer. En passant la souris au dessus des noms des variables, VBE affiche leur valeur. Indispensable pour les mises au point !
Le module que nous venons de voir est un module ordinaire, par opposition aux modules de feuilles et aux modules de classe.
Modules de feuilles
Si vous double cliquez sur le nom d'une des feuilles dans l'explorateur de projet VBE, vous ouvrez une feuille vierge dite "module de feuille. Les macros que vous crivez dans ces modules sont construites de la mme faon que les macros des modules ordinaires. Cependant, leur action ne s'exerce QUE sur la feuille laquelle ils sont lis. Dans cette feuille, en haut gauche vous avez un petit menu qui contient deux rubriques : gnral et worksheet. Si vous slectionnez gnral, le menu de droite en haut de cette feuille n'affiche rien. Vous vous mettez dans cette configuration pour crire des macros non vnementielles mais dont l'action (tri, formatage, calculs...) doit rester restreinte la feuille. En revanche si vous choisissez worksheet, le menu de droite vous propose des vnements associs la feuille. Vous mettrez donc dans ces modules des macros vnementielles. Ces macros, comme leur nom l'indique, se dclenchent lors d'un vnement. Par exemple lorsque vous changez de feuille dans le classeur, vous pouvez activer l'affichage d'une barre d'outils personnalise, ou le double clic dans cette feuille peut dclencher une suite d'oprations.
Les FONCTIONS doivent OBLIGATOIREMENT tre crites dans un module ordinaire, jamais dans un module de feuille, mme si elles ne fonctionneront en fait qu'en rapport avec une feuille particulire.
ThisWorkbook
La feuille ThisWorkbook ("CeClasseur" en anglais) reoit les macros vnementielles lies au classeur lui mme. Comme prcdemment, le menu de droite vous montre quels sont ces vnements. C'est dans cette feuille que vous mettrez par exemple une macro qui doit se lancer automatiquement l'ouverture du classeur, dans une macro private sub workbook_open()
Vous trouverez deux pages entires consacres aux userforms et aux contrles sur excelabo et plusieurs classeurs de dmonstration pour bien dbuter avec ces outils vraiment puissants. Les macros qui sont associes aux contrles d'un formulaire sont stockes avec celui ci. Dans l'explorateur de fichier, les userforms sont regroups dans un dossier spcifique nomm feuilles (nom fort mal choisi car pretant confusion avec les feuilles de classeur mais c'est comme a !). Si vous double cliquez sur le nom d'un formulaire, vous ouvrez celui ci. Si vous faites un clic droit sur le nom du formulaire, vous accdez au code. Dans la fentre qui s'ouvre, dans le menu de gauche en haut, vous voyez le nom des diffrents contrles que vous avez plac sur la feuille.
Modules de Classe
Le dernier type d'objet microsoft que vous pouvez ajouter depuis l'explorateur de projet, ce sont les modules de classe. Nous ne
dcrirons pas ces modules ici, leur usage n'tant clairement pas pour les dbutants ! Sachez que ces modules permettent de crer des nouvelles classes d'objet, objets qui possdent des proprits et des mthodes associes. Pour en avoir un aperu humoristique je vous recommande en guise de pause la lecture de cette petite leon de Laurent Longre.
Sub Mamacro() 'je copie-colle les donnes ncessaires la construction de mon graphique CopieColle 'je construis le graphique Construction 'je le mets en forme Formatage End Sub
Chaque instruction dans cette macro est en fait un appel d'une autre macro. Je vous conseille cette criture ds que vous avez des traitements un peu complexes raliser. Votre programme sera ainsi bien plus facile debugger. Utilisez ensuite au maximum
http://www.excelabo.net/pasapas/vba-bases (13 sur 21)23/01/2012 08:10:01
l'enregistreur de macros pour faire chaque petite "sous macro". Dans l'exemple ci dessus, chaque sous-macro est appele directement par son nom. Vous pouvez aussi ajouter "Call" devant pour vous rappeller que c'est un appel de macro.(rminiscence des anciennes instructions Basic "GoSub / Return"). Attention toutefois aprs l'xcution de la sous-macro, le traitement de la macro appelante continu. Si l'on veut que via la macro appele modifier la suite du fonctionnement de la macro appelante, il faut gnrer un code retour qui sera interprt par la macro appelante. Dans le mme module (ou dans un autre), vous aurez donc toutes les macros appelles pas cette macro principale. Rien ne vous interdit, bien au contraire, de faire appel une macro depuis plusieurs autres. C'est mme vivement recommand si cela permet d'conomiser des lignes de codes, consommatrices de mmoire et toujours susceptibles de contenir des erreurs.
L'enregistreur de macros ne peut cependant pas comme nous l'avons dj dit tout faire. Il est notamment incapable de faire des boucles ou de faire des choix. Nous allons voir rapidement ces deux types d'instructions.
Range("B5").Select With Selection.Interior .ColorIndex = 5 .Pattern = xlSolid End With Range("B6").Select With Selection.Interior .ColorIndex = 3 .Pattern = xlSolid End With
La partie qui m'intresse ici est Selection.Interior.ColorIndex. Le bleu a pour code 5, le rouge 3. L'criture propose par l'enregistreur comprend frquemment des instructions
L'enregistreur dtaille toutes les proprits associes un objet. Ici l'objet cellule B5 est dcrit par son adresse ou range (plage). Elle est d'abord slectionne. Le "." met en rapport l'objet range("B5") et la mthode associe : Select. Ensuite, Excel dcrit une des proprits de l'objet (Selection.Interior) avec tous ses arguments (ColorIndex et Pattern). Pour viter de redire chaque fois que ColorIndex ou Pattern sont associs l'objet cellule, d'adresse truc, de mthode machin et de proprit bidule, on utilise cette criture condense. Faites trs attention aux points. Ils sont indispensables pour relier entre eux les objets, leurs proprits et leurs mthodes
http://www.excelabo.net/pasapas/vba-bases (15 sur 21)23/01/2012 08:10:01
associes.
Quand vous tapez votre code, VBE vous propose une aide la saisie fort utile : si je tape activecell par exemple, pour faire rfrence la cellule actuellement slectionne dans la feuille, au moment ou je tape le point derrire, un menu droulant s'ouvre dans VBE et me propose les proprits et mthodes associes activecell. Il me suffit de slectionner la proprit et taper enter. En tapant les premires lettres de la proprit, le menu s'ajuste pour restreindre les choix. Ceci me permet en plus de vrifier que j'ai bien employ le bon mot puisque cellactive n'entrane pas l'ouverture du petit menu. Voici donc notre premire "vraie" macro :
Sub ConditionCouleur() If ActiveCell.Interior.ColorIndex = 5 Then ActiveCell.Value = ActiveCell.Value * 2 ElseIf ActiveCell.Interior.ColorIndex = 3 Then ActiveCell.Value = ActiveCell.Value * 3 Else ActiveCell.Value = ActiveCell.Value / 2 End If End Sub
Commentaires :
If et then doivent toujours se trouver sur la mme ligne. vous pouvez ajouter autant de elseif que souhait. Cependant d'autres instructions (Select Case) sont plus adaptes en
si vous ne voulez rien faire si aucune des conditions n'est remplie, vous n'tes pas oblig de mettre la ligne Else. Vous avez ici une proprit de base de nombreux objets excel : .value qui renvoie la valeur de la cellule (valeur numrique ou texte).
Le langage de programmation diffre des quations mathmatiques ! vous voyez ici une ligne du type 2= 2/2 ! En fait, cette ligne indique VBE de remplacer la valeur de la cellule active par cette mme valeur divise par 2. Cela vite de rajouter une variable intermdiaire. On pourrait tout fait crire : variable1=activecell.value Variable2=Variable1/2 activeCell.value=Variable2
Vous pouvez tester cette macro dans le classeur exemple depuis la page condition.
Range("A5").Value renvoie la valeur de la cellule Range("A5").Address renvoie... son adresse= A5, info que l'on pourra rutiliser par la suite dans certains cas.
Pour faire rfrence une plage continue de cellules, on indique la cellule situe la plus en haut gauche et celle la plus en bas droite, spares par :
r
Pour slectionner toute une ligne on utilise : Range("2:2").Select et pour une colonne : Range("A:A").Select
Il peut tre utile de prciser sur quelle feuille on se situe : Sheets("condition").Range("B3").Interior.ColorIndex=24 Et mme quand plusieurs classeurs sont ouverts, il peut tre ncessaire de prciser le classeur : Workbooks("fc-vbapasapas.xls").Sheets("condition").Cells.ClearContents "Cells" est un mot rserv de VBA, il fait rfrence l'ensemble des cellules de la feuille. ClearContents vide les cellules de leur contenu mais pas du format des cellules. Workbooks fait rfrence la collection des classeurs Excel. Fc-vbapasapas.xls est un lment de cette collection. De mme Sheets est la collection des feuilles contenues dans un classeur. Sheets regroupe toutes les feuilles, quelque soit leur nature : chiffrier (ou WorkSheet) ou feuille graphique. Range est en fait une collection d'lments cellules. On peut donc manipuler un range soit globalement soit lment par lment en utilisant une boucle.
Les boucles
La macro prcdente est intressante mais bien souvent, il est ncessaire d'appliquer une macro non pas sur un lment slectionn l'avance mais sur l'ensemble des cellules d'une plage. Nous allons donc modifier cette macro pour qu'elle effectue le traitement sur l'ensemble des cellules de la plage A3:A7.
Sub ConditionSurPlage() For Each c In Range("A3:A7") If c.Interior.ColorIndex = 5 Then c.Value = c.Value + 100 End If Next c End Sub
Commentaires :
Pour manipuler les lments de l'objet range, nous crons une variable, ici 'c' mais on pourrait l'appeller n'importe comment (sauf d'un mot rserv par Excel comme Cells, New, Item...).
Il faut faire attention insrer correctement la condition dans la boucle. Le fait d'indenter les macros permet de mieux reprer les tests de conditions (If / End If) et les boucles (For...Next). Si les deux ne sont pas imbriqus correctement, au moment du lancement de la macro, Excel vous dira "For sans Next" ou "If sans End If".
Il y a d'autres faons de faire des boucles. En comptant les lments (For i=27 To 34, Next i); en testant si une condition est remplie ou non (Do While... Loop) ou (Do Until...Loop)
A vous de jouer !
Voil, j'espre qu'avec ceci vous avez le vocabulaire ncessaires pour comprendre ce qu'est une macro et vous essayer crer les votres. Vous trouverez de trs trs nombreux exemples pour vous aider sur de nombreux sites excel, y compris celui-ci et aussi sur le forum. Lancez vous ! a parait compliqu au dbut mais il n'y a en fait que quelques notions maitriser pour pouvoir se lancer. Les
http://www.excelabo.net/pasapas/vba-bases (19 sur 21)23/01/2012 08:10:01
haut
Vous devez vous identifier ou crer un compte pour crire des commentaires
L'diteur VBA
Nouveau
1 Nouvelle page ajoute ce mois-ci dont :
Mises jour
3 pages modifies ce mois-ci dont :
q
2 astuces
1 Nouvelle astuce