Google Apps Script est le moteur d’automatisation le plus sous-estimé de la suite Google Workspace™. Pas d’abonnement. Pas d’intégrations complexes. Pas de limites artificielles. Juste de la pure puissance pour vos workflows.

Voici quelques automatisations concrètes qui peuvent remplacer des outils coûteux — avec les bouts de code pour prouver à quel point c’est simple 👇

1. Email après réponse formulaire

function envoyerEmail(e) {
  // 'e' contient les données de l'événement
  const emailDestinataire = e.values[1]; 
  const sujet = "Merci !";
  const message = "Nous avons bien reçu votre réponse.";
  
  MailApp.sendEmail(emailDestinataire, sujet, message);
}

2. Générer un PDF simple

function genererPDF() {
  const document = DocumentApp.create("Rapport Client");
  const corps = document.getBody();
  
  corps.appendParagraph("Bonjour, voici votre rapport généré automatiquement.");
  document.saveAndClose();
}

3. Créer un dossier

function creerDossier() {
  const nomDossier = "Nouveau Client - " + new Date().getFullYear();
  DriveApp.createFolder(nomDossier);
}

4. Ajouter une ligne horodatée

function ajouterLigne() {
  const feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dateActuelle = new Date();
  
  feuille.appendRow(["Nouvelle Entrée", dateActuelle]);
}

5. Alerte SMS via Email

function alerteSMS() {
  const passerelleSMS = "0612345678@sfr.fr"; // À adapter selon l'opérateur
  const message = "Alerte critique reçue !";
  
  MailApp.sendEmail(passerelleSMS, "", message);
}

6. Nettoyer les doublons

function nettoyerDoublons() {
  const feuille = SpreadsheetApp.getActiveSheet();
  const plage = feuille.getRange("A:A");
  
  plage.removeDuplicates();
}

7. Déplacer un fichier

function deplacerFichier() {
  const fichier = DriveApp.getFileById("ID_DU_FICHIER");
  const dossierCible = DriveApp.getFolderById("ID_DU_DOSSIER");
  
  fichier.moveTo(dossierCible);
}

8. Rapport par email

function envoyerRapport() {
  const destinataire = "equipe@xyz.com";
  const sujet = "Rapport Quotidien";
  const corps = "Veuillez trouver ci-joint les mises à jour.";
  
  MailApp.sendEmail(destinataire, sujet, corps);
}

9. Synchroniser deux feuilles

function synchroniserDonnees() {
  const feuilleSource = SpreadsheetApp.openById("ID_SOURCE").getSheetByName("Feuille1");
  const valeurs = feuilleSource.getRange("A1:B10").getValues();
  
  const feuilleCible = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Feuille2");
  feuilleCible.getRange("A1:B10").setValues(valeurs);
}

10. Demande d’approbation

function demanderApprobation() {
  const manager = "manager@xyz.com";
  const sujet = "Validation requise";
  const message = "Merci de valider le document ci-joint.";
  
  MailApp.sendEmail(manager, sujet, message);
}

11. Sauvegarder les pièces jointes Gmail dans Drive

function sauvegarderPiecesJointes() {
  const filsDiscussion = GmailApp.search("has:attachment subject:Facture");
  const dossierCible = DriveApp.getFolderById("ID_DOSSIER_DRIVE");
  
  filsDiscussion.forEach(fil => {
    let messages = fil.getMessages();
    let dernierMessage = messages[messages.length - 1];
    let piecesJointes = dernierMessage.getAttachments();
    
    piecesJointes.forEach(pj => {
      dossierCible.createFile(pj);
    });
  });
}

12. Nettoyer les vieux emails promotionnels

function nettoyerPromos() {
  const vieuxFils = GmailApp.search("category:promotions older_than:30d");
  GmailApp.moveThreadsToTrash(vieuxFils);
}

13. Notification vers Slack (Webhook)

function notifierSlack() {
  const urlWebhook = "https://hooks.slack.com/services/XXX/YYY";
  const chargeUtile = { "text": "🔔 Nouvelle vente enregistrée !" };
  
  const options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(chargeUtile)
  };
  
  UrlFetchApp.fetch(urlWebhook, options);
}

14. Créer un brouillon Gmail

function creerBrouillon() {
  const destinataire = "client@exemple.com";
  const sujet = "Proposition Commerciale";
  const corps = "Bonjour, voici notre proposition...";
  
  GmailApp.createDraft(destinataire, sujet, corps);
}

15. Traduction automatique dans Sheets

function traduireCellule() {
  const feuille = SpreadsheetApp.getActiveSheet();
  const texteOriginal = feuille.getRange("A2").getValue();
  
  // Traduit du français (fr) vers l'anglais (en)
  const texteTraduit = LanguageApp.translate(texteOriginal, 'fr', 'en');
  
  feuille.getRange("B2").setValue(texteTraduit);
}

16. Récupérer un prix via API (Bitcoin)

function prixBitcoin() {
  const url = "https://api.coindesk.com/v1/bpi/currentprice.json";
  const reponse = UrlFetchApp.fetch(url);
  const donnees = JSON.parse(reponse.getContentText());
  
  const prixUSD = donnees.bpi.USD.rate;
  SpreadsheetApp.getActiveSheet().getRange("B1").setValue(prixUSD);
}

17. Fonction personnalisée : Calcul TTC

/**
 * Calcule le montant TTC.
 * @customfunction
 */
function CALCUL_TTC(prixHT, tauxTva) {
  const montantTva = prixHT * (tauxTva / 100);
  return prixHT + montantTva;
}

18. Supprimer les lignes vides

function supprimerLignesVides() {
  const feuille = SpreadsheetApp.getActiveSheet();
  const donnees = feuille.getDataRange().getValues();
  
  // Boucle inversée pour supprimer sans décaler les index
  for (let i = donnees.length - 1; i >= 0; i--) {
    if (donnees[i].join("") === "") {
      feuille.deleteRow(i + 1);
    }
  }
}

19. Archiver les tâches terminées

function archiverTaches() {
  const feuilleActive = SpreadsheetApp.getActiveSheet();
  const feuilleArchive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archives");
  const donnees = feuilleActive.getDataRange().getValues();
  
  // On parcourt à l'envers pour supprimer les lignes en toute sécurité
  for (let i = donnees.length - 1; i >= 0; i--) {
    if (donnees[i][4] === "Terminé") { // Colonne E = Index 4
      feuilleArchive.appendRow(donnees[i]);
      feuilleActive.deleteRow(i + 1);
    }
  }
}

20. Scraper les liens d’une page web

function extraireLiensWeb() {
  const html = UrlFetchApp.fetch("https://fr.wikipedia.org").getContentText();
  const liensTrouves = html.match(/href="(.*?)"/g);
  const feuille = SpreadsheetApp.getActiveSheet();
  
  if (liensTrouves) {
    liensTrouves.forEach(lien => {
      feuille.appendRow([lien]);
    });
  }
}

21. Créer des événements Agenda depuis Sheets

function creerEvenementsAgenda() {
  const feuille = SpreadsheetApp.getActiveSheet();
  // Suppose Colonne A: Titre, B: Début, C: Fin
  const donnees = feuille.getRange("A2:C10").getValues(); 
  const agenda = CalendarApp.getDefaultCalendar();
  
  donnees.forEach(ligne => {
    let titre = ligne[0];
    let debut = new Date(ligne[1]);
    let fin = new Date(ligne[2]);
    agenda.createEvent(titre, debut, fin);
  });
}

22. Email récapitulatif de l’agenda

function envoyerAgendaDuJour() {
  const agenda = CalendarApp.getDefaultCalendar();
  const evenements = agenda.getEventsForDay(new Date());
  let corpsEmail = "Voici vos rendez-vous du jour :\n";
  
  evenements.forEach(evt => {
    corpsEmail += `- ${evt.getTitle()} à ${evt.getStartTime()}\n`;
  });
  
  MailApp.sendEmail("moi@gmail.com", "Mon Agenda", corpsEmail);
}

23. Colorer les événements urgents

function colorerUrgences() {
  const agenda = CalendarApp.getDefaultCalendar();
  const evenements = agenda.getEventsForDay(new Date());
  
  evenements.forEach(evt => {
    if (evt.getTitle().includes("URGENT")) {
      evt.setColor(CalendarApp.EventColor.RED);
    }
  });
}

24. Lister les fichiers d’un dossier Drive

function listerFichiersDrive() {
  const dossier = DriveApp.getFolderById("ID_DU_DOSSIER");
  const fichiers = dossier.getFiles();
  const feuille = SpreadsheetApp.getActiveSheet();
  
  while (fichiers.hasNext()) {
    let fichier = fichiers.next();
    feuille.appendRow([fichier.getName(), fichier.getUrl(), fichier.getSize()]);
  }
}

25. Renommer des fichiers en masse

function renommerFichiers() {
  const dossier = DriveApp.getFolderById("ID_DU_DOSSIER");
  const fichiers = dossier.getFiles();
  
  while (fichiers.hasNext()) {
    let fichier = fichiers.next();
    let nomActuel = fichier.getName();
    
    if (nomActuel.startsWith("IMG_")) {
      fichier.setName("Photo_Client_" + nomActuel);
    }
  }
}

26. Publipostage (Remplacer texte dans Doc)

function publipostageDoc() {
  const document = DocumentApp.openById("ID_DU_DOC_MODELE");
  const corps = document.getBody();
  
  corps.replaceText("{{NOM_CLIENT}}", "Jean Dupont");
  corps.replaceText("{{DATE}}", new Date().toLocaleDateString());
  
  document.saveAndClose();
}

27. Convertir Doc en PDF et envoyer

function convertirEtEnvoyerPDF() {
  const fichierDoc = DriveApp.getFileById("ID_DU_DOC");
  const blobPDF = fichierDoc.getAs('application/pdf');
  
  MailApp.sendEmail({
    to: "client@exemple.com",
    subject: "Votre document",
    body: "Ci-joint le fichier PDF.",
    attachments: [blobPDF]
  });
}

28. Fermer automatiquement un formulaire

function fermerFormulaire() {
  const formulaire = FormApp.openById("ID_DU_FORMULAIRE");
  // Utile pour arrêter les inscriptions à une date précise
  formulaire.setAcceptingResponses(false);
}

29. Mettre à jour les graphiques dans Slides

function mettreAJourSlides() {
  const presentation = SlidesApp.openById("ID_PRESENTATION");
  const diapositives = presentation.getSlides();
  
  diapositives.forEach(diapo => {
    diapo.getSheetsCharts().forEach(graphique => {
      graphique.refresh(); // Met à jour avec les dernières données Sheets
    });
  });
}

30. Moniteur de site web (Uptime)

function verifierSiteWeb() {
  const url = "https://mon-site-web.com";
  try {
    const reponse = UrlFetchApp.fetch(url);
    if (reponse.getResponseCode() !== 200) {
      MailApp.sendEmail("admin@xyz.com", "ALERTE SITE", "Code erreur reçu.");
    }
  } catch (erreur) {
    MailApp.sendEmail("admin@xyz.com", "SITE DOWN", "Le site est inaccessible.");
  }
}

Soutenez mon travail !

Offrez-moi un café