Vous êtes sur la page 1sur 8

DreamLive : www.dreamlive.

fr Macros VBA Excel Importation - Exportation

IMPORTATION - EXPORTATION DYNAMIQUE


Vous allez crer deux macros associes chacune un bouton. La premire doit tre capable dexporter un tableau slectionn sur la feuille active quel que soit son nombre de colonnes et de lignes. Cette exportation se ralise dans un chier texte avec sparateur de liste (virgules dlimitant les colonnes). La seconde macro doit tre en mesure de lire ce chier texte et de reconstituer le tableau sur la feuille Excel et l encore, quel que soit le nombre de lignes et de colonnes. Dmarrez Excel, Crez un classeur, La gure ci-contre illustre la premire feuille. Renommez la premire feuille Export_dyn, Renommez la deuxime feuille Import_dyn, Vous lavez compris, lexportation des donnes se fera depuis la premire feuille tandis que limportation se ralisera depuis la deuxime. Pour exporter des donnes, il faut des cellules contenant des informations. Reproduisez le tableau de la gure, Vous devez de mme afcher les barres doutils Formulaires et Visual Basic. Pour ce faire, Droulez le menu Afchage, Pointez sur Barres doutils, Cliquez sur Formulaires, Reproduisez les mmes oprations pour afcher la barre doutils Visual Basic. La macro dexportation doit tre capable dexporter les donnes slectionnes sur la feuille Export_dyn et ce, quel que soit le nombre de lignes et de colonnes que vous slectionnez. Cliquez sur le bouton Visual Basic Editor de la barre doutils Visual Basic, Vous basculez ainsi en mode diteur de code. Droulez alors le menu Insertion, Puis, cliquez sur Module. Vous insrez ainsi un nouveau module, soit une page de code vierge au centre de lcran prte accueillir la macro dexportation que vous allez crer. Vous allez crer la macro export_tableau(). Pour ce faire, saisissez les bornes de la procdure, dans la page de code, comme suit : Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr

DreamLive : www.dreamlive.fr Macros VBA Excel Importation - Exportation


Sub export_tableau() End Sub Vous allez commencer par dclarer les variables qui vont servir mmoriser les bornes infrieures et suprieures du tableau slectionn exporter. Vous connatrez ainsi le nombre de lignes et surtout le nombre de colonnes qui dterminera le nombre de sparateurs de liste (virgules) inscrire le chier texte pour conserver la structure du tableau. Dans les bornes de la procdure, saisissez les dclarations suivantes : Dim cellule As Range Variable pour parcourir chaque cellule de la slection Dim ligne_min As Integer, ligne_max As Integer Dim col_min As Integer, col_max As Integer Vous devez ensuite initialiser ces variables et parcourir chaque cellule de la slection pour savoir quelle est la premire et quelle est la dernire. Saisissez les initialisations ainsi que la boucle suivantes : ligne_min = 100: ligne_max = 1 col_min = 100: col_max = 1 For Each cellule In Selection If cellule.Row > ligne_max Then ligne_max = cellule.Row If cellule.Row < ligne_min Then ligne_min = cellule.Row If cellule.Column > col_max Then col_max = cellule.Column If cellule.Column < col_min Then col_min = cellule.Column Next cellule

EXPLICATIONS
For Each cellule In Selection : Cette boucle vous permet de parcourir chaque cellule slectionne. Cest pourquoi vous aviez dclar la variable cellule de type Range identique lobjet Selection que vous parcourez. If cellule.Row > ligne_max Then ligne_max = cellule.Row : Ds que lindice de ligne de la cellule parcourue est suprieur la dernire valeur maximum mmorise, vous considrez quil sagit de la ligne la plus grande jusqu dnitivement trouver la dernire ligne du tableau. If cellule.Row < ligne_min Then ligne_min = cellule.Row : Ds que lindice de ligne de la cellule parcourue est infrieur la dernire valeur minimum mmorise, vous considrez quil sagit de la ligne la plus petite jusqu atteindre la premire ligne du tableau. If cellule.Column > col_max Then col_max = cellule.Column : Ds que lindice de colonne de la cellule parcourue est suprieur la dernire valeur maximum mmorise, vous considrez quil sagit de la colonne la plus grande jusqu atteindre la dernire colonne du tableau. If cellule.Column < col_min Then col_min = cellule.Column : Ds que lindice de colonne de la cellule parcourue est infrieur la dernire valeur minimum mmorise, vous considrez quil sagit de la colonne la plus petite jusqu atteindre la premire colonne du tableau. Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr

DreamLive : www.dreamlive.fr Macros VBA Excel Importation - Exportation


REPRISE DU CODE
Une fois les bornes ainsi trouves et mmorises, vous devez les exploiter pour parcourir chaque ligne du tableau et pour chaque ligne toutes les colonnes, de faon exporter les donnes spares par des virgules dans un chier texte. Vous devez donc dclarer une variable servant mmoriser le texte lue dans la cellule en vue de lcrire dans le chier texte, ainsi que deux variables numriques servant parcourir les cellules du tableau (ligne et colonne). A la suite du code prcdent, saisissez les dclarations de variables nonces ci-dessous : Dim texte As String Dim ligne As Integer, colonne As Integer Ensuite vous allez ouvrir un chier texte en criture, parcourir toutes les colonnes du tableau pour chaque ligne de faon exporter les donnes et reconstituer la structure du tableau dans le chier texte, laide de virgules comme sparateurs de colonnes. A la suite, saisissez la n du code : Open ThisWorkbook.Path & \chier.txt For Output As #1 For ligne = ligne_min To ligne_max For colonne = col_min To col_max texte = texte & Cells(ligne, colonne).Value & , Next colonne Print #1, texte texte = Next ligne Close #1

EXPLICATIONS

DU CODE

Open ThisWorkbook.Path & \chier.txt For Output As #1 : Linstruction Open issue du Basic, vous permet douvrir un chier texte en mmoire de faon y crire ou le lire. Le chier en question est : ThisWorkbook.Path & \chier.txt. La proprit Path de lobjet ThisWorkbook dsigne le chemin daccs au dossier du classeur. Donc vous accdez au chier chier.txt situ dans le mme dossier que celui de votre classeur. Linstruction suivante For Output signie que vous y accdez en criture. Avec ce mode daccs, si le chier nexiste pas, VBA le cre. As #1 permet dallouer un numro dadresse mmoire virtuel et arbitraire pour stocker le chier en mmoire et le manipuler laide de cette adresse (1). For ligne = ligne_min To ligne_max For colonne = col_min To col_max A laide de cette boucle imbrique et des variables ligne et colonne, vous parcourez pour chaque ligne, toutes les colonnes du tableau, grce aux quatre bornes mmorises dans les variables. texte = texte & Cells(ligne, colonne).Value & , : Dans la mme variable texte, vous mmorisez ainsi lintgralit des donnes dune ligne (toutes ses colonnes) en sparant les donnes par une virgule. Print #1, texte texte =

Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr

DreamLive : www.dreamlive.fr Macros VBA Excel Importation - Exportation


Print #1, texte : Ds que vous sortez de la boucle For colonne, cela signie que vous avez lu toutes les cellules de la ligne, donc vous inscrivez toutes les valeurs rcupres dans le chier texte laide de linstruction Print, ladresse mmoire dnie louverture #1, laide de la variable texte qui contient ces informations. texte = : Vous rinitialisez ensuite la variable texte car, tant que vous navez pas atteint la dernire ligne du tableau, la boucle For ligne passe la ligne suivante sur laquelle vous allez de nouveau mmoriser toutes les donnes contenues dans chaque colonne en les sparant par des virgules, et ainsi de suite... Close #1 : Bien entendu, une fois les boucles termines, soit la n du tableau atteinte, vous refermez laccs au chier texte de faon enregistrer les donnes sur le disque dur et librer la mmoire.

TEST DU CODE
Basculez sur la feuille Excel, Cliquez sur le contrle bouton de la barre doutils Formulaires, Tracez un rectangle sur la feuille de manire dessiner un bouton, Dans la fentre qui apparat, slectionnez la macro export_tableau, Puis, validez par Ok. Vous associez ainsi la macro au bouton sur lequel il suft de cliquer pour lexcuter. Slectionnez une partie du tableau ou tout le tableau, Cliquez sur le bouton. En apparence rien ne se produit. Pourtant les donnes ont bien t inscrite dans un chier texte qui, par la mme occasion a t cr. Ouvrez le dossier de votre classeur laide de lexplorateur Windows, Vous y trouvez le chier chier.txt. Double cliquez sur ce dernier pour louvrir. Comme vous le constatez, les donnes ont bien t exportes, spares par des virgules pour dlimiter les colonnes. Il sagit maintenant de crer une macro pour importer ces donnes et capable de reconstituer la structure du tableau dans une feuille Excel.

IMPORTATION
Basculez en mode Visual Basic Editor, Crez la procdure importation_dyn() en saisissant les bornes de sa procdure, comme suit : Sub importation_dyn() End Sub Lobjectif est de rcuprer les informations du chier texte ligne ligne et pour chaque ligne de trononner la chane de caractres selon les virgules dtectes de faon reconstituer les colonnes du tableau.

Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr

DreamLive : www.dreamlive.fr Macros VBA Excel Importation - Exportation


Pour ce faire, vous avez besoin de variables de types entier de positionnement et de dtection de virgules dans la chane. De mme, il vous faut une variable de type texte pour mmoriser chaque ligne du chier ainsi quune autre variable de type texte rcuprant les bouts de chane dcoupes selon la virgule. Enn vous allez dclarez deux variables type entier pour parcourir les lignes et colonnes du tableau reconstituer ainsi quune autre variable de type entier pour rinitialiser la colonne de dpart chaque changement de ligne dans la boucle qui parcourt le chier texte. Dans les bornes de la procdures, saisissez les dclarations suivantes de variables : depart ==> position de dpart dans la chane de texte mmorise position ==> mmorise la position de la virgule trouve pour la dcoupe Dim depart As Integer, position As Integer texte ==> ligne entire du chier texte, tampon ==> texte dcoup selon les virgules Dim texte As String, tampon As String ligne et colonne actives de la feuille pour la reconstruction du tableau Dim ligne As Integer, colonne As Integer, col_depart As Integer Limportation du tableau se fera partir de la cellule slectionne sur la feuille au moment de cliquer sur le bouton. Vous devez donc mmoriser ces informations de dpart dans les variables ligne et colonne. Pour ce faire, poursuivez le code ainsi : Mmorisation de la ligne et de la colonne de la cellule slectionne pour pt dpart de limportation ligne = ActiveCell.Row: colonne = ActiveCell.Column: col_depart = colonne Avant de dbuter la boucle dimportation, vous devez supprimer toutes les donnes de la feuille pour que limportation soit claire. Ajouter la ligne suivante : Efface format et contenu de toutes les cellules de la feuille Cells.Clear La mthode Clear de lobjet Cells permet deffacer le contenu ainsi que le format de toutes les cellules de la feuille. Maintenant vous devez ouvrir le chier texte en lecture et effectuer une boucle parcourant toutes les lignes. Pour chaque ligne, vous devez dcouper les informations sur la virgule et les inscrire dans les colonne de la feuille de manire reconstituer le tableau. Pour ce faire, saisissez le code suivant : Ouverture du chier chier.txt en lecture Open ThisWorkbook.Path & \chier.txt For Input As #1 Boucle de lecture jusqu la dernire ligne - Tant que la n nest pas atteinte Do While Not EOF(1) Mmorise la ligne en cours du chier texte dans la variable texte Line Input #1, texte A chaque nouvelle ligne, initialisation des variables de lecture de la ligne de texte depart = 1: position = 1 Tant que la virgule est trouve dans le texte Do While (position <> 0) trouve la position (numrique) de la virgule grce Instr Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr

DreamLive : www.dreamlive.fr Macros VBA Excel Importation - Exportation


position = InStr(depart, texte, ,, 1) If position = 0 Then tampon = Mid(texte, depart) Sheets(import_dyn).Cells(ligne, colonne).Value = tampon Exit Do Else Mmorise le texte situ entre deux virgules tampon = Mid(texte, depart, position - depart) End If Ecrit le morceau de texte prlev dans la cellule en cours Sheets(import_dyn).Cells(ligne, colonne).Value = tampon Le nouveau point de dpart est la position aprs la virgule depart = position + 1 Positionne sur la colonne suivante pour le prochain morceau de texte colonne = colonne + 1 Loop Nouvelle ligne, donc la colonne est rinitialise la premire colonne du tableau colonne = col_depart Passage la ligne suivante de la feuille ligne = ligne + 1 Loop Close #1

EXPLICATIONS

DU CODE

Open ThisWorkbook.Path & \chier.txt For Input As #1 : Comme pour la macro dexportation linstruction Open permet douvrir le chier texte dont le chemin est prcis dans la suite de linstruction. Cette fois en revanche, vous accdez au chier en lecture et non en criture par le biais de linstruction For Input. Do While Not EOF(1) : Cette boucle vous permet de parcourir ligne ligne lintgralit du chier texte. Linstruction EOF signie End Of File, soit tant que la n du chier nest pas atteinte. Line Input #1, texte : En accs lecture, Line Input est linstruction permettant de rcuprer lintgralit de la ligne en cours de lecture dans le chier texte et de la mmoriser dans la variable texte ici. Une fois le contenu rcuprer, Line Input passe automatiquement la ligne suivante, du fait de la boucle. depart = 1: position = 1 : A chaque nouvelle ligne, vous rinitialisez les variables de positionnement dans la chane de caractres car vous dbutez lanalyse dun nouveau texte. Do While (position <> 0) : Vous dbutez ensuite une boucle qui dmarre lanalyse et la dcoupe de la ligne mmorise. Le test position <> 0 tient au fait que vous utilisez ensuite la fonction InStr pour trouver les positions des virgules. Or cette fonction renvoie la valeur 0 lorsque plus aucune virgule nest trouve. Lanalyse se termine ainsi. position = InStr(depart, texte, ,, 1) : A chaque passage vous mmorisez la position de la virgule suivante car la variable dpart permet de repartir juste aprs la prcdente virgule trouve (Dernier passage dans la boucle). La fonction InStr qui renvoie cette position demande trois paramtres en commenant par la position de dpart partir de laquelle chercher dans le texte (dpart), puis vient le texte en question (texte) et enn le caractre recherch dans cette chane (,). Le dernier paramtre est facultatif.

Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr

DreamLive : www.dreamlive.fr Macros VBA Excel Importation - Exportation


If position = 0 Then tampon = Mid(texte, depart) Sheets(import_dyn).Cells(ligne, colonne).Value = tampon Exit Do Si position renvoie 0, cela signie que la dernire virgule a t trouv et que la n du texte est llment de la dernire colonne importer. Pour ce faire, vous le mmorisez dans la variable tampon laide de la fonction Mid qui est surcharge ici puisquon ne lui passe que deux paramtres au lieu de trois : texte qui est le texte dans lequel prlever linformation et depart, lindice du caractre partir duquel effectuer ce prlvement. Le dernier paramtre dnit normalement la longueur sur laquelle effectuer ce prlvement. Lorsquil nest pas fourni, comme ici, le prlvement seffectue jusqu la n de la chane. Cette information est alors instantanment inscrite dans la colonne suivante de la ligne en cours sur la feuille Excel (Sheets(import_dyn).Cells(ligne, colonne).Value = tampon). Vous sortez ensuite de la boucle Exit Do, pour revenir la premire boucle qui passe donc la ligne suivante du chier texte. Else Mmorise le texte situ entre deux virgules tampon = Mid(texte, depart, position - depart) End If Dans le cas contraire (Else), cest dire lorsque la virgule est trouve, vous prlevez le texte de la prcdente virgule la suivante (tampon = Mid(texte, depart, position - depart)). Ecrit le morceau de texte prlev dans la cellule en cours Sheets(import_dyn).Cells(ligne, colonne).Value = tampon Le nouveau point de dpart est la position aprs la virgule depart = position + 1 Positionne sur la colonne suivante pour le prochain morceau de texte colonne = colonne + 1 Loop Ds lors que vous sortez de linstruction If, vous inscrivez linformation rcupre (tampon) dans la nouvelle colonne de la ligne en cours sur la feuille. Vous incrmentez la variable dpart la valeur de lindice correspondant la position situe juste aprs la dernire virgule trouve pour prlever, au prochain passage dans la boucle, linformation suivante (juste aprs la virgule). Vous noubliez pas dincrmenter de mme lindice de colonne (colonne) pour que linformation suivante (prochain passage dans la boucle) soit inscrite dans la colonne suivante de la feuille. Et vous bouclez sur le texte (Loop). Nouvelle ligne, donc la colonne est rinitialise la premire colonne du tableau colonne = col_depart Passage la ligne suivante de la feuille ligne = ligne + 1 Loop Lorsque vous sortez de la boucle prcdente, cela signie que lanalyse complte dune ligne du chier est termine, et que vous passez la ligne suivante. Vous rinitialisez alors la variable colonne sa valeur de dpart (col_depart) pour que linscription de la nouvelle ligne du tableau reprenne la premire colonne. Et vous passez la ligne suivante de la feuille (ligne = ligne + 1). Close #1 : Lorsque cette dernire boucle se termine, vous avez parcouru toutes les lignes du chier et rcupr toutes les informations de colonne. Vous librez ainsi les ressources mmoire en fermant le chier texte que vous aviez ouvert ladresse virtuelle #1. Il vous reste maintenant tester ce code.

Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr

DreamLive : www.dreamlive.fr Macros VBA Excel Importation - Exportation


Basculez sur la feuille Excel Import_dyn, Celle-ci est encore vierge. Ajoutez un bouton de la barre doutils Formulaires, Affectez lui la macro importation_dyn, Cliquez sur lune des cellules de la feuille comme point de dpart dimportation, Cliquez sur votre bouton. Vous constatez que lintgralit du chier texte est rcupr et que le tableau est reconstitu. Si vous tentez une nouvelle exportation ne comportant ni le mme nombre de lignes ni le mme nombre de colonnes, vous remarquerez que votre macro est toujours capable de reconstruire le tableau bien que sa structure ait t modie.

Ces documents DreamLive sont libres de droits et ouverts tous alors, protez, partagez et apprciez ! Pour nous retrouver sur le Web : http://www.dreamlive.fr.

Document libre de droits. Partagez ! Pour nous retrouver sur le Web : www.dreamlive.fr