Comment faire des sélections multiples dans les listes déroulantes de Google Sheets

Video google sheet multiple select dropdown

Les listes déroulantes dans Google Sheets permettent aux utilisateurs de choisir parmi différentes options. Cela offre une vue claire de toutes les options disponibles et garantit également que l’utilisateur sélectionne uniquement les éléments autorisés.

Une liste déroulante permet également de réduire les erreurs, car l’utilisateur peut choisir parmi une liste prédéfinie au lieu de saisir manuellement le contenu de la cellule. Google Sheets nous permet d’utiliser cette fonctionnalité avec facilité. En quelques clics seulement, vous pouvez créer une liste déroulante pour une seule cellule ou remplir toute une ligne ou colonne avec des listes déroulantes.

Cependant, vous remarquerez que la liste déroulante par défaut de Google Sheets ne permet à l’utilisateur de sélectionner qu’un seul élément de la liste.

Il arrive souvent que vous ayez besoin de sélectionner plusieurs options dans une liste déroulante. Par exemple, lorsqu’il y a une collection de couleurs parmi lesquelles choisir, vous pourriez aimer plus d’une couleur. Ou vous pourriez vouloir obtenir une liste des langages de programmation dans lesquels l’utilisateur est compétent.

Dans de tels cas, il est possible que l’utilisateur en connaisse plus d’un et qu’il soit nécessaire de sélectionner plusieurs options dans la liste déroulante.

Malheureusement, cette option n’est pas traditionnellement autorisée dans Google Sheets. Vous n’êtes autorisé qu’à une option à la fois.

La bonne nouvelle est qu’il existe une solution. Il est possible de créer une liste déroulante qui autorise les sélections multiples en utilisant Google AppScript.

Dans cet article, je vais vous montrer comment créer une liste déroulante qui permet les sélections multiples. Mais d’abord, commençons par le début.

Commençons par créer une nouvelle liste déroulante à partir d’une liste d’options de couleur.

Cliquez ici pour obtenir une copie de Google Sheets qui permet les sélections multiples (faites une copie pour l’utiliser).

Autoriser les sélections multiples dans une liste déroulante (avec répétition)

Pour ce tutoriel, j’utiliserai l’ensemble de données suivant et créerai la liste déroulante dans la cellule C1. Notez que cela diffère d’une liste déroulante dépendante. Ici, nous nous concentrons sur la possibilité de permettre à l’utilisateur de choisir plusieurs éléments. Une liste déroulante dépendante change ce qui est affiché en fonction du choix de l’utilisateur.

Prêt à voir comment utiliser la liste déroulante à sélection multiple de Google Sheets ? Voici à quoi ressemble l’ensemble de données actuel.

Dataset et cellule où il doit être ajouté

Pour créer une liste déroulante qui permet les sélections multiples, vous devez faire deux choses :

  1. Créez une liste déroulante à l’aide d’une liste d’éléments
  2. Ajoutez la fonction dans l’éditeur de script de Google Sheets qui permettra les sélections multiples dans la liste déroulante.

Voyons de plus près chacune de ces étapes.

Création de la liste déroulante

Supposons que j’ai un ensemble de données d’éléments comme indiqué ci-dessous et que je souhaite créer une liste déroulante dans la cellule C1.

Dataset et cellule où il doit être ajouté

Voici les étapes à suivre :

  1. Sélectionnez la cellule où vous souhaitez placer la liste déroulante
  2. Accédez à Données > Validation des données
  3. Dans les critères, sélectionnez Liste déroulante (à partir d’une plage), puis sélectionnez la plage qui contient les éléments que vous souhaitez afficher dans la liste déroulante.
  4. Ouvrez les Options avancées et assurez-vous que Afficher un avertissement est sélectionné au lieu de Refuser l’entrée (cela fait partie de l’autorisation de saisie multiple, vous n’avez normalement pas besoin de le faire) Options avancées
  5. Cliquez sur Enregistrer

Votre liste déroulante apparaîtra maintenant dans la cellule désignée (C1 dans cet exemple). Lorsque vous cliquez sur la flèche, vous verrez votre liste d’options.

Remarquez maintenant que vous êtes autorisé à sélectionner une seule option à la fois.

Maintenant, laissez-moi vous montrer comment convertir cette liste déroulante (qui ne permet qu’un seul élément à afficher dans la cellule) en une liste qui permet plusieurs sélections.

Et pour cela, vous devez ajouter le script de fonction dans l’éditeur de scripts de Google Sheets. Vous ne savez pas comment l’utiliser ? J’explique comment utiliser l’éditeur de scripts de Google Sheets de manière plus détaillée. C’est l’étape suivante de mon guide sur la création d’une liste déroulante dans Excel avec plusieurs sélections. Si vous savez déjà comment l’utiliser, passez à l’étape suivante.

Ajout du script Google Apps pour activer les sélections multiples

Voici le code du script que vous devrez copier et coller dans l’éditeur de script. Si vous avez besoin d’aide supplémentaire, je vous donne plus d’explications dans la section ci-dessous (après le code) :

function onEdit(e) {
  var oldValue;
  var newValue;
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var activeCell = ss.getActiveCell();

  if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()=="Sheet1") {
    newValue=e.value;
    oldValue=e.oldValue;

    if(!e.value) {
      activeCell.setValue("");
    }
    else {
      if (!e.oldValue) {
        activeCell.setValue(newValue);
      }
      else {
        activeCell.setValue(oldValue+', '+newValue);
      }
    }
  }
}

Voici les étapes pour ajouter ce code de script dans l’arrière-plan de Google Sheets afin que la liste déroulante que nous avons créée dans la cellule C1 puisse autoriser la sélection de plusieurs options :

  1. Accédez à Extensions > Apps script
  2. Dans la fenêtre Code.gs, supprimez tout ce qui s’y trouve déjà et copiez-collez le code de macro ci-dessus
  3. Code
  4. Cliquez sur le bouton Enregistrer dans la barre d’outils (ou utilisez le raccourci clavier Contrôle + S)
  5. Cliquez sur Exécuter

Revenez maintenant à la feuille de calcul et essayez de sélectionner plusieurs options dans la liste déroulante. Par exemple, sélectionnez d’abord « Apple », puis sélectionnez « Banana ».

Vous remarquerez que cela prend une seconde (parfois deux secondes) et vous affichera ensuite les deux éléments sélectionnés (séparés par une virgule).

Notez également qu’avec ce code, il vous sera possible de sélectionner deux fois le même élément. Par exemple, si vous sélectionnez « Apple » puis sélectionnez à nouveau « Apple », cela l’affichera deux fois dans la cellule.

Si vous souhaitez créer une liste déroulante qui permet des sélections multiples sans répétition, j’ai fourni le code plus loin dans ce tutoriel.

Comment fonctionne le code ?

Essayons de comprendre ce code partie par partie.

Le code commence par la ligne

function onEdit(e)

onEdit() est une fonction spéciale dans Google Sheets. C’est également appelé un gestionnaire d’événements. Cette fonction est déclenchée chaque fois qu’il y a un changement dans votre feuille de calcul.

Nous voulons que notre code de sélection multiple s’exécute chaque fois qu’un élément est sélectionné dans la liste déroulante, il est donc logique de placer notre code dans la fonction onEdit().

Maintenant, AppScript passe cette fonction en tant qu’objet d’événement en argument. En règle générale, l’objet d’événement est appelé e. Cet objet d’événement contient des informations sur l’événement déclenché.

Si vous connaissez les bases d’AppScript, vous trouverez les quatre premières lignes assez faciles à comprendre :

var oldValue;
var newValue;
var ss=SpreadsheetApp.getActiveSpreadsheet();
var activeCell = ss.getActiveCell();

J’ai déclaré deux variables – une (oldValue) qui contiendra l’ancienne valeur de la cellule et une autre (newValue) qui contiendra la nouvelle valeur de la cellule.

La variable activeCell contiendra la cellule actuellement active qui a été éditée.

Maintenant, nous ne voulons pas que le code s’exécute chaque fois qu’une cellule est éditée. Nous voulons seulement qu’il s’exécute lorsque la cellule CA1 de la feuille1 est modifiée. Nous nous assurons donc de cela en utilisant une instruction if :

if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()=="Sheet1")

Le code ci-dessus vérifie le numéro de ligne et de colonne de la cellule active et le nom de la feuille. Comme notre liste déroulante est dans la cellule C1, il vérifie si le numéro de ligne est égal à 1 et si le numéro de colonne est égal à 3.

Seulement lorsque ces trois conditions sont remplies que le code à l’intérieur de l’instruction IF est exécuté.

Voici le code qui est exécuté lorsque nous sommes sur la bonne cellule (C1 dans notre exemple) :

newValue=e.value;
oldValue=e.oldValue;

e.oldValue est également une propriété de l’objet d’événement, e. Cela contient la valeur précédente de la cellule active. Dans notre cas, ce serait la valeur avant que nous fassions la sélection dans la liste déroulante.

Nous voulons attribuer cela à la variable oldValue.

e.value est une propriété de l’objet d’événement, e. Cela contient la valeur actuelle de la cellule active. Nous voulons attribuer cela à la variable newValue.

Tout d’abord, considérons ce qui se passe si aucune option n’est sélectionnée. Dans ce cas, e.value sera indéfini. Lorsque cela se produit, nous ne voulons rien afficher dans la cellule.

Cela sera également le cas si l’utilisateur décide de supprimer toutes les sélections précédentes et de recommencer à zéro.

if(!e.value) {
    activeCell.setValue("");
}

Si l’utilisateur sélectionne une option, les lignes suivantes après l’instruction else seront exécutées. Nous voulons maintenant spécifier ce qu’il faut faire si une option est sélectionnée pour la première fois dans la liste déroulante.

Cela signifie que e.oldValue est indéfini. Lorsque cela se produit, nous voulons que seule l’option sélectionnée (newValue) soit affichée dans la cellule.

if (!e.oldValue) {
    activeCell.setValue(newValue);
}

Enfin, nous spécifions ce qu’il faut faire la prochaine fois qu’une option est sélectionnée. Cela signifie lorsque e.value et e.oldValue contiennent des valeurs spécifiques.

else {
    activeCell.setValue(oldValue+', '+newValue);
}

Une fois que vous avez terminé de taper le code, enregistrez-le, puis essayez de faire plusieurs sélections à partir de votre liste déroulante. Vous trouverez toutes vos options sélectionnées affichées les unes après les autres, séparées par des virgules.

Si vous faites une erreur, vous pouvez toujours effacer la cellule et recommencer. Lorsque cela se produit, nous voulons afficher à la fois les valeurs précédentes et la nouvelle valeur sélectionnée dans la cellule, le tout séparé par des virgules.

Ci-dessous, je vous ai fourni des détails sur la manière dont vous pouvez apporter des modifications à votre code pour vous assurer qu’un élément ne peut être sélectionné qu’une fois, de sorte qu’il n’y ait pas de répétitions.

Autoriser les sélections multiples dans une liste déroulante (sans répétition)

Voici le code qui permettra les sélections multiples dans la liste déroulante sans répétitions.

function onEdit(e) {
  var oldValue;
  var newValue;
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var activeCell = ss.getActiveCell();

  if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()=='Sheet1') {
    newValue=e.value;
    oldValue=e.oldValue;

    if(!e.value) {
      activeCell.setValue("");
    }
    else {
      if (!e.oldValue) {
        activeCell.setValue(newValue);
      }
      else {
        if(oldValue.indexOf(newValue) <0) {
          activeCell.setValue(oldValue+','+newValue);
        }
        else {
          activeCell.setValue(oldValue);
        }
      }
    }
  }
}

Dans le code ci-dessus, j’utilise à nouveau la cellule C1 dans la feuille1 à titre d’exemple. Si votre liste déroulante se trouve dans une cellule différente (ou une feuille), vous devez ajuster le code en conséquence. Par exemple, si vous utilisiez D2, vous changeriez la sixième ligne de code en :

if(activeCell.getColumn() == 4 && activeCell.getRow() == 2 && ss.getActiveSheet().getName()=='Sheet1') {

D2 est la quatrième colonne et la deuxième ligne.

La partie du code ci-dessous nous permet d’ignorer toute valeur répétée dans la liste déroulante :

if(oldValue.indexOf(newValue) <0) {
    activeCell.setValue(oldValue+', '+newValue);
}
else {
    activeCell.setValue(oldValue);
}

La fonction indexof() vérifie si la chaîne dans oldValue contient la chaîne dans newValue.

Si c’est le cas, il retournera l’index de la chaîne dans oldValue. Sinon, il retournera une valeur inférieure à 0.

Si l’option nouvellement sélectionnée existe dans notre liste, nous voulons laisser la liste telle quelle (donc nous remplissons la cellule C1 avec la valeur précédente). Sinon, nous voulons ajouter l’option nouvellement sélectionnée à la liste avec une virgule (‘,’) et l’afficher dans la cellule C1.

Sélection multiple dans la liste déroulante (colonne entière ou plusieurs cellules)

Dans les exemples ci-dessus, je vous ai montré comment obtenir une liste déroulante à sélection multiple pour une seule cellule.

Mais que faire si vous voulez obtenir cela dans une colonne entière ou plusieurs cellules.

Vous pouvez facilement y parvenir avec quelques modifications mineures dans le code.

Si vous souhaitez que la liste déroulante permette de sélectionner plusieurs éléments dans la colonne entière C, vous devez remplacer la ligne de code suivante :

if(activeCell.getColumn() == 3 && activeCell.getRow() == 1 && ss.getActiveSheet().getName()=="Sheet1")

par la ligne de code suivante :

if(activeCell.getColumn() == 3 && ss.getActiveSheet().getName()=="Sheet1")

Lorsque vous faites cela, nous vérifions uniquement si la colonne est égale à 3 ou non. Toutes les cellules qui se trouvent dans Sheet1 et dans la colonne 3 satisferaient à ces critères IF et toutes les listes déroulantes le permettraient.

De même, si vous voulez que cela soit disponible pour toute la colonne C et la colonne F, utilisez la ligne ci-dessous à la place :

if(activeCell.getColumn() == 3 || 6 && ss.getActiveSheet().getName()=="Sheet1")

La ligne ci-dessus utilise une condition OU dans l’instruction IF où elle vérifie si le numéro de colonne est 3 ou 6. Si une cellule contenant la liste déroulante se trouve dans la colonne C ou F, les sélections multiples seront activées.

De même, si vous souhaitez que cela soit activé pour plusieurs cellules, vous pouvez également le faire en modifiant le code.

Voilà comment vous pouvez activer les sélections multiples dans une liste déroulante dans Google Sheets. Bien que cela ne soit pas disponible en tant que fonctionnalité intégrée, vous pouvez facilement le faire avec un peu de magie à l’aide de Google Apps Script.

J’espère que vous avez trouvé ce tutoriel utile !

Envie de devenir un expert en feuilles de calcul ? Suivez l’un de ces cours sur Google Sheets.

Autres tutoriels Google Sheets qui pourraient vous être utiles :

  • Comment appliquer une formule à toute une colonne dans Google Sheets
  • Comment combiner des cellules dans Google Sheets (à l’aide de formules simples)

Articles en lien