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 :
La collection Charts contient des objets Chart qui représentent les feuilles de graphique du classeur.
Voici un exemple de feuille de graphique :
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 :
Le nombre total de feuilles sera donné par :
>> Excel.Sheets.Count
ans =
4
Le nombre de feuilles de calcul sera donné par :
>> Excel.Worksheets.Count
ans =
3
Le nombre de feuilles de graphique sera donné par :
>> 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 :
On peut accéder consécutivement à chaque feuille contenue dans la collection Sheets avec le code suivant :
nfeuilles = Excel.Sheets.Count;
for
n = 1:nfeuilles
disp(Excel.Sheets.Item(n).Name)
end
Ce qui donne :
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 :
>> 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 :
>> 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 :
>> 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 :
Supposons que la feuille nommée « Feuil3 » contienne des données issues de mesures, on pourrait la nommer ainsi :
>> sheet = Excel.Worksheets.Item('Feuil3'
);
>> sheet.Name = 'Mesures'
;
Ce qui donne bien :
On peut alors facilement accéder à cette feuille en utilisant ce nouveau nom :
>> 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 :
Pour accéder à la feuille qui suit la feuille de calcul nommée « Feuil1 » :
>> sheet = Excel.Worksheets.Item('Feuil1'
);
>> sheet2 = sheet.Next;
>> sheet2.Name
ans =
Graph1
Ou directement :
>> 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 » :
>> sheet = Excel.Worksheets.Item('Feuil1'
);
>> sheet2 = sheet.Previous;
>> sheet2.Name
ans =
Graph2
Ou directement :
>> 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 :
expression.Add(Before, After, Count, Type)
Où 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 :
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 :
Excel.Charts.Add(Before, After, Count);
Prenons l'exemple d'un classeur ne contenant qu'une seule feuille de calcul :
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 :
>> sheet = Excel.Worksheets.Item('Feuil1'
);
>> xlWorksheet = -4167;
>> Excel.Sheets.Add([], sheet, 1, xlWorksheet);
De la même manière, ajoutons une feuille de graphique juste après la feuille de calcul « Feuil1 » :
>> sheet = Excel.Worksheets.Item('Feuil1'
);
>> xlChart = -4109;
>> Excel.Sheets.Add([], sheet, 1, xlChart);
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 » :
>> sheet = Excel.Worksheets.Item('Feuil1'
);
>> Excel.Worksheets.Add(sheet, [], 1);
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 » :
>> sheet = Excel.Sheets.Item('Feuil3'
);
>> Excel.Charts.Add([], sheet, 1);
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 » :
>> sheet = Excel.Sheets.Item('Feuil3'
);
>> sheet.Delete
Ou directement :
>> 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 :
>> 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 :
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 :
>> 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 :
>> 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.