Contrôle d'Excel par MATLAB via Automation - Connexion

Apprendre à interfacer MATLAB et Excel par la programmation

Cet article présente les bases du contrôle d'Excel par MATLAB via Automation. Il fait partie d'une série d'articles dont vous trouverez la liste complète sur cette page.

Après une brève introduction, le deuxième chapitre de cet article contient un exemple de code qui servira, à quelques modifications près, de base à tous les autres. Le troisième chapitre est une analyse ligne par ligne du code du deuxième chapitre. Le quatrième chapitre présente quelques commandes complémentaires incontournables.

Votre avis et vos suggestions sur cet article m'intéressent !
Alors après votre lecture, n'hésitez pas : 17 commentaires Donner une note à l'article (5)

Article lu   fois.

L'auteur

Profil ProSite personnelPage personelle de Jérôme Briot (Dut)

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Afin de permettre à MATLAB de piloter Excel, il faut établir au préalable une connexion via un serveur Automation. Une fois cette connexion établie, on peut envoyer des ordres à Excel par l'intermédiaire de commandes suivant la syntaxe du langage VBA.

À partir d'un exemple simple, nous allons aborder les commandes de base qui permettent de gérer l'application Excel et les classeurs.

II. Exemple de code

Voici un exemple de code complet qui permet, depuis MATLAB, de lancer une application Excel, de créer un nouveau classeur, de l'enregistrer dans un fichier data.xlsx placé dans le répertoire D:, de fermer le classeur et de fermer l'application Excel.

 
Sélectionnez
Excel = actxserver('Excel.Application');

Excel.Visible = true;

Workbook = Excel.Workbooks.Add;

Workbook.SaveAs('D:\data.xlsx');

Workbook.Close;

Excel.Quit;

delete(Excel)

clear Excel

Nous allons détailler ligne par ligne ce code dans le chapitre suivant.

Le format xlsx n'est supporté que depuis Excel 2007. Si vous utilisez une version plus ancienne d'Excel, vous devez impérativement utiliser le format xls.

III. Explication pas à pas

III-A. Création du serveur Automation

La commande MATLAB permettant l'ouverture d'une application Excel est la suivante :

 
Sélectionnez
Excel = actxserver('Excel.Application');

Cette commande renvoie un objet COM comme le montre le résultat de la commande whos :

 
Sélectionnez
>> whos Excel
  Name       Size            Bytes  Class                    Attributes

  Excel      1x1                    COM.Excel_Application

Malgré le fait que MATLAB ne renvoie pas de message d'erreur, l'interface graphique d'Excel n'apparaît pas par défaut. On peut néanmoins remarquer la réussite de la commande en ouvrant le gestionnaire des tâches de Windows et en vérifiant qu'un nouveau processus Excel a bien été créé.

Image non disponible
Processus Excel 32 bits dans le gestionnaire des tâches de Windows 7

Le gestionnaire liste le nombre total de processus Excel ouverts. Il est donc normal de voir apparaître N+1 processus Excel si vous avez déjà N processus Excel ouverts avant d'exécuter le code MATLAB.

III-B. Visibilité de l'application Excel

Comme on l'a vu précédemment, l'application Excel s'ouvre de manière cachée par défaut. Pour voir l'application, il faut ajouter la ligne suivante juste après son ouverture :

 
Sélectionnez
Excel.Visible = true;

L'interface graphique d'Excel apparaît alors vide :

Image non disponible

La visibilité de l'interface Excel n'est généralement pas nécessaire. Cette ligne de commande n'est donc que rarement utilisée dans la pratique.

III-C. Création d'un nouveau classeur

Pour créer un classeur, on utilise la commande suivante :

 
Sélectionnez
Workbook = Excel.Workbooks.Add;

Une feuille de calcul Excel apparaît alors vide :

Image non disponible

Bien qu'une nouvelle feuille de calcul Excel apparaisse, le fichier n'a pas encore de nom. Par défaut, Excel utilise ici le nom Classeur1 comme on peut le voir dans la partie supérieure de la figure ci-dessus.

III-D. Enregistrement dans un nouveau fichier

Pour enregistrer dans un nouveau fichier data.xlsx situé dans le dossier D:, on utilise la commande suivante :

 
Sélectionnez
Workbook.SaveAs('D:\data.xlsx');

Le nom du fichier (ici data.xlsx) apparaît maintenant dans la partie supérieure de la fenêtre Excel :

Image non disponible

III-E. Fermeture du classeur

Pour fermer le classeur, on utilise la commande suivante :

 
Sélectionnez
Workbook.Close;

L'interface Excel retrouve son état initial vide :

Image non disponible

III-F. Fermeture de l'application Excel

Pour fermer l'application Excel, on utilise la commande suivante :

 
Sélectionnez
Excel.Quit;

Le processus Excel n'existe plus et n'est donc plus listé par le gestionnaire des tâches de Windows.

III-G. Nettoyage de l'espace de travail

Même si la commande Excel.Quit ferme l'application Excel, l'objet Excel est encore présent en mémoire dans MATLAB.

Pour le libérer, il faut utiliser la commande suivante :

 
Sélectionnez
delete(Excel)

Pour finir, la variable Excel reste disponible sous MATLAB. Il faut donc la supprimer en utilisant la fonction clear :

 
Sélectionnez
clear Excel

IV. Compléments

Bien que celles-ci n'apparaissent pas dans l'exemple du chapitre II, il est néanmoins judicieux de présenter dès maintenant quelques commandes supplémentaires.

IV-A. Ouvrir un fichier existant

Pour ouvrir un fichier Excel déjà existant, on utilise la commande suivante :

 
Sélectionnez
xlspath = 'D:\';
xlsfile = 'data.xlsx';

Workbook = Excel.Workbooks.Open(fullfile(xlspath,xlsfile));

Voir Comment concaténer le nom d'un fichier et celui d'un répertoire ? pour en savoir plus sur l'utilité de la fonction fullfile

Le chemin du dossier où se trouve le fichier Excel doit impérativement être donné en absolu et non pas en relatif.

IV-B. Enregistrement dans un fichier existant

Pour enregistrer dans un fichier existant, on utilise la commande suivante :

 
Sélectionnez
Workbook.Save;

IV-C. Fermeture d'un classeur sans enregistrement

En cas de fermeture d'un classeur sans enregistrement des modifications au préalable, Excel ouvre une boîte de dialogue pour les options de sauvegarde.

Image non disponible

Pour forcer la fermeture du classeur sans qu'Excel ne demande de confirmation d'enregistrement, on utilise la commande suivante :

 
Sélectionnez
Workbook.Close(false);

V. Conclusion

Vous savez maintenant comment connecter Excel et MATLAB via Automation.

Nous avons vu comment ouvrir et fermer Excel, et comment gérer l'ouverture, la fermeture et l'enregistrement d'un classeur.

Vous pouvez maintenant poursuivre votre lecture par l'article intitulé Contrôle d'Excel par MATLAB via Automation - Les objets et leur manipulation qui présente les objets VBA et les techniques de gestion de ces objets.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2013-2014 Jerome Briot. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.