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.");
}
}