web-dev-qa-db-fra.com

Existe-t-il une formule Google Sheets pour mettre le nom de la feuille dans une cellule?

L'illustration suivante devrait aider:

 enter image description here

11
orschiro

Vous avez 2 options, et je ne suis pas sûr d’être fan d’eux, mais c’est mon opinion. Vous pouvez vous sentir différemment:

Option 1: Forcer la fonction à s'exécuter.

Une fonction dans une cellule ne s'exécute que si elle fait référence à une cellule modifiée. Changer un nom de feuille ne déclenche aucune fonction dans la feuille de calcul. Mais nous pouvons forcer la fonction à s'exécuter en lui passant une plage et à chaque fois qu'un élément de cette plage change, la fonction se déclenche.

Vous pouvez utiliser le script ci-dessous pour créer une fonction personnalisée qui récupérera le nom:

function mySheetName() {
  var key = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  return key;
}

et dans la cellule, placez ce qui suit:

=mySheetName(A1:Z)

Désormais, si une valeur dans une cellule de la plage transmise change, le script sera exécuté. Cela prend une seconde pour exécuter le script et définit un message dans la cellule chaque fois qu'une valeur est modifiée, ce qui peut devenir très rapidement gênant. Comme cela a déjà été mentionné, il faut également modifier la plage pour le déclencher, ce qui n’est donc pas vraiment utile pour un fichier relativement statique.

Option 2: Utiliser l'événement OnChange

Bien que le temps d'exécution soit meilleur que l'option ci-dessus, et que cela ne dépende pas d'une valeur qui change dans les cellules du tableur, je n'aime pas cela, car cela force où le nom va. Vous pouvez utiliser une feuille Utilitaires pour définir cet emplacement dans différentes feuilles si vous le souhaitez. Vous trouverez ci-dessous une idée de base que vous pouvez utiliser si vous aimez cette option.

L'événement OnChange est déclenché lorsque le nom de la feuille est modifié. Vous pouvez rendre le code ci-dessous plus sophistiqué pour vérifier les erreurs, vérifier que l'ID de feuille ne fonctionne que sur une feuille donnée, etc. Le code de base est toutefois le suivant:

function setSheetName(e) {
  var key = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('K1').setValue(key);
}

Une fois que vous avez enregistré le code, dans l'éditeur de script, définissez le déclencheur de modification du projet actuel sur cette fonction. Il écrira le nom de la feuille dans la cellule K1 lors de tout événement de modification. Pour définir le déclencheur, sélectionnez Les déclencheurs du projet actuel dans le menu Éditer .

7
Karl_S

Voici ce que j'ai trouvé pour Google Sheets:

Pour obtenir le nom actuel de la feuille dans les feuilles Google, le script simple suivant peut vous aider sans entrer le nom manuellement, procédez comme suit:

  1. Cliquez sur Outils> Editeur de script.

  2. Dans la fenêtre de projet ouverte, copiez et collez le code de script ci-dessous dans la fenêtre de code vide, voir la capture d'écran:

............................

function sheetName() {
  return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
}

Enregistrez ensuite la fenêtre de code et revenez à la feuille dont vous souhaitez obtenir le nom, puis entrez la formule suivante: =sheetname() dans une cellule, puis appuyez sur la touche Entrée. Le nom de la feuille s'affichera immédiatement.

Voir ce lien avec des captures d'écran ajoutées: https://www.extendoffice.com/documents/Excel/5222-google-sheets-get-list-of-sheets.html

3
Katya Mutafchieva

J'ai une feuille qui est faite pour être utilisée par d'autres et j'ai assez de références indirectes (), donc je dois gérer de manière formelle un nom d'onglet de feuille modifié.

J'ai utilisé la formule de JohnP2 (ci-dessous) mais je rencontrais des problèmes car elle ne se mettait pas à jour automatiquement lorsqu'un nom de feuille était modifié. Vous devez accéder à la formule actuelle, effectuer un changement arbitraire et actualiser pour l'exécuter à nouveau.

=REGEXREPLACE(CELL("address",'SHEET NAME'!A1),"'?([^']+)'?!.*","$1")

J'ai résolu ce problème en utilisant les informations trouvées dans cette solution sur la façon de forcer une fonction à se rafraîchir. Ce n’est peut-être pas la solution la plus élégante, mais cela a obligé Sheets à faire attention à cette cellule et à la mettre à jour régulièrement, de sorte qu’elle attrape un titre de feuille mis à jour.

=IF(TODAY()=TODAY(), REGEXREPLACE(CELL("address",'SHEET NAME'!A1),"'?([^']+)'?!.*","$1"), "")

À l'aide de cette option, les feuilles peuvent actualiser cette cellule chaque fois que vous apportez une modification, ce qui entraîne la mise à jour de l'adresse chaque fois qu'elle est renommée par un utilisateur.

1
Luke Allpress

Si vous référencez la feuille à partir d'une autre feuille, vous pouvez obtenir le nom de la feuille à l'aide de la fonction CELLULE. Vous pouvez ensuite utiliser regex pour extraire le nom de la feuille.

=REGEXREPLACE(CELL("address",'SHEET NAME'!A1),"'?([^']+)'?!.*","$1")
1
JohnP2

Voici ma proposition pour un script qui renvoie le nom de la feuille à partir de sa position dans la liste des feuilles en paramètre. Si aucun paramètre n'est fourni, le nom de la feuille en cours est renvoyé.

function sheetName(idx) {
  if (!idx)
    return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  else {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var idx = parseInt(idx);
    if (isNaN(idx) || idx < 1 || sheets.length < idx)
      throw "Invalid parameter (it should be a number from 0 to "+sheets.length+")";
    return sheets[idx-1].getName();
  }
}

Vous pouvez ensuite l'utiliser dans une cellule comme n'importe quelle fonction

=sheetName() // display current sheet name
=sheetName(1) // display first sheet name
=sheetName(5) // display 5th sheet name

Comme décrit dans d'autres réponses, vous devez ajouter ce code dans un script avec:

Tools > Script editor
0
Nicolas Janel