TUTO EXCEL : Les tableaux structurés

Les tableaux structurés rendent l’utilisation d’EXCEL au quotidien encore plus souple, pratique et fiable.

On peut regretter que Microsoft ait choisi d’utiliser en français le terme de « Tableau ». En effet, ce terme prête à confusion. Nous préférons lui adjoindre le qualificatif ‘structuré’ afin de le distinguer des tableaux au sens classique du terme.

Ce tutoriel montre par l’exemple ce que les « Tableaux structurés » nous apportent dans notre pratique d’EXCEL et ceci avec un minimum d’efforts.

Ce tutoriel n’a pas vocation à couvrir l’intégralité du sujet. Son objectif est d’éveiller l’intérêt pour cette riche fonctionnalité et fournir les bases de son utilisation.
Pour un approfondissement du sujet, nous nous reporterons utilement vers l’article de Pierre Fauconnier Excel tableaux structurés.

  
 (Tutoriel réalisé avec version 2016 d’EXCEL)

Créons un tableau structuré

Commençons par créer le tableau ‘classique’ suivant :
TableauClassique

Pour transformer un tableau « classique » en tableau « structuré », rien de plus simple :

Sélectionnons l’une des cellules du tableau et cliquons sur le bouton « Tableau » de l’onglet « Insertion » présent dans le ruban EXCEL : 

InsertionTableau

Un boîte de dialoque s’ouvre nous permettant d’indiquer :

  • la plage de cellules composant le tableau stucturé
  • si la première ligne contient les entêtes des colonnes

Remarquons qu’EXCEL est suffisamment intelligent pour prendre l’intégralité des cellules de notre tableau classique et comprendre tout seul les entêtes se trouvent dans la 1ère ligne :

CréerTableau

Après avoir cliqué sur ‘OK’, EXCEL présente la transformation de notre tableau ‘classique’ en tableau structuré :

RésultatTableauStructuré

Qu’a fait EXCEL ?

  • Il a automatiquement ajouté des filtres sur chaque colonne de l’en-tête.
  • Il a mis en forme la présentation du tableau, en particulier en ajoutant le surlignage d’une ligne sur deux.

De plus, il a automatiquement donné un nom au tableau, par défaut « Tableau1 ». Il est recommandé de modifier le nom du tableau pour le rendre plus explicite et ainsi plus facilement repérable.

Pour réaliser cette modification, plusieurs possibilités. Passons par le gestionnaire de noms :

Dans l’onglet « Formules » du ruban, faisons le choix « Gestionnaire de noms » :

GestionnaireNoms

En sélectionnant  ‘Tableau1’, cliquons sur le bouton ‘Modifier’. Pour notre exemple utilisons le nom ‘ts_ApproFruits‘.

Désormais, dans la liste déroulante des plages nommées, notre nom de tableau est présent. Ceci permettra de rapidement le sélectionner :

TableauStructuréNommé

CUSTOMISONS UN TABLEAU STRUCTURE

Utilisons l’outil « Segment »

 

Sélectionnons notre tableau structuré et remarquons qu’alors, EXCEL ajoute un nouvel onglet au ruban : « Outils de tableau ». Sélectionnons cet onglet :

RubanOutilsTableau

Nous y trouvons un ensemble d’outils et de fonctions bien pratiques. Explorons quelques-unes d’entre-elles :

Cliquons sur l’outil « Insérer un segment » :

InsérerSegment

EXCEL présente la liste des colonnes de notre tableau. Sélectionnons, par exemple, « Produits » et « Provenance » et cliquons sur « OK » :

TableSegments

Notre feuille EXCEL s’est enrichie de 2 sélecteurs (on peut les disposer à notre convenance sur la feuille au moyen de la souris par exemple) :

DeuxSelecteurs

Dans ces sélecteurs, en cliquant sur un produit particulier et une provenance particulière, nous filtrons le tableau à notre guise.

Par exemple, sélectionnons les fraises en provenance d’Espagne :

DoubleSélection

Les sélections multiples sont possibles. Par exemple : Fraise et Pomme en provenance d’Espagne et de Belgique. Pour mettre en place des choix multiples, il suffit de cliquer sur l’icône ‘Sélection multiple (Alt+S)’ dans l’entête du sélecteur :

DoubleSélection

AJOUTONS UNE COLONNE DE CALCUL

Dans le cas où nous désirons ajouter une colonne de calcul (par exemple le calcul du montant = nb d’unités achetées * Prix par unité) :
  • On sélectionne l’une des cellules de la colonne ‘Prix par unité’.
  • On clique droit.
  • Dans le menu contextuel, on choisis « Insérer » puis « Colonne de tableau à droite » :
DoubleSélection

Intitulons la nouvelle colonne « Montant » et dans la première cellule, entrons la formule de calcul soit « =C2*D2 » :

CalculMontant

Après la validation de la formule, EXCEL la propage sur toutes les lignes :

ColonneMontantCalculée

AJOUTONS UNE TOTALISATION

Nous pouvons ajouter une totalisation par exemple sur la colonne « Montant ». Pour ce faire, il nous suffit de revenir sur l’onglet « Outils de tableau » et de cocher « ligne des totaux » :
AjoutLigneTotalisation

EXCEL ajoute alors une ligne « Total » en bas du tableau :

Totalisation

La totalisation est dynamique : elle évolue en fonction des sélections faites.

Par exemple, si la sélection porte sur Fraise+Pomme et Belgique+Espagne, le total obtenu correspond à la somme des montants de cette sélection :

TotalisationDynamique

VBA : Bien utiliser l’enregistreur de macro

L’enregistreur de macro : notre meilleur ami (si nous savons l’apprivoiser…)

La vocation première de l’enregistreur de macro EXCEL est la création d’automates exécutant une succession d’actions. On pourra par la suite reproduire ces actions autant de fois que désirées.

C’est, de plus, un outil essentiel d’apprentissage de la programmation VBA : grâce à lui, nous pouvons, explorer les objets complexes exposés par EXCEL.

Cependant, il est nécessaire d’en bien comprendre les possibilités ainsi que les limites pour l’utiliser de façon optimale.

Assurons-nous de la présence de l’onglet « Développeur »

Pour accéder à l’enregistreur de macro, il est nécessaire que l’onglet « Développeur » soit présent dans le ruban EXCEL:

L'onglet développeur

Si tel n’est pas le cas, activons cette fonctionnalité dans : Fichier/Options/Personnaliser le ruban et sélectionnons la case « Développeur » :

Déclenchons l’enregistreur de macro

Pour déclencher l’enregistrement d’une macro, cliquons sur le bouton « Enregistrer une macro » dans l’onglet « Développeur » ou (Alt+v ;R1):

Enregistrer une macro

Par défaut, EXCEL propose le nom « Macro1 » (1 pour notre première macro du classeur, 2 pour la seconde macro, etc.) :

nommage d'une macro

Afin de les repérer plus facilement par la suite, il est vivement conseillé de donner un nom le plus explicite possible aux macros.

Pour le nommage des macros, EXCEL impose les règles suivantes :

  • Son nom doit commencer par une lettre (majuscule ou minuscule) ou un trait de soulignement (_).
  • Son nom ne doit comporter ni espace ni caractères spéciaux (& * / …).
  • Son nom doit être unique dans le classeur.
  • Son nom ne doit pas entrer en conflit avec un mot clé réservé (comme « Print »…).

De manière facultative, nous pouvons affecter une ‘Touche de raccourci’ à la macro. Mais, il existe d’autres moyens pour déclencher à volonté l’exécution d’une macro, par exemple :

  • Au moyen d’un clic sur un bouton (ou une image) présent sur une feuille du classeur.
  • En ajoutant une entrée référant la macro dans le ruban EXCEL.

La macro sera enregistrée dans un module VBA qui suivant le choix peut se trouver :

Nous pouvons compléter la zone « Description » : le texte que nous y insérerons se retrouvera en commentaire dans la macro générée.

 

Dès le moment où nous cliquons sur le bouton « OK » de cette boite de dialogue, toutes les actions réalisées seront enregistrées dans la macro :

  • Sélection de cellules ou plages de cellules,
  • Ecriture de caractères,
  • Insertion de formule,
  • Insertion d’objet,
  • Déclenchement d’une fonction EXCEL,
  • Etc.

 

Stoppons l’enregistreur de macro

Pour stopper l’enregistrement d’une macro, cliquons sur le bouton « Arrêter l’enregistrement » dans l’onglet « Développeur » ou (Alt+v ;R1):

Arret de l'enregistreur

 

Exerçons-nous 

A titre d’exercice, déclenchons l’enregistrement d’une nouvelle macro, nommons la ‘MaPremiereMacro’ et donnons lui la description ‘Ceci est ma première macro’. Cliquons sur OK et effectuons les actions suivantes :

Dans la cellule A1, entrons la formule permettant d’obtenir la date et l’heure actuelle : « =MAINTENANT() »
Copions la cellule dans le presse-papier (Ctrl+C)
Déplaçons la sélection sur la cellule D1
Collons le contenu du presse-papier (Ctrl+V)
Redimensionnons la cellule D1 pour visualiser la date et heure courante par un double-clic sur le quadrillage de la colonne D :

Exercice Enregistreur

Stoppons l’enregistrement de la macro

 

Pour réviser le code VBA d’une macro enregistrée, cliquons sur le bouton « Visual Basic » dans l’onglet « Développeur » ou (Alt+F11):

Ouvrir l'éditeur Visual Basic

L’éditeur de code VBA (VBE) s’ouvre dans une nouvelle fenêtre.

En sélectionnant « Modules/Module1 » nous visualisons le code VBA généré par notre exercice :

Code VBA Genere

Pour une formation à la programmation VBA, nous nous reporterons utilement au cours : https://www.excel-pratique.com/fr/vba.

Le code VBA de la macro générée devrait se présenter sensiblement comme ci-dessous :

Sub MaPremiereMacro()
'
' MaPremiereMacro Macro
' Ceci est ma première macro
'

'
1    ActiveCell.FormulaR1C1 = "=NOW()"
2    Range("A1").Select
3    Selection.Copy
4    Range("D1").Select
5    ActiveSheet.Paste
6    Columns("D:D").EntireColumn.AutoFit
End Sub
  • La description de la macro a été reproduite dans l’entête
  • Ligne 1 : Le code se réfère à « ActiveCell» pour entrer la formule.
  • Ligne 1 : La formule « MAINTENANT() » a été traduite en sa forme anglaise.
    (Un outil de traduction français/anglais des formules EXCEL est disponible ici : https://www.excel-pratique.com/fr/index_des_fonctions/traduction_formule).
  • Ligne 3 : La copie de la cellule est réalisée au moyen de la propriété « Selection ».
  • Ligne 6 : Le redimensionnement de la colonne « D » est réalisé au moyen de la fonction « Autofit ».

Améliorons le code VBA de la macro générée

Dans le code VBA généré, nous observons que :

  • Ligne 1 : dans notre exercice, nous n’avions pas explicitement sélectionné la cellule A1.
    L’enregistreur, utilisant le référencement implicite, a enregistré la propriété ‘ActiveCell’. Si nous voulons que la macro sélectionne spécifiquement la cellule « A1 », nous modifierons le code de la ligne en affectant une variable objet ‘oRange’ de la façon suivante :
    • Set oRange = ActiveSheet.Range(« A1 »)
    • oRange.FormulaR1C1 = « =NOW() »
  • Ligne 2 et 3 : l’enregistreur met en œuvre la méthode « Select » puis la propriété « Selection » pour copier la cellule. Cette façon n’est pas optimale ni sur le plan de la fiabilité ni sur celui des performances. Nous préférerons faire appel aux méthodes équivalentes des objets « Range ». Ainsi nous remplacerons la ligne 3 avec :
    • oRange.copy

Même sur une séquence relativement simple, nous pouvons apporter des améliorations au code généré par l’enregistreur de macro. Par exemple, l’expérience montre que, lors de l’enregistrement de macro, nous réalisons des actions inutiles, nous tâtonnons et il nous arrive de ne pas stopper à temps l’enregistreur. Tout ceci a pour effet de générer du code VBA inutile (voire néfaste). Nous avons donc tout intérêt après utilisation de l’enregistreur de macro, à réviser le code généré pour en éliminer le code superflu et améliorer sa fiabilité et sa performance.

     

    Connaissons les limites de l’enregistreur de macro

    Indéniablement utile dans la plupart des situations, l’enregistreur de macro ne nous sera pas d’un grand secours lorsque nous utilisons les « Compléments COM ». En effet dans ce cas, il se révèlera incapable de générer le code VBA attendu.

    De plus, les macros générés par l’enregistreur de macro comportent les limitations suivantes :

    • L’enregistreur de macro ne permet pas le passage d’arguments à la macro générée. Si cela est nécessaire, il faudra modifier la macro générée. Voir l’article Microsoft Transmission efficace d’arguments.
    • L’enregistreur ne permet pas de créer complètement des fonctions personnalisées telles que décrites dans l’article Microsoft Créer des fonctions personnalisées.
    • L’enregistreur ne permet pas de créer complètement un code VBA se déclenchant lorsqu’un certain évènement se produit. Par exemple, lorsqu’une certaine cellule est modifiée dans une feuille particulière.
    • L’enregitreur de macro ne peut pas créer des boucles de type :
      • For Next
      • Do While
      • Do Until
      • For each Next
    • L’enregistreur de macro ne peut pas conditionner le déroulement de la macro par les instructions :
      • If-Then-Else
      • Select Case
    • L’enregistreur de macro ne génère aucune déclarations explicite de variables. Voir l’article VBA: L’option explicit

      Résumons les BONNES PRATIQUES à mettre en oeuvre

       

      • Utilisons l’enregistreur de macro aussi souvent que nécessaire. C’est un moyen rapide pour explorer les objets EXCEL, leur collections, méthodes, propriétés.
        Un autre moyen, encore plus rapide : le pur copier/coller de code trouvé sur le NET par exemple. Mais, dans ce cas, il est indispensable de comprendre et de s’approprier ce code. « Science sans conscience n’est que ruine de l’âme » nous enseigne Rabelais. Et n’omettons pas de citer l’auteur du code plagié. 
      • N’enregistrons pas des séquences trop longues d’actions et circonscrivons l’enregistrement à un seul sujet.
      • Révisons systématiquement le code généré.

       

      Allons vers d’autres articles « Bonnes Pratiques VBA ».

      OFFICE SCRIPTS – Une Introduction

       

      OFFICE SCRIPTS c’est quoi ?

      Grossièrement, Office Scripts est pour Excel mode online l’équivalent de ce que l’enregistreur de macros et de l’éditeur VBE est pour EXCEL mode bureau.

      Nous écrivons les scripts d’OFFICE SCRIPTS en langage TypeScript lui-même hérité du langage JavaScript (ce qui rapproche ces scripts de ceux écrits en Google Apps Script pour les GOOGLE SHEETS).

      Usage basique d’OFFICE SCRIPTS

      Sur le même principe que l’enregistreur de macros d’EXCEL mode bureau, l’enregistreur d’actions nous permet d’enregistrer une série d’actions dans EXCEL online, de donner un nom à cette série puis de la reproduire en l’exécutant.

      Usage avancé d’OFFICE SCRIPTS

      Sur le même principe que l’éditeur VBE d’EXCEL mode bureau, l‘éditeur de code intégré nous permet de créer des scripts à partir de rien ou de modifier les scripts générés par l’enregistreur d’actions. Avant de nous lancer dans l’écriture de code, nous devons posséder un minima de connaissance du langage TypeScript. L’investissement nécessaire à cet apprentissage dépend grandement de notre connaissance préalable de la programmation (Si nous maîtrisons le langage Javascript, cet investissement devrait être relativement léger).

      Ce qu’il nous faut pour bénéficier d’OFFICE SCRIPTS

      Pour pouvoir bénéficier d’OFFICE SCRIPTS, nous devons disposer d’un des abonnements Microsoft 365 listés ici.

      Dans sa version de mars 2022, OFFICE SCRIPTS n’est pas disponible dans EXCEL mode bureau.

      Lorsque nous disposons d’un abonnement Microsoft 365 éligible à OFFICE SCRIPTS, l’onglet Automatiser est ajouté au ruban EXCEL mode online :

      Menu_Debogage_Compiler

      Trouvons de l’aide sur OFFICE SCRIPTS

      En mars 2022 le produit OFFICE SCRIPTS est encore récent et, de ce fait, l’offre d’aide est encore limitée.

      La documentation en ligne d’OFFICE SCRIPTS de Microsoft est accessible ici.

      Nous disposons de vidéos de présentation d’Office Scripts. En premier lieu celles réalisées par Microsoft ou encore celles réalisées par d’autres contributeurs : celle de Kevin Stratvert (en anglais) ou celle de Leila Gharani (en anglais) par exemple.

      Au moment de l’écriture de cet article, aucune formation dédiée à Office Scripts n’a pu être trouvée. A défaut, nous pouvons, si besoin, nous former à JavaScript. La plateforme de formations Udemy en propose plusieurs dont certaines réalisées par des formateurs de langue française.

      Nous pouvons soumettre nos problèmes et questions sur les forums d’échanges en français tel que celui d’EXCEL-PRATIQUE auquel nous contribuons.

      Voyons les différences essentielles entre OFFICE SCRIPTS et VBA

      (Constat de mars 2022)

      Portée d’Office Scripts versus portée du VBA

      • Alors que le VBA n’est utilisable dans EXCEL qu’en mode bureau, a contrario, OFFICE SCRIPTS n’est (actuellement) disponible qu’en mode online.
      • Cependant, il semble que Microsoft ait la volonté d’étendre l’usage OFFICE SCRIPTS à l’avenir. Pour autant, compte-tenu du nombre considérable de solutions VBA actuellement en œuvre, il est quasi certain que la fin du VBA n’est pas pour demain.

      Stockage des Scripts

      • Avec le VBA les macros sont stockées dans le même fichier que le classeur alors que les fichiers de scripts OFFICE SCRIPTS (d’extension .osts) sont stockés dans le dossier « Scripts Office » de notre espace OneDrive. Cela offre l’avantage de pouvoir aisément et à notre convenance partager nos scripts entre nos divers classeurs et d’en faire bénéficier d’autres utilisateurs de notre organisation.
      Menu_Debogage_Compiler

      Déclaration des objets manipulés

      • Alors que VBA tolère la déclaration implicite des objets manipulés dans un classeur, OFFICE SCRIPTS impose une déclaration explicite de tout objet manipulé. Ainsi par exemple pour l’objet ‘worksheet’, VBA (à défaut d’une déclaration explicite) considère la feuille sélectionnée dans le classeur comme étant la feuille manipulée, alors que pour OFFICE SCRIPTS la déclaration explicite de la feuille manipulée est impérative. Nous réalisons cette déclaration dans le code TypeScript avec une instruction let :
      Menu_Debogage_Compiler

      Référencement par indice

      • Une différence essentielle : le référencement des cellules par indice.
        Dans VBA le référencement des cellules par indice a pour base 1 alors que dans OFFICE SCRIPTS le référencement des cellules par indice a pour base 0.
        Ainsi, pour référencer par indice la cellule « A1 » de la feuille active, dans VBA nous écrivons :
        set oCell = Activesheet.Cells(1,1)
        alors que dans un script OFFICE SCRIPTS nous écrivons :
        let oCell = SelectedSheet.getCells(0,0)

      Déclenchement des scripts

      • Dans la version de mars 2022, OFFICE SCRIPTS est capable de déclencher l’exécution de script au moyen d’un bouton déposé sur la feuille du classeur.
        Contrairement aux macros VBA qui peuvent être déclenchées sur un évènement (par exemple lorsque la valeur d’une certaine cellule change) OFFICE SCRIPTS n’en a pas la capacité dans sa version actuelle (gageons que ces limitations évolueront dans un futur proche, restons vigilants…).
      • Au demeurant, l’application POWER AUTOMATE (incluse dans les abonnements Microsoft 365) nous permet de déclencher les scripts OFFICE SCRIPTS sur certains évènements comme : l’arrivée d’un mail dans OUTLOOK 365 ou la survenue d’une heure ou d’une date déterminée.

      Interaction avec les utilisateurs

      • Encore une différence essentielle : dans la version mars 2022, OFFICE SCRIPTS ne nous permet pas d’interagir avec les utilisateurs.
        Avec VBA nous interagissons avec les utilisateurs au moyen de formulaires « userforms » ou avec l’instruction « Input » ou bien encore avec l’instruction « Msgbox ». Toutes ces techniques sont actuellement indisponibles dans OFFICE SCRIPTS. L’application POWER AUTOMATE (incluse dans les abonnements Microsoft 365) pourrait nous offrir une alternative.

      Gestion des erreurs et exceptions

      • Une bonne nouvelle : OFFICE SCRIPTS comporte une instruction ‘try…catch…finally’.
        Grâce à l’instruction ‘try…catch…finally’ OFFICE SCRIPTS nous permet de gérer les erreurs et les exceptions de façon structurée.
        (Un ouf de soulagement est poussé par les tenants de la programmation structurée, dont nous sommes, horrifiés par les instructions « On Error… » parfois incontournables en VBA).

       Ajout automatique de commentaires par Office Scripts

      • L’enregistreur d’actions OFFICE SCRIPTS ajoute automatiquement des lignes de commentaires (en anglais actuellement) dans le code qu’il génére. Par exemple, dans le script suivant les lignes de commentaires ajoutés automatiquement sont surlignés en jaune :
      Menu_Debogage_Compiler

      Illustrons OFFICE SCRIPTS par un exemple

      A titre d’exemple, reprenons l’application EXCELLONS ‘Jours fériés en France’ téléchargeable ici.

      Application EXCEL "Jours fériés en France"

      Lorsque nous ouvrons ce classeur dans EXCEL en mode bureau, si nous modifions le territoire ou l’année, le tableau des jours fériés est automatiquement mis à jour, de même que le nombre de jours ouvrés.

      Par contre, lorsque nous ouvrons ce classeur dans EXCEL en mode online, si nous modifions le territoire ou l’année… OUPS! Rien ne se passe…

      En effet, EXCEL mode online ne prend pas en charge ni les évènements du classeur ni les macros VBA (comme vu dans le chapitre précédent). Dans le cas où nous voudrions transposer les fonctions réalisées par VBA, il nous faut réaliser un script OFFICE SCRIPTS en TypeScript.

      Une fois mis au point, ce script sera exécuté dans EXCEL mode online de la façon suivante:

      Application EXCEL "Jours fériés en France"

      A noter que les Office scripts se comportent de façon identique sur plateforme WINDOWS et MAC. A contrario, le code VBA de ce classeur ne peut s’exécuter sur MAC (du fait de l’absence de l’objet ‘MSXML2.XMLHTTP’ dans cette environnement).

      Ci-dessous, nous fournissons l’intégralité du code Office Scripts permettant de réaliser, en environnement EXCEL Online, la mise à jour du tableau de résultats en fonction du territoire et de l’année choisis :

      //OfficeScript de récupération des jours fériés en France pour un territoire donné et une année donnée.
      async function main(workbook: ExcelScript.Workbook){
      //On vérifie que le classeur est celui attendu
      const cWorkbookName = 'JoursFeries.xslm';
      let sWorkbookName: string = workbook.getName();
      if (sWorkbookName = cWorkbookName) {
          try {
              //On affecte la feuille et on vérifie que la feuille active est celle attendue
              let oActiveSheet: ExcelScript.Worksheet = workbook.getWorksheet('Accueil');
              try {
                  //On affecte toutes les zones nommées et on vérifie leur présence
                  let sChoixZone = oActiveSheet.getRange('txtZone').getValue();
                  let sChoixAnnee = oActiveSheet.getRange('txtAnnee').getValue().toString();
                  let oCellStatut = oActiveSheet.getRange('txtStatut');
                  let oTableau: ExcelScript.Table = oActiveSheet.getTable('tblResult');
                  let oCellMsg = oActiveSheet.getRange('txtMessage');
      
                  //On efface le message et le statut
                  oCellMsg.clear(ExcelScript.ClearApplyTo.all);
                  oCellStatut.clear(ExcelScript.ClearApplyTo.all);
      
                  //On efface le contenu du tableau de résultats
                  oTableau.getRangeBetweenHeaderAndTotal().clear(ExcelScript.ClearApplyTo.all)
      
                  //On initialise la cellule statut
                  oCellStatut.getFormat().getFill().setColor('orange');
                  oCellStatut.setValue('En cours...');
      
                  //On déclare l'URL racine de l'API
                  const cUrl = 'https://calendrier.api.gouv.fr/jours-feries/';
                  //On constitue la requête pour l'API
                  const sRequestString = cUrl + sChoixZone + '/' + sChoixAnnee + '.json';
                  //On constitue la formule à copier dans la colonne 'Jour de la semaine' pour obtenir le jour de la semaine
                  const sFormula = "=SI(ESTNUM([@[Jour férié]]);TEXTE([@[Jour férié]];\"jjjj\");\"\")";
      
                  //On affecte l'objet Request API
                  const oRequest = await fetch(sRequestString);            
                  try {
                      //On teste le statut de la réponse de l'API
                      if (oRequest.status === 200) {
                          //On récupère la réponse de l'API
                          const oResponseJSON: string = await oRequest.json();
                         
                          //On parse la réponse de l'API
                          const sResponse = JSON.stringify(oResponseJSON);
                          let lLen = sResponse.length;
                          let sUsageData = sResponse.substring(1, lLen - 1);
                          const aUsageData = sUsageData.split(',');
      
                          //On traite chaque ligne de la réponse parsée
                          for (let i = 0; i < aUsageData.length; i++) {
                              let aUsageText = aUsageData[i].split(':');
      
                              //On remplit la première colonne du tableau avec les dates reçues
                              let sText: string  = aUsageText[0].trim();
                              lLen = sText.length;                    
                              sText = sText.substring(1, lLen - 1);
                              oTableau.getRangeBetweenHeaderAndTotal().getCell(i, 0).setValue(sText);
                              oTableau.getRangeBetweenHeaderAndTotal().getCell(i, 0).getFormat().setHorizontalAlignment(ExcelScript.HorizontalAlignment.center);
      
                              //On remplit la deuxième colonne du tableau avec le libellé reçu
                              let sText2: string = aUsageText[1].trim();
                              lLen = sText2.length;
                              sText2 = sText2.substring(1, lLen - 1);
                              oTableau.getRangeBetweenHeaderAndTotal().getCell(i, 1).setValue(sText2);
      
                              //On remplit la troisième colonne du tableau avec la formule donnant le jour de la semaine
                              oTableau.getRangeBetweenHeaderAndTotal().getCell(i, 2).setFormulaLocal(sFormula);                        
                          }
                          //On met en forme le message de résultat et le statut à OK
                          oCellStatut.getFormat().getFill().setColor('green');
                          oActiveSheet.getRange('E5').getFormat().getFont().setColor("FFFFFF");
                          oCellStatut.getFormat().setHorizontalAlignment(ExcelScript.HorizontalAlignment.center);
                          oCellStatut.setValue('OK');
                          oCellMsg.setValue("L'API a renvoyé " + aUsageData.length + " jours fériés en " + sChoixAnnee + " pour le territoire '" + sChoixZone + "'." );
                          oCellMsg.getFormat().getFont().setColor('green');
      
                          //On fait pointer le surseur sur la ligne de titre
                          let oRange = oActiveSheet.getRange("B2:D2");
                          oRange.select();
                      }
                      else {
                          //Dans le cas où l'on obtient une erreur de l'API
                          oCellStatut.getFormat().getFill().setColor('red');
                          oCellStatut.setValue('Erreur');
                          oCellStatut.getFormat().setHorizontalAlignment(ExcelScript.HorizontalAlignment.center);
                          //On ajoute un commentaire à la cellule contenant le message 
                          let oComment = oActiveSheet.addComment(oCellMsg.getAddress(), "L'API ne peut répondre à la requête pour le territoire et l'année indiquée !");
                          
                      }
                  }
                  catch {
                      //Dans le cas où l'on ne peut atteindre l'API
                      oCellStatut.getFormat().getFill().setColor('orange');
                      oCellStatut.setValue('Indisponibilité');
                      oCellStatut.getFormat().setHorizontalAlignment(ExcelScript.HorizontalAlignment.center);
                      oCellMsg.setValue("Le service interrogé est momentanément indisponible. Attendre quelques minutes puis retenter l'exécution de ce script.");
                      console.log(oRequest.status);
                  }
              }
              catch{																											//Dans le cas où une zone nommée n'est pas présente
                  console.log("Le classeur actif ne semble pas correspondre à ce traitement. Traitement stoppé.")
              }
          }
          catch {																												//Dans le cas où la feuille attendue n'est pas présente
              console.log("La feuille voulue n'est pas présente dans le classeur actif. Traitement stoppé.")
          }
      }
      else {
          //Dans le cas où le classeur n'est pas celui attendu
          console.log(sWorkbookName);
      }
      }

      EXCEL 365 Généralités

      Excellons - EXCEL 365

      Microsoft 365 : Une approche innovante

      L’ambition affichée par Microsoft avec Microsoft 365 est d’offrir aux entreprises de toutes tailles un ensemble de services et d’applications favorisant le « travail hybride » de leurs collaborateurs en capitalisant sur les connaissances acquises sur les applications bureautiques classiques (EXCEL, WORD, POWERPOINT, OUTLOOK…).

      Par « travail hybride », Microsoft entend le travail en tous lieux, de façon collaborative et de manière sécurisée quelque soit la plateforme matérielle utilisée : PC, MAC, smartphones, tablettes…

      En mode online, les applications bureautiques s’exécutent en dans un navigateur WEB. Il est, de ce fait, concevable que ces applications soient potentiellement accessibles sur toutes les plateformes matérielles du marché : PC, MAC, LINUX. Pour connaître en détail les navigateurs supportés, reportons-nous à la page du support Microsoft ‘Navigateurs fonctionnant avec Office pour le WEB’.

      Sur les environnements pouvant les accueillir, Microsoft 365 apporte des applications bureautiques s’exécutant soit en mode online, soit en mode bureau et de basculer d’un mode à un autre par un simple clic.

      Par exemple le ruban EXCEL en mode online :

      Bandeau EXCEL 365

      Microsoft 365 : Aspects financiers

      Dans le passé, nous étions habitués à acquérir les produits Microsoft en payant une fois pour toute une licence et, éventuellement, de payer une nouvelle redevance (réduite) pour les nouvelles versions (upgrades).
      Ce modèle financier est maintenant obsolète chez Microsoft comme chez la plupart des éditeurs de logiciels.

      Avec Microsoft 365, nous payons un abonnement pour un laps de temps déterminé. Le prix de ces abonnements s’échelonne de 0 € (offre Office 365 A1) à près de 65 € (offre Microsoft 365 E5) par utilisateur et par mois (prix TTC en septembre 2021. Consultons le site Microsoft 365 pour obtenir les coûts actualisés des nombreux abonnements proposés).

      Au delà des applications classiques EXCEL, WORD, POWERPOINT, OUTLOOK, Microsoft 635 offre l’accès à un nombre impressionnant d’applications parmi lesquelles Microsoft Teams, Power Apps, Power BI, Power Automate, Visio, OneDrive, Yammer,…

      Bien évidemment, en fonction de l’abonnement souscrit, nous aurons accès à un ensemble plus ou moins fourni des services et des applications disponibles (consulter le site Microsoft 365 pour connaître la liste des applications et services inclues dans chaque abonnement).

      EXCEL 365 : Aspects opérationnels

       

      L’usage d’EXCEL 365 en mode online est similaire à la version classique d’EXCEL.

      Toutefois, un certain nombre de restrictions affectent le mode online (restrictions détaillées dans l’article du support Microsoft « Différences entre l’utilisation d’un classeur dans le navigateur et dans Excel »).

      Ajoutons qu’en mode online (version septembre 2021) :

      • Le nommage des plages de cellules n’est pas disponible. Cependant en mode online, les noms de plages affectés en mode bureau sont utilisables dans les formules.
      • Les macros VBA réalisées en mode bureau sont inopérantes en mode online. A la place du VBA en mode online,  l’automatisation des tâches se réalise au moyen d’OfficeScript combiné à Power Automate. Reportons-nous à l’article ‘Office Scripts – Une Introduction’ pour plus de détail.

      Enfin, nos classeurs EXCEL 365 sont stockés dans le cloud (OneDrive) pour pouvoir les partager avec les utilisateurs autorisés dans notre environnement de travail.