function obsFrance2Excel

% Chargement des données contenues dans obsFrance.mat
load(fullfile(pwd,'obsFrance.mat'),'-mat')

% Ouverture d'Excel
Excel = actxserver('Excel.Application');
Excel.Visible = false;

% Nouveau classeur
Workbook = Excel.Workbooks.Add;

% Récupération de la première feuille de calcul dans la variable
% Activesheet pour simplifier le code par la suite
ActiveSheet = Excel.Worksheets.Item(1);

% Modification du nom de la première feuille de calcul.
% L'onglet de cette feuille prend le nom "Températures"
ActiveSheet.Name = 'Températures';

% Fusion des cellules B2 à Z3 pour écrire un titre avec une police de
% grande taille
range = ActiveSheet.Range('B2').get('Resize',2,25);
range.Merge;

% Ecriture du titre "Température du ??? au ???" dans les cellules
% fusionnées précédemment
titre = sprintf('Températures du %s au %s (en °C)', ...
    datestr(echeance(1),'dd/mm/yyyy'), ...
    datestr(echeance(end),'dd/mm/yyyy'));
range.Name = 'titre';
range.Value = titre;

% Fusion des cellules B4 et B5 pour améliorer le rendu visuel de la cellule
% contenant le titre "Villes"
range = ActiveSheet.Range('B4:B5');
range.Merge;
range.Value = 'Villes';

% Remplissage des noms des villes 
range = ActiveSheet.Range('B6').get('Resize',numel(indicatif),1);
range.Value = nom;

% Attribution du nom "villes" à la plage contenant les noms des villes pous
% simplifier la mise en forme ultérieure
range.Name = 'villes';

% Modification des dates en fonction des règlage Excel
if Workbook.Date1904   
    echeance = echeance-datenum('01-Jan-1904 00:00:00');
else
    echeance = echeance-datenum('30-Dec-1899 00:00:00');
end

% Mise en place de la première ligne des dates correspondant aux jours des
% relevés de température
for n = 1:6
    
    r(1) = ActiveSheet.Range('C4').get('Cells', 1, 4*(n-1)+1);
    r(2) = ActiveSheet.Range('C4').get('Cells', 1, 4*n);
    range =  ActiveSheet.get('Range', r(1), r(2));
    
    range.Merge;
    range.Value = echeance(4*(n-1)+1);

end

clear r

% Mise en place de la première ligne des dates correspondant aux heures des
% relevés de température
range = ActiveSheet.Range('C5').get('Resize', 1, 24);
range.value = echeance;

% Ecriture des valeurs des relevés de températures
range = ActiveSheet.Range('C6').get('Resize',numel(indicatif),size(temperature,2));
range.Value = temperature;

% Définition des constantes VBA utiles
xlCenter = -4108;
xlMedium = -4138;

% Mise en place des bordures internes et externes du tableau
r = ActiveSheet.Range('B2').CurrentRegion;
r.Borders.Item('xlInsideHorizontal').LineStyle = 1;
r.Borders.Item('xlInsideHorizontal').Weight = 2;
r.Borders.Item('xlInsideVertical').LineStyle = 1;
r.Borders.Item('xlInsideVertical').Weight = 2;
r.BorderAround([],xlMedium);

% Mise en forme de la celulle (fusionnée) contenant le titre
range = ActiveSheet.Range('titre');
rgb = [0.7569 0.8667 0.7765];
range.Interior.Color = 256.^(0:2)*round(rgb(:)*255);
range.Font.Size = 28;
rgb = [0.2314 0.4431 0.3373];
range.Font.Color = 256.^(0:2)*round(rgb(:)*255);
range.Font.Bold = true;
range.HorizontalAlignment = xlCenter;

% Mise en forme de la cellule (fusionnée) contenant l'entête "Villes"
range = ActiveSheet.Range('B4');
range.HorizontalAlignment = xlCenter;
range.VerticalAlignment = xlCenter;
rgb = [0.9059 0.9059 0.9059];
range.Interior.Color = 256.^(0:2)*round(rgb(:)*255);

% Mise en forme des cellules contenant les entêtes des dates sous forme de
% jour
for n = 1:6
    range = ActiveSheet.Range('C4').get('Cells', 1, 4*(n-1)+1);
    range.NumberFormatLocal = 'jj/mm';
    range.HorizontalAlignment = xlCenter;
    rgb = [0.9059 0.9059 0.9059];
    range.Interior.Color = 256.^(0:2)*round(rgb(:)*255);
end

% Mise en forme des cellules contenant les entêtes des dates sous forme
% d'heures
r(1) = ActiveSheet.Range('C5');
r(2) = ActiveSheet.Range('C5').End('xlToRight');
range =  ActiveSheet.get('Range', r(1), r(2));

range.NumberFormatLocal = 'hh:mm';
range.HorizontalAlignment = xlCenter;
rgb = [0.9059 0.9059 0.9059];
range.Interior.Color = 256.^(0:2)*round(rgb(:)*255);

clear r

range = ActiveSheet.Range('C4').get('Resize', 2, numel(echeance));
range.BorderAround([],xlMedium);

% Mise en forme des valeurs des températures
r(1) = ActiveSheet.Range('C6');
r(2) = ActiveSheet.Range('C6').End('xlToRight').End('xlDown');
range =  ActiveSheet.get('Range', r(1), r(2));
range.HorizontalAlignment = xlCenter;

clear r

% Mise en forme d'une ligne sur deux pour les températures
for n = 2:2:numel(indicatif)
    r(1) = ActiveSheet.Range('C6').get('Cells',n,1);
    r(2) = r(1).End('xlToRight');
    range =  ActiveSheet.get('Range', r(1), r(2));
    rgb = [0.8941 0.9412 0.9020];
    range.Interior.Color = 256.^(0:2)*round(rgb(:)*255);
end

clear r

ActiveSheet.Range('B4').BorderAround([],xlMedium);

% Mise en forme de la colonne contenant les noms des villes
range = ActiveSheet.Range('villes');
rgb = [0.8039 0.8784 0.9686];
range.Interior.Color = 256.^(0:2)*round(rgb(:)*255);
rgb = [0 0 1];
range.Font.Color = 256.^(0:2)*round(rgb(:)*255);
range.BorderAround([],xlMedium);

% Réduction esthétique de la largeur de la première colonne (A)
ActiveSheet.Range('A:A').ColumnWidth = 3;

% Ajustement automatique de la largeur des colonnes de l'ensemble du tableau
ActiveSheet.Range('B2').CurrentRegion.Columns.AutoFit;

% Définition des constantes VBA utiles
xlCellValue = 1;
xlLess = 6;

% Mise en forme conditionnelle des valeurs des températures
r(1) = ActiveSheet.Range('C6');
r(2) = ActiveSheet.Range('C6').End('xlToRight').End('xlDown');
range =  ActiveSheet.get('Range', r(1), r(2));

range.FormatConditions.Add(xlCellValue, xlLess, '0');

rgb = [0 0 1];
range.FormatConditions.Item(1).Font.Color = 256.^(0:2)*round(rgb(:)*255);
range.FormatConditions.Item(1).Font.Bold = true;

% Enregistrmeent du classeur
Workbook.SaveAs(fullfile(pwd,'obsFrance.xlsx'));

% Fermeture du classeur
Workbook.Close(false);

% Fermeture d'Excel
Quit(Excel);