Skip to content

Tout pour WordPress, le développement web — et plus encore

👌 Sélection multiple dans Google Sheets : script pour les cellules avec validation des données

👌 Sélection multiple dans Google Sheets : script pour les cellules avec validation des données

Une liste déroulante dans Google Sheets est une fonctionnalité bien pratique. Configurez une validation de données, et la cellule n’accepte que les valeurs issues d’une plage. Mais il y a un hic: vous ne pouvez sélectionner qu’un seul élément. Que faire si votre tâche nécessite l’étiquette «urgent, budget, design», soit trois valeurs dans une seule cellule? Avec les outils standards, c’est impossible.

En pratique, ce besoin revient constamment: catégoriser des dépenses, étiqueter des tâches, lister des participants. Ouvrir l’éditeur à chaque fois pour ajouter des valeurs séparées par des virgules fait perdre du temps. La solution est un petit script Google Apps Script qui ajoute un panneau latéral avec des cases à cocher pour toute plage de validation de données.

Voici la mise en place pas à pas: de la création du fichier de script jusqu’à un menu «Scripts» prêt à l’emploi dans votre feuille de calcul. Le code a été testé sur des feuilles réelles, fonctionne sans autorisations supplémentaires et ne nécessite aucune connaissance en programmation.

💡 Aperçu rapide:

  • Configurez une validation de données pour une cellule par plage et choisissez d’afficher un avertissement plutôt que de refuser la saisie
  • Créez deux fichiers dans l’éditeur de script: multi-select.gs avec la logique et dialog.html avec l’interface du panneau latéral
  • Enregistrez le projet, actualisez la feuille de calcul et l’entrée de menu Scripts apparaîtra
  • Sélectionnez une cellule avec validation de données, exécutez le script et cochez les valeurs souhaitées
  • Cliquez sur Sélectionner, et la cellule se remplira avec les éléments choisis, séparés par des virgules

Étape 1: Préparer la feuille de calcul et la validation de données

Ouvrez la feuille Google Sheets sur laquelle vous travaillez. Sélectionnez la cellule cible (ou la plage) et configurez la validation de données: Données → Validation des données. Dans le champ «Critères», sélectionnez «Liste à partir d’une plage» et indiquez la liste dans laquelle les options seront puisées.

Point important: n’activez pas «Refuser la saisie», car si vous le faites, le script ne pourra pas écrire plusieurs valeurs séparées par des virgules dans la cellule. Afficher un avertissement est suffisant.

Si vous n’avez pas de plage prête, créez une feuille «Référence» séparée et listez-y toutes les valeurs autorisées dans une colonne. Référencez cette plage dans la validation de données.

Étape 2: Créer le Apps Script

Dans le menu de la feuille de calcul: Extensions → Apps Script. L’éditeur s’ouvre avec un onglet vierge et un fichier vide. Nous allons d’abord créer la partie côté serveur.

Cliquez sur Fichier → Nouveau → Fichier de script. Nommez-le multi-select.gs et collez le code:

1function onOpen(e) {
2 SpreadsheetApp.getUi()
3 .createMenu('Scripts')
4 .addItem('Multi-select for this cell...', 'showDialog')
5 .addToUi();
6}
7
8function showDialog() {
9 var html = HtmlService.createTemplateFromFile('dialog').evaluate();
10 SpreadsheetApp.getUi()
11 .showSidebar(html);
12}
13
14var valid = function() {
15 try {
16 return SpreadsheetApp.getActiveRange()
17 .getDataValidation()
18 .getCriteriaValues()[0]
19 .getValues();
20 } catch(e) {
21 return null;
22 }
23};
24
25function fillCell(e) {
26 var s = [];
27 for (var i in e) {
28 if (i.substr(0, 2) == 'ch') s.push(e[i]);
29 }
30 if (s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
31}

Voici ce qui se passe: onOpen ajoute l’élément «Sélection multiple pour cette cellule…» au menu personnalisé de la feuille de calcul. showDialog ouvre le panneau latéral avec l’interface HTML. La fonction valid extrait la liste des valeurs autorisées depuis la validation de données de la cellule active. Et fillCell collecte les cases cochées et les écrit dans la cellule, séparées par des virgules.

Remarque: i.substr(0, 2) filtre uniquement les paramètres dont le nom commence par ch, ce sont les identifiants des cases à cocher du formulaire HTML. Les autres paramètres sont ignorés.

Cliquez sur Fichier → Enregistrer (ou Ctrl+S). Lors du premier enregistrement, le script demandera des autorisations, c’est normal, sans elles il ne pourra pas lire les données de la cellule ni afficher le panneau latéral.

Étape 3: Ajouter l’interface HTML

Nous allons maintenant créer le panneau latéral lui-même. Dans le même éditeur: Fichier → Nouveau → Fichier HTML. Nommez-le dialog.html et collez:

1<div style="font-family: sans-serif;">
2 <? var data = valid(); ?>
3 <form id="form" name="form">
4 <? if (Object.prototype.toString.call(data) === '[object Array]') { ?>
5 <? for (var i = 0; i < data.length; i++) { ?>
6 <? for (var j = 0; j < data[i].length; j++) { ?>
7 <input type="checkbox"
8 id="ch<?= '' + i + j ?>"
9 name="ch<?= '' + i + j ?>"
10 value="<?= data[i][j] ?>">
11 <?= data[i][j] ?><br>
12 <? } ?>
13 <? } ?>
14 <? } else { ?>
15 <p>This cell has no
16 <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation</a>.
17 </p>
18 <? } ?>
19 <input type="button" value="Select"
20 onclick="google.script.run.fillCell(this.parentNode)" />
21 <input type="button" value="Refresh validation"
22 onclick="google.script.run.showDialog()" />
23 </form>
24</div>

La logique est simple: la balise côté serveur <? var data = valid(); ?> appelle la fonction valid() du fichier GS et obtient un tableau des valeurs autorisées. Si une plage est spécifiée, des cases à cocher sont générées, une par valeur. Le bouton Sélectionner envoie le formulaire à fillCell, le bouton Actualiser la validation relit la validation de données (pratique quand on passe d’une cellule à l’autre).

Si la cellule sélectionnée n’a pas de validation de données, le panneau affichera un message avec un lien vers l’aide Google.

Enregistrez le fichier: Fichier → Enregistrer. Les deux fichiers (multi-select.gs et dialog.html) doivent se trouver dans le même projet.

Étape 4: Exécuter et utiliser

Revenez à la feuille de calcul et actualisez la page. Après quelques secondes, un nouvel élément Scripts apparaîtra dans la barre de menu, c’est le résultat de onOpen.

Voici maintenant le déroulement:

  • Sélectionnez n’importe quelle cellule pour laquelle une validation de données par plage est configurée.
  • Allez dans Scripts → Sélection multiple pour cette cellule….
  • Un panneau latéral s’ouvrira à droite avec une liste de cases à cocher, toutes les valeurs de votre plage de validation.
  • Cochez les éléments souhaités et cliquez sur Sélectionner.
  • La cellule se remplira avec les valeurs sélectionnées, séparées par des virgules: urgent, budget, design.

Vous n’avez pas besoin de fermer le panneau latéral. Cliquez simplement sur une autre cellule (elle aussi avec validation de données) et cliquez sur Actualiser la validation, la liste des cases à cocher se mettra à jour pour la nouvelle cellule.

Barre latérale de script avec cases à cocher pour sélectionner des valeurs

Sur la capture d’écran, le résultat: une cellule avec validation de données, un panneau latéral avec des cases à cocher actives et le menu Scripts dans la barre de menu. C’est exactement à cela que ressemble la solution en action.

Étape 5: Ce qui peut être amélioré

Le script de base résout la tâche «sélectionner plusieurs valeurs dans une liste déroulante», et pour la plupart des scénarios, cela suffit. Mais si vous travaillez intensivement avec la feuille de calcul, voici quelques améliorations possibles:

  • Ajouter «Tout sélectionner» / «Tout désélectionner». Deux boutons dans le formulaire HTML qui cochent ou décochent toutes les cases par programmation. Quelques lignes en JavaScript, et vous économisez une dizaine de clics sur une grande plage.
  • Remplacer la virgule par un autre séparateur. Dans la fonction fillCell, la ligne s.join(', ') joint les valeurs par une virgule. Si vos données contiennent des virgules dans les valeurs, remplacez par ; ou |.
  • Actualisation automatique au changement de cellule. Au lieu de cliquer manuellement sur «Actualiser la validation», vous pouvez attacher un déclencheur à l’événement de sélection de cellule (onSelectionChange), mais cela nécessite un code légèrement plus complexe et l’installation manuelle du déclencheur.

Le code source du script est une adaptation de la solution d’Alexander Ivanov, publiée par Arthur Attwell sur GitHub Gist. Vous y trouverez également les discussions et améliorations de la communauté.

Voici un tutoriel vidéo en anglais, si vous préférez regarder plutôt que lire:

⁉️🤔 Foire aux questions

Le script n’apparaît pas dans le menu après l’enregistrement. Que faire?

Actualisez la page de la feuille de calcul (F5 ou Ctrl+R). Si cela ne suffit pas, vérifiez que la fonction est nommée exactement onOpen (la casse compte), et qu’il n’y a pas d’erreurs dans l’éditeur de script: Affichage → Journaux affichera la trace d’exécution. Parfois, il est utile de fermer l’éditeur de script et de le rouvrir.

Le panneau latéral s’ouvre, mais il n’y a pas de cases à cocher, seulement un message concernant la validation des données.

Cela signifie que la cellule sélectionnée n’a pas de validation de données par plage. Sélectionnez la cellule pour laquelle vous avez configuré la validation à l’étape 1. Si la validation est configurée pour une plage de cellules plutôt qu’une seule, assurez-vous que la cellule active est bien celle qui se trouve dans la plage.

Le script peut-il être utilisé sur plusieurs feuilles dans un même classeur?

Oui. Le script est attaché au conteneur (le classeur), pas à une feuille spécifique. La validation de données fonctionne au niveau de la feuille, configurez-la sur les feuilles nécessaires, et le panneau latéral récupérera les valeurs de la cellule active, quelle que soit la feuille.

Après avoir sélectionné les valeurs, la cellule affiche une erreur «Valeur non valide».

Vous avez activé «Refuser la saisie» dans les paramètres de validation des données. Retournez dans Données → Validation des données, sélectionnez «Afficher un avertissement» au lieu de «Refuser la saisie». Si les données sont critiques, laissez l’avertissement, il ne bloque pas l’écriture par le script.

Le script demande l’accès au compte Google, est-ce sûr?

Oui. Les autorisations sont nécessaires pour SpreadsheetApp.getActiveRange() (lecture des données de la cellule) et SpreadsheetApp.getUi() (affichage du menu et du panneau latéral). Le script fonctionne uniquement à l’intérieur de votre feuille de calcul et n’a pas accès aux autres fichiers de Drive. La liste complète des autorisations est visible dans la fenêtre d’autorisation.

Quel script de sélection multiple installer dans votre feuille de calcul

La solution décrite est un cadre de travail minimal et fonctionnel. Deux fichiers, aucune bibliothèque externe, une logique claire. Pour le suivi des dépenses, l’étiquetage des tâches et tous les scénarios où vous devez écrire plusieurs valeurs d’une liste de référence dans une cellule, c’est plus que suffisant.

Si vous travaillez beaucoup avec Google Sheets, consultez la documentation Apps Script. Les possibilités vont bien au-delà des cases à cocher: envoi automatique d’e-mails lors de la modification d’une cellule, génération de documents à partir de modèles, intégration avec Google Calendar. Commencez par ce script, et qui sait, vous écrirez peut-être vos propres automatisations.