Pôle Formation UIMM CVDL (S. Jaubert)
L'objectif de ce tutoriel est simple : vous allez prendre le contrôle de votre environnement Google. Nous allons transformer votre suite Google en un assistant personnel qui travaille pour vous, 24/7.
Pour le dire simplement : c'est le cerveau caché qui peut connecter tous vos outils Google.
Vous n'êtes plus un simple utilisateur. Vous devenez un architecte de vos propres solutions.
Pas besoin de télécharger quoi que ce soit. L'éditeur de script est déjà dans vos outils.
sheet.new dans votre navigateur).Code.gs. C'est là que nous allons coller le code généré par l'IA.Voici le processus en 5 étapes que nous allons utiliser à chaque fois.
C'est l'étape la plus importante. Vous devez être hyper-précis.
Vous ouvrez une IA (comme Gemini) et vous lui donnez votre "Bon brief". Vous lui dites : "Écris-moi le code Google Apps Script complet pour faire cela."
Code.gs).C'est une étape cruciale la première fois.
Maintenant, retournez sur votre document et faites l'action qui doit déclencher le script. Observez la magie opérer.
Objectif : Automatiser l'arrivée d'un nouveau salarié. (Google Sheet > Génère Doc > Range dans Drive).
Créez un Google Sheet avec ces colonnes :
A: Nom Complet | B: Poste | C: Manager | D: Date d'arrivée | E: Email | F: Statut
Créez un Google Doc modèle. Là où les données doivent changer, utilisez des variables entre accolades.
Exemple : "Bienvenue à {{Nom Complet}} au poste de {{Poste}}."
Notez l'ID de ce document (dans l'URL).
Voici un exemple de prompt parfait à donner à l'IA :
Prompt pour l'IA :
"Tu es un expert Google Apps Script.
Contexte : J'ai un Google Sheet 'Onboarding' (ID: [METTEZ VOTRE ID]) avec les colonnes A: Nom Complet, B: Poste, C: Manager, D: Date d'arrivée, E: Email, F: Statut.
J'ai un Google Doc modèle (ID: [VOTRE ID MODÈLE]) et un dossier Drive 'Contrats Signés' (ID: [VOTRE ID DOSSIER]).
Déclencheur : Le script doit se lancer automatiquement quand j'écris 'Prêt' dans la colonne F (Statut).
Actions :
1. Détecter l'édition 'Prêt' en colonne F.
2. Lire les données de la ligne modifiée.
3. Faire une copie du Doc modèle.
4. Remplacer les variables (ex: {{Nom Complet}}) avec les données du Sheet.
5. Renommer le nouveau Doc : 'Contrat - [Nom Complet]'.
6. Ranger ce Doc dans le dossier 'Contrats Signés'.
7. Écrire 'Contrat Généré' dans la colonne F."
L'IA vous donnera quelque chose comme ça. Copiez-le dans votre éditeur Code.gs.
// IDs à personnaliser (REMPLISSEZ-LES AVEC VOS PROPRES IDs)
const SHEET_ID = 'METTEZ_L_ID_DE_VOTRE_SHEET';
const TEMPLATE_DOC_ID = 'METTEZ_L_ID_DE_VOTRE_DOC_MODÈLE';
const TARGET_FOLDER_ID = 'METTEZ_L_ID_DE_VOTRE_DOSSIER_DRIVE';
/**
* Fonction qui se déclenche à chaque édition du Google Sheet.
* @param {Object} e - L'objet d'événement qui contient les infos sur l'édition
*/
function onEdit(e) {
const range = e.range; // La cellule qui a été modifiée
const sheet = range.getSheet(); // La feuille active
const editedRow = range.getRow(); // Numéro de la ligne modifiée
const editedCol = range.getColumn(); // Numéro de la colonne modifiée
const statusColumn = 6; // Colonne F
const triggerText = 'Prêt';
// Si la modification n'est pas dans la colonne F OU si le texte n'est pas "Prêt"
if (editedCol !== statusColumn || range.getValue() !== triggerText) {
return; // On arrête le script
}
// 1. Lire les données de la ligne
// getRange(ligne, colonne_début, nb_lignes, nb_colonnes)
const dataRange = sheet.getRange(editedRow, 1, 1, 5); // Colonnes A à E
const data = dataRange.getValues()[0]; // [Nom, Poste, Manager, Date, Email]
const nomComplet = data[0];
const poste = data[1];
const manager = data[2];
const dateArrivee = new Date(data[3]).toLocaleDateString('fr-FR'); // Formatage de la date
const email = data[4];
// 2. Accéder aux dossiers et au modèle
const templateDoc = DriveApp.getFileById(TEMPLATE_DOC_ID);
const targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
// 3. Créer la copie et la renommer
const newFileName = 'Contrat - ' + nomComplet;
const newDoc = templateDoc.makeCopy(newFileName, targetFolder); // Copie + Rangement
// 4. Remplacer les variables dans le nouveau document
const docBody = DocumentApp.openById(newDoc.getId()).getBody();
docBody.replaceText('{{Nom Complet}}', nomComplet);
docBody.replaceText('{{Poste}}', poste);
docBody.replaceText('{{Manager}}', manager);
docBody.replaceText('{{Date d\'arrivée}}', dateArrivee);
// Ajoutez autant de replaceText que de variables
// 5. Mettre à jour le statut dans le Sheet
const statusCell = sheet.getRange(editedRow, statusColumn);
statusCell.setValue('Contrat Généré');
Logger.log('Contrat généré pour ' + nomComplet); // Pour le débogage
}
Parfois, on veut un bouton pour lancer une action manuellement.
Ajoutez ce code en plus de votre fonction onEdit (dans le même fichier Code.gs).
/**
* Se lance à l'ouverture du document.
* Crée un menu personnalisé dans l'interface du Sheet.
*/
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('🤖 Outils RH')
.addItem('Générer le contrat (Ligne sélectionnée)', 'genererContratManuellement')
.addToUi();
}
/**
* Fonction manuelle pour générer le contrat de la ligne active.
*/
function genererContratManuellement() {
// Récupérez les IDs du début du script (vous pouvez les redéfinir ici ou les rendre globales)
// const TEMPLATE_DOC_ID = '...';
// const TARGET_FOLDER_ID = '...';
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getActiveRange(); // La cellule sélectionnée par l'utilisateur
const editedRow = range.getRow();
// 1. Lire les données
const data = sheet.getRange(editedRow, 1, 1, 5).getValues()[0];
const nomComplet = data[0];
const poste = data[1];
const manager = data[2];
const dateArrivee = new Date(data[3]).toLocaleDateString('fr-FR');
// 2. Accéder aux dossiers et au modèle
const templateDoc = DriveApp.getFileById(TEMPLATE_DOC_ID); // Assurez-vous que cette variable est accessible
const targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID); // Assurez-vous que cette variable est accessible
// 3. Créer la copie et la renommer
const newFileName = 'Contrat - ' + nomComplet;
const newDoc = templateDoc.makeCopy(newFileName, targetFolder);
// 4. Remplacer les variables
const docBody = DocumentApp.openById(newDoc.getId()).getBody();
docBody.replaceText('{{Nom Complet}}', nomComplet);
docBody.replaceText('{{Poste}}', poste);
docBody.replaceText('{{Manager}}', manager);
docBody.replaceText('{{Date d\'arrivée}}', dateArrivee);
// 5. Mettre à jour le statut
sheet.getRange(editedRow, 6).setValue('Contrat Généré (Manuel)');
// 6. Alerte de confirmation
SpreadApp.getUi().alert('Contrat pour ' + nomComplet + ' a été généré avec succès !');
}
Résultat : Enregistrez et rechargez votre Google Sheet. Un nouveau menu "🤖 Outils RH" apparaît en haut !
Ce que vous venez de faire n'est que le début. Voici ce qui devient possible :
Logique : Un déclencheur sur Google Drive (quand un fichier est ajouté) qui lit le PDF et écrit dans un Sheet.
Logique : Un déclencheur sur Google Forms (quand un formulaire est soumis) qui crée un dossier Drive pour l'inscrit et envoie un mail de bienvenue via Gmail.
Logique : Comme notre simulation. Un statut "Terminé" dans un Sheet déclenche la création d'un PDF depuis un modèle et l'envoie par Gmail.
Logique : Un déclencheur temporel (tous les jours à 18h) qui scanne un Sheet. Si un élève décroche, le script envoie un mail au tuteur et crée un événement dans son Google Calendar.
Logique : Un bouton qui, pour chaque élève d'un Sheet, va chercher tous ses documents dans un dossier Drive, les copie et les assemble dans un "Dossier Final" partagé au jury.
Vous l'avez vu : le code est complexe, mais la demande est simple.
Votre valeur ajoutée n'est plus de savoir écrire function onEdit(e). Votre valeur ajoutée est de pouvoir imaginer un processus comme "Quand le statut passe à 'Prêt', prends ce modèle, remplace ce texte, et range-le ici."
L'IA est un traducteur ultra-rapide entre votre besoin métier et le langage machine. Votre seule limite est désormais la clarté de votre pensée.