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.");
}
}
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.