Contrôle d'Excel par MATLAB via Automation - Gestion des feuilles

Apprendre à interfacer MATLAB et Excel par la programmation

Cet article présente la gestion des feuilles d'un classeur dans le cadre 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 présente les principaux objets et collections VBA relatifs aux feuilles. Le troisième chapitre présente les différentes méthodes de manipulation des feuilles (identification, ajout, suppression, déplacement, protection).

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

Dans Excel, un classeur contient des feuilles. Ces feuilles peuvent être soit des feuilles de calcul, soit des feuilles de graphiques. Dans les précédents tutoriels, nous avons utilisé des feuilles de calcul à l'aide d'objets Worksheet contenus dans la collection Worksheets. Les feuilles de graphique sont représentées par des objets Chart contenus dans la collection Charts.

Nous allons présenter ici la gestion des feuilles à l'intérieur d'un classeur Excel à l'aide de MATLAB.

II. Objets VBA relatifs aux feuilles

Ce tutoriel ne revient pas sur les notions d'objet et de collection. Si vous ne maîtrisez pas ces deux aspects, je vous invite à consulter le précédent tutoriel : Les objets et leur manipulation.

II-A. Les collections Sheets, Worksheets et Charts

Trois collections peuvent contenir des feuilles sous Excel. Il est nécessaire de bien comprendre les liens qui relient ces collections pour gérer efficacement les feuilles d'un classeur.

La collection Sheets contient toutes les feuilles d'un classeur. La collection Worksheets ne contient que les feuilles de calcul d'un classeur. La collection Charts ne contient que les feuilles de graphique d'un classeur.

II-B. Les objets Worksheet et Chart

La collection Worksheets contient des objets Worksheet qui représentent les feuilles de calcul du classeur.

Voici un exemple de feuille de calcul :

Image non disponible

La collection Charts contient des objets Chart qui représentent les feuilles de graphique du classeur.

Voici un exemple de feuille de graphique :

Image non disponible

Les objets Worksheet peuvent aussi contenir des graphiques incorporés. Dans ce cas, ces graphiques sont placés dans des objets conteneurs ChartObject qui contiennent eux-mêmes un objet Chart.

Bien que les objets Worksheet et Chart contiennent des données différentes, ils possèdent des propriétés et des méthodes similaires, comme nous allons le voir dans la suite de ce document.

III. Manipulation des feuilles

III-A. Nombre de feuilles dans un classeur

Pour déterminer le nombre de feuilles dans un classeur, on utilise la propriété Count des collections Sheets, Worksheets ou Charts :

  • Sheets.Count : nombre total de feuilles ;
  • Worksheets.Count : nombre de feuilles de calcul ;
  • Charts.Count : nombre de feuilles de graphique.

Prenons l'exemple d'un classeur contenant trois feuilles de calcul et une feuille de graphique :

Image non disponible

Le nombre total de feuilles sera donné par :

 
Sélectionnez
>> Excel.Sheets.Count

ans =

     4

Le nombre de feuilles de calcul sera donné par :

 
Sélectionnez
>> Excel.Worksheets.Count

ans =

     3

Le nombre de feuilles de graphique sera donné par :

 
Sélectionnez
>> Excel.Charts.Count

ans =

     1

Le nombre de feuilles à l'ouverture d'un nouveau classeur peut être modifié à l'aide de la propriété « SheetsInNewWorkbook » de l'objet Application. Un classeur doit toujours contenir au moins une feuille de calcul. Comme toute modification apportée à l'objet Application, celle-ci est conservée d'une session Excel à une autre.

III-B. Identification des feuilles

Plusieurs méthodes peuvent être utilisées pour identifier une feuille au sein d'un classeur.

III-B-1. Par index

Les feuilles peuvent être identifiées par le numéro d'apparition dans la propriété Item des collections Sheets, Worksheets et Charts.

Prenons l'exemple d'un classeur contenant plusieurs feuilles de calcul et de graphique :

Image non disponible

On peut accéder consécutivement à chaque feuille contenue dans la collection Sheets avec le code suivant :

 
Sélectionnez
nfeuilles = Excel.Sheets.Count;
for n = 1:nfeuilles
   disp(Excel.Sheets.Item(n).Name)
end

Ce qui donne :

 
Sélectionnez
Feuil3
Graph2
Feuil1
Graph1
Feuil2

On peut contrôler la position d'une feuille en récupérant la valeur de sa propriété Index :

Toujours avec l'exemple précédent :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item(3);
>> sheet.Index

ans =

     5

>> sheet.Name

ans =

Feuil2

Pour sélectionner la dernière feuille d'un classeur, il suffit de se servir de la propriété Count de la collection Sheets comme ceci :

 
Sélectionnez
>> sheet = Excel.Sheets.Item(Excel.Sheets.Count);
>> sheet.Name

ans =

Feuil2

III-B-2. Par nom

Bien que la méthode par index soit souvent efficace, on peut aussi identifier une feuille par le nom qui apparaît dans l'onglet situé dans la partie basse de la feuille.

Par exemple :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil2');
>> sheet.Index

ans =

     5

Par défaut, dans la version française d'Excel, les feuilles sont nommées selon le format suivant :

  • Feuil%d pour les feuilles de calcul où %d prend les valeurs 1, 2, 3…
  • Graph%d pour les feuilles de graphique où %d prend les valeurs 1, 2, 3…

Il peut être plus pratique et plus lisible de donner un nom à une feuille en cohérence avec son contenu. Pour ce faire, on renseigne la propriété Name.

Par exemple, prenons le classeur suivant :

Image non disponible

Supposons que la feuille nommée « Feuil3 » contienne des données issues de mesures, on pourrait la nommer ainsi :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil3');
>> sheet.Name = 'Mesures';

Ce qui donne bien :

Image non disponible

On peut alors facilement accéder à cette feuille en utilisant ce nouveau nom :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Mesures');
>> sheet.Index

ans =

     1

III-B-3. Par position relative

Pour identifier une feuille par rapport à une autre, on utilise la propriété Next ou Previous.

En reprenant l'exemple précédent :

Image non disponible

Pour accéder à la feuille qui suit la feuille de calcul nommée « Feuil1 » :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil1');
>> sheet2 = sheet.Next;
>> sheet2.Name

ans =

Graph1

Ou directement :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil1').Next;
>> sheet.Name

ans =

Graph1

Pour accéder à la feuille qui précède la feuille de calcul nommée « Feuil1 » :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil1');
>> sheet2 = sheet.Previous;
>> sheet2.Name

ans =

Graph2

Ou directement :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil1').Previous;
>> sheet.Name

ans =

Graph2

III-C. Ajouter une feuille dans un classeur

Pour ajouter une ou plusieurs feuilles dans un classeur, on utilise la méthode Add dont la syntaxe VBA est la suivante :

 
Sélectionnez
expression.Add(Before, After, Count, Type)

expression est la variable qui contient la collection Sheets, Worksheets ou Charts.

Les paramètres sont les suivants :

  • Before : objet qui spécifie la feuille avant laquelle la nouvelle feuille est ajoutée ;
  • After : objet qui spécifie la feuille après laquelle la nouvelle feuille est ajoutée ;
  • Count : nombre de feuilles à ajouter (une par défaut).

Selon la collection utilisée, le dernier argument Type peut avoir différentes significations. À noter que cet argument est facultatif.

Dans le cas de la collection Sheets, on peut créer à la fois des feuilles de calcul et des feuilles de graphique. Il peut donc s'agir d'une des constantes XlSheetType suivantes : xlWorksheet (par défaut) ou xlChart. Les valeurs numériques de ces deux constantes sont :

  • xlWorksheet : -4167 ;
  • xlChart : -4109.

Dans le cas de la collection Worksheets, la constante doit être xlWorksheet. Mais le plus simple dans ce cas consiste à ne pas spécifier cet argument facultatif comme ceci :

 
Sélectionnez
Excel.Worksheets.Add(Before, After, Count);

Dans le cas de la collection Charts, la constante identifie un type de graphique. Là encore, le plus simple consiste à ne pas se préoccuper pour le moment de cet argument :

 
Sélectionnez
Excel.Charts.Add(Before, After, Count);

Prenons l'exemple d'un classeur ne contenant qu'une seule feuille de calcul :

Image non disponible

Créons maintenant une nouvelle feuille de calcul positionnée après la feuille nommée « Feuil1 » à l'aide de la méthode Add de la collection Sheets :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil1');
>> xlWorksheet = -4167;
>> Excel.Sheets.Add([], sheet, 1, xlWorksheet);
Image non disponible

De la même manière, ajoutons une feuille de graphique juste après la feuille de calcul « Feuil1 » :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil1');
>> xlChart = -4109;
>> Excel.Sheets.Add([], sheet, 1, xlChart);
Image non disponible

Ajoutons, à l'aide de la méthode Add de la collection Worksheets, une feuille de calcul à gauche de la feuille de calcul nommée « Feuil1 » :

 
Sélectionnez
>> sheet = Excel.Worksheets.Item('Feuil1');
>> Excel.Worksheets.Add(sheet, [], 1);
Image non disponible

Ajoutons enfin, à l'aide de la méthode Add de la collection Charts, une feuille de graphique à droite de la feuille de calcul nommée « Feuil3 » :

 
Sélectionnez
>> sheet = Excel.Sheets.Item('Feuil3');
>> Excel.Charts.Add([], sheet, 1);
Image non disponible

III-D. Supprimer une feuille d'un classeur

Pour supprimer une feuille d'un classeur, on utilise la méthode Delete.

Par exemple, pour supprimer la feuille de calcul « Feuil3 » :

 
Sélectionnez
>> sheet = Excel.Sheets.Item('Feuil3');
>> sheet.Delete

Ou directement :

 
Sélectionnez
>> Excel.Sheets.Item('Feuil3').Delete

III-E. Déplacer une feuille d'un classeur

Pour déplacer une feuille, on utilise la méthode Move dont la syntaxe est identique à celle de la méthode Add. Seuls les deux premiers arguments Before et After sont utilisés.

III-F. Protection des données

La protection présentée ici ne vise pas à assurer la confidentialité des données mais uniquement leur intégrité. Le contenu des cellules est verrouillé, ne peut donc pas être modifié, mais reste lisible par tout utilisateur.

Pour activer la protection des données sur une feuille, on utilise la méthode Protect.

Par exemple, pour protéger le contenu de la feuille nommée « Feuil1 » d'un classeur :

 
Sélectionnez
>> sheet = Excel.Sheets.Item('Feuil1');
>> sheet.Protect

En cas de modification du contenu d'une cellule de la feuille « Feuil1 », Excel affichera le message d'erreur suivant :

Image non disponible

Il est également possible d'associer un mot de passe à la protection en passant ce dernier comme chaîne de caractères en premier argument comme ceci :

 
Sélectionnez
>> sheet = Excel.Sheets.Item('Feuil1');
>> sheet.Protect('UnMotDePasse')

Pour annuler la protection, on utilise la méthode Unprotect de la même façon que la méthode Protect utilisée précédemment.

Pour déterminer si une feuille est protégée ou non, on utilise la méthode ProtectContent qui renvoie une valeur booléenne Vrai (1) si une protection est active ou Faux (0) dans le cas contraire :

 
Sélectionnez
>> sheet = Excel.Sheets.Item('Feuil1');
>> sheet.ProtectContent

La protection peut être affinée, voir la documentation de la méthode Protect et de l'objet Protection.

IV. Conclusion

Vous savez maintenant comment gérer efficacement les feuilles d'un classeur Excel à l'aide de MATLAB.

Vous connaissez la différence entre les collections Sheets, Worksheets et Charts.

Vous pouvez maintenant poursuivre votre lecture par l'article intitulé Contrôle d'Excel par MATLAB via Automation - Les plages de cellules qui présente les outils de déplacement à l'intérieur des feuilles de calcul d'Excel.

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.