Google Script_ Appel d'une fonction dans un onEdit

Bonjour à tous,

Je suis débutant dans Google Sheet et je m'aide de ce forum pour développer des automatismes sur mes feuilles.

Je suis actuellement coincé sur un appel de fonction à l'intérieur de mon onEdit et je ne sais pas si cela peut se faire ...

La première partie du code, reset ma page si une cellule est cochée en colonne 18.

La seconde partie du code, lance la validation de l'envoi de l'e-mail si une case est coché en colonne 1.

C'est à la troisième partie que je devrais déclencher la fonction sendmail qui est en lien avec fonction envoyerEmail + fonction tableHTML.

Mais impossible de trouver comment faire ...

Je vous remercie pour votre aide

function onEdit(event){
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (feuille.getName()=='Planning'){

    // 1ere partie

    // Je vérifie les boutons de la colonne 18
    if (cellule.getColumn()==18 && cellule.getValue()){
    // Si l'un d'eux est selectionné alors je pose la question
  const choix = Browser.msgBox('Reset planning', 'Etes-vous sûr ? // Weet je het zeker ?', Browser.Buttons.YES_NO);
  if (choix == 'yes') {
    // si on me confirme alors je reset la page
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRangeList(['B6:B7', 'C15:D18', 'C29:D32', 'C43:D46', 'C57:D60', 'C71:D74', 'E6:Q74']).activate()
  .clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('D1').activate();
  }
     // Je reset la cellule avant de mettre fin à la macro
      cellule.setValue(false)
    }

     // 2 eme partie

    // Je vérifie les boutons de la colonne 1
    if (cellule.getColumn()==1 && cellule.getValue()){ 
    // Si l'un d'eux est selectionné alors je pose la question
      const choix = Browser.msgBox('Stuur/envoi planning', 'Etes-vous sûr ? // Weet je het zeker ?', Browser.Buttons.YES_NO);
  if (choix == 'yes') {
    // si on me confirme alors j'envoi le mail

     // 3 eme partie (ici je dois incopérer la fonction sendmail + fonction envoyerEmail + fonction tableHTML)
    '
      Browser.msgBox('E-mail verzonden / envoyé')
      cellule.setValue(false)
 sendmail() //
    }
  }
}
}

function sendmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning')
  var A = Utilities.formatDate(ss.getRange('B6').getValue(),"GMT", "dd/MM");
  var B = Utilities.formatDate(ss.getRange('B62').getValue(),"GMT", "dd/MM/yy");
  var data = ss.getRange('A2:R75');
  envoyerEmail('**********@gmail.com','Sib_Openingen Planning ouvertures_' + A + '->' + B ,tableHTML(data)) // 
}
function envoyerEmail(email,objet,texte) {
  MailApp.sendEmail({to:email,
  subject: objet, 
  htmlBody: texte})
};
function tableHTML(range){
  var data      = range.getDisplayValues()
  var size      = range.getFontSizes()
  var style     = range.getFontStyles()
  var weight    = range.getFontWeights()
  var line      = range.getFontLines()
  var bg        = range.getBackgrounds()
  var color     = range.getFontColors()
  var font      = range.getFontFamilies()
  var textalign = range.getHorizontalAlignments()
  var offsetx   = range.getRow()
  var offsety   = range.getColumn()

  var mergedRanges = range.getMergedRanges();
  var flag = Array.from({ length: range.getNumRows() }, () => Array.from({ length: range.getNumColumns() }, () => true));
  var layout = Array.from({ length: range.getNumRows() }, () => Array.from({ length: range.getNumColumns() }, () => ''));
  mergedRanges.forEach((rng,i) => {
    for (x=rng.getRow();x<rng.getRow()+rng.getNumRows();x++){
      for (y=rng.getColumn();y<rng.getColumn()+rng.getNumColumns();y++){
        try{flag[x-offsetx][y-offsety]=false}catch(e){}
      }
    }
    flag[rng.getRow()-offsetx][rng.getColumn()-offsety]=true
    layout[rng.getRow()-offsetx][rng.getColumn()-offsety]=' colspan="'+rng.getNumColumns()+'" rowspan="'+rng.getNumRows()+'" '
  });

  var tableformat = 'cellspacing="2" cellpadding="2" border="1" style="width:100%;border-collapse:collapse;border:1px solid #ccc"';
  var htmltable = '<table ' + tableformat +' >';
  for (row = 0; row<data.length; row++){
    htmltable += '<tr>';
    for (col = 0 ;col<data[row].length; col++){
      if (flag[row][col]){
        if (data[row][col] === '') {
          htmltable += '<td '+layout[row][col]+' style="background-color:' + bg[row][col] + ';">' + ' ' + '</td>';
        } 
        else
          htmltable += '<td '+layout[row][col] + 
          ' style="font-family:' + font[row][col] + 
          '; background-color:' + bg[row][col] + 
          '; color:' + color[row][col] + 
          '; font-style:' + style[row][col] + 
          '; font-weight:' + weight[row][col] + 
          '; text-decoration:' + line[row][col] + 
          '; font-size:' + size[row][col] + 'px' +
          '; text-align:' + textalign[row][col] + ';">' + 
          data[row][col].replace(/(\r\n|\n|\r)/gm,"<br>") + '</td>';
        }
      }
    htmltable += '</tr>';
  }
  htmltable += '</table>';
  return htmltable
}

Bonjour,

Vous avez un message d'erreur ? Le mail s'envoie-t-il ?

Bonjour Pierrelepinay,

Non, bizarrement, je n'ai aucun message d'erreur et le mail ne s'envoie pas...

J'ai donc trouvé une alternative temporaire en dissociant les deux codes et je passe par un déclencheur "formulaire" pour l'envoi de l'email.

Je redirige donc les utilisateurs vers un formulaire à question unique et la macro "sendmail" s'exécute sans problème.

J'aimerais quand même l'intégrer en code unique pour simplifier l'utilisation.

Bonjour PierreLepinay,

Je pense avoir trouvé la solution, les utilisateurs de la sheet ne sont pas connectés via un compte google et donc je pense que les messagebox's bloquaient l'enchainement.

Je le met donc ci-dessous si cela peut servir à quelqu'un.

Un grand merci pour le temps que vous m'avez consacré.

Double déclencheur onEdit :

function onEdit(event){ 
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (feuille.getName()=='Planning'){
    //
    if (cellule.getColumn()==18 && cellule.getValue()){
    raz()
      cellule.setValue(false)
    }
    //
    if (cellule.getColumn()==1 && cellule.getValue()){
      mail()
      confirmation()
      cellule.setValue(false)
    }
  }
}

Mail :

function mail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Planning')
  var A = Utilities.formatDate(ss.getRange('B6').getValue(),"GMT", "dd/MM");
  var B = Utilities.formatDate(ss.getRange('B62').getValue(),"GMT", "dd/MM/yy");
  var spreadsheet = SpreadsheetApp.getActive();

  var data = ss.getRange('A2:R75');
 envoyerEmail('*******@gmail.com',''les CC,'le titre_' + A + '->' + B + '_Manualsend',tableHTML(data)) // 

}
function envoyerEmail(email,cop,objet,texte) {
  MailApp.sendEmail({to:email,cc:cop,
  subject: objet, 
  htmlBody: texte})
};
function tableHTML(range){
  var data      = range.getDisplayValues()
  var size      = range.getFontSizes()
  var style     = range.getFontStyles()
  var weight    = range.getFontWeights()
  var line      = range.getFontLines()
  var bg        = range.getBackgrounds()
  var color     = range.getFontColors()
  var font      = range.getFontFamilies()
  var textalign = range.getHorizontalAlignments()
  var offsetx   = range.getRow()
  var offsety   = range.getColumn()

  var mergedRanges = range.getMergedRanges();
  var flag = Array.from({ length: range.getNumRows() }, () => Array.from({ length: range.getNumColumns() }, () => true));
  var layout = Array.from({ length: range.getNumRows() }, () => Array.from({ length: range.getNumColumns() }, () => ''));
  mergedRanges.forEach((rng,i) => {
    for (x=rng.getRow();x<rng.getRow()+rng.getNumRows();x++){
      for (y=rng.getColumn();y<rng.getColumn()+rng.getNumColumns();y++){
        try{flag[x-offsetx][y-offsety]=false}catch(e){}
      }
    }
    flag[rng.getRow()-offsetx][rng.getColumn()-offsety]=true
    layout[rng.getRow()-offsetx][rng.getColumn()-offsety]=' colspan="'+rng.getNumColumns()+'" rowspan="'+rng.getNumRows()+'" '
  });

  var tableformat = 'cellspacing="2" cellpadding="2" border="1" style="width:100%;border-collapse:collapse;border:1px solid #ccc"';
  var htmltable = '<table ' + tableformat +' >';
  for (row = 0; row<data.length; row++){
    htmltable += '<tr>';
    for (col = 0 ;col<data[row].length; col++){
      if (flag[row][col]){
        if (data[row][col] === '') {
          htmltable += '<td '+layout[row][col]+' style="background-color:' + bg[row][col] + ';">' + ' ' + '</td>';
        } 
        else
          htmltable += '<td '+layout[row][col] + 
          ' style="font-family:' + font[row][col] + 
          '; background-color:' + bg[row][col] + 
          '; color:' + color[row][col] + 
          '; font-style:' + style[row][col] + 
          '; font-weight:' + weight[row][col] + 
          '; text-decoration:' + line[row][col] + 
          '; font-size:' + size[row][col] + 'px' +
          '; text-align:' + textalign[row][col] + ';">' + 
          data[row][col].replace(/(\r\n|\n|\r)/gm,"<br>") + '</td>';
        }
      }
    htmltable += '</tr>';
  }
  htmltable += '</table>';
  return htmltable
}
Rechercher des sujets similaires à "google script appel fonction onedit"