Numeriblog Google Workspace Google Sheets, le tableur surpuissant Google Apps Script et Google Sheets : centraliser un script à l’aide d’une bibliothèque

Google Apps Script et Google Sheets : centraliser un script à l’aide d’une bibliothèque

Vous avez plusieurs Google Sheets avec le même code (dans Google Apps Script) et vous trouvez ça laborieux de devoir les ouvrir un par un à chaque fois que vous voulez faire un changement de […]

personnes ont consulté cet article

4 minutes

Rédigé par Christelle Legrand - il y a 2 ans

Ce que vous allez découvrir

  • Exemple
  • Étape 1 : création du Google Sheets modèle
  • Étape 2 : création de la bibliothèque
  • Étape 3 : déploiement de la bibliothèque
  • Étape 4  : ajout de la bibliothèque dans le Google Sheets “modèle”
  • Étape 5 : utilisation de fonction présente dans la bibliothèque
  • Étape 6: utilisation du Google Sheets “modèle” par les commerciaux
  • Notes

Google Apps Script et Google Sheets : centraliser un script à l’aide d’une bibliothèque

Vous avez plusieurs Google Sheets avec le même code (dans Google Apps Script) et vous trouvez ça laborieux de devoir les ouvrir un par un à chaque fois que vous voulez faire un changement de code source ? Ou vous gérez un Google Sheets contenant du code sensible et vous ne voulez pas que les utilisateurs aient facilement accès au code source ? Ou encore vous réutilisez souvent les mêmes fonctions ?
Dans les trois cas, il peut être intéressant de créer une bibliothèque (aussi appelée communément librairie) !

Exemple

Une société a plusieurs commerciaux, chacun ayant sa propre base de prospects et donc son Google Sheets personnel. 

Plusieurs besoins d’automation apparaissent alors, tels que l’ajout de la date du jour et la vérification de la présence d’une date et heure de rappel lors d’ajout d’un nouveau prospect à rappeler, puis la mise en place de rappels automatiques dans l’agenda de chaque commercial, ou encore l’envoi automatique de relance des prospects par mail.

Ces différents besoins se traduisent par la création de plusieurs scripts dédiés. Ceux-ci seront gérés via une bibliothèque et non directement dans le Google Sheets de chaque commercial afin d’avoir une source unique pour le code, plus simple à maintenir.

Voyons comment procéder en se concentrant sur un premier script simple (ajout automatique de la date du jour et vérification de la présence de la date et de l’heure de rappel) avec la mise en place d’une bibliothèque.

Étape 1 : création du Google Sheets modèle

Créez un Google Sheets qui servira de modèle (chaque commercial fera alors une copie de ce fichier).

Google Sheets modèle

Étape 2 : création de la bibliothèque

Créez un script en allant dans Drive > Nouveau > Plus > Google Apps Script.

(Si vous ne voyez pas Google Apps Script dans le menu, ajoutez-le via “Associer plus d’applications ».)

Ouverture Google Apps Script

Écrivez-y le code correspondant au besoin recherché, ici au départ la fonction d’ajout automatique de la date du jour dans le cas d’ajout de ligne ainsi que la vérification de la présence d’une date et d’une heure de rappel.

function onEditCommercialSpreadsheet() {
  var feuille = SpreadsheetApp.getActiveSheet();
  if(feuille.getName() == "Prospects") {
    var plage = feuille.getActiveCell();
    if (plage.getRow()>1) {
      var value = plage.getValue();
      switch (plage.getColumn()) {
        case 9: // column "Status" update
          var dateAppel = plage.offset(0, -8);
          if( dateAppel.getValue() === '' ) //est vide ?
            dateAppel.setValue(new Date());
          if (value.toLowerCase().indexOf("a rappeler") != -1) {
            var dateRappel = plage.offset(0, 1);
            if( dateRappel.getValue() === '' ) {
              var ui = SpreadsheetApp.getUi();
              var result = ui.alert(
                'Rappel',
                'Pensez à renseigner la date et l\'heure de rappel dans les cellules J'+plage.getRow()+' et K'+plage.getRow()+'.',
                ui.ButtonSet.OK);
              dateRappel.activate();
            }
          }
          break;
        default:
          break;
      }
    }
  }
}

Sauvegardez le projet et nommez le, par exemple, “Librairie Commercial”.

Saisie du code dans Google Apps Script

Étape 3 : déploiement de la bibliothèque

Cliquez en haut à droite sur Déployer > Nouveau déploiement.

Nouveau déploiement

Sélectionnez “Bibliothèque” comme type de déploiement.

Déploiement d'une bibliothèque

Précisez une description et cliquez sur “Déployer”.

Description de la bibliothèque

Un écran s’affiche alors avec le numéro de la version déployée (ici Version 1) ainsi que l’URL de la bibliothèque (qui n’est autre que l’URL du script), comportant l’ID du script, dont on aura besoin dans l’étape suivante. 

L’ID du script est aussi récupérable dans les paramètres du projet et il suffit de cliquer sur le bouton Copier.

Paramètres du projet

Étape 4  : ajout de la bibliothèque dans le Google Sheets “modèle”

Nous pouvons dès lors importer cette bibliothèque dans notre Google Sheets en allant dans Outils > Éditeur de script.

Cliquez alors sur le bouton “+” dans la section “Bibliothèques”. 

Renseignez ici l’ID de votre script déployé en tant que bibliothèque et cliquez sur “Rechercher”.

Votre bibliothèque s’affiche avec le choix de la version et de l’identifiant.

Il y a le choix entre la version  “HEAD (mode développeur)” et la “1” qui vient d’être déployée. Gardez pour le moment la version “HEAD” et cliquez sur “Ajouter”.

En choisissant la version “HEAD”, toute personne ayant l’accès en écriture au script “Librairie Commercial” aura automatiquement accès aux derniers changements sauvegardés, même si aucune nouvelle version n’a été créée. Cela est pratique tant qu’on est justement en phase de développement, pour tester sa bibliothèque sans avoir à chaque fois à déployer une nouvelle version.

Par contre, pour les personnes ayant l’accès en lecture seulement, ça utilisera dans tous les cas uniquement le code de la version sélectionnée.

Étape 5 : utilisation de fonction présente dans la bibliothèque

Il y a maintenant dans la section “Bibliothèques” une nouvelle entrée avec “LibrairieCommercial”.

Il est alors possible d’écrire la fonction “onEdit” qui appelle la fonction onEditCommercialSpreadsheet présente dans la bibliothèque LibrairieCommercial.

Utilisation fonction présente dans la bibliothèque

Remarque : l’autocomplétion ne se fait que sur le code existant dans la version sélectionnée (soit sur la dernière version déployée si on a choisi HEAD comme version, ici la V1).

Dès lors, le script est bien exécuté à chaque modification du classeur.

Détection ajout de ligne

Étape 6: utilisation du Google Sheets “modèle” par les commerciaux

Avant que chaque commercial ne crée et n’utilise sa propre copie du fichier Google Sheets “modèle”, il doit avoir à minima les droits de lecture sur le script de la bibliothèque. Il est possible de : 

  • soit ajouter les droits par compte mail (en désactivant l’option de notification) ;
  • soit de donner les droits à tous les utilisateurs qui disposent du lien.

Donner les droits en écriture permet de faire évoluer et d’enrichir la Bibliothèque en donnant automatiquement accès aux derniers changements (avec le choix de la version HEAD lors de l’import de la bibliothèque), mais cela signifie aussi qu’il faut être sûr de ne rien casser lorsqu’on modifie le code de la bibliothèque, vu que ça impacterait tous les utilisateurs.

Mais si le code est sensible, il faut alors plutôt limiter l’accès en lecture uniquement et fonctionner avec un déployement par version.

Notes

Si le temps d’exécution est critique pour votre application, l’usage d’une bibliothèque ne sera pas recommandé car, même si cela est minime, cela entraîne un temps d’exécution additionnel avec cet appel intermédiaire (recommandations Google).

Rédacteur

S’abonner
Notification pour
guest
16 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Aubert Christophe
Aubert Christophe

Merci pour ces explications claires et documentées .
Cependant pour aller plus loin , comment faite pour déployer une nouvelle version de Librairie V2 par exemple de façon transparente et sécurisée. Sauf erreur de ma part , pour disposer de la version 2, un commercial devra disposer d’un nouveau Gsheet créé à partir d’un nouveau modèle , lui même pointant vers la nouvelle version de librairie. N’y a t il pas un moyen de faire en sorte que les Gsheets des commerciaux en V1 soient mis à jour sans intervention de leur part pour exécuter le code de la librairie V2 ?

Cet avis vous a été utile ?

Aubert Christophe
Aubert Christophe

Merci pour la réponse. Cela confirme mes craintes. La version Head est prohibé pour ma part , car pour fonctionner cela m’ oblige à partager le code de la Librairie avec les tous les utilisateurs , ce qui constitue une faille de sécurité.
Bonne Journée

Cet avis vous a été utile ?

Merci Christelle pour cet article très intéressant et très bien expliqué ! Vivement de nouveaux articles 🙂

Cet avis vous a été utile ?

Samuel
Samuel

Bonjour,
Merci pour ces infos, ca m’a bien aidé.
J’ai cependant, plusieurs functions dans ma bibliothèque que j’aimerai pouvoir appeler depuis l’ensemble des gSheet qui l’utilisent.
Du coup, je me retrouve à devoir redefinir l’ensemble des functions
myfunction() {
mabibliotheque.myfunction();
}
Est il possible de charger l’ensemble des functions globalement ?

Cet avis vous a été utile ?

Cric98
Cric98

Bonjour et merci pour cet article
Je rencontre un problème en essayant cette méthode : Lors de l’étape 4 lorsque je clique sur rechercher, il y a un message d’erreur : « Impossible de trouver la bibliothèque. Vérifiez l’ID et les autorisations d’accès, puis réessayez. »
Ma question est : faut il être administrateur domaine pour appliquer cette méthode ?
Merci pour votre réponse.
Cordialement

Cet avis vous a été utile ?

Florence
Florence
Répondre à  Cric98
7 mois il y a

Bonjour,
je suis aussi coincée à cette étape, ça me dit aussi « Impossible de trouver la bibliothèque. Vérifiez l’ID et les autorisations d’accès, puis réessayez. » Avez-vous réussi à trouver le problème ?

Cet avis vous a été utile ?

Sansen Fabrice
Sansen Fabrice

Bonjour,
merci pour ces explications, mais est-il possible d’assigné une fonction de cette bibliothèque à un bouton ?

Cet avis vous a été utile ?

Sansen Fabrice
Sansen Fabrice
Répondre à  Legrand Christelle
11 mois il y a

Merci pour vos précisions.
Dans mon cas c’est un dessin en forme de bouton , Lorsque je lui assigne un script de ma bibliothéque ( ex maBiblio.script ou script ) j’ai une alerte m’indiquant qu’il ne la trouve pas.
en contournement j’ai créé un script sur mon spreadcheet faisant appelle à la fonction de ma bibliothéque
function toto(){
maBiblio.script();
}
et j’assigne à mon dessin le script toto

Cet avis vous a été utile ?

Mika
Mika

Bonjour
Y aurait-il un moyen d’utiliser directement les fonctions de la bibliothèque sans passer par la création d’un fichier .gs ou d’une autre fonction car la simple importation de la bibliothèque ne le permet pas?
Merci

Cet avis vous a été utile ?