Script nouvelle feuille automatique

Bonjour,

J'ai un fichier dans lequel j'ai sur une feuille('Liste'), une liste de nom/prénom dans la colonne A.

Un feuille('original') que je souhaiterai dupliquer et renommer du nom de chaque nouvelle entrée sur la page 'liste'.

Je souhaiterai aussi nommer la nouvelle feuille en A1 du nom et prénom de la nouvelle entrée.

Je pourrais bien entendu le faire à la main, mais le fichier est destiné à être partagé avec plein de monde et j'aimerai que le plus possible d'actions soient automatisées pour m'éviter à devoir intervenir sans arrêt et éviter de donner la main à tout le monde au risque d'avoir des erreurs.

Ci-joint un lien vers un document pour que vous puissiez vous repérer :

https://docs.google.com/spreadsheets/d/1BkVWoySezQnxGo6-YZ1nB1xNggrlXMVjkQ3REYDE5CA/edit?usp=sharing

J'espère avoir été clair dans ma recherche et vous remercie par avance.

Bonne soirée,

Victor

Bonjour,

je suis un peu perdu car je trouve une feuille A, une Z, des feuilles numérotées, un feuille data, mais ni de feuilles 'original', ni "Liste"

Bonjour,

En effet, désolé j'ai fait des test hier soir et je n'ai pas remis le fichier en ordre.

Le voilà de nouveau correct.

Merci pour votre temps

https://docs.google.com/spreadsheets/d/1sMaVEFTqm0Xp7ZAHRVaDsqnQF93TxpTf-KbqlQ-OamM/copy

function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  if(sheet.getName()=='Liste' && editedCell.getColumn() == 1){   
    nouvelleFeuille(editedCell.getValue())
  }
}

function nouvelleFeuille(nom) {
  var document = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = document.getSheetByName("Original");
  var f2 = document.getSheetByName(nom);
  if (f2 != null) {
    document.deleteSheet(f2);
  }
  f2 = document.insertSheet();
  f2.setName(nom);
  var plage = f1.getRange("A1:Z2");
  plage.copyTo(f2.getRange("A1"), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  f2.getRange('A1').setValue(nom);
};

Pour l'appliquer à ton classeur,

Outils > Editeur de script

et tu recopies le script ci-dessus

Ensuite, il faudra donner les autorisations à google, tu peux faire exécuter onEdit, cela te demandera les autorisations ... il faut aller sans hésiter sur "avancé" 2 fois. La fonction te donnera une erreur mais ce n'est pas grave. Fais ensuite un test en ajoutant un nom en colonne A.

Merci, tout marche nickel.

Il va falloir que j'apprenne à gérer tout ça. C'est très intéressant !

Des endroits pour apprendre?

Autres petite question,

le fichier que je veux utiliser comporte des colonnes cachés.

Quand le script est exécuté les colonnes apparaissent, y-a-t'il moyen de modifier ça?

Merci d'avance

Pour apprendre ... https://www.sheets-pratique.com/ (Sébastien a fait un travail colossal)

Quelles colonnes souhaites-tu masquer ?

Ajoute

f2.hideColumns(depuis n°, jusque n+ de colonne);

Merci,

Ci-joint le vrai document.

https://docs.google.com/spreadsheets/d/19CL0x2LzHehxjiqrQnxwVrdZegEvDv_fVFLzDur81Nk/edit?usp=sharing

Un questionnaire envoie des données en 'Data', à remplir tout les jours par les athlètes.

Une liste d'Athlète dans 'Liste' avec les liens vers leur questionnaire

Une page à créer par nageur (copie de original)

une page groupe qui regroupe les valeurs du jour (ou des derniers jours)

J'arrive à cacher certaine colonnes, mais pas toutes celles que je souhaite (à partir de W jusqu'a AA et AV jusqu'a BV je n'y arrive pas)

et pas moyen de cacher une ligne (la 2)

function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  if(sheet.getName()=='Liste' && editedCell.getColumn() == 3){   
    nouvelleFeuille(editedCell.getValue())
  }
}

function nouvelleFeuille(nom) {
  var document = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = document.getSheetByName("Original");
  var f2 = document.getSheetByName(nom);
  if (f2 != null) {
    document.deleteSheet(f2);
  }
  f2 = document.insertSheet();
  f2.setName(nom);
  var plage = f1.getRange("A1:CU304");
  plage.copyTo(f2.getRange("A1"), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  f2.getRange('A1').setValue(nom);
  f2.hideColumns(4,5);
  f2.hideColumns(13,5);
  f2.hideColumns(23,5);
  f2.hideColumns(48,27);
  f2.hideRows(2,1);
};

En faite, je ne peux pas masquer de colonne à partir de la 'AA'.

Plus globalement il y a toute la mise en page de la feuille qu'il faudrait réussir à garder, figer les colonnes, figer les lignes... => C'est bon ça j'ai trouvé.

Il me reste plus qu'a masquer la colonne 'AA' et les colonnes de 'AV' à 'BV'

et rajouter les graphiques.

Je pensais que le fait de dupliquer la feuille allait suffire à tout reprendre

Pour le masquage au-delà de AA, c'est logique : une nouvelle feuille n'est créée qu'avec 26 colonnes au départ. Et comme avec GSheets, le script s'exécute schématiquement sur le serveur sans interaction avec la feuille (c'est très simplifié), le script ne trouve pas les colonnes en question.

Il faut donc juste actualiser la feuille pour lui faire reconnaître les nouvelles colonnes créées par

  SpreadsheetApp.flush(); // permet une mise à jour de la feuille

que tu ajoutes avant de masquer et figer les lignes et colonnes.

Super merci pour l'astuce, ce sera bon à savoir.

Pour les graphiques tu as une idée pour les conserver?

je pense qu'il faut les recréer, car une seule copie ne changerait pas l'origine des données qui serait la feuille d'origine !

Donc les recréer pour chaque nouvelle feuille?

Pourtant quand je duplique manuellement la feuille, les tableau en font bien partie.

Si pas de solutions, je créerai une feuille à part avec les graphiques

Est-ce que, si tu dupliques manuellement, la source (données) des graphiques est celle de la nouvelle page créée ?

Oui, cela ils sont bien en fonction de la nouvelle page

ok, je regarderai ...

Merci, c'est sympa.

Tu as déjà fait beaucoup, donc te prend pas trop la tête non plus, je vais contourner le problème en rajoutant une page de graphique à aller chercher dans les différentes pages

je ne comprends pas, il n'y a pas de graphique dans l'onglet 'Original' !

edit : je viens de voir ton commentaire, on s'est croisé ! c'est justement ce que j'allais proposer, il suffit de mettre un menu déroulant et utiliser INDIRECT

N'oublie pas de clore ce fil de discussion en cliquant sur

Rechercher des sujets similaires à "script nouvelle feuille automatique"