Vous êtes sur la page 1sur 33

Les macros complmentaires avec Excel

Macros, prsentation
Excel intgre dornavant un langage de programmation, VBA, qui permet de raliser des applications puissantes et conviviales, allant bien au-del ce que quvoque le terme de macro (cf. lhistorique ci-dessous). Malheureusement, parmi les utilisateurs dExcel, presque personne nen est conscient.

Historique
Une macro est un terme gnrique pour dsigner un moyen de mmoriser un enchanement de tches au sein dun logiciel. Il est ensuite possible dutiliser la macro lexpression standard est lancer la macro pour rpter le mme enchanement. Plusieurs mthodes peuvent tre employes pour lancer une macro :

On peut associer un raccourci clavier la macro. Lapplication peut comporter une commande provoquant laffichage de la liste des macros disponibles. Il suffit alors de choisir celle que lon veut lancer et de valider. Il est parfois possible galement dafficher un bouton, ventuellement situ dans une barre doutils. Un simple clic sur le bouton provoque lexcution de la macro.

Dans la majorit des cas, les macros ne permettent de raliser que des choses trs simples, par exemple la mise en page dun document (orientation et marges) dans un traitement de texte. Les macros sont alors des programmes automatiques. Dans ce contexte, il est parfois possible daccder au code de la macro, cest--dire au programme, pour modifier tel ou tel paramtre. Cette option amliore les choses, mais les possibilits restent cependant limites. En tant quoutil de programmation, ces macros manquaient la fois de souplesse et de puissance . Cest pourquoi les informaticiens les ont toujours considres avec condescendance. Ce type de macros a tout de mme rendu service a un certain nombre d'utilisateurs, grce au temps gagn.

Macros et tableurs
Lotus 1,2,3 a probablement t le premier tableur comportant des macros. Celles-ci taient relativement puissantes, mais leur lecture difficile, car chaque instruction tait un code de 3 ou 4 lettres, ventuellement complt de paramtres. Jai eu loccasion de voir des macros ralises avec Lotus, mais je nen ai jamais utilise ni a fortiori crite. Toutefois, je pense que leur syntaxe et lemploi de code abscons devaient limiter leur usage et leur maintenance. Excel est sorti en 1985. La premire version tournait sur Mac exclusivement, ncessitait 512 Ko et tenait sur une disquette. Mais, merveille, il y avait un langage macro relativement puissant et lisible. On tait encore loin dun langage de programmation classique : il manquait en particulier la possibilit de crer des menus et des zones de dialogue, et les structures classiques de boucles.

Malgr ces limitations, loutil tait suffisamment puissant pour que jai pu crer et commercialiser en 1987, toujours avec la version 1.0 dExcel, une application commerciale, Mac Bilan, qui compltait les logiciels de compta ( lpoque Maestria et Gestion Simil). Mac Bilan permettait partir dune balance (la liste des comptes dune entreprise avec leurs soldes) dtablir le bilan, le compte de rsultat et le dtail des postes. En outre, un certain nombre de contrles comptables taient effectus, et il tait possible de saisir des critures complmentaires prendre en compte pour le bilan. Le tout avec Excel 1.0 !

Macros XL4 et VBA


Ce langage macro, a volu au fil des versions dExcel jusqu la version 4.0 (do son nom actuel de macros XL4) et est devenu de plus en plus puissant, en conservant malgr tout un positionnement un peu btard : Trop intimement li Excel, et trop diffrent des langages classiques, il na jamais russi surmonter la condescendance de limmense majorit des informaticiens. Dautre part, acqurir une matrise de ce langage macro, suffisante pour raliser des applications utilisables par des tiers, demandait un non informaticien de formation, une motivation et un investissement en temps considrable. La plupart de ceux qui ont essay navaient pas les capacits ncessaires ou se dcourageaient trop tt. Le rsultat est que trs peu de gens taient capables demployer ce lang age pour autre chose que des tches trs simples. partir dExcel 5, le langage macro initial a cess dvoluer et a t concurrenc par un autre langage, galement intgr Excel, VBA. VBA est un langage informatique relativement classique, orient objet. Depuis Excel 97/98, il comporte un environnement spcifique, avec des outils de dboguage. Ces diffrents lments lont rendu beaucoup plus populaires que lancien langage. Certains utilisateurs de VBA considrent que le terme de macro est rducteur et souhaitent mme quon lvite.

Qu'est-ce qu'une macro ? quoi cela peut-il servir ? Je pourrais m'attarder longuement sur la dfinition exacte des macros. Pour cela, nous avons divers sites comme www.gaboly.com. Je me contenterai, ici, de rpondre aux seules questions qui sont poses ci-dessus.

La macro complmentaire, dans Excel, est un code crit en VBA. Elle sert excuter automatiquement une tche dans Excel.

Les macros sont souvent utilises pour des actions rptitives et longues faire. Pour que vous ayez une bonne ide des possibilits offertes, je vais vous faire faire un petit

TP. Je vous fournis donc le fichier de base et nous travaillerons dessus. Rcuprez ce fichier : comptes.xls Afin de colorer un peu plus le code, j'ai utilis les balises-codes du VB.NET et non celles du VBA, qui sont inexistantes. Je prcise bien que le VB.NET n'a rien voir avec le VBA.

Sommaire du tutoriel :

L'criture d'une macro L'assistant cration de macros Lier une macro un objet Quelques exemples de macros

<p style="margin: 0;"> <a href="http://www4.smartadserver.com/call/pubjumpi/24617/166249/10602/S/1357597031021 /?"> <img src="http://www4.smartadserver.com/call/pubi/24617/166249/10602/S/1357597031021/?" alt="" /> </a> </p> Retour en haut

L'criture d'une macro


Je vais en premier lieu vous montrer la faon la plus complique de crer une macro. Pour cela, il faut avoir certaines bases en VBA. Le but de ce tutoriel n'est pas de vous apprendre le Visual Basic. Il s'agit simplement de vous en montrer quelques caractristiques avant de poursuivre. Cela vous sera utile au cas o vous seriez amens modifier une macro manuellement.

On va commencer par crer une macro qui nous permet de calculer la somme des dpenses. Pour cela, ouvrez le fichier que vous avez tlcharg.

criture d'une macro


Maintenant, cliquez sur le menu Outils puis sur Macros et enfin sur Visual Basic Editor. Nous pouvons maintenant crer notre premire macro avec cet diteur.

Pour crer notre premire macro, vous devez cliquer sur le menu Outils puis Macros. Une petite fentre apparat avec toutes les macros du classeur. Bien sr, celui-ci tant vierge, vous n'en voyez pas. Dans le champ nom de la macro , mettez somme_depenses . Il faut viter tous les caractres spciaux, ils sont cause de problmes. Donc, pas d'espaces, pas d'accents, pas de + - / * , etc.

Cliquez ensuite sur Crer.

La nouvelle fentre qui apparat nous permet donc de taper notre code en Visual Basic.

La macro commence toujours par Sub nom de la macro() et se termine toujours par End Sub. Dans notre cas, nous avons : Code : VB.NET - Slectionner
1 Sub somme_depenses() 2 3 End Sub

Nous allons pouvoir commencer taper notre code. Nous devons donc dfinir la cellule o la somme des dpenses s'affichera. Il s'agit de la case C21. Celle-ci est fusionne avec la C22. Voici comment lui dire que nous slectionnons la cellule C21 (qui contient aussi la cellule C22) : Code : VB.NET - Slectionner
1 Range("C21:C22").Select

Il nous faut ensuite lui faire calculer la somme des cellules C6 C20 dans la cellule active. L o a va faire rflchir, c'est le positionnement dans les formules. Code : VB.NET - Slectionner
1 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)"

Humm, hummmm ? C'est l que a commence chauffer derrire les yeux et entre les oreilles. =Sum() reprsente la formule =Somme() qu'on peut facilement taper dans une cellule du tableau. R[-15]C:R[-1]C reprsente la zone de slection par rapport la cellule actuelle. Il faut remonter de 15 pour slectionner la cellule 6 et remonter de 1 pour slectionner la cellule 20 par rapport la cellule active (C21:C22). C'est en suivant cette logique que nous avons crit cette ligne. Les deux points dans la formule dfinissent la plage comprise entre les deux cellules.

Je vous affiche le code complet de la macro. Code : VB.NET - Slectionner


1 Sub somme_depenses() 2 Range("C21:C22").Select 3 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 4 End Sub

Qu'avons-nous fait exactement ?

Vous allez rire ! Cette macro permet d'crire =somme(C6:C20) dans la cellule C21:C22. Vous n'tes pas obligs de fermer l'diteur pour pouvoir revenir Excel, ALT + TAB est amplement suffisant. Pour l'excuter, vous retournez dans Excel et vous cliquez sur Outils Macro Macros, choisissez la macro puis cliquez sur Excuter. L, vous allez me dire que c'est se casser la tte pour pas grand-chose et je ne vous donne pas tort. Nous allons donc passer ensuite la mthode la plus simple pour crer une macro. Il fallait juste que vous sachiez ce qui se passe l'criture d'une macro avant de poursuivre ce tutoriel. Je vous donne quand mme un petit supplment cette macro.

Code : VB.NET - Slectionner


1 Range("G21:G22").Select 2 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)"

Ce qui nous donne donc : Code : VB.NET - Slectionner


1 Sub somme_depenses() 2 3 Range("C21:C22").Select 4 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 5 Range("G21:G22").Select 6 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 7 8 End Sub

Allez sur la cellule C21:C22 et supprimez son contenu. Excutez ensuite la macro et regardez ce qui a chang. J'espre que ce premier changement vous incite poursuivre ce tutoriel Retour en haut

L'assistant cration de macros


Aprs avoir aperu l'criture d'une macro, nous allons passer l'outil qui nous sera le plus utile. L'assistant enregistrera chaque chose que l'on fera. Le moindre clic sera inscrit en VBA. Nous risquons d'augmenter considrablement la taille de la macro en effectuant des tches inutiles. Il nous faut faire uniquement le strict minimum.

Enregistrer une macro complmentaire


Cliquez donc sur Outils Macro Nouvelle_macro. Vous voyez qu'on peut attribuer un raccourci pour son excution ou mme l'enregistrer ailleurs que dans le classeur actuel. Nous n'allons pas nous attarder sur ces options et rester sur ce classeur. Mettez le nom que vous voulez votre macro (pas de caractres spciaux) et cliquez sur OK . J'ai mis test comme nom de macro et essai pour le SDZ en description. Vous voyez la barre d'outils s'afficher.

Elle nous servira la fin.

C'est partir de l qu'Excel enregistre tout ce qu'on fait, il nous faut donc viter les clics superflux.

Slectionnez la cellule D28 ; appuyez sur la touche +=} pour faire le signe gal ; slectionnez la cellule G21 ; appuyez sur 6-| pour faire le signe moins ; slectionnez la cellule C21 ; validez avec la touche Entre ; slectionnez, nouveau, la cellule D28.

Lors de l'enregistrement, vous devez avoir en G28 : Citation : Excel =G21-C21

Si tout s'est bien pass, nous avons nos deux totaux de renseigns et la somme restante.

Appuyer sur le bouton Arrter l'enregistrement de la barre d'outils macros.

Allez voir l'diteur, Microsoft Visual Basic, qui contient nos deux macros. Vous pouvez remarquer une grande diffrence entre celles-ci. Code : VB.NET - Slectionner
1 2 3 4 5 6 7 8 9 10 11 12 13 Sub somme_depenses() Range("C21:C22").Select ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" Range("G21:G22").Select ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" End Sub Sub test() ' ' test Macro ' essai pour le SDZ

14 ' 15 16 ' 17 18 19 20 End

ActiveCell.Offset(-2, -6).Range("A1:B3").Select ActiveCell.FormulaR1C1 = "=R[-7]C[3]-R[-7]C[-1]" ActiveCell.Range("A1:B3").Select Sub

L'arrangement manuel d'une macro enregistre

C'est dans des moments comme celui-ci qu'il est possible de simplifier la macro, et c'est ce que nous allons faire en fusionnant les deux prcdentes dans une seule et mme macro. Nous gardons donc la premire macro : Code : VB.NET - Slectionner
1 Sub somme_depenses() 2 3 Range("C21:C22").Select 4 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 5 Range("G21:G22").Select 6 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 7 8 End Sub

Nous allons l'arranger avec ce qu'on a dans la seconde. Nous devons garder la formule utilise. Code : VB.NET - Slectionner
1 ActiveCell.FormulaR1C1 = "=R[-7]C[3]-R[-7]C[-1]"

Mais juste avant celle-ci, nous allons donner la cellule cible. Code : VB.NET - Slectionner
1 Range("D28:E30").Select

Ce qui donne : Code : VB.NET - Slectionner


1 Range("D28:E30").Select 2 ActiveCell.FormulaR1C1 = "=R[-7]C[3]-R[-7]C[-1]"

Notre macro complte sera donc : Code : VB.NET - Slectionner


1 Sub somme_depenses()

2 3 4 5 6 7 8 9 10 End

Range("C21:C22").Select ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" Range("G21:G22").Select ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" Range("D28:E30").Select ActiveCell.FormulaR1C1 = "=R[-7]C[3]-R[-7]C[-1]" Sub

Supprimez tout le reste (l'autre macro). Il ne doit vous rester que celle-ci. Cette seule macro permet donc d'inscrire les 3 formules dans les trois cellules. 1 macro pour 3 rsultats en un seul coup. Je vous accorde que de poser une macro de ce genre n'est gure trs intressant, mais passer par l n'est certainement pas une mauvaise chose. Nous allons dsormais pouvoir poursuivre avec d'autres macros complmentaires et d'autres faons de les utiliser. Le nettoyage des cellules

Il n'y a pas de grosses questions se poser l-dessus, on va juste faire le vide dans toutes les cellules o se trouvent nos chiffres. Cliquez sur Outils Macro Nouvelle_macro et nommez celle-ci effacer . Cliquez sur OK.

Slectionnez les cellules de C6 C22 ; appuyez sur CTRL ou MAJ (selon la version d'Excel) pour ajouter une slection ; restez appuys et slectionnez les cellules de G6 G22 ; et la cellule D28 ; appuyer sur la touche Suppr de votre clavier.

Arrtez l'enregistrement de la macro. Retournez voir l'diteur. Ce dernier doit afficher : Code : VB.NET - Slectionner
1 Sub somme_depenses() 2 3 Range("C21:C22").Select 4 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 5 Range("G21:G22").Select 6 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 7 Range("D28:E30").Select 8 ActiveCell.FormulaR1C1 = "=R[-7]C[3]-R[-7]C[-1]" 9 10 End Sub

11 12 13 14 15 16 17 18 19 20 21

Sub effacer() ' ' effacer Macro ' essai pour le SDZ ' ' ActiveCell.Offset(-22, -1).Range("A1:A17,E1:E17,B23:C25").Select ActiveCell.Activate Selection.ClearContents End Sub

Oups ! Nous avons commis une erreur. Nous voulons juste effacer les rsultats et non la totalit, ce qui implique d'effacer juste C21, G21 et D28. Appuyez sur CTRL + Z pour annuler cette dernire opration.

Modifions notre macro. Code : VB.NET - Slectionner


1 2 3 4 5 6 7 8 9 10 11 Sub effacer() ' ' effacer Macro ' essai pour le SDZ ' ' ActiveCell.Offset(-22, -1).Range("A1:A17,E1:E17,B23:C25").Select ActiveCell.Activate Selection.ClearContents End Sub

Nous gardons donc l'activation de cellule et l'effacement. Nous ne devons modifier que la premire ligne qui ne cible pas les bonnes cellules. Mettons donc : Code : VB.NET - Slectionner
1 2 3 4 5 6 7 8 9 10 11 Sub effacer() ' ' effacer Macro ' essai pour le SDZ ' ' Range("C21,G21,D28").Select ActiveCell.Activate Selection.ClearContents End Sub

Et, au passage, on va enlever l'inutile. Ce qui nous donnera : Code : VB.NET - Slectionner
1 Sub effacer() 2 Range("C21,G21,D28").Select 3 ActiveCell.Activate 4 Selection.ClearContents 5 End Sub

Voil qui est bien mieux. Nous pouvons effacer simplement le contenu des trois cellules de rsultats l'aide de cette macro. Peut-on faire plus simple que d'aller cliquer sur Outils Macro Macros et de slectionner la macro supprimer puis de cliquer sur OK ?

Vous vous dites : je vais devoir supprimer les chiffres au moins 200 fois dans ma journe car je veux calculer le budget de chacun de mes clients et je dois avouer qu'un simple clic a m'aiderait bien . Je vais alors vous rpondre qu'on va arranger a. Ce n'est pas trs compliqu. Retour en haut

Lier une macro un objet


Pour aider la tche, il serait bien de pouvoir lier cette macro un objet comme un bouton ou une image. Excel nous offre quelques possibilits sur ce point-l, que nous allons aborder dans cette partie du tutoriel. Comment excuter la macro ?

Il existe plusieurs faons d'excuter celle-ci. Je vais en numrer 3 :


Un bouton Excel ; une zone de texte ; une image.

Un bouton Excel

Pour crer un bouton Excel, il nous faut la barre d'outils Bote outils Contrles.

Cliquez donc sur Affichage puis Barre d'outils et cochez Bote outils Contrles. Cliquez sur l'icne Bouton de commande.

Cliquez sur votre classeur, restez appuys sur le bouton droit de la souris et tracez un rectangle. Il sera votre bouton. Relchez quand la taille vous semble correcte. Vous pouvez modifier, par la suite, sa taille, la police, etc. Faites un clic droit sur le bouton et choisissez Objet Bouton de commande dition. Vous pouvez changer le nom du bouton. J'ai mis EFFACER . Un petit rappel de nos deux macros : Code : VB.NET - Slectionner
1 Sub somme_depenses() 2 3 Range("C21:C22").Select 4 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 5 Range("G21:G22").Select 6 ActiveCell.FormulaR1C1 = "=SUM(R[-15]C:R[-1]C)" 7 Range("D28:E30").Select 8 ActiveCell.FormulaR1C1 = "=R[-7]C[3]-R[-7]C[-1]" 9 10 End Sub 11 12 Sub effacer() 13 14 Range("C21,G21,D28").Select 15 ActiveCell.Activate 16 Selection.ClearContents 17

18 End Sub

Faites un clic droit sur le bouton et choisissez Visualiser le code. Mettez-y le code de la macro effacer mais ne touchez pas aux lignes Sub. Ce qui donnera : Code : VB.NET - Slectionner
1 Private Sub CommandButton1_Click() 2 3 Range("C21,G21,D28").Select 4 ActiveCell.Activate 5 Selection.ClearContents 6 7 End Sub

Un simple clic sur le bouton suffira effacer le contenu des 3 cellules. Les boutons Excel sont assez pnibles embellir et grer. Il faut faire de multiples manipulations pour arriver un rsultat peu attrayant. Je vous conseille de n'utiliser cette mthode qu' titre d'exercice. Il vaut mieux l'oublier au plus vite.

La zone de texte

On peut utiliser une zone de texte aussi. L, c'est du simple et rapide. La barre d'outils dessin doit tre affiche. Si ce n'est pas le cas, cliquez sur Affichage Barre d'outils Dessin. Cliquez ensuite sur l'icne Zone de texte

et crez un rectangle comme pour le bouton Excel. Je vous laisse grer votre zone de texte comme vous le voulez (clic droit sur le bord puis Format de la zone de texte). Vous pouvez modifier la couleur du fond, la taille du bord, Une fois que vous avez fait cela, vous faites un clic droit sur le bord et vous cliquez sur Affecter une macro. Choisissez la macro effacer et validez ce choix. Cliquez en dehors de votre zone de texte pour que la macro ne soit plus slectionne. Maintenant, si vous cliquez dessus, la macro sera excute. Une image

J'ai cr une petite image pour l'occasion.

Rcuprez celle-ci l'aide d'un clic droit et choisissez Enregistrer l'image sous . Cliquez ensuite sur le menu Insertion Image partir du fichier et slectionnez celleci. Ajustez-la si besoin est. Faites ensuite un clic droit dessus et choisissez Affecter une macro. Slectionnez la macro effacer comme prcdemment. Vous pouvez essayer de vous-mmes d'affecter la macro somme_depenses ce bouton.

Si vous vous dbrouillez bien avec un logiciel de dessin ou de retouche photos, vous pourrez vous faire de beaux boutons. Affecter une macro une image, un bouton ou une zone de texte peut permettre de naviguer entre plusieurs feuilles par de simples clics. On peut, par exemple, faire une page de garde pour un fichier assez volumineux et naviguer partir de l entre les onglets du classeur. Et si on le faisait ?

On peut par exemple aller voir les graphiques lis aux tableaux.

Pour cela, cliquez sur le menu Outils Macro Nouvelle Macro. Nommez celle-ci Graphs. Cliquez ensuite sur l'onglet Feuil2 en bas d'Excel, gauche.

Arrtez l'enregistrement. Cliquez maintenant sur le menu Outils Macro Nouvelle Macro et nommez cette dernire Accueil. Cliquez sur l'onglet Feuil1 et arrtez l'enregistrement.

Rcuprez cette image et placez-la sur la feuille 1 de votre classeur.

Affectez-lui la macro Graphs. Cliquez ensuite dessus et sur le bouton que j'ai dj plac, et affectez-lui la macro Accueil.

Sur la premire page, vous devez avoir 2 boutons ( Effacer et Graphs ) et sur la feuille 2, vous devez avoir 1 bouton retour permettant de revenir trs vite au premier onglet. Retour en haut

Quelques exemples de macros


Nous pouvons avoir un fichier imprimer dans plusieurs formats diffrents. Admettons que nous devions imprimer une affiche en format A4 et en format A6 (Bristol). Nous pouvons crer 2 macros, chacune affecte un bouton. Ainsi, d'un simple clic, nous imprimons soit en A4 soit en A6. Au lieu de modifier chaque fois le format, nous cliquons sur 1 seul bouton que nous avons rattach une macro.

Voici une mise en page A6 : Code : VB.NET - Slectionner


1 Sub format_A6() 2 3 With ActiveSheet.PageSetup 4 .PrintTitleRows = "" 5 .PrintTitleColumns = "" 6 End With 7 ActiveSheet.PageSetup.PrintArea = "" 8 With ActiveSheet.PageSetup 9 .LeftHeader = "" 10 .CenterHeader = "" 11 .RightHeader = "" 12 .LeftFooter = "" 13 .CenterFooter = "" 14 .RightFooter = "" 15 .LeftMargin = Application.InchesToPoints(0) 16 .RightMargin = Application.InchesToPoints(0) 17 .TopMargin = Application.InchesToPoints(0.78740157480315) 18 .BottomMargin = Application.InchesToPoints(0) 19 .HeaderMargin = Application.InchesToPoints(0) 20 .FooterMargin = Application.InchesToPoints(0) 21 .PrintHeadings = False 22 .PrintGridlines = False 23 .PrintComments = xlPrintNoComments 24 .PrintQuality = 600 25 .CenterHorizontally = True 26 .CenterVertically = False 27 .Orientation = xlPortrait 28 .Draft = False 29 .PaperSize = 266 30 .FirstPageNumber = xlAutomatic 31 .Order = xlDownThenOver 32 .BlackAndWhite = False 33 .Zoom = False 34 .FitToPagesWide = 1 35 .FitToPagesTall = 1 36 End With 37 End Sub

Et voil un format A4 : Code : VB.NET - Slectionner


1 Sub format_A4() 2 3 With ActiveSheet.PageSetup 4 .PrintTitleRows = "" 5 .PrintTitleColumns = "" 6 End With 7 ActiveSheet.PageSetup.PrintArea = "" 8 With ActiveSheet.PageSetup 9 .LeftHeader = "" 10 .CenterHeader = "" 11 .RightHeader = "" 12 .LeftFooter = "" 13 .CenterFooter = "" 14 .RightFooter = "" 15 .LeftMargin = Application.InchesToPoints(0) 16 .RightMargin = Application.InchesToPoints(0) 17 .TopMargin = Application.InchesToPoints(0.78740157480315) 18 .BottomMargin = Application.InchesToPoints(0) 19 .HeaderMargin = Application.InchesToPoints(0) 20 .FooterMargin = Application.InchesToPoints(0) 21 .PrintHeadings = False 22 .PrintGridlines = False 23 .PrintComments = xlPrintNoComments 24 .PrintQuality = 600 25 .CenterHorizontally = True 26 .CenterVertically = False 27 .Orientation = xlPortrait 28 .Draft = False 29 .PaperSize = xlPaperA4 30 .FirstPageNumber = xlAutomatic 31 .Order = xlDownThenOver 32 .BlackAndWhite = False 33 .Zoom = False 34 .FitToPagesWide = 1 35 .FitToPagesTall = 1 36 End With 37 End Sub

Retour en haut Ce ne sont pas les possibilits qui manquent. Il faut juste arriver comprendre le VBA et arriver ajuster les macros le plus simplement possible. Croyez-moi, quand on a une centaine de macros, on cherche les rduire au maximum.

Les macros ne doivent tre cres que pour excuter des actions rptitives et pnibles. Ne chargez pas trop vos fichiers avec des tonnes d'images, ils ont tendance devenir trs gros aprs.

J'espre que ce tuto aura aid les plus novices d'entre vous comprendre comment se prsente une macro complmentaire, quoi elle peut servir. Ce tutoriel n'est qu'une approche des macros. Si vous voulez poursuivre aprs a, je ne peux que vous suggrer de vous orienter sur des sites spcialiss en Visual Basic et dans Excel.

Insrer des donnes dun fichier Excel ou Access dans MySQL

Web

Livre

eBook

PDF

Ajouter mes favoris

Par

Desolation

Mise jour : 17/02/2012 Difficult : Facile Dure d'tude : 30 minutes

209 visites depuis 7 jours, class 385/799 Bonjour tous !

Vous possdez un grand nombre de donnes contenues sur des supports tels que des fichiers issus dAccess ou dExcel et souhaitez les insrer dans une base de donnes MySQL sans avoir tout recopier ? Vous tes sur la bonne page !

Ce tutoriel a pour vocation daider un maximum de personnes qui rencontrent cette difficult. Ayant moi-mme t confront cette situation, jai pour vous plusieurs solutions : 1. avec un pilote ODBC, la plus complexe ; 2. avec le format CSV, la plus rapide.

Afin de mener bien nos manipulations, vous devez disposer dun certain nombre dlments :

un fichier source *.xls de test (tlcharger), que je vous fournis (il a t fait sous Excel 2010 mais enregistr pour une compatibilit Excel 2003 notez que vous avez tout de mme la possibilit, si vous tes utilisateur de la version 2003, de lire des fichiers issus des versions 2007 et suprieures en tlchargeant un petit utilitaire fourni par Microsoft) ; la suite Microsoft Office (2003 ou suprieure), principalement Access et Excel : jutiliserai la version 2010 ; la plateforme WAMP (ou similaire), que nous emploierons seulement pour le moteur MySQL : jutiliserai WAMP Server 2.2 avec MySQL 5.5.16.

Maintenant que vous avez tous les outils ncessaires, concentrons-nous sur la mise en uvre. Retour en haut Sommaire du tutoriel :

Solution n 1 : avec un pilote ODBC Rsolution du problme Solution n 2 : avec le format CSV

<p style="margin: 0;"> <a href="http://www4.smartadserver.com/call/pubjumpi/24617/166249/10602/S/1357597629050/?"> <img src="http://www4.smartadserver.com/call/pubi/24617/166249/10602/S/1357597629050/?" alt="" /> </a> </p> Retour en haut

Solution n 1 : avec un pilote ODBC


Prparation

Pour cette solution, il est ncessaire de passer par ces quelques tapes de prparation : 1. 2. 3. 4. analyser la structure du fichier ; mettre en place la base de donnes et la table qui recevra les donnes du ct de MySQL ; installer le pilote ODBC pour faire communiquer Access et MySQL ; crer la source de donnes.

Analyse du fichier source

Nous allons ici ouvrir le fichier qui contient les donnes, et ainsi prendre connaissance du nombre de champs (colonnes) et des types de valeurs que nous souhaiterions obtenir en sortie. Regardons notre exemple, frachement tlcharg et ouvert :

Dans la colonne A, nous avons des nombres (certes, pas stocks sous un type numrique dans notre champ, mais ce nest pas un problme) et, en colonne B, des prnoms. Cette situation est plus que classique : on peut dduire qu un identifiant unique correspond un prnom (certes, lui, pas forcment unique).

Mise en place de la base de donnes de destination

Nous avons donc deux champs. Le premier se nommera id et sera de type INT, le second se nommera prenom et sera de type VARCHAR(50). Voici le code SQL permettant de crer la base de donnes tuto et dajouter la table personnes contenant les deux champs cits prcdemment. Code : SQL - Slectionner
1 2 3 4 5 6 7 8 CREATE DATABASE tuto; USE tuto; CREATE TABLE personnes ( id int(11) NOT NULL AUTO_INCREMENT, prenom varchar(50) NOT NULL, PRIMARY KEY (id) );

Notre objectif est maintenant dinsrer nos donnes dans cette table !

Installation du pilote

Pour cette solution, vous devez installer un pilote ODBC pour MySQL. Tlchargez la version 32 bits ou 64 bits (cliquez sur No thanks, just take me to the downloads! si vous ne souhaitez pas crer de compte) selon votre configuration Windows et installez. Jutiliserai cette version qui est la 5.1.10 (64 bits).

Cration de la source de donnes

Pour quAccess puisse communiquer avec MySQL, il a besoin dun pilote mais aussi dune source de donnes, habituellement appele DSN (Data Source Name) ; cest elle qui va indiquer sur quel serveur et quelle base se connecter. Lancez votre serveur MySQL et vrifiez quil est bien dmarr. Rendez-vous dans Panneau de configuration > Systme et scurit > Outils dadministration > Sources de donnes (ODBC). Lcran suivant saffiche alors :

Dans Source de donnes utilisateur , slectionnez Ajouter , aprs quoi vous obtenez ceci :

Vous avez la liste de tous les pilotes utiles pour les bases de donnes installs sur votre machine, slectionnez donc MySQL ODBC 5.1 Driver , le pilote que vous venez dinstaller, et faites Terminer .

Configurons prsent notre connexion MySQL. Il nous faut tout dabord donner un nom notre DSN, choisissez donc un nom qui vous permettra de la retrouver facilement par la suite. Indiquez ensuite le nom du serveur (localhost), le nom dutilisateur (par dfaut, root sans mot de passe) puis slectionnez dans la liste la base de donnes concerne (soit tuto). Cliquez ensuite sur Test pour tester la connexion. Vous devriez obtenir Connection successful . Cliquez sur OK . Notre DSN est dsormais cre : nous pouvons ouvrir Access !

Connexion MySQL depuis Access

Crez un nouveau fichier Access. tant sous 2010, jobtiens un fichier *.accdb sous 2003, vous devriez obtenir un *.mdb. Ouvrez le fichier si ce nest dj fait. Si vous utilisez Access 2007, cherchez Donnes externes > Plus > Base de donnes ODBC. Sous Access 2010, cherchez Donnes externes > Base de donnes ODBC.

Mais quest-ce que ce ODBC ? Tu nous as fait installer un truc dont on ne connat mme pas lutilit ?! Citation : Comment a Marche ODBC signifie Open DataBase Connectivity. Il s'agit d'un format dfini par Microsoft permettant la communication entre des clients bases de donnes fonctionnant sous Windows et les SGBD du march. Le gestionnaire ODBC est prsent sur les systmes Windows. Il existe toutefois des implmentations sur d'autres plates-formes, notamment des plates-formes UNIX/Linux.

Voil pour la dfinition. Seulement, le pilote pour MySQL nest pas natif Windows, cest pourquoi je vous lai fait tlcharger. Vous devriez obtenir cette fentre. Slectionnez le second choix car nous souhaitons nous synchroniser avec notre table personnes (pour ceux qui suivent ).

Ensuite, nous allons retrouver notre DSN dans Source de donnes machine .

Sont rpertories les tables appartenant la base de donnes slectionne (do lintrt de construire sa table auparavant), slectionnez donc la table personnes et cliquez sur OK .

Sur la liste, gauche, apparat lentre personnes : double-cliquez dessus pour louvrir ; nous retrouvons bien nos champs id et prenom.

Retournons prsent sur notre fichier Excel (ne fermez pas le fichier Access) rouvrez-le si vous laviez ferm. Il va maintenant sagir de slectionner toutes nos donnes par une combinaison que vous connaissez bien. Petite astuce : placez-vous en cellule A1 et appuyez sur les touches suivantes : Ctrl + Shift + Fin. Ainsi, toutes les donnes places entre la cellule de dpart en haut gauche (ici A1) et la cellule en bas droite seront slectionnes jusqu ce quExcel ne trouve plus de donnes (dans notre cas, en B18). Vous pouvez maintenant copier (Ctrl + C).

Retournez sur votre fichier Access puis slectionnez lensemble des donnes en cliquant sur la petite flche qui se situe gauche de id et au-dessus de ltoile * (cest trs important, sinon la copie ne fonctionnera pas) :

Il ne vous reste plus qu coller les donnes avec Ctrl + V.

Si vous tes sous Windows XP, vous aurez peut-tre cette erreur. Si tel est le cas, reportez-vous au chapitre Rsolution du problme .

Reprenons. Vous devriez maintenant obtenir ceci :

Bien sr, rpondez Oui . Cest termin, vos donnes sont insres ! Allez quand mme vrifier via phpMyAdmin si vous en doutez. Ou via la console MySQL (pour le fun ! ).

Nous retrouvons donc nos enregistrements : mission accomplie !

Retour en haut

Rsolution du problme
Jai rencontr ce problme sous Windows XP et avec Office 2007.

Premire solution

Allez dans Panneau de configuration > Ajout/Suppression de programmes > cochez Afficher les mises jour > slectionnez la mise jour pour Excel 2007 KB958437 et supprimez-la. Copiez nouveau la slection dans Excel et collez dans Access. Si le problme persiste ou si vous ne trouvez pas cette mise jour dans la liste, passez la seconde solution.

Seconde solution

Ouvrez un document Word vierge, collez avec Ctrl + V, slectionnez nouveau avec Ctrl + A, copiez avec Ctrl + C, collez dans Access avec Ctrl + V et a devrait fonctionner. Retour en haut

Solution n 2 : avec le format CSV


Cette solution est la plus simple. Il faut au pralable convertir le fichier tuto.xls en tuto.csv. Il faut pour cela, dans Excel, faire un Enregistrer sous et choisir le type appropri :

En mode graphique

phpMyAdmin, pour ceux qui en disposent, propose un import de donnes par fichier dont le poids nexcde pas 2 Mo. Choisissez votre base de donnes puis slectionnez loption Importer et remplissez le formulaire comme suit :

Pour que les accents soient correctement enregistrs dans la table de destination, il faut convertir le fichier *.csv en UTF-8. Pour cela, vous pouvez louvrir avec Notepad++ et utiliser le menu Encodage > Convertir en UTF-8.

phpMyAdmin vous a cr une table et des colonnes avec des noms gnriques.

En mode console

Par ce biais, vous naurez (normalement) pas de contrainte concernant le poids du fichier. Il faut dabord crer la base de donnes et la table, tout comme dans la solution no 1. Voici le code pour crer la base et la table : Code : SQL - Slectionner
1 2 3 4 5 6 7 8 CREATE DATABASE tuto; USE tuto; CREATE TABLE personnes ( id int(11) NOT NULL AUTO_INCREMENT, prenom varchar(50) NOT NULL, PRIMARY KEY (id) );

Ensuite, il faut utiliser cette commande pour intgrer le *.csv. Que ce soit sous UNIX/Linux ou Windows, le sparateur de rpertoire reste le slash (/). Code : SQL - Slectionner
1 2 3 4 LOAD DATA LOCAL INFILE 'C:/User/Syl/Desktop/tuto.csv' INTO TABLE tuto.personnes FIELDS TERMINATED BY ';' ENCLOSED BY ''

5 LINES TERMINATED BY '\r\n';

Voil, les donnes sont insres, vous pouvez vrifier comme je lai indiqu en fin de solution no 1.

Vous aimerez peut-être aussi