Section 11.3.6 : Google Apps Script — Automatiser Google Workspace
🎯 Objectif pédagogique
Automatiser Google Sheets, Gmail et Google Calendar avec Apps Script. Vous serez capable de créer des scripts qui automatisent vos outils quotidiens sans quitter l'écosystème Google — idéal pour les tâches corporate.
Google Apps Script — La porte d'entrée de l'automatisation
Marc utilise Google Sheets pour son suivi de candidatures, Gmail pour les échanges, et Google Calendar pour les entretiens. Apps Script est le langage de macros de Google — JavaScript intégré directement dans les Google Apps. Pas besoin de serveur, pas besoin de déploiement.
Accéder à Apps Script
- →Ouvrez un Google Sheet
- →Menu Extensions → Apps Script
- →L'éditeur de code s'ouvre dans un nouvel onglet
Exemples concrets
1. Envoyer un email automatique depuis Sheets
function sendFollowUpEmails() \{
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Candidatures");
const data = sheet.getDataRange().getValues();
const header = data[0];
// Index des colonnes
const emailCol = header.indexOf("Email Contact");
const statusCol = header.indexOf("Statut");
const companyCol = header.indexOf("Entreprise");
const dateCol = header.indexOf("Date candidature");
const followUpCol = header.indexOf("Relance envoyée");
const today = new Date();
for (let i = 1; i < data.length; i++) \{
const status = data[i][statusCol];
const email = data[i][emailCol];
const company = data[i][companyCol];
const applyDate = new Date(data[i][dateCol]);
const alreadySent = data[i][followUpCol];
// Si candidature > 7 jours sans réponse et pas encore relancé
const daysDiff = (today - applyDate) / (1000 * 60 * 60 * 24);
if (status === "applied" && daysDiff > 7 && !alreadySent && email) \{
GmailApp.sendEmail(email,
"Suivi candidature — " + company,
"Bonjour,\n\nJe me permets de revenir vers vous concernant ma candidature " +
"pour le poste chez " + company + ".\n\nCordialement,\nMarc Dupont"
);
// Marquer comme relancé
sheet.getRange(i + 1, followUpCol + 1).setValue("✅ " + today.toLocaleDateString());
Logger.log("Relance envoyée à " + company);
\}
\}
\}
2. Créer un événement Calendar depuis Sheets
function createInterviewEvents() \{
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Entretiens");
const data = sheet.getDataRange().getValues();
const calendar = CalendarApp.getDefaultCalendar();
for (let i = 1; i < data.length; i++) \{
const company = data[i][0];
const date = new Date(data[i][1]);
const time = data[i][2]; // "14:00"
const link = data[i][3]; // URL Meet/Zoom
const created = data[i][4];
if (!created && date) \{
const [hours, mins] = time.split(':').map(Number);
date.setHours(hours, mins);
const endDate = new Date(date.getTime() + 60 * 60 * 1000); // +1h
const event = calendar.createEvent(
"🎯 Entretien — " + company,
date,
endDate,
\{ description: "Lien : " + link + "\n\nPréparer : voir notes dans le Sheet" \}
);
sheet.getRange(i + 1, 5).setValue("✅ Créé");
Logger.log("Événement créé : " + company);
\}
\}
\}
3. Dashboard automatique dans Sheets
function updateDashboard() \{
const ss = SpreadsheetApp.getActiveSpreadsheet();
const source = ss.getSheetByName("Candidatures");
const dash = ss.getSheetByName("Dashboard");
const data = source.getDataRange().getValues();
const statusCol = data[0].indexOf("Statut");
// Compter par statut
const counts = \{\};
for (let i = 1; i < data.length; i++) \{
const status = data[i][statusCol] || "unknown";
counts[status] = (counts[status] || 0) + 1;
\}
// Écrire dans le dashboard
const total = data.length - 1;
dash.getRange("B2").setValue(total);
dash.getRange("B3").setValue(counts["interview"] || 0);
dash.getRange("B4").setValue(counts["offer"] || 0);
dash.getRange("B5").setValue(((counts["interview"] || 0) / total * 100).toFixed(1) + "%");
dash.getRange("B6").setValue(new Date());
Logger.log("Dashboard mis à jour");
\}
Déclencheurs (Triggers)
// Exécuter automatiquement :
// Menu : Déclencheurs → Ajouter un déclencheur
// Exemples :
// - updateDashboard → Toutes les heures
// - sendFollowUpEmails → Tous les jours à 9h
// - createInterviewEvents → À chaque modification du Sheet
// Créer un trigger via code :
function createTriggers() \{
ScriptApp.newTrigger('updateDashboard')
.timeBased()
.everyHours(1)
.create();
ScriptApp.newTrigger('sendFollowUpEmails')
.timeBased()
.atHour(9)
.everyDays(1)
.create();
\}
Apps Script = automatisation gratuite
Apps Script est gratuit, ne nécessite aucun serveur, et s'exécute sur l'infrastructure Google. Limites : 6 min d'exécution max, 100 emails/jour (compte gratuit), 20 triggers. Pour Marc, c'est largement suffisant pour automatiser sa recherche d'emploi.
🏋️ Exercice pratique (25 minutes)
- →Créez un Google Sheet avec vos candidatures (Company, Position, Status, Date, Email)
- →Écrivez un Apps Script qui compte les candidatures par statut
- →Ajoutez un trigger qui met à jour le compteur toutes les heures
- →Bonus : envoyez-vous un email récapitulatif quotidien
Quel est l'avantage principal de Google Apps Script par rapport à un script Python ?
Qu'est-ce qu'un trigger (déclencheur) dans Apps Script ?