â
TUTO ULTRA PRĂCIS â âPlanning AVâ â Google Agenda (100% gratuit)
0) Ce que tu vas obtenir
Une feuille Planning AV oĂč tu Ă©cris tes tĂąches
Un menu AV Sync dans Google Sheets
Un calendrier Google Agenda qui se remplit automatiquement
Un onglet Dashboard AV avec des chiffres (WOAOUH)
1) Créer le Google Sheet (structure exacte)
A) Onglet 1 : Planning AV
CrĂ©e un Google Sheet, puis renomme lâonglet (en bas) en :
â
Planning AV
Ligne 1 (en-tĂȘtes obligatoires)
| Colonne | Titre exact |
| A | TĂąche |
| B | Client/Projet |
| C | Date |
| D | Heure |
| E | Durée (minutes) |
| F | Lien |
| G | Statut |
| H | EventID |
â ïž Important : respecte les accents et lâordre.
2) Coller le code Apps Script (pas Ă pas)
A) Ouvrir Apps Script
Dans ton Google Sheet :
- Clique sur Extensions
- Clique sur Apps Script
đ Un nouvel onglet sâouvre : âApps Scriptâ.
B) Supprimer lâancien code
- Ă gauche, clique sur Code.gs
- Efface tout ce quâil y a dans lâĂ©diteur (CTRL+A puis Suppr)
C) Coller le code complet ci-dessous
Copie-colle exactement ce code :
/**
* Google Sheets -> Google Calendar Sync (FREE)
* Sheet: "Planning AV"
* Columns:
* A Tùche | B Client/Projet | C Date | D Heure | E Durée (minutes) | F Lien | G Statut | H EventID
*/
const SHEET_NAME = "Planning AV";
const CALENDAR_NAME = "AV - Planning";
const DEFAULT_TIME = "09:00";
const DEFAULT_DURATION = 60;
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("AV Sync")
.addItem("1) Créer/choisir le calendrier", "ensureCalendar")
.addItem("2) Synchroniser vers Google Agenda", "syncToCalendar")
.addToUi();
}
function ensureCalendar() {
const cal = getOrCreateCalendar_();
SpreadsheetApp.getUi().alert(`OK â
Calendrier prĂȘt : ${cal.getName()}`);
}
function syncToCalendar() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName(SHEET_NAME);
if (!sh) throw new Error(`Feuille introuvable : ${SHEET_NAME}`);
const cal = getOrCreateCalendar_();
const lastRow = sh.getLastRow();
if (lastRow < 2) {
SpreadsheetApp.getUi().alert("Aucune ligne Ă synchroniser (Planning AV est vide).");
return;
}
const values = sh.getRange(2, 1, lastRow - 1, 8).getValues(); // A:H
let updated = 0, created = 0, skipped = 0;
values.forEach((row, i) => {
const [task, client, dateVal, timeVal, durMin, link, status, eventId] = row;
const rowIndex = i + 2;
// Ignorer si tĂąche/date manquante
if (!task || !dateVal) {
skipped++;
return;
}
// Ignorer si Statut = Fait / Terminé
const statusTxt = String(status || "").toLowerCase();
if (statusTxt === "fait" || statusTxt === "terminé" || statusTxt === "termine") {
skipped++;
return;
}
const start = toDateTime_(dateVal, (timeVal ? formatTime_(timeVal) : DEFAULT_TIME));
const duration = Number(durMin) || DEFAULT_DURATION;
const end = new Date(start.getTime() + duration * 60000);
const title = client ? `AV âą ${client} â ${task}` : `AV âą ${task}`;
const descParts = [];
if (link) descParts.push(`Lien : ${link}`);
if (status) descParts.push(`Statut : ${status}`);
const description = descParts.join("\n");
// Mise Ă jour si EventID existe et valide
if (eventId) {
try {
const ev = cal.getEventById(eventId);
if (ev) {
ev.setTitle(title).setDescription(description).setTime(start, end);
updated++;
return;
}
} catch (e) {
// EventID invalide -> on recrée
}
}
// Création si pas d'EventID
const evNew = cal.createEvent(title, start, end, { description: description });
sh.getRange(rowIndex, 8).setValue(evNew.getId()); // Colonne H = EventID
created++;
});
SpreadsheetApp.getUi().alert(
`Sync terminĂ© â
\nCréés : ${created}\nMis à jour : ${updated}\nIgnorés : ${skipped}`
);
}
function getOrCreateCalendar_() {
const cals = CalendarApp.getCalendarsByName(CALENDAR_NAME);
if (cals && cals.length) return cals[0];
return CalendarApp.createCalendar(CALENDAR_NAME);
}
function toDateTime_(dateInput, timeStr) {
const d = (dateInput instanceof Date) ? dateInput : new Date(dateInput);
const parts = String(timeStr).split(":");
const hh = parseInt(parts[0] || "9", 10);
const mm = parseInt(parts[1] || "0", 10);
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), hh, mm, 0);
}
function formatTime_(timeVal) {
// timeVal peut ĂȘtre un "Date" si l'utilisateur a mis une heure via format d'heure
if (timeVal instanceof Date) {
const hh = String(timeVal.getHours()).padStart(2, "0");
const mm = String(timeVal.getMinutes()).padStart(2, "0");
return `${hh}:${mm}`;
}
// sinon string "09:30"
return String(timeVal);
}
D) Enregistrer
Clique sur lâicĂŽne đŸ Enregistrer (ou CTRL+S)
E) Autoriser lâaccĂšs (une seule fois)
- Clique sur ExĂ©cuter (bouton â¶ïž) une premiĂšre fois sur la fonction onOpen ou ensureCalendar
- Google demande des autorisations :
- âAutoriserâ
- choisir ton compte
- confirmer
â
AprĂšs ça, câest bon.
3) Lancer la synchronisation (le âWOAOUHâ)
A) Recharger le Google Sheet
Ferme/rafraĂźchis la page du Sheet.
B) Nouveau menu
En haut, tu verras un menu :
â
AV Sync
Clique :
- Créer/choisir le calendrier et cliques sur ton compte gmail puis autoriser
- Synchroniser vers Google Agenda
đ Va dans Google Agenda : tu verras le calendrier AV - Planning et tes Ă©vĂ©nements.
4) Créer le Dashboard AV
A) Créer un nouvel onglet
En bas, clique sur + puis renomme lâonglet :
â
Dashboard AV
B) OĂč mettre les chiffres (exemple simple)
Dans Dashboard AV :
- Cellule A1 : Indicateur
- Cellule B1 : Valeur
1) Total tĂąches (hors en-tĂȘtes)
En A2 : Total tĂąches
En B2 (formule avec ; ) :
=NBVAL('Planning AV'!A2:A)
2) Tùches terminées
En A3 : Tùches terminées
En B3 :
=NB.SI('Planning AV'!G2:G;"Terminé")+NB.SI('Planning AV'!G2:G;"Termine")+NB.SI('Planning AV'!G2:G;"Fait")
3) TĂąches Ă faire
En A4 : TĂąches Ă faire
En B4 :
=NB.SI('Planning AV'!G2:G;"Ă faire")+NB.SI('Planning AV'!G2:G;"A faire")
4) Taux dâavancement %
En A5 : Avancement %
En B5 :
=B4/B2
Puis formater B5 en Pourcentage.
Pour formater la cellule B5 en pourcentage dans Google Sheets, suivez ces étapes :
- Sélectionnez la cellule : Cliquez sur la cellule B5.
- Ouvrez le menu Format : Allez dans le menu en haut, cliquez sur Format.
- Choisissez Nombre : Dans le menu déroulant Format, survolez l'option Nombre.
- Sélectionnez Pourcentage : Dans le sous-menu Nombre, cliquez sur Pourcentage.
5) Total minutes planifiées
En A6 : Minutes planifiées
En B6 :
=SOMME('Planning AV'!E2:E)
6) Heures planifiées
En A7 : Heures planifiées
En B7 :
=(B6/60)
â
Voilà ton tableau de bord chiffré.
5) Exercice âpreuveâ (livrable)
- Remplir 5 lignes dans Planning AV
- Lancer AV Sync â Synchroniser
- Ouvrir Google Agenda et vérifier
- Statut : mettre 1 tùche en Terminé
- Regarder Dashboard AV â le chiffre change
đ Livrable :
- capture Planning AV
- capture Google Agenda
- capture Dashboard AV
đ§© PARTIE 1 â PUBLICATION LINKEDIN (OU GROUPE FACEBOOK AV)
đŻ Objectif
Apprendre Ă parler de son travail comme une pro,
đ RĂGLES Ă RESPECTER
- â
Parler comme si câĂ©tait ta mĂ©thode
- â
Mettre en avant la valeur pour un client
- â
Rester simple et claire
đ§ STRUCTURE Ă SUIVRE (SANS TEXTE PRĂ-ĂCRIT)
Ton post doit contenir :
- 1ïžâŁ Une phrase dâaccroche
â quelque chose que ton futur client peut comprendre
- 2ïžâŁ Une explication simple de ta mĂ©thode dâorganisation
â comment tu pilotes ton travail
â sans jargon technique
- 3ïžâŁ Ce que le client gagne avec cette mĂ©thode
(exemples : visibilité, sérénité, clarté, suivi)
- 4ïžâŁ Une phrase de conclusion professionnelle
â QUESTIONS POUR TâAIDER Ă ĂCRIRE
- Quâest-ce que cette mĂ©thode change dans ta façon de travailler ?
- Quâest-ce quâun client verrait diffĂ©remment grĂące Ă ce systĂšme ?
- Pourquoi cette organisation est rassurante pour un client ?
đ RĂ©ponds Ă ces questions avec tes mots, puis transforme-les en post.
đ RĂGLES DE PUBLICATION
- Longueur : 5 Ă 10 lignes maximum
- Ton : professionnel, simple, posé
- Plateforme : LinkedIn ou groupe Facebook AV
âïž LIVRABLE ATTENDU (PARTIE 1)
- 1 post publié
- 1 capture dâĂ©cran de la publication
đŁ PARTIE 2 â MAIL Ă CATHYA (CLIENT Ă CONVAINCRE)
đŻ OBJECTIF
SâentraĂźner Ă :
- expliquer sa méthode à un client
- convaincre sans vendre
- mettre en avant la clartĂ© et lâefficacitĂ©
đ CONTEXTE DE LâEXERCICE
Cathya est une cliente :
- déjà organisée
- qui utilise un autre outil
- qui ne cherche pas un gadget
- mais une méthode fiable et claire
đ RĂGLES Ă RESPECTER
- â Ne pas vendre un outil
- â Ne pas critiquer lâoutil du client
- â Ne pas faire un mail trop long
- â
Parler méthode, pas technique
- â
Parler résultat, pas fonctionnalités
- â
Ătre professionnelle et respectueuse
đ§ STRUCTURE Ă SUIVRE (GUIDE, PAS MODĂLE)
Ton mail doit contenir :
- 1ïžâŁ Une phrase dâintroduction professionnelle
â pourquoi tu Ă©cris
- 2ïžâŁ Une prĂ©sentation simple de ta mĂ©thode dâorganisation
â ce que tu pilotes
â comment tu suis lâavancement
- 3ïžâŁ Ce que le client voit concrĂštement
(exemples : tableau de bord, indicateurs, visibilité)
- 4ïžâŁ Une ouverture
â proposer dâexpliquer
â sans forcer
â QUESTIONS POUR TâAIDER Ă ĂCRIRE
- Si tu Ă©tais cliente, quâest-ce qui te rassurerait ?
- Quâest-ce que ton tableau de bord permet de comprendre rapidement ?
- Pourquoi cette mĂ©thode est plus claire quâun simple Ă©change de messages ?
đ RĂ©ponds Ă ces questions avant dâĂ©crire ton mail.
âïž LIVRABLE ATTENDU (PARTIE 2)
- 1 mail rédigé (envoyé ou non)
- Pas besoin de réponse du client
- Le but est lâargumentation
đ PHRASE VISION BOARD â POSTURE PRO
âJe sais expliquer ma mĂ©thode, montrer ma valeur et convaincre avec clartĂ©.â