OFFICE SCRIPTS – Une Introduction

 

OFFICE SCRIPTS c’est quoi ?

Globalement,  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.

L’ouvrage ‘Typescript notions fondamentales’ aux éditions ENI s’adresse aux développeurs disposant déjà d’une pratique de programmation dans d’autres langages.

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) commençant par ‘//’ dans le code généré. Il ajoute également un commentaire lorsqu’il n’a pas pu générer le code sur une action particulière (ceci est bien utile pour avoir connaisance de ces actions non automatisables).
  • Dans l’image suivante, les lignes de commentaires générées automatiquement sont surlignées 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);
}
}

L’IA connait Office Script !

Nous sommes tous friands des nouveautés technologiques et impatients, à leur émergence, d’en découvrir les possibilités et limites.

C’est avec curiosité et gourmandise que nous avons posé le prompt suivant à Copilot (IA de Microsoft) :

    • Comment générer un tableau structuré avec Office Script ?

    Copilot a renvoyé la réponse suivante :

    Whaou…ça décoiffe…Dans quelque temps, à quoi les programmeurs spécialistes seront-ils employés ?

    Q

    TUTO EXCELLONS : Manipuler les formes par VBA

    L’un des aspects le plus remarquable d’EXCEL réside dans sa capacité à dessiner une multitude de formes graphiques plus ou moins complexes, de pouvoir gérer leurs tailles, leurs couleurs, leurs positionnements, leurs comportements…

    Ce tutoriel présente de façon concise ce qu’il est nécessaire de connaître pour manipuler les formes par programmation VBA. Seules les méthodes et propriétés de l’objet Shapes les plus utiles sont décrites.

    Pour une référence exhaustive de l’objet Shapes, voir : https://learn.microsoft.com/fr-fr/office/vba/api/excel.shapes

    (Les copies-écrans de ce tuto ont été réalisées à partir d’un classeur créé avec la version 365 d’EXCEL. Ce classeur est téléchargeable ici  )

    QU’EST-CE QU’UNE FORME (SHAPE) POUR EXCEL ?

    Pour EXCEL, la classe « Shape » (traduite ici par « Forme ») comprend une multitude d’objets graphiques.

    Dans la figure ci-dessous, quelques objets graphiques membres de la classe ‘Shape‘:

    Site cours Crypto-monnaies

    Une forme (shape) peut être un objet « simple » comme une forme ‘automatique’ (une ligne, un carré…), une icône, une image ou bien un objet « complexe » comme un graphique, un objet SmartArt, un modèle 3D

    LISTONS TOUTES LES FORMES CONTENUES DANS UNE FEUILLE

    La collection ‘Shapes’ d’une feuille de calcul regroupe la collection de toutes les formes (shapes) présentes dans une feuille.

    Le fragment de code ci-dessous énumère dans la fenêtre d’exécution les noms de toutes les formes présentes dans la feuille ‘ShapesSamples’ » donnée en exemple :

    Sub ListerShapes()
        Dim oSheet As Worksheet, oSheetEnumeration As Worksheet
        Dim oShape As Shape
        Dim oLO As ListObject
        Dim oRange As Range, oCell As Range
        Dim sShapetype As String
        Dim v As Variant
        
        Set oSheet = ThisWorkbook.Worksheets("ShapesSamples")
        Set oSheetEnumeration = ThisWorkbook.Worksheets("ShapesTypesList")
        'On affecte l'objet Tableau structuré contenant les libellés des types de formes
        Set oLO = oSheetEnumeration.ListObjects("tblShapesTypes")
        Set oRange = oLO.ListColumns("Index").DataBodyRange
        
        'On parcourt toutes les formes de la feuille
        For Each oShape In oSheet.Shapes
            'On recherche le libellé du type de forme dans la table à partir de son index
            v = Application.Match(oShape.Type, oRange, 0)
            If Not IsError(v) Then
                sShapetype = oLO.ListColumns("Description").DataBodyRange.Cells(v, 1).Value
            Else
                sShapetype = "???"
            End If
            'On envoie les informations de la forme dans la fenêtre d'exécution
            Debug.Print "Index:" & oShape.ID & "-" & sShapetype & "-" & oShape.Name
        Next
        
        'On fait le ménage
        Set oSheet = Nothing
        Set oLO = Nothing
        Set oSheetEnumeration = Nothing
    End Sub
    

    Rappel : pour afficher la fenêtre d’exécution dans le VBE,  actionner Ctrl+G – Voir l’article BONNES PRATIQUES EXCELLONS : ‘Utilisons les outils de débogage

    VBA_InventaireFormes

    UTILISONS L’ENREGISTREUR DE MACROS

    Du fait de la richesse et de la diversité des méthodes et propriétés exposées par les formes (shapes), nous gagnons beaucoup de temps en utilisant, dans un premier temps, l’enregistreur de macros.

    Dans un second temps, nous corrigerons le code généré pour l’adapter et/ou le simplifier.

    Pour une bonne utilisation de l’enregistreur de macros, reportons-nous à l’article BONNES PRATIQUES EXCELLONS :  Comment bien utiliser l’enregistreur de macros.

    REFERENÇONS LES FORMES DANS LE CODE VBA

    Référençons par index

    Nous pouvons référencer une forme par son index dans la collection des « Shapes » de la feuille. Par exemple, pour nous référer à la forme d’index 3 dans la feuille :

    Set oShape = oSheet.Shapes(3)

    Cette méthode de référencement n’est ni très pratique ni très explicite, aussi privilégions le référencement pas nom.

     

    Référençons par nom

    Lorsque nous créons une forme dans une feuille (manuellement ou par code), EXCEL lui affecte un nom par défaut. Ce nom reprend le type de forme et y ajoute une numérotation chronologique. Par exemple :

    « Image 7 »

    Nous référençons cette forme par nom de la façon suivante :

         Set oShape = oSheet.Shapes(“Image 7”)

    Aux noms affectés par défaut par EXCEL, il est préférable que nos formes portent des noms explicites.

     

    Affectons un nom explicite

    Nous affectons un nom explicite par VBA à nos formes en modifiant la propriété « Name » de la forme.

    Par exemple :

     Set oShape = oSheet.Shapes(“Image 7”)

    oShape.Name = “Excellons_Logo”

    ATTENTION : Excel ne vérifie pas l’unicité des noms affectés. Si nous donnons le même nom à 2 formes différentes, lorsque, dans le VBA, nous affecterons un object Shape avec un nom dupliqué, l’affectation ne se réalisera que sur l’une des 2 formes.

    INSERONS UN GRAPHE DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’un graphe dans une feuille tel que nous le faisons dans EXCEL en activant l’un des boutons suivants du ruban :

    Ruban Insertion Graphiques

    nous utilisons la méthode AddChart2 de l’objet Shapes : expression.AddChart2 (StyleXlChartTypeLeftTopWidthHeightNewLayout)

    La liste des types de graphe (XlChartType) est disponible à la page : https://learn.microsoft.com/fr-fr/office/vba/api/excel.xlcharttype

    (La méthode AddChart2 a été introduite avec la version 2013 d’EXCEL. Dans les versions précédentes c’est la méthode AddChart qui doit être utilisée). 

    Cet article est focalisé sur l’objet Formes (Shape), il ne traite pas en détail des méthodes et propriétés de l’objet ‘Chart’.

    Le fragment de code suivant créée un graphe de type secteur à partir de données présentes dans la plage P3:P12 de la feuille ‘Resultats’ du classeur exemple : 

    Sub AddGraph()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        Dim oChart As Chart
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        
        'On insère le graphe dans la feuille avec la méthode AddChart2
        Set oShape = oSheet.Shapes.AddChart2(333, xl3DPie, , , , True)
        With oShape
            'On référence l'objet Chart
            Set oChart = oShape.Chart
            With oChart
                'On affecte la source de données du graphe
                .SetSourceData oSheet.Range("P3:P12")
                'On donne un titre au graphe
                .ChartTitle.Text = "MON GRAPHE"
            End With
        End With
    End Sub

    Résultat obtenu :

    Exemple de graphe obtenu par VBA

    INSERONS UNE LEGENDE DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’une légende dans une feuille tel que nous le faisons dans EXCEL en activant l’un des boutons suivants du ruban :

    Boutons Bulles et Légendes

    nous utilisons la méthode AddCallout de l’objet Shapes : expressionAddCallout (TypeLeftTopWidthHeight)

    La liste des types de légende (msoCalloutType) est disponible à la page : https://learn.microsoft.com/fr-fr/office/vba/api/office.msocallouttype

    Le fragment de code suivant créée une légende de type lien unique à droite dans la feuille ‘Resultats’ du classeur exemple :

    Sub AddLegend()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes.AddCallout(msoCalloutOne, 50, 50, 80, 100)    
    End Sub

    Résultat obtenu :

    Légende

    INSERONS UNE COURBE DE BEZIER DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’une courbe de Bézier dans une feuille tel que nous le faisons dans EXCEL en activant le bouton du ruban suivant :
    Bouton Courbe de Bézier

    nous utilisons la méthode AddCurve de l’objet Shapes : expressionAddCurve (SafeArrayOfPoints).

    La liste des points de la courbe est fournie à la méthode ‘AddCurve’ dans un tableau de valeurs.

    Le fragment de code suivant créée une courbe de Bézier en Z avec des coordonnées de début (210,130) et de fin (315,225) :

    Sub AddCourbeBezier()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        Dim aPoints(1 To 7, 1 To 2) As Single
        
        'On rempli le tableau de coordonnées des points de la courbe de Bézier
        aPoints(1, 1) = 210
        aPoints(1, 2) = 130
        aPoints(2, 1) = 270
        aPoints(2, 2) = 150
        aPoints(3, 1) = 280
        aPoints(3, 2) = 160
        aPoints(4, 1) = 280
        aPoints(4, 2) = 175
        aPoints(5, 1) = 200
        aPoints(5, 2) = 190
        aPoints(6, 1) = 210
        aPoints(6, 2) = 205
        aPoints(7, 1) = 315
        aPoints(7, 2) = 225
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes.AddCurve(aPoints())
    End Sub

    Résultat obtenu :

    Courbe de Bézier

    INSERONS UN CONTROLE DE FORMULAIRE DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’un contrôle de formulaire légende dans une feuille tel que nous le faisons dans EXCEL en activant l’un des boutons suivants du ruban :
    Boutons contrôles de formulaire

    nous utilisons la méthode AddFormControl de l’objet Shapes : expressionAddFormControl (TypeLeftTopWidthHeight)

    La liste des types de contrôles de formulaires (XlFormControl) est disponible à la page : https://learn.microsoft.com/fr-fr/office/vba/api/excel.xlformcontrol

    Le fragment de code suivant insère un contrôle de liste déroulante dans la feuille ‘Resultats’ du classeur exemple :

    Sub AddCombobox()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes.AddFormControl(xlDropDown, 5, 5, 55, 15)
    End Sub

    Résultat obtenu :

    Liste déroulante

    INSERONS UN LIEN VERS UN OBJET EXTERNE DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’un lien vers un objet externe dans une feuille tel que nous le faisons dans EXCEL en activant le bouton du ruban suivant :

    Bouton Objet Incorporé

    nous utilisons la méthode AddOLEObject de l’objet Shapes : expressionAddOLEObject (ClassTypeFileNameLinkDisplayAsIconIconFileNameIconIndexIconLabelLeftTopWidthHeight).

    Les objets que l’on peut incorporer par cette méthode peuvent être des fichiers externes ou des classes particulières d’objets. Pour plus de détail, nous nous reporterons utilement à la page : https://learn.microsoft.com/fr-fr/office/vba/api/excel.shapes.addoleobject.

    Le fragment de code suivant créée un lien vers un document PDF particulier dans la feuille “Resultats”:

    Sub AddPDF()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        Dim oRange As Range
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes.AddOLEObject(, ThisWorkbook.Path & "\MonPDF.pdf", False, True, "C:\WINDOWS\Installer\{AC76BA86-1036-1033-7760-BC15014EA700}\_PDFFile.ico", 0, "Mon PDF", 5, 5, 50, 50)
    
    End Sub
    

    Résultat obtenu :

    Lien vers document PDF

    INSERONS UNE IMAGE DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’une Image dans une feuille tel que nous le faisons dans EXCEL en activant le bouton suivant du ruban :

    Bouton Images

    nous utilisons la méthode AddPicture2 de l’objet Shapes : expressionAddPicture2 (FileNameLinkToFileSaveWithDocumentLeftTopWidthHeightcompress).

    Le fragment de code suivant insère une image dans la feuille ‘Resultats’ du classeur exemple :

    Sub AddImage()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        Dim oRange As Range
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes.AddPicture2(ThisWorkbook.Path & "\Logo_Excellons.png", msoFalse, msoTrue, 5, 5 _
                            , Application.CentimetersToPoints(9), Application.CentimetersToPoints(4), True)
    End Sub

    Résultat obtenu :

    Image insérée

    INSERONS UNE FORME ‘AUTOMATIQUE’ DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’une forme ‘automatique’ dans une feuille tel que nous le faisons dans EXCEL en activant l’un des boutons suivants du ruban :
    Formes 'Automatiques'

    nous utilisons la méthode AddShape de l’objet Shapes : expression. AddShape (Type, Left, Top, Width, Height).

    La liste des types de formes ‘automatiques’ (msoAutoShapeType) est disponible à la page : https://learn.microsoft.com/fr-fr/office/vba/api/office.msoautoshapetype

    Le fragment de code suivant insère une forme de type « Bouton en relief » dans la feuille “Resultats”:

    Sub AddFormAuto()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        Dim oRange As Range
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes.AddShape(msoShapeBevel, 5, 5, 50, 50)
    End Sub

    Résultat obtenu :

    Bouton Relief

    INSERONS UN GRAPHIQUE SMARTART DANS UNE FEUILLE

    Pour réaliser par VBA l’insertion d’un graphique SmartArt dans une feuille tel que nous le faisons dans EXCEL en activant le bouton suivant du ruban :
    Bouton SmartArt

    nous utilisons la méthode AddSmartArt de l’objet Shapes : expressionAddSmartArt (LayoutLeftTopWidthHeight).

    L’application EXCELLONS SMARTART_Reference.xlsm fournit une référence complète aux graphiques SmartArt.

    Le fragment de code suivant insère un graphique SmartArt de type ‘entonnoir’ dans la feuille ‘Resultats’ du classeur exemple :

    Sub AddCone()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        Dim oSaLayout As SmartArtLayout
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        'On pointe sur l'illustration 'Entonnoir'
        Set oSaLayout = Application.SmartArtLayouts(68)
        'On créé une nouvelle forme contenant l'illustration voulue
        Set oShape = oSheet.Shapes.AddSmartArt(oSaLayout, 5, 5)
        'On affecte une couleur à la forme
        oShape.SmartArt.Color = Excel.Application.SmartArtColors(4)
    End Sub

    Résultat obtenu :

    SmartArt Entonnoir

    REPOSITIONNONS UNE FORME DANS LA FEUILLE

     

    Positionnons la forme lors de sa création

    A la création d’une forme au moyen de l’une des méthodes de l’objet Shapes, nous indiquons la position de son coin supérieur gauche exprimée en points.

    (Si besoin, pour convertir les centimètres en points, nous disposons de la fonction Application.CentimetersToPoints ).

    Ainsi, par exemple, pour positionner la forme à 1 centimètre à gauche et 1 centimètre en haut de la feuille au moment de sa création, nous écrirons :

    Set oShape = oSheet.AddShape(msoShapeBevel, Application.CentimetersToPoints(1), Application.CentimetersToPoints(1), …)

    Repositionnons une forme

    Pour repositionner une forme, nous modifions ses propriétés « Left » et « Top » en indiquant leurs nouvelles valeurs en points (ou en centimètres en utilisant la fonction ‘Application.CentimetersToPoints’).

    Ainsi, par exemple, pour repositionner une forme à 50 points à gauche et 50 points en haut de la feuille nous écrirons :

    oShape.Left = 50
    oShape.Top = 50

    Repositionnons une forme par rapport à une cellule

    Pour repositionner une forme par rapport à une cellule, nous référencerons les propriétés « Left » et « Top » de la cellule.

    Ainsi, par exemple, pour repositionner une forme sur le coin haut-Gauche de la cellule « D4 » nous écrirons :

    Set oRange = oSheet.Range(“D4”)
    oShape.Left = oRange.Left
    oShape.Top = oRange.Top

    Gérons la propriété « Placement »

    La propriété « Placement » de l’objet « Shape » nous permet de gérer le comportement des formes lors du redimensionnement des cellules.
    Elle peut prendre l’une des valeurs suivantes :

    xlFreeFloating = la forme conserve son positionnement lorsque les cellules sous-jacentes sont redimensionnées.
    xlMove = la forme se déplace avec les cellules sous-jacentes (sans être redimensionnée).
    xlMoveAndSize = la forme se déplace et se redimensionne avec les cellules sous-jacentes.

    L’application EXCELLONS SmartTrombinoscope.xlsm fournit un exemple de mise en oeuvre de positionnements complexes de formes dans une feuille.

    REDIMENSIONNONS  UNE FORME OU UN ENSEMBLE DE FORME

    Dimensionnons la forme lors de sa création

    A la création d’une forme au moyen de l’une des méthodes de l’objet Shapes, nous indiquons la largeur et la hauteur de la forme exprimées en points.

    (Si besoin, pour convertir les centimètres en points, nous disposons de la fonction Application.CentimetersToPoints ).

    Ainsi, par exemple, pour dimensionner un rectangle biseauté à 100 points de large et 100 points de haut, nous écrirons lors de sa création, :

    Set oShape = oSheet.AddShape(msoShapeBevel, …, …,100,100)

    Redimensionnons une forme

    Pour redimensionner une forme, nous modifions ses propriétés « Width » et « Height » en indiquant leurs nouvelles valeurs en points (ou en centimètres en utilisant la fonction ‘Application.CentimetersToPoints’).

    Ainsi, par exemple, pour redimensionner une forme à 200 de large et 200 points de haut, nous écrirons :

    oShape.Width = 200
    oShape.Height = 200
     

    Redimensionnons une forme par rapport à une cellule ou une plage de cellules

    Pour redimensionner une forme par rapport à la taille d’une cellule ou d’une plage de cellules, nous référencerons les propriétés « Width » et « Height » de la cellule ou de la plage de cellules.

    Ainsi, par exemple, pour redimensionner une forme à la taille de la plage de cellules « D4:F6  » nous écrirons :

    Set oRange = oSheet.Range(“D4:F6”)
    oShape.Width = oRange.Width
    oShape.Height = oRange.Height

    Gérons la propriété ‘LockAspectRatio‘ 

     

    La propriété « LockAspectRatio » de l’objet Shape permet de gérer le comportement des formes lors du redimensionnement.

    Elle prend les valeurs suivantes :

    • msoTrue = la forme se redimensionne en conservant ses proportions. Si, par exemple, la largeur de la forme est modifiée, sa hauteur se redimensionne proportionnellement.
    • msoFalse = la forme ne conserve pas ses proportions. Si, par exemple, la largeur de la forme est modifiée, sa hauteur reste inchangée.

     

    Redimensionnons un ensemble de formes avec les méthodes ‘ScaleWidth-ScaleHeight’

    Avec les méthodes « ScaleWidth » et « ScaleHeight » nous diminuons ou augmentons proportionnellement la taille des formes en largeur (ScaleWidth) ou en hauteur (ScaleHeight).

    Ce fragment de code, diminue la taille des formes d’une feuille de la moitié de leurs tailles initiales :

    Sub ShrinkAllShapes()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        
        Set oSheet = ThisWorkbook.Worksheets("ShapesSamples")
        'On parcourt toutes les formes présentes dans la feuille
        For Each oShape In oSheet.Shapes
            'On conserve les proportions de la forme
            oShape.LockAspectRatio = msoTrue
            'Dans le cas où la forme ne supporte pas la méthode ScaleWidth, on ignore l'erreur
            On Error Resume Next
            'On diminue la taille de la forme de moitié = 50%
            oShape.ScaleWidth 0.5, msoTrue
            'On rétablit la gestion des erreurs
            On Error GoTo 0
        Next
    End Sub

    ATTENTION : Certaines formes ne supportent pas la méthode ‘ScaleWidth’ , c’est la raison pour laquelle l’instruction ‘On Error Resume Next’ est utilisée dans ce fragment de code.

    Pour la gestion des erreurs d’exécution, reportons-nous au document BONNES PARTIQUES EXCELLONS : VBA_GestionErreurs.pdf

     

    L’application EXCELLONS SmartTrombinoscope.xlsm fournit un exemple de mise en oeuvre du dimensionnement complexes de formes dans une feuille.

    AJOUTONS DU TEXTE A UNE FORME ET FORMATONS-LE

     

    Toutes les formes (shapes) exposent la propriété TextFrame permettant d’ajouter du texte à une forme au moyen de code VBA.

    Par exemple pour ajouter du texte à une forme MaLegende présente dans la feuille ‘Resultats” du classeur exemple, nous écrirons :

    Sub AddTextToLegend()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes("MaLegende")
        oShape.TextFrame.Characters.Text = "EXCELLONS.org : c'est le top !"
    End Sub

    Résultat obtenu :

    Texte ajouté à une forme légende

    L’objet Textframe expose la méthode Characters permettant de formater le texte d’une forme (police, taille, couleur…). Deplus, il possède un ensemble de propriétés que l’on peut valoriser par code VBA.

    Par exemple, le fragment de code suivant formate le texte ajouté à la forme MaLegende présente dans la feuille ‘Resultats” du classeur exemple :

    Sub FormatTextToLegend()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes("MaLegende")
        
        'Formatons les 13 premiers caractères du texte : corps 12, en gras et en vert
        With oShape.TextFrame.Characters(1, 13).Font
            .Color = RGB(0, 255, 0)
            .Size = 12
            .Bold = True
        End With
        'Formatons les 14 caractères à la partir de la position 17 du texte: corps 16, en gras, en rouge et soulignés
        With oShape.TextFrame.Characters(17, 14).Font
            .Color = RGB(255, 0, 0)
            .Size = 16
            .Bold = True
            .Underline = xlUnderlineStyleSingle
        End With
        
        'Centrons le texte horizontalement et verticalement
        oShape.TextFrame.HorizontalAlignment = xlHAlignCenter
        oShape.TextFrame.VerticalAlignment = xlVAlignCenter
    End Sub

    Résultat obtenu :

    Texte de légende formaté

    MODIFIONS LES COULEURS ET LE REMPLISSAGE D’UNE FORME

     

    Les formes (shapes) exposent un ensemble de propriétés permettant d’agir sur la couleur et le type des contours ainsi que sur la couleur et le remplissage de l’intérieur de la forme.

    A titre d’exemple, le fragment de code suivant trace une pentagone, définit ses contours en tant que tirets, les colorise en rouge et remplit son intérieur de briquettes de couleur verte :

    Sub TracePentagone()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        Dim oRange As Range
        Dim aPoints(1 To 6, 1 To 2) As Single
        
        'On affecte les coordonnées des sommets du pentagone
        aPoints(1, 1) = 520
        aPoints(1, 2) = 93
        aPoints(2, 1) = 433
        aPoints(2, 2) = 211
        aPoints(3, 1) = 180
        aPoints(3, 2) = 194
        aPoints(4, 1) = 70
        aPoints(4, 2) = 76
        aPoints(5, 1) = 232
        aPoints(5, 2) = 51
        aPoints(6, 1) = 520 'le dernier sommet possède des coordonnées identiques au premier sommet
        aPoints(6, 2) = 93  '-> pour fermer le polygone
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        'On insère le pentagone dans la feuille
        Set oShape = oSheet.Shapes.AddPolyline(aPoints)
        With oShape
            'On colorise les bordures du pentagone en tirets rouges
            With .Line
                .DashStyle = msoLineDashDotDot
                .ForeColor.RGB = RGB(255, 0, 0)
            End With
            'On remplit le pentagone de briques vertes
            With .Fill
                .Patterned msoPatternHorizontalBrick
                .BackColor.RGB = RGB(0, 255, 0)
            End With
        End With
    End Sub
    

    Résultat obtenu :

    Pentagone rouge et vert

    (Bon d’accord, ce résultat n’est pas esthétiquement très réussi…) 

    ASSIGNONS UNE MACRO EXECUTEE LORS DU CLIC SUR UNE FORME

     

    La propriété ‘OnAction’ permet d’exécuter une macro donnée lors du clic sur une forme.

    Soit, par exemple, la macro suivante à exécuter lors du clic sur une forme :

    Sub displayInfo()
        MsgBox "Lien vers EXCELLONS.org: " & vbCrLf _
             & "https://excellons.org/" _
             , vbExclamation, "MESSAGE DE LA PLUS HAUTE IMPORTANCE !"
    End Sub

    Assignons l’exécution de cette macro lors d’un clic sur la forme ‘MaLegende’ de la façon suivante :

    Sub assignMacro()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        Set oShape = oSheet.Shapes("MaLegende")
        
        oShape.OnAction = "displayInfo"
    End Sub

    Résultat obtenu lors du clic sur la forme :

    Action sur clic

    RELIONS DES FORMES ‘AUTOMATIQUES’ AVEC DES CONNECTEURS

     

    Nous pouvons par VBA relier des formes ‘Automatiques’ (AutoForm) au moyen de formes connecteurs (msoConnectorElbow) et ainsi obtenir, par exemple, une résultat de type ordinogramme :

    Action sur clic

    Pour obtenir ce résultat, procédons de la façon suivante :

    • Créeons, colorisons et positionnons sur la feuille autant de formes ‘automatiques’ que nécessaire. Dans notre exemple, 4 formes de plusieurs sortes au moyen du code VBA suivant :
    Sub Add4Shapes()
        Dim oSheet As Worksheet
        Dim oShape As Shape
        
        'On référençe la feuille cible
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        
        'Insérons la forme 'Database'
        InsertNewShape oSheet, msoShapeFlowchartMagneticDisk, "BaseSQL", "B2:B6", msoThemeColorAccent4, "Base SQL"
        
        'On insère la forme 'Traitement'
        InsertNewShape oSheet, msoShapeFlowchartProcess, "Traitement", "C9:D12", msoThemeColorAccent6, "Traitement"
        
        'On insère la forme 'Etats'
        InsertNewShape oSheet, msoShapeFlowchartMultidocument, "Etats", "B16:B19", msoThemeColorAccent5, "Etats 1,2,3..."
        
        'On insère la forme 'Ecran'
        InsertNewShape oSheet, msoShapeFlowchartDisplay, "Display", "E16:E19", msoThemeColorAccent5, "Ecran"
    End Sub
    Sub InsertNewShape(zSheet As Worksheet, zShapeType As MsoAutoShapeType, zShapeName As String, zShapeRange As String, zColor As Variant, zTexte As String)
        Dim oShape As Shape
        Dim oRange As Range
        
        'On référence la plage de cellules transmise pour le positionnement
        Set oRange = zSheet.Range(zShapeRange)
        
        'On ajoute la forme voulue à partir des paramètres transmis et des propriétés de la plage de cellules transmise
        Set oShape = zSheet.Shapes.AddShape(zShapeType, oRange.Left, oRange.Top, oRange.Width, oRange.Height)
        
        With oShape
            'On affecte à la forme le nom transmis
            .Name = zShapeName
            'On affecte à la forme la couleur transmise
            .Fill.ForeColor.ObjectThemeColor = zColor
            
            'On affecte et formate le texte contenu dans la forme
            With .TextFrame
                With .Characters
                    .Text = zTexte
                    .Font.Bold = True
                    .Font.Color = vbBlack
                End With
                'On positionne le texte dans la forme
                .HorizontalAlignment = xlHAlignCenter
                .VerticalAlignment = xlVAlignCenter
            End With
        End With
        
    End Sub

     

    • Maintenant, relions les formes avec des connecteurs. Les méthodes Beginconnect et Endconnect, propres aux objects Connectors permettent de relier 2 formes entre-elles. Dans notre exemple, les 4 formes sont reliées au moyen du code VBA suivant :
    Sub AddConnectors()
        Dim oSheet As Worksheet
        Dim oShape1 As Shape, oShape2 As Shape
        Dim oRange As Range
        
        'On référençe la feuille cible
        Set oSheet = ThisWorkbook.Worksheets("Resultats")
        
        'On connecte la forme 'Database' à la forme "Traitement"
        Set oShape1 = oSheet.Shapes("BaseSQL")
        Set oShape2 = oSheet.Shapes("Traitement")
        InsertConnector oSheet, oShape1, oShape2, 5, 1
    
        'On connecte la forme 'Traitement' à la forme "Etats"
        Set oShape1 = oSheet.Shapes("Traitement")
        Set oShape2 = oSheet.Shapes("Etats")
        InsertConnector oSheet, oShape1, oShape2, 3, 1
    
        'On connecte la forme 'Traitement' à la forme "Display"
        Set oShape1 = oSheet.Shapes("Traitement")
        Set oShape2 = oSheet.Shapes("Display")
        InsertConnector oSheet, oShape1, oShape2, 3, 1
    
    End Sub
    Sub InsertConnector(zSheet As Worksheet, zShape1 As Shape, zShape2 As Shape, zPoint1 As Long, zPoint2 As Long)
        Dim oConnector As Shape
        Dim oRange As Range
        
        'On insère le connecteur en utilisant les paramètres transmis
        Set oConnector = zSheet.Shapes.AddConnector(msoConnectorElbow, 120, 50, 200, 100)    
        
        With oConnector
            'On formate le connecteur
            .Line.Weight = 1.75
            .Line.ForeColor.ObjectThemeColor = msoThemeColorDark2
            .Line.EndArrowheadStyle = msoArrowheadTriangle
            'On relie les 2 formes passées en paramètres avec le connecteur suivant les 2 points passés en paramètres
            .ConnectorFormat.BeginConnect zShape1, zPoint1
            .ConnectorFormat.EndConnect zShape2, zPoint2
        End With
    End Sub

    Les méthodes BeginConnect et EndConnect réclament comme second paramètre obligatoire SiteConnection indiquant le point d’ancrage du connecteur sur la forme à relier.

    Ce point d’ancrage est à choisir parmi les points d’ancrage existants pour la forme à relier. ‘SiteConnection’ est un entier dont la valeur se situe entre ‘1’ et le nombre maximum de points d’ancrage de la forme. Chaque type de forme possède sa propre collection de points d’ancrage. Le nombre maximum de points d’ancrage d’une forme est retourné par la propriété ConnectionSiteCount de la forme.

    Il n’est pas aisé de connaitre a priori le numéro du point d’ancrage pour pour positionner le connecteur à un point d’ancrage précis d’une forme. Si, comme dans notre exemple, nous désirons positionner les connecteurs à des points bien spécifiques des formes, le plus simple est d’utiliser l’enregistreur de macro pour déterminer les numéros de ces points.

    Une autre option consiste à indiquer dans un premier temps, comme point d’ancrage ‘1’ et d’utiliser la méthode Rerouteconnections de l’objet ‘Connector’. Cette méthode a pour effet de prendre le chemin le plus court entre les deux formes reliées.

    Q

    TUTO EXCELLONS : CAPTURONS et TRANSFORMONS les données du WEB

    De plus de plus de données sont accessibles à partir de pages WEB.

    Grâce à ce tutoriel capturons et transformons les données du WEB avec un minimum d’effort.

    (Les copies-écrans du présent document sont issues d’EXCEL version 365)

    QUELLES DONNEES WEB SONT RECUPERABLES DANS EXCEL ?

    Avant de nous lancer dans la récupération de données capturées sur le WEB, nous devons nous assurer que ces données sont récupérables dans EXCEL.

    D’une façon générale nous pourrons récupérer les données d’une page WEB se présentant sous la forme d’un tableau.

    Pour nous en assurer, il suffit de nous rendre sur la page WEB visée, de copier le tableau de données voulu (ctrl+C) et le coller dans une feuille EXCEL vierge (ctrl+V).

    Si, après cette opération, nous obtenons les données en colonnes avec entêtes dans EXCEL nous avons de bonnes chances de pouvoir utiliser avec succès les fonctions de récupération de données.

    Site cours Crypto-monnaies
    Pour ce tutoriel, nous nous proposons de récupérer les cours des crypto-monnaies (Bitcoin et autres…) à une fréquence quotidienne. Pour ce faire, nous utiliserons le site courscryptomonnaies.com  pour récupérer les données qu’il expose.

    Pour simplifier, le site WEB utilisé se trouve en accès libre (accès anonyme). Il est tout à fait possible de récupérer également des données sur des pages WEB réclamant une connexion explicite « Code Utilisateur/Mot de passe ». Ce tutoriel ne détaille pas les étapes à suivre pour ce type de connexion (si besoin, se reporter à la page https://learn.microsoft.com/fr-fr/power-query/connector-authentication)

    CREONS UN LIEN AVEC LE SITE WEB

    Ouvrons un nouveau classeur EXCEL et dans l’onglet « Données » du ruban, cliquons sur l’icône ‘A partir du WEB’ :

    Etablir avec lien avec le site WEB

    Dans la fenêtre qui s’ouvre, indiquons l’adresse (l’URL) du site WEB désiré :

    URL Site Cours Crypto

    Cliquons sur OK.

    Le formulaire « Navigateur » s’ouvre. Sélectionnons « Table » dans sa partie gauche :

    Navigateur Site WEB

    Dans sa partie droite du formulaire « Navigateur » affiche un aperçu des données voulues puis, dans le bas du formulaire, sélectionnons « Charger dans… » de la liste déroulante :

    Charger Dans

    Dans le fenêtre « Importation des données », choisissons « Insérer les données dans » la feuille existante en $A$1 puis cliquons ur OK :

    Importation des Données

    Après le temps nécessaire pour le chargement des données, nous obtenons le tableau suivant dans le feuille EXCEL :

    Resultat Importation

    PROGRAMMONS L’ ACTUALISATION DES DONNEES

     

    Dans le ruban, après avoir sélectionné une cellule quelconque du tableau obtenu, cliquons la liste déroulante ‘Actualiser tout’ et choisissons ‘Propriétés de connexion… ‘ :

    Proprietes de la Connexion

    Dans le formulaire « Propriétés de la requête » sélectionnons :

    • Activer l’actualisation en arrière-plan
    • Actualiser toutes les 360 minutes (6 heures) ou indiquer une autre périodicité
    • Actualiser les données lors de l’ouverture du fichier.
    Mise à jour des Proprietes

    PERSONNALISONS LES DONNÉES RECUPÉRÉES

    Maintenant que nos données sont récupérées, nous aimerions bien améliorer leur présentation :

    • Nous voulons supprimer la première colonne (« Rang ») et la dernière colonne (« Détail ») sans intérêt pour nous.
    • Nous voulons trier les cours sur la colonne « Variation (24h) » en ordre décroissant pour obtenir le hit-parade des crypto-monnaies relativement à leur variation d’un jour à l’autre.

    Après avoir sélectionné une cellule quelconque de notre tableau, cliquons sur « Requêtes et connexions » dans l’onglet « Données » du ruban, puis sur « Table 0 » dans la partie droite ouverte dans le classeur :

    Activer l'Editeur Power Query

    L’ Editeur Power Query EXCEL s’ouvre .

      • Commençons par supprimer les données indésirables : sélectionnons les colonnes « Rang » et « Détails » et cliquons sur l’icône « Supprimer les colonnes ».
    Editeur Power Query

    Dans le cas où nous voudrions trier sur la colonne ‘Variation (24h)’ les choses seront plus complexes : cliquons sur l’entête ‘Variation (24h)’ et sélectionnons ‘tri décroissant’. Le résultat obtenu n’est pas celui attendu. Cela tient au fait que les données de cette colonne sont stockées sous format ‘Texte’ et non sous format ‘Numérique’.

    Il nous faut alors avoir recours à la transformations de données et procéder en plusieurs étapes. 

    1. Effaçons le signe « % » :
      • Sélectionnons la commande « Remplacer les valeurs » :
    Remplacer Valeurs

    Dans la fenêtre qui s’ouvre, saisissons le caractère ‘%’ dans le champ ‘Valeur à rechercher’ et laisson vide le champ ‘Remplacer par’ et cliquons sur ‘OK’ :

    Remplacer Valeurs

    2. Remplaçons le séparateur décimal point ‘.’ par une virgule ‘, ‘

      • Sélectionnons une nouvelle fois la commande « Remplacer les valeurs » :
    Remplacer Valeurs

    3. Transformons les données de la colonne numérique décimal.

      • Sélectionnons l’onglet ‘Transformer’ puis, dans la liste déroulante ‘Type de données’ choisissons ‘Nombre décimal’ :
    Transformer Decimal

    4. Divisons les données par 100

      • Dans l’onglet « Transformer», sélectionnons « Standard » puis dans la liste déroulante sur « Diviser ».
    Activer Diviser

     

      • Dans la fenêtre qui s’ouvre, indiquons la valeur ‘100’ et cliquons sur OK :
    Diviser colonne Par 100

    5. Sélectionnons l’onglet « Accueil » puis « Fermer et charger»:

    Résultat Transformations

    Dans le feuille EXCEL, les données transformées se présentent ainsi :

    Résultats Excel

    Pour finaliser la présentation, cliquons sur la colonne ‘Variation (24h)’ puis, dans le volet « Accueil », partie   « Nombre », choisissons « Pourcentage » :

    Mise en forme Pourcentage

    Enfin, trions sur la colonne ‘Variation (24h)’ avec le chois ‘Trier du plus grand au plus petit‘ :

    Trier Descendant

    A l’issue des diverses transformations, nous obtenons le tableau suivant :

    Resultat Final

    Q

    TUTO : TABLEAUX STRUCTURES – Une Introduction

     

    UN TABLEAU STRUCTURÉ c’est quoi ?

    Nous pouvons légitimement nous demander ce que sont les tableaux structurés dans un classeur EXCEL lui-même étant ‘un tableau’.

    De fait , un tableau structuré est un object d’EXCEL à part entière (le terme anglais le désignant est ‘Listobject’). Cet objet expose un ensemble riche de propriétés et méthodes.

    Le but de ce tutoriel est de monter par l’exemple ce que nous apporte le « Tableau structuré » par rapport au « Tableau classique » et montrer quelques unes de ses principales propriétés bien utiles au quotidien. Tellement utiles et faciles à mettre en oeuvre qu’une fois découvert, nous ne pourrons nous passer des « Tableaux structurés ».

    Ce tutoriel ne couvre pas l’intégralité de ce qu’il est possible de faire avec les « Tableaux structurés ». Son objectif est d’éveiller l’intérêt pour cet objet et fournir les bases de son utilisation. De nombreux cours et tutoriels complets sur le sujet sont disponibles sur le WEB (cf. Notre sélection de sites consacrés à EXCEL).

    CREONS UN TABLEAU STRUCTURÉ

    Dans une feuille d’un classeur, créons tout d’abord le tableau « classique » suivant :

    (cliquer ici pour télécharger l’EXCEL)

    Menu_Debogage_Compiler

    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 (ou Ctrl+L) :

    La boite de dialogue qui s’ouvre permet d’indiquer l’adresse de la plage de cellules à reprendre du tableau classique et si le tableau classique comporte des en-têtes :

    (Dans notre exemple, Excel indique de lui-même la plage de cellules du tableau classique et déduit qu’il possède des entêtes. On pueut bien entendu modifierces valeurs si besoin.)

    Une fois validée la boîte de dialogue, nous obtenons le tableau structuré suivant :

    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 »

    Recommandation : modifier le nom du tableau pour le rendre son utilisation plus aisée. Pour réaliser cette modification, plusieurs possibilités. Par exemple, passons par le gestionnaire de noms : Dans l’onglet « Formules » du ruban, faisons le choix « Gestionnaire de noms » :

    En sélectionnant « Tableau1 », cliquons sur le bouton « Modifier ». Indiquons, par exemple « ts_ApproFruits » en tant que nom.

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

    UTILISONS L’OUTIL ‘SEGMENT’

    Lorsque nous sélectionnons un tableau stucturé, EXCEL ajoute un nouvel onglet ‘Outils de tableau’ au ruban :

    Cet onglet contient un ensemble d’outils et de fonctions bien pratiques. Explorons quelques-unes d’entre-elles :

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

     

    La liste des colonnes de notre tableau structuré est présentée par EXCEL dans une boite de choix à cocher. Cliquons par exemple, devant « Produits » et « Provenance » puis « OK » :

    La feuille EXCEL affiche 2 boîtes de cases à cocher dénommées sélecteurs (on peut les disposer à notre convenance sur la feuille) :

    Dans le sélecteur ‘Produit’, en cochant un produit particulier et dans le sélecteur ‘Provenance’ un pays particulier,  les données du tableau structuré sont filtrées relativement aux choix opérés.

    Par exemple, sélectionnons ‘Fraise’ dans le sélecteur ‘Produit’ et ‘Espagne’ dans le sélecteur ‘Provenance’. Le tableau structuré se présente alors ainsi :

    Remarque :

    Il est possible de réaliser des sélections mutiples.  Par exemple, Fraise et Pomme en provenance d’Espagne ou de Belgique…

    AJOUTONS UNE COLONNE DE CALCUL

    Dans le cas ou nous voulons, par exemple, ajouter une colonne ‘Montant’ dont la valeur contiendra le produit du ‘Nombre d’unités achetées’ par le ‘Prix par unité’. 

    Sélectionnons l’une des cellules de la colonne « Prix par unité » et faisons un clic droit sur la souris. Dans le menu contextuel qui s’affiche, choisissons « Insérer » puis « Colonne de tableau à droite » :

    Modifions l’entête de la nouvelle colonne par ‘Montant’ . Dans la première cellule de cette colonne, entrons la formule de calcul en sélectionnant avec la souris successivement la cellule de la première ligne contenant le ‘Nombre d’unités achetées’, le signe ‘*’ puis  la cellule de la première ligne contenant le ‘Prix par unité’ :

    Une fois la formule validée, EXCEL propage cette formule dans chaque ligne du tableau structuré :

    AJOUTONS UNE TOTALISATION

    Le tableau structuré permet d’ajouter aisément des totalisations sur ses lignes et ses colonnes. Par exemple, pour ajouter une totalisation sur la colonne ‘Montant’, dans l’onglet ‘Outils de tableau‘ cocher ‘ Ligne Total’ :

    Une ligne intitule ‘Total’ s’ajoute en bas du tableau stucturé :

    Q

    APP EXCELLONS GRATUITE : SMART_TROMBINOSCOPE

    Application réalisée avec la version EXCEL 365 Windows.

    Cette App EXCELLONS vous permet d’obtenir avec un minimum d’effort un trombinoscope regroupant les photos des membres d’une association, d’une assemblée, d’une société…

    Avec cette App Excellons entièrement gratuite et sans publicité, vous produirez les plus beaux trombinoscopes comme celui-ci :

    Trombinoscope généré par APP EXCELLONS 'Smart_Excellons'

    Télécharger l’App EXCELLONS ‘Smart Trombinoscope’ version VBA. (Nécessite l’activation des macros dans les options EXCEL)