Bureautique & Productivité

Google Sheets : collaborer en temps réel sur des données

12 دقائق للقراءة

Partage et niveaux d’accès

Fichier > Partager > Partager avec des personnes et groupes
Niveaux:
  Lecteur          peut voir, pas commenter ni modifier
  Commentateur     peut insérer des commentaires
  Éditeur          peut modifier le contenu et la structure

Liens d'accès:
  Restreint (par défaut): seuls les invités ajoutés voient le fichier
  Toute personne avec le lien (Lecteur/Commentateur/Éditeur)

Bonnes pratiques:
  - Grouper les éditeurs par groupe Google Workspace (groupe-commercial@itsc.sn)
  - Ne jamais mettre un fichier sensible en "Public sur le web"
  - Protéger les feuilles ou plages critiques (Données > Protéger les feuilles)

Collaboration en direct : marqueurs utiles

- Curseurs colorés par utilisateur (visibles en temps réel)
- @mention dans un commentaire envoie une notification email
- Historique: Fichier > Historique des versions > Afficher l'historique
- Nommer une version: "Avant présentation Q2"
- Reconnaissance d'auteur par cellule (cmd/ctrl + Alt + Shift + H)

Fonctions puissantes propres à Sheets

// QUERY — SQL-like sur une plage
=QUERY(Ventes!A1:F10000;
  "SELECT B, SUM(E)
   WHERE C = 'Dakar' AND D > date '2026-01-01'
   GROUP BY B
   ORDER BY SUM(E) DESC
   LABEL SUM(E) 'CA Total'
   FORMAT SUM(E) '#,##0 FCFA'"; 1)
// IMPORTRANGE — relier plusieurs classeurs
=IMPORTRANGE(
  "https://docs.google.com/spreadsheets/d/ABC123.../edit";
  "Ventes!A1:F10000")
// Une fois autorisé, combinable avec QUERY:
=QUERY(IMPORTRANGE("ABC123..."; "Ventes!A:F");
       "SELECT Col2, SUM(Col5) WHERE Col3='Dakar' GROUP BY Col2"; 1)
// IMPORTHTML / IMPORTXML — scrapper une page publique
=IMPORTHTML("https://www.bceao.int/fr/taux-directeur"; "table"; 1)
=IMPORTXML("https://example.sn/sitemap.xml"; "//loc")
// ARRAYFORMULA — étendre une formule sur toute la colonne
=ARRAYFORMULA(SI(ESTVIDE(A2:A); ""; B2:B * 1,18))

// FILTER — filtrage dynamique sans macro
=FILTER(A2:F; C2:C="Dakar"; E2:E>100000)

// UNIQUE + SORT — listes dynamiques
=SORT(UNIQUE(FILTER(A2:A; A2:A<>"")))

GOOGLEFINANCE et GOOGLETRANSLATE

// Taux USD/XOF en temps réel
=GOOGLEFINANCE("CURRENCY:USDXOF")

// Historique 30 jours
=GOOGLEFINANCE("CURRENCY:USDXOF"; "close"; AUJOURDHUI()-30; AUJOURDHUI())

// Traduction automatique d'une colonne
=ARRAYFORMULA(GOOGLETRANSLATE(A2:A; "fr"; "en"))

Mise en forme conditionnelle avec formules

Format > Mise en forme conditionnelle > La formule personnalisée est:

=$E2 > $F2 * 1,1                      // rouge si réel dépasse budget +10%
=ET($B2="Dakar"; $D2<AUJOURDHUI())    // bleu si client Dakar en retard
=NB.SI($A$2:$A$1000; $A2) > 1          // jaune si doublon

Apps Script — automatiser Google Sheets

// Extensions > Apps Script
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('ITSkillsCenter')
    .addItem('Envoyer résumé quotidien', 'envoyerResume')
    .addItem('Marquer factures payées', 'marquerPayees')
    .addToUi();
}

function envoyerResume() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Ventes');
  const data = sheet.getRange('A2:E').getValues().filter(r => r[0]);

  const total = data.reduce((s, r) => s + r[4], 0);
  const parRegion = data.reduce((acc, r) => {
    acc[r[1]] = (acc[r[1]] || 0) + r[4];
    return acc;
  }, {});

  const html = `
    <h2>Résumé du ${new Date().toLocaleDateString('fr-FR')}</h2>
    <p><strong>CA total:</strong> ${total.toLocaleString('fr-FR')} FCFA</p>
    <ul>${Object.entries(parRegion).map(([k,v]) =>
      `<li>${k}: ${v.toLocaleString('fr-FR')} FCFA</li>`).join('')}</ul>
  `;

  MailApp.sendEmail({
    to: 'direction@itsc.sn',
    subject: `[Ventes] Résumé du jour - ${total.toLocaleString('fr-FR')} FCFA`,
    htmlBody: html,
  });
}

Déclencheurs automatiques

// Déclencheur temporel: tous les jours à 18h
function creerTrigger() {
  ScriptApp.newTrigger('envoyerResume')
    .timeBased()
    .everyDays(1)
    .atHour(18)
    .create();
}

// Déclencheur sur modification: valider les données à la saisie
function onEdit(e) {
  if (e.range.getSheet().getName() !== 'Factures') return;
  if (e.range.getColumn() !== 3) return; // colonne Montant

  const montant = e.value;
  if (isNaN(montant) || montant < 0) {
    e.range.setBackground('#fde2e2');
    e.range.setNote('Le montant doit être un nombre positif');
  } else {
    e.range.setBackground(null);
    e.range.clearNote();
  }
}

Appel d’une API externe depuis Apps Script

function enrichirAvecClaudeAPI() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getRange('A2:B10').getValues();

  data.forEach((row, i) => {
    const question = row[0];
    if (!question || row[1]) return;

    const response = UrlFetchApp.fetch('https://api.anthropic.com/v1/messages', {
      method: 'post',
      contentType: 'application/json',
      headers: {
        'x-api-key': PropertiesService.getScriptProperties().getProperty('ANTHROPIC_KEY'),
        'anthropic-version': '2023-06-01',
      },
      payload: JSON.stringify({
        model: 'claude-haiku-4-5',
        max_tokens: 300,
        messages: [{role: 'user', content: question}],
      }),
    });

    const json = JSON.parse(response.getContentText());
    sheet.getRange(i + 2, 2).setValue(json.content[0].text);
    Utilities.sleep(500);
  });
}

Protéger des plages sensibles

function proteger() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Salaires');
  const protection = sheet.protect().setDescription('Accès direction uniquement');
  protection.addEditor('directrice@itsc.sn');
  protection.removeEditors(protection.getEditors());
  protection.setDomainEdit(false);
}

Validation de données

Données > Validation des données > Ajouter une règle:

Région (menu déroulant depuis liste):
  Critère: Liste à partir d'une plage
  Plage: =Config!$A$2:$A$10

Date plausible:
  Critère: La date se situe entre 01/01/2020 et AUJOURDHUI()+365

Email valide:
  Critère: Le texte correspond à l'expression régulière
  Pattern: ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$

Montant positif:
  Critère: La valeur est un nombre
  Entre 0 et 1000000000
  Refuser la saisie si invalide (pas juste un avertissement)

Connecter Sheets à une base SQL via Connected Sheets

Données > Connecteurs de données > BigQuery / Looker / Salesforce
- Requête SQL paramétrée dans la feuille
- Rafraichissement manuel ou planifié
- Tables de milliards de lignes restent côté BigQuery
- L'utilisateur voit une feuille native rapide

Exemple BigQuery:
SELECT region, SUM(ca) AS total
FROM `projet.analytics.ventes_2026`
WHERE date >= @periode_debut
GROUP BY region

Historique des versions + commentaires

Fichier > Historique des versions > Afficher l'historique
Ctrl+Alt+Shift+H        raccourci

Pour chaque modification:
  - Nommer la version (Avant/Après migration, Présentation Q2)
  - Restaurer une version antérieure
  - Voir qui a modifié quoi

Commentaires:
  - Sélectionner cellule > Insertion > Commentaire
  - @nom pour notifier
  - Résoudre une fois traité
  - Recherche de commentaires: bouton cloche en haut à droite

Déploiement en Web App

// Apps Script > Déployer > Nouveau déploiement > Web app
function doGet(e) {
  const sheet = SpreadsheetApp.openById('ID_SHEET').getSheetByName('Prix');
  const produit = e.parameter.produit;
  const prix = sheet.getRange('B2:B1000').getValues().flat();
  const codes = sheet.getRange('A2:A1000').getValues().flat();
  const index = codes.indexOf(produit);
  return ContentService.createTextOutput(JSON.stringify({
    produit,
    prix: index >= 0 ? prix[index] : null,
  })).setMimeType(ContentService.MimeType.JSON);
}

// Accessible via:
// https://script.google.com/macros/s/DEPLOY_ID/exec?produit=FORMATION-EXCEL-N2

Quand préférer Excel à Sheets

Sheets:   collaboration temps réel, < 10 M cellules, partage simple, gratuit
Excel:    modèles > 10 M cellules, Power Query complet, VBA riche, formats rares
Hybride:  Sheets en front user, export Excel mensuel pour comptabilité

Pour ne pas tout construire vous-même

Si vous avez un besoin précis (facture, paie, suivi de stock, base clients) mais ne voulez pas le construire de zéro, nous le faisons.

À partir de 30 000 FCFA

📧 E-mail
💬 WhatsApp

Etape 1 : preparer le fichier source avant de partager

Avant d’inviter quiconque, on stabilise la feuille. Une feuille partagee chaotique, c’est trois reunions de plus par semaine. Pour une equipe distribuee entre Dakar, Abidjan et Lome, la regle est simple : titres figes, format colonnes coherent, plages nommees, validation des donnees deja en place.

# Checklist preparation
1. Renommer le fichier : "Suivi_Ventes_2026Q2"
2. Figer la ligne 1 : Affichage > Figer > 1 ligne
3. Renommer chaque onglet (pas "Feuille1")
4. Verifier les formats de cellule (Date, Devise FCFA)
5. Definir les plages nommees : Donnees > Plages nommees

Un fichier propre transforme la collaboration. Vos collegues ne perdent pas 10 minutes a comprendre ou ils sont, ils saisissent directement.

Etape 2 : partager avec les bons niveaux d’acces

Trois niveaux existent : Lecteur, Commentateur, Editeur. Le piege classique est de tout mettre en Editeur « pour aller vite ». Resultat : quelqu’un ecrase une formule cle un vendredi soir. On reflechit role par role avant de cliquer.

# Mapping role -> acces
Direction       -> Lecteur (consultation KPI)
Comptabilite    -> Editeur (saisie chiffres)
Commerciaux     -> Commentateur (remontees terrain)
Stagiaires      -> Lecteur (formation)
Prestataire ext -> Editeur sur 1 onglet seulement

Le bouton « Partager » en haut a droite ouvre la fenetre. On colle les emails, on choisit le role, on decoche « Notifier » si on prefere envoyer un message Slack a la place. Le partage est instantane.

Etape 3 : restreindre par onglet ou par plage

Sur un fichier multi-equipes, on n’ouvre pas tout a tout le monde. Donnees > Proteger les feuilles et les plages permet de verrouiller un onglet entier ou juste une plage. C’est la cle pour donner acces a la saisie sans risquer une perte de formule.

# Steps protection plage
1. Selectionner la plage (ex : A1:D1 = entetes)
2. Donnees > Proteger les feuilles et les plages
3. + Ajouter une feuille ou une plage
4. Definir les permissions : "Seulement vous" ou liste d'emails
5. Cocher "Afficher un avertissement avant edition"

Une fois en place, toute tentative d’edition par une personne non autorisee declenche un avertissement. Vos formules de calcul de marge restent intouchables.

Etape 4 : suivre les modifications en direct

Google Sheets affiche en haut a droite la liste des collaborateurs en ligne, chacun avec une couleur. Un clic sur un avatar centre la vue sur leur cellule active. Pour suivre un changement specifique, on ouvre Fichier > Historique des versions > Voir l’historique des versions.

# Raccourcis utiles pour suivre
Ctrl+Alt+Maj+H   -> Ouvrir l'historique des versions
Ctrl+Alt+M       -> Inserer un commentaire
Ctrl+Entree      -> Valider sans descendre de cellule
@email           -> Mentionner un collaborateur en commentaire

L’historique remonte jusqu’a 30 jours en granularite fine. Au-dela, Google groupe les versions. On peut nommer une version cle (« Cloture mars 2026 ») pour la retrouver rapidement.

Etape 5 : commentaires et taches assignees

Le commentaire n’est pas qu’une note. En tapant @ suivi de l’email d’un collegue, on cree une mention. En cochant « Attribuer a », on transforme le commentaire en tache. La personne recoit un email avec lien direct vers la cellule concernee.

# Workflow tache via commentaire
1. Clic droit sur la cellule > Commentaire
2. Taper "@aminata@boite.sn peux-tu valider ce chiffre ?"
3. Cocher "Attribuer a Aminata"
4. Aminata recoit un email + notification
5. Elle clique "Marquer comme resolu" une fois traite

Cette mecanique remplace 80 % des emails de relance internes. Toutes les decisions restent attachees a la cellule, tracables a vie.

Etape 6 : automatiser avec Apps Script

Pour les actions repetitives (envoyer un mail quand un statut passe a « Livre », ou archiver les lignes anciennes), Apps Script est integre dans Google Sheets. On ouvre Extensions > Apps Script et on ecrit du JavaScript serveur. Aucun deploiement, aucun serveur a maintenir.

function notifierLivraison() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  for (let i = 1; i < data.length; i++) {
    if (data[i][3] === "Livre" && !data[i][4]) {
      MailApp.sendEmail("compta@boite.sn",
        "Livraison " + data[i][0],
        "Commande livree, a facturer.");
      sheet.getRange(i+1, 5).setValue("Notifie");
    }
  }
}

On declenche ensuite ce script via un trigger temporel (toutes les heures) ou sur edition. Le service compta recoit automatiquement la liste des livraisons a facturer, sans qu’on copie-colle.

Etape 7 : synchroniser avec d’autres outils

Google Sheets s’integre nativement avec Looker Studio (ex Data Studio) pour les dashboards, et avec Make ou Zapier pour les automatisations cross-outils. Pour une equipe a Dakar qui utilise WhatsApp Business, on peut declencher l’envoi d’un message a chaque nouvelle ligne via Make.

# Scenario Make typique
Trigger : Google Sheets - New Row
Action 1 : Filter (statut = "A relancer")
Action 2 : WhatsApp Business - Send Template Message
Action 3 : Google Sheets - Update Cell ("Notifie" = TRUE)

Le scenario tourne sans intervention. Le commercial recoit la notification WhatsApp, agit, et la feuille reflete l’action. Cycle ferme.

Etape 8 : sauvegarder et exporter regulierement

Meme si Google sauvegarde tout en continu, on conserve une copie hors-ligne hebdomadaire. Fichier > Telecharger > Microsoft Excel (.xlsx) genere une copie locale. Pour une equipe a Lome ou la connexion peut couper, on garde aussi une copie sur Drive prive ou OneDrive.

# Routine sauvegarde hebdo
Vendredi 18h :
1. Fichier > Telecharger > .xlsx
2. Renommer : Suivi_Ventes_2026-S18.xlsx
3. Deposer dans Drive > Backups > 2026
4. Verifier l'ouverture sous Excel
5. Conserver 12 mois minimum (cycle fiscal)

Cette routine prend 3 minutes mais sauve l’entreprise le jour ou un collaborateur supprime un onglet par erreur au-dela des 30 jours d’historique.

FAQ

Combien de personnes simultanement sur un Sheet ?

Officiellement 100 editeurs simultanes, en pratique au-dela de 20 actifs en ecriture, on observe des conflits de cellule. Pour 50+ utilisateurs, mieux vaut basculer sur AppSheet ou une vraie base de donnees.

Peut-on travailler hors-ligne ?

Oui via l’extension Chrome « Google Documents hors connexion ». On active le mode hors-ligne par fichier. Les modifications se synchronisent au retour de la connexion. Decouvrez aussi notre guide sur l’IA pour le SEO pour gagner du temps sur la production de contenu.

Bonus : eviter les pieges de la collaboration temps reel

Apres deux ans de pratique avec des equipes reparties entre Dakar, Abidjan et Lome, certains pieges reviennent en boucle. Les eviter coute peu, les subir coute des heures de re-saisie. On finit avec une checklist defensive a coller en haut de chaque fichier partage.

# Pieges les plus frequents
1. Tout le monde Editeur -> protegez au moins les entetes
2. Aucune plage nommee -> les formules cassent au moindre tri
3. Pas de Documentation onglet -> personne ne sait quoi saisir
4. Tri sur une colonne sans figer -> melange tous les enregistrements
5. Suppression sans confirmation -> activez l'historique nomme

Avec ces 5 reflexes en place, un fichier Sheets multi-utilisateurs tient des annees sans corruption. La collaboration devient un actif, pas une source de stress.

En complement, etablissez une convention de nommage pour les onglets de chaque trimestre fiscal (Q1, Q2, Q3, Q4) afin de preserver l’historique sans alourdir le fichier principal.

En complement, etablissez une convention de nommage stable pour les onglets de chaque trimestre fiscal (Q1, Q2, Q3, Q4) afin de preserver l’historique chronologique sans alourdir le fichier principal et sans casser les formules de consolidation annuelle automatiques.

مشاركة