Le contexte
Ce projet part d'un fichier Google Sheets utilisé comme CRM. Les tâches étaient réparties entre plusieurs personnes, avec des échéances saisies dans une colonne. Pour savoir ce qui arrivait, il fallait ouvrir le fichier et parcourir les lignes. Les responsables travaillaient déjà dans leur agenda, mais les échéances du tableur n'y apparaissaient pas.
L'objectif était de garder le tableur comme source de vérité, tout en faisant apparaître chaque tâche au bon moment dans l'agenda du responsable. Le client a choisi de rester anonyme. Les visuels de cette fiche sont donc des schémas du fonctionnement, sans capture de l'outil et sans nom d'organisation.
Ce que le script synchronise
Le script récupère les réponses d'un formulaire pour créer les fiches prospects dans l'onglet Clients. Il réagit aussi aux modifications du classeur. Quand une ligne de tâche est créée ou modifiée, il vérifie les champs, retrouve le responsable, puis crée ou met à jour un événement dans son Google Calendar.
L'événement dure quinze minutes et se place juste avant l'échéance. Si le créneau est déjà occupé, le script remonte dans le temps jusqu'au premier moment libre, sans dépasser l'heure de la tâche. L'événement reprend le statut de la tâche dans son titre et sa couleur, avec un lien direct vers la ligne du classeur.
Les tâches en retard sont regroupées par responsable et envoyées dans un email récapitulatif via Gmail. Un menu de maintenance permet de relancer la synchronisation des tâches en attente.
Le résumé des retards est envoyé à intervalle régulier. Il ne remplace pas les notifications de l'agenda, mais il donne une vue d'ensemble au responsable. Une tâche oubliée reste donc visible même si son événement a été déplacé ou supprimé.
Le calcul du créneau
Le calcul du créneau est la partie la plus délicate. Une tâche peut avoir une échéance à 17h30, mais le responsable peut déjà avoir une réunion de 15h à 16h. Le script doit trouver un bloc de quinze minutes avant 17h30, sans chevaucher les événements existants.
Il traite aussi les changements de responsable. Si une tâche est réassignée, l'ancien événement est supprimé et un nouveau est créé dans l'agenda de la bonne personne. Les tâches en retard restent visibles dans le résumé, même si leur date est passée.
Quand une tâche ne peut pas être synchronisée, le script affiche un message dans le classeur et écrit l'erreur dans les journaux. Cette trace évite de chercher pourquoi un événement manque sans point de départ.
Le socle
Le script est écrit en Google Apps Script, en TypeScript, versionné avec clasp et compilé avec tsdown. Il n'y a pas de serveur à maintenir. Le client garde ses habitudes dans Google Sheets, mais les échéances deviennent visibles dans l'agenda de chacun.
Google Apps Script s'imposait parce que le client travaillait déjà dans Google Sheets, Google Calendar et Gmail. Le script s'exécute dans l'environnement Google, avec les autorisations du compte qui l'installe. Il n'y a ni serveur, ni conteneur, ni base de données à surveiller. Les déclencheurs suivent les modifications du classeur et les réponses du formulaire.
Le script peut être installé sur un compte Google Workspace existant. Il ne demande pas de migration de données ni de nouvel outil pour l'équipe. Le classeur garde ses onglets et ses formules.
Les calculs de dates et les cas limites sont couverts par des tests Vitest. Les tests portent surtout sur les chevauchements, les changements de responsable et les échéances déjà passées.
Ce que le projet montre
Une automatisation utile ne remplace pas l'outil de travail. Elle relie les outils existants et supprime les gestes répétitifs. Ici, le tableur reste le point d'entrée, l'agenda devient le rappel et l'email sert de filet de sécurité pour les retards.
Le schéma ci-dessous résume les trois synchronisations. Il remplace une capture de l'outil pour préserver l'anonymat du client.

