Fonction on open

Bonjour

toujours dans l 'intérêt d 'améliorer mon script je peaufine

j 'utilise un script comme cité précédemment pour valider une commande a un fournisseur, selon un devis,

le scripte me permet rapidement ( 15 à 20 sec )

incrémenter un onglet commande

récupère les informations de la commande pour les glisser dans une page résumer chrono commande

imprimer la commande en PDF

enregistrer un dossier au nom de la commande et y glisser le pdf et la copier sheet de la commande

Mais je rencontre un nouveau souci

j 'ai crée un menu avec ONOPEN sauf que de n 'importe quel page onglet ont peu réaliser la fonction qui est attribué a la valeur

function onOpen() {
SpreadsheetApp.getUi()
    .createMenu('ACTION SUR COMMANDE')
    .addItem('Envoyer la commande','validerlacommande')
    .addSeparator()
    .addItem('Enregistre la commande','validerlacommandesansenvoismail')
    .addSeparator()
   .addItem('Annuler la commande','annuler')
.addToUi();

ce qui me pause problème

alors je me suis dit ok et si le ON open je le glissais juste au début de la fonction afficher la nouvelle commande ci joint le code donc ca fonctionne j 'ai le menu qui se crée uniquement quand j 'ai cliquer sur la fonction afficher la nouvelle commande

function affichernouvellecommande() {

SpreadsheetApp.getUi()
    .createMenu('ACTION SUR COMMANDE')
    .addItem('Envoyer la commande','validerlacommande')
    .addSeparator()
    .addItem('Enregistre la commande','validerlacommandesansenvoismail')
    .addSeparator()
   .addItem('Annuler la commande','annuler')
.addToUi();

var spreadsheet = SpreadsheetApp.getActive();
var newlignechrono = spreadsheet.getSheetByName('2024')
var pagecommande = spreadsheet.getSheetByName('COMMANDE');
      newlignechrono.insertRowBefore(5)

//code commande 
var codeprecedent = newlignechrono.getRange('B6')
var newcode= pagecommande.getRange('A3')
var newcodechrono = newlignechrono.getRange('B5')

newcode.setValue(codeprecedent.getValue()+ 1);
newcodechrono.setValue(codeprecedent.getValue()+ 1);

const codecommande = newcode.getValue()

  SpreadsheetApp.getActive().getSheetByName('commande').showSheet().activate();

}

mais impossible de le ferme après !!! ce qui veut dire que mon menu est accessible même lorsque je suis sur le chrono de commande

PLUSIEURS SOLUTION MAIS PROBLEME DE CODE

1- faire disparaitre le menu ONOPEN après la validation de la commande !! MAIS COMMENT ??

2 - mettre une fonction IF sur la fonction ON OPEN de manière a ce que la fonction ONOPEN ne sois valable que lorsque la page commande est activé

3 -supprimer le ONOPEN et crée de image cliquable permettant d 'active la fonction dans la page commande, j 'ai tester mais les images sont imprimer car liée a une cellule , donc pas possible a moins de définir la zone d 'impression ce qui n 'est pas possible également j 'ai tenter de crée une copie de la page commande avec et faire une impression mais celui ci m 'imprime la commande précédente !!!

LA 3eme options reste la plus valable sauf que j 'ai ce problème d' impression de la page précédente !!

function validerlacommande (){

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
var nom = spreadsheet.getRange('G4').getValue();
var fournisseur = spreadsheet.getRange('k8').getValue();
var nomdossier = nom+"-"+fournisseur+"-";
var nomFICHIER = nom+"-"+fournisseur+"-";

// DECLARE LA VARIABLE DE ID DOSSIER 
var listedossier = DriveApp.getFolderById(FOLDER_ID);
var pagecommande = spreadsheet.getSheetByName('COMMANDE');
var pageimpre = spreadsheet.getSheetByName('COMMANDE IMPRESSION')
var newlignechrono = spreadsheet.getSheetByName('2024')

// cree de nouveau dossier 
var nouveaudossier = listedossier.createFolder(nomdossier)
var idfichier = nouveaudossier.getId()
var folder = DriveApp.getFoldersByName(idfichier);

//A PARTIR DE LA JE COPIE COLLERles valeur de la page commande sur la page a imprimer 
pagecommande.activate()
spreadsheet.getRange('A3:N41').activate();
spreadsheet.setActiveSheet(pageimpre, true);
spreadsheet.getRange('A3').activate();
spreadsheet.getRange('COMMANDE!A3:N41').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

//function savePDF(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = pageimpre

//URL de SS ?
  var ssUrl = spreadsheet.getUrl();
  var sheetId= sheet.getSheetId();

// Créer l'URL du document
    var url = ssUrl.replace(/\/edit.*$/,'') 

      + '/export?exportformat=pdf&format=pdf'    // export as pdf / csv / xls / xls
      + '&size=A4'  //A3/A4/A5/B4/B5/letter/tabloid/legal/statement/executive/folio
      + '&portrait=false'   //true= Potrait / false= Landscape
      + '&fitw=true' 
      + '&scale=4' //1= Normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page
      + '&top_margin=0.1'
      + '&bottom_margin=0.1'          
      + '&left_margin=0.1'             
      + '&right_margin=0.1' 
      //+ '&printnotes=false'       //true/false
      //+ '&pageorder=1'              //1= Down, then over / 2= Over, then down
      + '&horizontal_alignment=CENTER'  //LEFT/CENTER/RIGHT
      + '&vertical_alignment=middle'      //TOP/MIDDLE/BOTTOM       
      + '&sheetnames=false' //true/false
      + '&printtitle=false' //true/false  
      + '&pagenum=false' //true/false
      + '&gridlines=false'//true/false
      + '&fzc=false'      //true/false
      + '&fzr=false' //true/false
      //+ '&attachment=false'  //true/false 
      + '&gid='
      +sheetId;

  // CRÉER LE PDF A PARTIR DE L'URL
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getAs('application/pdf').setName(nomFICHIER);
  var folder = DriveApp.getFolderById(idfichier);
  var file = folder.createFile(pdf)

UNE IDEE ??

voila le code que 'j ai mis en place avec un IF le menu apparait si la page commande est active

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
var sheet1 = spreadsheet.getSheetByName('COMMANDE');
sheet1.activate()

 const celluleA1 = SpreadsheetApp.getActiveSheet().getSheetName();
 //Logger.log(celluleA1)

if (celluleA1 == 'COMMANDE') {  
  SpreadsheetApp.getUi()
    .createMenu('VALIDE COMMANDE')
    .addItem('envois mail commande','validerlacommande')
  .addToUi();
} 
else {;}

}

mais ne disparait pas après

je ne sais pas comment le faire disparaitre après !!!

personne ?n 'a un sujet similaire , code similaire disparition d 'n menu ONOPEN

MERCI

Bon et bien une nouvelle fois je me suis débrouillé

avec un IF

placer au début de ma fonction en précisant que

si je suis sur l 'onglet je peu faire la fonction

et si je n y suis pas message box "fonction non valable sur cette onglet "

voila je donne pas le code vue que je me fait des MONOLOGUES merci

Bonjour,

Tu es trop impatient ...

Ne pas avoir de réponse moins de 3h après avoir ouvert le sujet est très courant (ici c'est un forum avec des humains bénévoles, pas ChatGPT ).

voila je donne pas le code vue que je me fait des MONOLOGUES merci

Puisque tu choisis de garder ton code pour toi (ce qui ne va pas vraiment dans le sens d'un forum d'échange et de partage), je vais partager à ta place pour les éventuels intéressés :

function exemple() {

  // Test si pas la feuille COMMANDE
  if (SpreadsheetApp.getActiveSheet().getName() != 'COMMANDE') {
    SpreadsheetApp.getUi().alert('Fonction non disponible pour cette feuille');
    return;
  }

  // Reste du code ici
  // ...
}

[Mode gros con on]

Mouai

Bin c est ca que j ai fait franchement trop facile!!!

[Mode gros con off]

Au prochain post a+

Rechercher des sujets similaires à "fonction open"