Google Tasks est un outil puissant… mais souvent méconnu. Intégré à Gmail et Google Agenda, il permet de centraliser ses « to-do » sans installer d’application supplémentaire. Pourtant, beaucoup d’utilisateurs l’ignorent ou n’exploitent pas tout son potentiel.
Dans cet article, je vous explique :
- ce qu’est Google Tasks,
- pourquoi et comment l’utiliser,
- et comment mettre en place un script Google Apps Script qui centralise vos tâches dans un Google Sheets et vous envoie un rapport quotidien par e-mail.
Qu’est-ce que Google Tasks ?
Google Tasks est l’outil de gestion des tâches intégré à Google Workspace.
On y accède directement depuis :
- Gmail : via la barre latérale droite (icône cercle bleu avec une coche).
- Google Agenda : où les tâches apparaissent à leur date d’échéance.
- Application mobile Google Tasks (Android & iOS).
Fonctions principales
- Créer rapidement une tâche avec un titre, une date et des notes.
- Organiser les tâches en listes (par projet, par client, par contexte).
- Marquer comme « terminée » ou laisser en attente.
- Synchronisation sur tous vos appareils.
👉 Problème : Google Tasks reste basique. Pas de rapport, pas d’export avancé, pas de tableau de suivi.
Pourquoi connecter Google Tasks et Google Sheets ?
Un Google Sheet sert de tableau de bord :
- Vue consolidée : toutes vos listes et toutes vos tâches dans un seul tableau.
- Rapports automatiques : email quotidien des tâches en cours.
- Archivage et suivi : historique de toutes vos actions.
- Personnalisation : filtres, tris, couleurs, graphiques.
Présentation du script
J’ai développé un script Google Apps Script qui :
- Crée un menu personnalisé « Gestion des Tâches » dans Sheets.
- Récupère vos tâches Google Tasks via l’API officielle.
- Alimente automatiquement un onglet Tâches dans votre tableur.
- Génère un rapport HTML par e-mail chaque jour (8h par défaut).
- Permet de mettre en place un déclencheur pour automatiser le tout.
Mise en place étape par étape
1. Créer un Google Spreadsheet
- Ouvrez Google Sheets
- Créez un nouveau fichier (par exemple nommé Gestion des Tâches)
2. Ajouter le script
- Menu Extensions > Apps Script
- Supprimez le contenu et collez le code ci-dessous :
/**
* ================================================================
* Script de Gestion des Tâches Google Tasks ↔ Google Sheets
* ================================================================
*
* Description :
* Ce script interagit avec l'API Google Tasks afin de :
* - Récupérer toutes les listes de tâches et leurs tâches associées.
* - Afficher les tâches dans une feuille de calcul Google Sheets
* dédiée, sous forme de tableau clair et structuré.
* - Générer et envoyer par e-mail un rapport quotidien listant les
* tâches nécessitant une action ("needsAction"), regroupées par liste.
* - Mettre en place un déclencheur automatisé qui exécute ces actions
* chaque jour à une heure définie (par défaut 8h).
*
* Fonctionnalités principales :
* - Création d’un menu personnalisé "Gestion des Tâches" dans Google Sheets :
* • Envoyer Rapport Quotidien
* • Créer Déclencheur Quotidien
* • Remplir Tableur avec Tâches
* • À propos (informations sur le développeur)
*
* - Collecte des tâches via l’API Google Tasks (support de la pagination).
* - Filtrage des tâches nécessitant une action (exclusion des tâches terminées).
* - Envoi d’un e-mail formaté en HTML (via un template intégré), à
* l’utilisateur actif, contenant le résumé des tâches en cours.
* - Mise à jour automatique d’une feuille nommée "Tâches" avec les données
* actuelles (liste, titre, date d’échéance, notes, statut).
* - Gestion des déclencheurs pour éviter la duplication.
*
* Technologies et APIs utilisées :
* - Google Apps Script (V8 runtime)
* - Services intégrés : SpreadsheetApp, MailApp, HtmlService, ScriptApp, Session
* - Services avancés : Tasks (Google Tasks API)
*
* Pré-requis :
* - Activer le service avancé "Tasks API" dans Éditeur de script > Services avancés de Google.
* - Activer également l’API Google Tasks dans la Google Cloud Console associée au projet.
* - Autoriser le script à accéder à Gmail (envoi mail), aux feuilles Google Sheets et aux tâches.
*
* Limitations :
* - La mise à jour du tableur ne synchronise pas avec Google Tasks (sens unique : lecture seule).
* - Les statuts supportés par Google Tasks sont limités à "needsAction" et "completed".
* - L’e-mail est envoyé à l’utilisateur effectif du script (Session.getEffectiveUser()).
*
* Utilisation :
* 1. Ouvrir le Google Spreadsheet lié au script.
* 2. Accéder au menu "Gestion des Tâches".
* 3. Lancer un rapport ou remplir le tableau à la demande.
* 4. (Optionnel) Créer un déclencheur pour automatiser l’exécution quotidienne.
*
* Développé par :
* Fabrice Faucheux
* L’atelier informatique – https://atelier-informatique.com
* LinkedIn : https://www.linkedin.com/in/fabricefaucheux
*
* Versioning :
* - Création initiale : 13/04/2024
* - Dernière mise à jour : 04/10/2025
*
* ================================================================
*/
const TZ = Session.getScriptTimeZone() || 'Europe/Paris';
const onInstall = (e) => onOpen(e);
const onOpen = () => {
SpreadsheetApp.getUi()
.createMenu('Gestion des tâches')
.addItem('Envoyer rapport quotidien', 'envoyerRapportQuotidien')
.addItem('Créer déclencheur quotidien', 'creerDeclencheurQuotidien')
.addItem('Remplir tableur avec les tâches en cours', 'remplirTableurAvecTaches')
.addSeparator()
.addItem('À propos', 'afficherInfosDeveloppeur')
.addToUi();
};
const executerQuotidien = () => {
envoyerRapportQuotidien();
remplirTableurAvecTaches();
};
const obtenirToutesLesListesDeTaches = () => {
const items = [];
let pageToken;
do {
const res = Tasks.Tasklists.list({ maxResults: 100, pageToken: pageToken });
if (res.items) items.push.apply(items, res.items);
pageToken = res.nextPageToken;
} while (pageToken);
return items;
};
const obtenirTachesDepuisListe = (idListe) => {
const all = [];
let pageToken;
do {
const res = Tasks.Tasks.list(idListe, {
maxResults: 100,
showCompleted: false,
showDeleted: false,
showHidden: true,
pageToken: pageToken
});
if (res.items) {
res.items.forEach(function(t){ Logger.log('Tâche ' + idListe + ': ' + t.title + ' - ' + t.status); });
all.push.apply(all, res.items);
}
pageToken = res.nextPageToken;
} while (pageToken);
return all;
};
const obtenirToutesLesTachesDeToutesLesListes = () => {
const listes = obtenirToutesLesListesDeTaches();
var toutes = [];
listes.forEach(function(liste){
var taches = obtenirTachesDepuisListe(liste.id).map(function(t){
var clone = Object.assign({}, t);
clone.listeNom = liste.title;
return clone;
});
toutes = toutes.concat(taches);
});
return toutes;
};
const envoyerRapportQuotidien = () => {
const toutes = obtenirToutesLesTachesDeToutesLesListes()
.filter(function(t){ return t.status === 'needsAction'; })
.sort(function(a,b){ return (new Date(a.due || 0)) - (new Date(b.due || 0)); });
if (!toutes.length) {
Logger.log('Aucune tâche à traiter.');
return;
}
var parListe = {};
toutes.forEach(function(t){
if (!parListe[t.listeNom]) parListe[t.listeNom] = [];
parListe[t.listeNom].push({
title: t.title,
due: formaterDate(t.due),
notes: t.notes || 'Pas de notes'
});
});
const templateHtml = HtmlService.createTemplateFromFile('Mail_Modele');
templateHtml.data = parListe;
const to = Session.getEffectiveUser().getEmail();
MailApp.sendEmail({
to: to,
subject: '[Liste des Tâches] Résumé quotidien',
htmlBody: templateHtml.evaluate().getContent()
});
};
const creerDeclencheurQuotidien = () => {
supprimerDeclencheurs('executerQuotidien');
ScriptApp.newTrigger('executerQuotidien')
.timeBased()
.everyDays(1)
.atHour(8)
.create();
};
const supprimerDeclencheurs = (fn) => {
ScriptApp.getProjectTriggers()
.filter(function(t){ return t.getHandlerFunction() === fn; })
.forEach(function(t){ ScriptApp.deleteTrigger(t); });
};
const formaterDate = (iso) => {
if (!iso) return 'Non spécifiée';
const d = new Date(iso);
return new Intl.DateTimeFormat('fr-FR', { dateStyle: 'long', timeZone: TZ }).format(d);
};
const formaterDateTableur = (iso) => {
if (!iso) return 'Non spécifiée';
const d = new Date(iso);
return Utilities.formatDate(d, TZ, 'dd/MM/yyyy');
};
const traduireStatut = (statut) => {
const map = { needsAction: 'Action requise', completed: 'Complétée' };
return (statut in map) ? map[statut] : statut;
};
const remplirTableurAvecTaches = () => {
const toutes = obtenirToutesLesTachesDeToutesLesListes();
const ss = SpreadsheetApp.getActiveSpreadsheet();
let sh = ss.getSheetByName('Tâches') || ss.insertSheet('Tâches');
sh.clearContents();
sh.setFrozenRows(1);
const headers = ['Liste', 'Élément de travail', 'Date d’échéance', 'Notes', 'Statut'];
sh.getRange(1,1,1,headers.length).setValues([headers]).setFontWeight('bold');
const rows = toutes.map(function(o){
return [
o.listeNom || '',
o.title || '',
formaterDateTableur(o.due),
o.notes || 'Pas de notes',
traduireStatut(o.status)
];
});
if (rows.length) {
sh.getRange(2,1,rows.length,headers.length).setValues(rows);
sh.getRange(2,3,rows.length,1).setNumberFormat('dd/MM/yyyy');
sh.autoResizeColumns(1, headers.length);
sh.getRange(1,1,sh.getLastRow(),headers.length).setWrap(true);
}
};
function afficherInfosDeveloppeur() {
const html = `
<html>
<head>
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500&display=swap" rel="stylesheet">
<style>
body { font-family: 'Roboto', sans-serif; margin: 20px; color: #202124; }
strong { color: #202124; }
p { line-height: 1.6; }
.linkedin-logo { vertical-align: middle; margin-right: 5px; }
</style>
</head>
<body>
<p>Développé par Fabrice Faucheux
<a href='https://atelier-informatique.com' target="_blank">L'atelier informatique</a></p>
<p>Me retrouver sur LinkedIn
<a href='https://www.linkedin.com/in/fabricefaucheux' target="_blank">
<img class="linkedin-logo" src="https://upload.wikimedia.org/wikipedia/commons/c/ca/LinkedIn_logo_initials.png" alt="LinkedIn" width="20" height="20"/>Fabrice Faucheux
</a>
</p>
</body>
</html>`;
SpreadsheetApp.getUi()
.showModalDialog(HtmlService.createHtmlOutput(html).setWidth(450).setHeight(120), 'À propos');
}
3. Créer le modèle HTML pour l’email
Toujours dans Apps Script :
- Fichier > Nouveau fichier HTML
- Nom : Mail_Modele.html
- Collez ce code :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
body { font-family: Arial, sans-serif; font-size:14px; color:#333; }
table { width:100%; border-collapse:collapse; background:#fff; }
th,td { padding:8px; border-bottom:1px solid #ddd; text-align:left; }
th { background:#f8f8f8; }
.footer { margin-top:30px; font-size:12px; color:#666; text-align:center; }
</style>
</head>
<body>
<p>Bonjour,</p>
<p>Voici le résumé quotidien des tâches en cours nécessitant une action.</p>
<? if (!data || Object.keys(data).length === 0) { ?>
<p>Aucune tâche à afficher.</p>
<? } else { ?>
<? for (var liste in data) { ?>
<h3><?!= liste ?></h3>
<table>
<thead>
<tr><th>Élément</th><th>Date</th><th>Notes</th></tr>
</thead>
<tbody>
<? data[liste].forEach(function(tache){ ?>
<tr>
<td><?!= tache.title ?></td>
<td><?!= tache.due ?></td>
<td><?!= tache.notes ?></td>
</tr>
<? }); ?>
</tbody>
</table>
<? } ?>
<? } ?>
<div class="footer">
Développé par <a href="https://atelier-informatique.com" target="_blank">L'atelier informatique</a> – Fabrice Faucheux
</div>
</body>
</html>
4. Activer l’API Google Tasks
- Dans Apps Script > Services avancés de Google : activez Tasks API.
- Dans la console Google Cloud liée : activez également Google Tasks API.
5. Autoriser le script
Au premier lancement, Google vous demandera l’autorisation d’accéder à :
- vos tâches,
- vos feuilles de calcul,
- et MailApp pour envoyer des mails.
Exemple de résultat
Dans Sheets
Un onglet Tâches sera créé, listant :
- Liste, Titre, Date d’échéance, Notes, Statut
Dans votre boîte mail
Chaque matin, un e-mail HTML arrive avec vos tâches regroupées par liste.
Bénéfices pour vous
- Clarté : toutes les tâches réunies dans un tableau unique.
- Automatisation : rapport quotidien envoyé automatiquement.
- Flexibilité : personnalisez le tableur selon vos besoins.
- Productivité : ne laissez plus aucune tâche vous échapper.
Conclusion
Google Tasks est un outil simple mais souvent sous-exploité. En l’intégrant à Google Sheets avec Apps Script, vous obtenez un véritable tableau de bord intelligent de vos actions quotidiennes.
💡 Ce développement montre comment un script léger peut transformer un service Google basique en un outil puissant et adapté à votre organisation.