Articles

Affichage des articles du février, 2022

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 () >

INSÉRER UN TABLEAU PROVENANT D'UNE FEUILLE DANS UN COURRIEL

Image
Lors d'une envoi d'une partie d'informations par courrier électronique, la solution est de la faire en fichier attaché au format pdf par exemple. Une autre solution plus conviviale est d'inclure dans le corps du courriel le tableau de données. Le script suivant respecte les couleurs, polices, tailles de caractères et cellules fusionnées comme dans l'exemple joint. function   sendEmail () {    var   sh  =  SpreadsheetApp . getActiveSpreadsheet (). getSheetByName ( feuille )    var   plage  =  sh . getDataRange ()    MailApp . sendEmail ({      to :  'nom@email.com' ,      subject :  'Titre du courriel' ,      htmlBody :  tableHTMLplus ( plage )   }) }; function   tableHTMLplus ( range ){    var   data       =  range . getDisplayValues ()    var   size       =  range . getFontSizes ()    var   style      =  range . getFontStyles ()    var   weight     =  range . getFontWeights ()    var   line       =  range . getFontLines ()    var   bg         =  ran

METTRE À DISPOSITION DES INFORMATIONS SANS ACCÈS AU FICHIER COMPLET

Même si par essence, Google Sheets est un outil collaboratif, il peut arriver qu'il faille mettre à disposition des informations sans que l'on puisse avoir accès aux éléments confidentiels contenus dans le fichier complet. Créer une vue filtrée, ou créer un fichier avec =IMPORTRANGE() n'est pas la solution car elle permettrait d'avoir accès aux informations. Ceci peut se faire selon 2 méthodes asynchrones : recopier une feuille dans un nouveau fichier qui lui seul sera accessible envoyer par mail les informations issues de la feuille Pour ce faire, les informations à recopier ou envoyer seront isolées dans une feuille spécifique avec des formules classiques telles que query, filter, vlookup/recherchev ... à partie des données complètes. var   feuille  =  'nom de la feuille à copier/envoyer' var   id  =  'id du fichier'       // pour le recopie : id du fichier de destination en lecture var   email  =  'nom@email.com'    // pour l'envoi par cou

CRÉER FACILEMENT DES VUES FILTRÉES

Image
Google Sheets est par essence un outil de travail collaboratif. Et pour ne pas gêner plusieurs collaborateurs, il existe un système de vues filtrées permettant à chacun d'y travailler sans imposer aux autres sa propre vue et son travail. Mais la construction des vues filtrées peut être assez fastidieuse. Cet outil permet de créer autant de vues filtrées que de données différentes dans une colonne précise. Il est indispensable d'activer le service Google Sheets API dans l'éditeur de script. Le script : var   col  =  2   // colonne permettant d'identifier le critère de partage function   onOpen () {    SpreadsheetApp . getUi (). createMenu ( '⇩ M E N U ⇩' )     . addItem ( '👉 Créer/ajouter une vue filtrée pour chaque item de la colonne B' ,  'setAllFilterViews' )     . addItem ( '👉 Lister les url des vues filtrées pour chaque item de la colonne B' ,  'listAllFilterViews' )     . addSeparator ()     . addItem ( '👉 Supprimer to

UTILISER ET PERSONNALISER UN MODÈLE SOUS GOOGLE SHEETS

Image
 Le but est de créer un modèle (de lettre, facture, devis, etc.) et ensuite de le personnaliser avant de le mettre à disposition (pdf, email). Vous créez un onglet MODELE dont voici un exemple Vous créez ensuite un onglet DICTIONNAIRE reprenant les [TERMES] employés (encadrés de []) Les valeurs peuvent être issues d'une recherche dans une base de données selon un menu déroulant par exemple. Le script suivant effectuera une copie du modèle en remplaçant les termes employés par les données du dictionnaire. function   onOpen () {    SpreadsheetApp . getUi (). createMenu ( '⇩ M E N U ⇩' )     . addItem ( '👉 Copier le modèle et mettre à jour' ,  'editer' )     . addToUi (); } function   editer () {    var   ss  =  SpreadsheetApp . getActiveSpreadsheet ()    var   mot  = {}    var   dico  =  ss . getSheetByName ( 'DICTIONNAIRE' ). getDataRange ()    dico . getDisplayValues (). slice ( 1 ). forEach ( x  =>  mot [ x [ 0 ]] =  x [ 1 ])    var   f  =  ss .

AUTO FILTRER UNE FEUILLE

Image
 Le but est de filtrer la base de données en entrant les noms requis sans avoir à manipuler les conditions manuellement. Vous avez une feuille de données de ce type : Pour filtrer, il suffit juste de donner un nom en A1 et/ou en A2 Script : function onEdit(e) { var col = 1 // colonne où se trouvent les noms var row = 3 // ligne à partir de laquelle se trouve le tableau (en-têtes) var sh = e.source.getActiveSheet() if (sh.getName() != "Sheet1") return; if (e.range.columnStart > col || e.range.columnEnd < col) return; if (e.range.rowStart > row - 1) return; var names = sh.getRange(1, col, row - 1, 1).getValues().flat() var range = sh.getRange(row, col, sh.getLastRow() - row + 1, sh.getLastColumn() - col + 1); var filter = sh.getFilter(); if (filter !== null) filter.remove(); if (countNotOccurrences(names, '') == 0) return; var hiddenNames = range.getValues().slice(1).map(row => row[0]).filter(who => names.indexOf(who) == -1); ran