All guides
IntermediateSelf-pacedFree GuideSection 45/95

Google Apps Script — Automatiser Google Workspace

Practise development foundations: programming, web, APIs, data and AI tools. Work through sections and exercises to build your first projects.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and sources

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

  1. →Ouvrez un Google Sheet
  2. →Menu Extensions → Apps Script
  3. →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)

  1. →Créez un Google Sheet avec vos candidatures (Company, Position, Status, Date, Email)
  2. →Écrivez un Apps Script qui compte les candidatures par statut
  3. →Ajoutez un trigger qui met à jour le compteur toutes les heures
  4. →Bonus : envoyez-vous un email récapitulatif quotidien
Quick Check

Quel est l'avantage principal de Google Apps Script par rapport à un script Python ?

Quick Check

Qu'est-ce qu'un trigger (déclencheur) dans Apps Script ?

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.