Articles

CRÉER UNE BOITE DE DIALOGUE (INPUTBOX) AVEC LISTE DE CHOIX

Image
  Ce script permet d'inclure un menu déroulant dans une boite de dialogue.  La liste des choix se trouve dans une zone nommée  choix  du fichier La valeur est recueillie par la fonction   getInputBoxValue Il suffit de lancer cette fonction var   choix  =  SpreadsheetApp . getActiveSpreadsheet (). getRange ( 'choix' ). getValues (). flat () function   inputBoxListe () {    var   page  =  `<html> <style>   body {     font-family: Roboto, Arial, sans-serif;   }   select {     display: block;     width: 90%;     box-sizing: border-box;     margin-bottom: 1rem;     padding: 0.6rem 0.7rem;     background: #f3f3f3;     border: none;     font-size: 1.08rem;     border-radius: 0.4rem;   } </style> <body> <select onchange="retourner(this.value);">   <option value="" disabled selected >texte d'invitation ...</option>`    choix . forEach ( c  =>  page  +=  `<option value=" ${ c } "> ${ c } </option&

CRÉER UNE BOITE DE DIALOGUE (INPUTBOX) AVEC CASES À COCHER

Image
Ce script permet d'inclure un ensemble de cases à cocher dans une boite de dialogue.  La liste des options se trouve dans une zone nommée choix du fichier La valeur est recueillie par la fonction   getInputBoxValue Il suffit de lancer cette fonction var   choix  =  SpreadsheetApp . getActiveSpreadsheet (). getRange ( 'choix' ). getValues (). flat () function   inputBoxCheck () {    var   page  =  `<html> <style>   body {     font-family: Roboto, Arial, sans-serif;     font-size: 1.08rem;   } </style> <body>`    choix . forEach ( c  =>  page  +=  `<input type="radio" name="choix" value=" ${ c } " onchange="retourner(this.value);" /> ${ c } <br>` )    page  +=  ` </body><script> window.close = function(){window.setTimeout(function(){google.script.host.close()},100)}; function retourner(valeur) {   google.script.run.getInputBoxValue(valeur);   close(); } </script> </html>`   

CRÉER UNE BOITE DE DIALOGUE (INPUTBOX) AVEC CHOIX D'UNE DATE

Image
Ce script permet d'inclure une zone formattée en date dans une boite de dialogue. La valeur est recueillie par la fonction   getInputBoxValue Il suffit de lancer cette fonction function   inputBoxDate () {    var   html  =  HtmlService . createHtmlOutput ( ` <html> <style>   input[type="date"] {     font-family: Roboto, Arial, sans-serif;     display: block;     width: 100%;     box-sizing: border-box;     margin-bottom: 1rem;     padding: 0.6rem 0.7rem;     background: #f3f3f3;     border: none;     font-size: 1.08rem;     border-radius: 0.4rem;   } </style> <body> <input type="date" name="date" id="date" value="" onchange="retourner(this.value);"> </body><script> window.close = function(){window.setTimeout(function(){google.script.host.close()},100)}; function retourner(valeur) {   google.script.run.getInputBoxValue(valeur);   close(); } </script> </html>    ` )     .

OUVRIR UNE URL À PARTIR D'UN SCRIPT

Voici un code simplissime, compatible Chrome et Edge a minima, permettant d'ouvrir une URL dans un autre onglet du navigateur. function openUrl(url) { var html = HtmlService.createHtmlOutput(` <html><script> window.close = function(){window.setTimeout(function(){google.script.host.close()},9)}; var a = document.createElement("a"); a.href="${url}"; a.target="_blank"; a.click() close(); </script> </html> `) .setWidth(90).setHeight(1); SpreadsheetApp.getUi().showModalDialog(html, "Opening ..."); }

CRÉER / ENVOYER DES INVITATIONS (AGENDA)

Image
Parmi plusieurs méthodes permettant d'envoyer ou de créer des invitations à partir d'une feuille (création de fichiers .ics, ou écriture directe dans les agendas partagés), nous allons explorer ici une méthode plus simple consistant à donner un lien hypertexte. Par formule dans la feuille (laquelle peut être partagée) pour une ou des journées complètes en A : objet en B : date de début en C : date de fin en D : le lieu = HYPERLINK ( "https://calendar.google.com/calendar/render?action=TEMPLATE&text=" & A1 & "&dates=" & TEXT ( B1 ; "YYYYMMDD" ) & "/" & TEXT ( C1 + 1 ; "YYYYMMDD" ) & "&details=&location=" & D1 ; "Ajouter au calendrier" ) pour un créneau horaire particulier en A : objet en B : date et heure de début en C : date et heure de fin en D : le lieu en E : le fuseau horaire sous forme GMT+/-x = HYPERLINK ( "https://calendar.google.com/calendar/render?acti

NAVIGUER AU SEIN D'UN FICHIER À L'AIDE D'UN MENU DÉROULANT

Image
Il peut être intéressant de créer un sommaire et de pouvoir aller directement à un endroit précis du fichier par l'utilisation d'un menu déroulant La solution consiste à  créer une table de choix (ici en colonnes D, E et F) avec l'identifiant de la feuille cible et la cellule cible définir une validation pour la cellule de choix (ici A1) définir par formule le lien vers la cellule cible = iferror ( hyperlink ( "#gid=" & vlookup ( A1 ; D:F ; 2 ; 0 ) & "range=" & vlookup ( A1 ; D:F ; 3 ; 0 ) ; "link to " & vlookup ( A1 ; D:F ; 3 ; 0 ) ) ) Cette solution peut aussi être utilisée pour créer un sommaire des différentes feuilles du fichier. Dans ce cas, la liste peut être créée par une fonction personnalisée = listOfTabs ( ) Le script étant function   listOfTabs (){    var   ss  =  SpreadsheetApp . getActiveSpreadsheet ()    var   list  = [[ 'Choix' , 'gid' , 'cellule' ]]    ss . getSheets (). forEach ( sh  =&

METTRE À JOUR LES LISTES DE CHOIX D'UN FORMULAIRE GOOGLE FORM

Image
Si la création d'un formulaire (Google Form) est relativement facile, la mise en place et surtout la modification des choix possibles est plus fastidieuse, d'autant plus quand les choix proviennent eux-mêmes du fichier Google Sheets. La solution suivante consiste à créer un onglet nommé " listes " dans lequel on retrouve ligne 1 des cases à cocher ligne 2 les intitulés de question lignes 3 et suivantes les choix possibles Le fait de cocher une case entraîne la mise à jour automatique des choix possible dans le formulaire. Il faut définir un déclencheur sur la fonction onEdit (lors d'une modification) const   form  =  FormApp . openById ( 'id du formulaire' ); // mettre un déclencheur function   onSpeEdit ( event ) {    var   feuille  =  event . source . getActiveSheet ();    var   cellule  =  event . source . getActiveRange ();    if  ( feuille . getName () ==  'listes'  &&  cellule . getRow () ==  1  &&  cellule . getColumn () >