Articles

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

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

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 ( '👉 Lis...

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

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

ARRAYFORMULA et CUMUL

Image
 ARRAYFORMULA et CUMUL Prenons le cas d'une colonne débit ou d'une colonne crédit, pour sommer la pratique simple est d'effectuer une opération de type nouvelle valeur = valeur précédente + valeur courante D2=D1+C2  Or cette façon de faire suppose de tirer la formule vers le bas et ne permet pas d'appliquer une fois pour toutes la fonction globale ARRAYFORMULA. Il faut pour cela utiliser une multiplication matricielle dont le principe est le suivant : Il est important de bien respecter le nombre de colonnes de la première matrice et le nombre de lignes de la seconde. Une multiplication d'une matrice de 5x3 (lignes x colonnes) avec une matrice de 3x2 donnera une matrice de 5x2. Exemple simplifié : 3x3 multipliée par 3x2 donnera donc une matrice de 3 lignes et 2 colonnes La première matrice est constituée de 1 et 0, les 1 occupant le triangle diagonal inférieur. Prenons le dernier terme, il revient à additionner tous les termes de la seconde matrice. En remontant les ...