Script copier-coller qui ne colle pas toutes les valeurs

Bonjour,

J'ai un script pour copier-coller des valeurs mais il ne copie pas la valeur issue d'une formule:

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

  if (sheet.getRange("Q17").isChecked() === true) {
    var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  s.getRange('F14').setFormula('= IF (O12 = 0; ""; IF (AND (L4 = 0; O4 = 0; L5 = 0); CONCATENATE ("Inventaire effectué le "; TEXT (DATE (YEAR (TODAY ()); MONTH (TODAY ()); DAY (TODAY ())); "dd mmmm yyy"); " recettes automates du jour non intégrées"); CONCATENATE ("Inventaire effectué le "; TEXT (DATE ( YEAR (TODAY ()); MONTH (TODAY ()); DAY (TODAY ())); "dd mmmm yyy"); " recettes du jour intégrées")))');

    coller ()

  }  
}

function coller() {
  var p = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
 p.getRange('F5:J14').copyTo(p.getRange('F16'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  var range = SpreadsheetApp.getActiveSpreadsheet().getRange("R19");
   range.setValue("OK, valeurs copiées");
  var range = SpreadsheetApp.getActive().getRange('Q17');
  range.uncheck()
  var range = SpreadsheetApp.getActiveSpreadsheet().getRange("F14");
   range.setValue("");
}

Le résultat en F14 de la formule

= IF (O12 = 0; ""; IF (AND (L4 = 0; O4 = 0; L5 = 0); CONCATENATE ("Inventaire effectué le "; TEXT (DATE (YEAR (TODAY ()); MONTH (TODAY ()); DAY (TODAY ())); "dd mmmm yyy"); " recettes automates du jour non intégrées"); CONCATENATE ("Inventaire effectué le "; TEXT (DATE ( YEAR (TODAY ()); MONTH (TODAY ()); DAY (TODAY ())); "dd mmmm yyy"); " recettes du jour intégrées")))

n'est pas collé en F25, rien n'est collé, ni la formule, ni le résultat.

Je suis plus que débutant en script et là, je n'ai plus d'idée !!!

https://docs.google.com/spreadsheets/d/1_2m2azh1FEhNgm4X8S5tY_UwOQHDA8K38Ye1YpbSZB4/edit?usp=sharing

Bonjour,

compte-tenu que tu mets des données dans une cellule avant de la reprendre pour la copier, il faut que tu actualises ta feuille par un flush()

    SpreadsheetApp.flush();
    coller ();

Bonjour,

J’ai apporté quelques modifications à ton code.

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

  if (sheet.getRange("Q17").isChecked() === true) {
  sheet.getRange('F14').setFormula('= IF (O12 = 0; ""; IF (AND (L4 = 0; O4 = 0; L5 = 0); CONCATENATE ("Inventaire effectué le "; TEXT (DATE (YEAR (TODAY ()); MONTH (TODAY ()); DAY (TODAY ())); "dd mmmm yyy"); " recettes automates du jour non intégrées"); CONCATENATE ("Inventaire effectué le "; TEXT (DATE ( YEAR (TODAY ()); MONTH (TODAY ()); DAY (TODAY ())); "dd mmmm yyy"); " recettes du jour intégrées")))');
    SpreadsheetApp.flush();
    coller ();

  }  
}

function coller() {
  var p = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
 var data = p.getRange('F5:J14').copyTo();
p.getRange('F16').setValues(data);
  var range = SpreadsheetApp.getActiveSpreadsheet().getRange("R19");
   range.setValue("OK, valeurs copiées");
  var range1 = SpreadsheetApp.getActive().getRange('Q17');
  range1.uncheck()
  var range2 = SpreadsheetApp.getActiveSpreadsheet().getRange("F14");
   range2.setValue("");
}

A toi d’essayer.

Pourrais-tu expliquer ce que doit le app script normalement.

Ou peut-être joindre un fichier à ton message.

ok, mais à part la redondance

var s = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

qu'est-ce que cela apporte ?

je préfère ceci

p.getRange('F5:J14').copyTo(p.getRange('F16'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

mais le lus important à mes yeux, c'est le mélange entre scripts et fonctions natives à l'intérieur d'un script qui oblige à un flush(), il eut été plus sain de créer une variable et la mettre tout de suite à sa destination finale au lieu de la mettre d'abord en F14 puis de la recopier en valeur et effacer la cellule F14, on aurait éviter pas mal d'instructions ... genre

  var p = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  var d = 'Inventaire effectué le ' + Utilities.formatDate(new Date(), "GMT+1", "dd MMM yyyy") + ' recettes du jour intégrées'
  p.getRange('F27').setValue(d)

Bonjour,

L'actualisation avec le flush() fonctionne parfaitement.

1er script, ce qui explique peut-être le manque de cohérence.....j'ai simplifié, supprimé les fonctions appelées, la redondance des variables, reste plus que la fonction onEdit.

Merci pour votre aide

Rechercher des sujets similaires à "script copier coller qui colle pas toutes valeurs"