L’intelligence artificielle transforme notre façon d’utiliser les tableurs. Sur les communautés d’entraide, en tant qu’expert produit Diamant, je vois très souvent des utilisateurs chercher à connecter Google Sheets à des modèles de langage puissants comme Gemini.
La première approche, souvent la plus intuitive, consiste à créer une fonction personnalisée à taper directement dans sa cellule, exactement comme on le ferait avec une formule classique : =GEMINI(A2). Si cette méthode est séduisante pour réaliser un test rapide, elle montre très vite ses limites en production. Pour des projets sérieux, l’utilisation d’un script Google Apps Script classique, qui écrit « en dur » dans la cellule, est la seule architecture viable.
Voyons pourquoi cette différence est cruciale, et comment mettre en place cette solution avec un code moderne.
Le piège de la fonction personnalisée
Créer une fonction =GEMINI() semble idéal sur le papier, mais cela vous expose à trois problèmes majeurs dès que vous dépassez le stade du simple prototype :
- Le recalcul intempestif : Google Sheets rafraîchit régulièrement le résultat de ses fonctions personnalisées (à l’ouverture du fichier, lors d’un tri, lors d’une modification adjacente). Si vous avez 500 lignes, votre tableur va relancer 500 appels à l’API Gemini sans aucune raison. Cela va épuiser vos quotas de requêtes et figer l’interface.
- Le mur des 30 secondes : Les fonctions de cellules ont une limite de temps d’exécution extrêmement stricte. Si l’IA prend plus de 30 secondes pour analyser un contexte complexe et rédiger sa réponse, la cellule plantera et affichera un frustrant message
#ERROR!. - Le crash de l’API (Erreur 429) : En étirant votre formule sur toute une colonne, Sheets tente d’exécuter la quasi-totalité des requêtes en parallèle. Les serveurs de Google bloqueront immédiatement ce bombardement simultané en renvoyant une erreur « Too Many Requests ».
La solution robuste : l’injection statique par script
La bonne pratique architecturale consiste à séparer la requête de l’affichage. Au lieu de demander à la cellule de se mettre à jour toute seule, nous allons utiliser un script qui va interroger Gemini, récupérer le texte, et l’inscrire définitivement dans la cellule cible via la méthode setValue().
Le résultat devient du texte statique et brut. Il ne se recalculera plus, ne ralentira pas votre fichier, et l’exécution de ce script bénéficiera de la limite de temps très confortable de 6 minutes offerte par l’environnement Apps Script.
Le code en ES6+ (JavaScript moderne)
Voici la fonction de connexion réécrite avec les standards actuels (ES6+) pour une meilleure lisibilité et des performances optimales. Les variables sont déclarées en français pour faciliter la maintenance.
/**
* Interroge l'API Gemini et retourne la réponse sous forme de texte.
* Retrouvez mes autres développements open-source sur mon GitHub (FabriceFx).
*
* @param {string} invite - La consigne (prompt) à envoyer à l'IA.
* @returns {string} Le texte généré par le modèle Gemini.
*/
const interrogerGemini = (invite) => {
const cleApi = 'VOTRE_CLE_API'; // Clé à générer sur aistudio.google.com
const urlApi = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${cleApi}`;
const chargeUtile = {
contents: [{ parts: [{ text: invite }] }]
};
const optionsRequete = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(chargeUtile)
};
const reponseHttp = UrlFetchApp.fetch(urlApi, optionsRequete);
const donneesJson = JSON.parse(reponseHttp.getContentText());
return donneesJson.candidates[0].content.parts[0].text;
};
/**
* Fonction principale à lier à un bouton, un menu personnalisé ou un déclencheur.
*/
const executerTraitementIa = () => {
const feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Récupération de la consigne située en cellule A2
const texteSource = feuille.getRange('A2').getValue();
// Appel à l'IA via notre fonction fléchée
const resultatGenere = interrogerGemini(texteSource);
// Écriture du résultat en dur dans la cellule B2
feuille.getRange('B2').setValue(resultatGenere);
};
Comment aller plus loin dans l’automatisation ?
Ce socle technique ouvre la porte à des traitements massifs. Vous pouvez par exemple encapsuler l’appel à la fonction interrogerGemini à l’intérieur d’une boucle for pour traiter une colonne entière ligne par ligne. Il suffira d’y ajouter une simple pause temporelle via Utilities.sleep(2000) entre chaque itération pour lisser la charge et respecter les limites de l’API.
Pour découvrir d’autres astuces avancées sur l’écosystème Workspace, de l’audit de sécurité ou des scripts d’automatisation, n’hésitez pas à parcourir les autres guides disponibles sur faucheux.bzh ou atelier-informatique.com.