[Google Sheets] Naviguer entre onglets

Bonjour,

Sur une idée originale de GilbertRGI, voici un programme permettant de naviguer entre les onglets plus facilement qu'en se déplaçant avec les triangles en bas à droite ou la liste des onglets en menu déroulant en bas à gauche.

En effet, avec Google Sheets, la multiplication des onglets est moins problématique qu'avec excel dans la mesure où les formules permettent de regrouper facilement les données. Il arrive alors assez souvent que l'ensemble des onglets ne soit pas visible d'un seul coup d'oeil.

1- partie menu

function onOpen(e) {
  SpreadsheetApp.getUi()
    .createMenu('Δ Parcourir les feuilles Δ')
    .addItem('Ouvrir le fenêtre ...', 'naviguer')
    .addToUi();
}

function naviguer(){
  var ui = SpreadsheetApp.getUi();
  var html = HtmlService
    .createTemplateFromFile("index")
    .evaluate();
  html.setTitle("Navigation entre onglets :");
  ui.showSidebar(html);
} 

il est néanmoins recommandé de mettre un déclencheur sur la fonction naviguer à l'ouverture du fichier, le menu n'étant là qu'en cas de fermeture de la fenêtre latérale.

2- transmission des données

function listeFeuilles() {
  var out = new Array()
  var f = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for (var i=0 ; i<f.length ; i++) out.push( [ f[i].getName() ] )
  return out 
}

en cas d'ajout ou de suppression il sera utile de fermer la fenêtre latérale et la rouvrir pour prendre en compte les nouveaux paramètres

3- la page index.html

<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
  <style>body{margin:12px;}</style>
</head>

<body>

  <? var data = listeFeuilles(); ?>
  <form>
    <? for (var i = 0; i < data.length; i++) { ?>
    <input type="radio" name="onglet" onclick="selectionner()" value="<?= data[i] ?>"><?= data[i] ?><br>
    <? } ?>
  </form>

  <div class="sidebar bottom">
    <span class="gray">Mikhail Staliyevich 2021</span>
  </div>

  <script>
    function selectionner() {
      var x = (document.forms.length)-1;
      var onglet = document.forms[x];
      for (var i = 0; i < onglet.length; i++) {
        if (onglet[i].checked) {var txt = onglet[i].value}
      }
      google.script.run.choixFeuille(txt)
    };
  </script>

</body>
</html>

et notamment le renvoi du choix effectué

google.script.run.choixFeuille(txt)

4- l'affichage de la page

function choixFeuille(txt){
  try {
    var valide = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(txt).activate();
    txt ="";
  }
  catch(err) {
    var valide = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    Browser.msgBox('Erreur ' + err + ' !');
   }
};

avec une gestion d'erreur en cas de suppression d'une feuille ou de changement de nom

Top!

Moi qui ai l'habitude de travailler avec un onglet par semaine, un listing latéral est fort appréciable!

Je vais dupliquer tes codes sur pas mal de mes fichiers!

Question. Il y a moyen que Δ Parcourir les feuilles Δ apparaisse en gras dans la barre de menu?

À essayer :

.createMenu('<b>Δ Parcourir les feuilles Δ</b>')

Non malheureusement ca affiche <b> dans le menu justement ^^

Et

createMenu(<b>'Δ Parcourir les feuilles Δ'</b>)

pose un problème de script

En effet... J'ai cherché, je n'ai pas trouvé

Comme c'est dans le menu de gsheet, je pense qu'on n'a aucun moyen de paramétrer la police.

En effet, ce n'est pas du html.

Le fichier est ici en téléchargement https://www.sheets-pratique.com/fr/telechargements/utilitaires/naviguer-entre-feuilles-sheets-no566

J'ai ajouté un rappel des couleurs d'onglet.

Qu'appelles tu

Mettre un déclencheur à l'ouverture sur la fonction "naviguer"

C'est pour éviter à avoir besoin de cliquer sur Δ Parcourir les feuilles Δ dans le menu et que le sommaire s'affiche à droite dès que l'on ouvre le fichier?

Oui c'est juste une question de confort mais ce n'est pas indispensable

Par ailleurs, si tu modifies le nom d'un onglet, que tu en supprimes et/ou en rajoutes, il faut fermer la fenêtre latérale et relancer dans ce cas par le menu.

Comment crées-tu un déclencheur à l'ouverture?

Je me suis crée par exemple un bouton que j'ai associé à la macro mais je n'ai pas trouvé comment activer à l'ouverture le menu latéral

trigger

Génial le tuto vidéo

Je ne connaissais pas cette fonction de déclencheur de macro à l'ouverture. Très pratique!

merci

Testé, validé et dupliqué sur beaucoup de mes fichiers!

Une macro indispensable!

Juste une petite question : le formulaire latéral est assez gros. sur un petit écran ça prend une bonne partie du tableur.

Comme j'utilise des noms d'onglets petits (S01 - S02 - etc), le formulaire est beaucoup trop gros par rapport à mon besoin.

Il y a moyen d'ajuster la taille dans le script ou c'est une largeur qui est figée?

J'ai aussi un écran de 10 pouces, alors oui cela prend un peu de place.

On pourra tenter la boite de dialogue non bloquante https://www.sheets-pratique.com/fr/codes/sidebar

edit : - proposition testée mais échec ... -

au lieu de

function naviguer(){
  var ui = SpreadsheetApp.getUi();
  var html = HtmlService
    .createTemplateFromFile("index")
    .evaluate();
  html.setTitle("Navigation entre onglets :");
  ui.showSidebar(html);
}

mais pas réussi pour le moment dans le transfert des noms d'onglets ... je vais poursuivre !

Impossible d'ajuster la largeur ...

In Google Docs and Forms, sidebars now ignore the setWidth() method; they cannot be changed from the default width of 300px. This change was applied to the new version of Sheets in the previous week's release.

Je m'en doutais un peu. Merci pour la recherche

Rechercher des sujets similaires à "google sheets naviguer entre onglets"