Vérifier dans un script l'existence d'une feuille nommée

Bonjour,

Je souhaite créer autant d'onglets que d'entrées présentes en colonne A d'un onglet de mon fichier : j'ai un script qui fonctionne.
Le seul défaut actuellement est que je suis amené à ajouter des nouvelles entrées dans cette liste au cours du temps or quand je lance mon script, si j'ai déjà un onglet existent, j'obtiens un message d'erreur.

J'imagine que pour contourner ce problème, il faudrait que je teste si le nouveau nom existe déjà mais je ne sais pas comment je peux procéder.

merci d'avance.

//---FONCTION POUR CREER UN ONGLET PAR CLUB (supprimé par la suite)z
function creationOnglet() {
  const wbk = SpreadsheetApp.getActiveSpreadsheet();
  const shModeleClub = wbk.getSheetByName('Modele');
  const shListePoule = wbk.getSheetByName('liste_poule');
  let shPouleLastRow = shListePoule.getLastRow();
  let liste_club = shListePoule.getRange(2, 1, shPouleLastRow -1, 1).getValues(); //la liste des clubs débute en A3
  console.log(liste_club);  
  let valeurClub = liste_club.filter(String).length+1; 
  console.log(valeurClub);  

  let nouveaunom;
  for (let i=1;i<valeurClub;i++){
    if (shModeleClub !== null) {
      shModeleClub.activate();// make this sheet active
      wbk.duplicateActiveSheet();
  }
    let nom_club = shListePoule.getRange(i+1,1);
    nouveaunom = nom_club.getValue();
    console.log(nom_club.getValue());

    let feuilleRenommer = wbk.getSheetByName('Copie de Modele');
    let feuilleINitiale = wbk.getSheetByName('Modele')

    feuilleRenommer.setName(nouveaunom);
    //Logger.log(shModeleClub.getName());

  }
//Browser.msgBox('Les onglets clubs ont bien été créées !');
}

Bonjour,

C'est possible en vérifiant le retour de la fonction getSheetByName

Elle renvoie null si la feuille spécifiée n'existe pas. CF. l'exemple donné par Google.

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet?hl=fr#getSheetByName(String)

je ne sais pas pourquoi le site bugue complètement avec l'insertion du lien...

+1 @saboh

1 - Il faut mettre dans une variable tous les noms des onglets.

2 - il faut mettre dans une variable toutes les entrées de ta colonne A

3 - il faut boucler sur les entrées de ta colonne A et vérifier si un onglet existe déjà

> si oui : PASS

> si non : on crée l'onglet

Je ne comprends pas trop le lien entre ton énonce et le script partagé, mais voici ci-dessous un script faisant les étapes que j'ai précédemment listées :

function creatSheetsFromList() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // fichier Sheets ouvert

  var sheetNames = ss.getSheets().map(sheet => sheet.getName()); // noms de tous les onglets du fichier

  var listSheet = ss.getSheetByName("Liste Onglets"); // l'onglet où tu as des onglets colonne A
  var ongletValues = listSheet.getRange(1, 1, listSheet.getLastRow()).getValues(); // liste de tes onglets créés ou à créer

  ongletValues.forEach(function(row) { // on itère à travers la liste des onglets
    var ongletName = row[0]; // Nom de l'onglet (colonne A)
    if (ongletName && sheetNames.indexOf(ongletName) === -1) {// Si l'onglet n'existe pas, le créer
      ss.insertSheet(ongletName);
  }});
}

Salut Pierre,

Cela permet d'éviter la création + affectation de la variable sheetNames. Une implémentation pourrait etre, en reprenant ton code :

function creatSheetsFromList() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // fichier Sheets ouvert

  var listSheet = ss.getSheetByName("Liste Onglets"); // l'onglet où tu as des onglets colonne A
  var ongletValues = listSheet.getRange(1, 1, listSheet.getLastRow()).getValues(); // liste de tes onglets créés ou à créer

  ongletValues.forEach(function(row) { // on itère à travers la liste des onglets
    var ongletName = row[0]; // Nom de l'onglet (colonne A)
    if (ss.getSheetByName(ongletName) == null) { // Si l'onglet n'existe pas, le créer
      ss.insertSheet(ongletName);
    }
  });
}

Encore plus simple

Bonjour,

Merci pour le retour. Je me rends compte que mon code initial est vraiment assez brut (je fais avec mes propres moyens) : j'en apprends tous les jours.

Petite question : si j'ai un en-tête dans la colonne A (qui contient la liste des onglets), comment je dois modifier le code pour ne boucler qu'à compter de la ligne 2 ?

Rechercher des sujets similaires à "verifier script existence feuille nommee"