Besoin d'aide pour modifier les données dans googlesheet

oui je lis les données déjà existantes et aprés je veux les modifier.
J'ai déjà le script qui fonctionne pour écrire (envoyer) et lire les données
voilà le script :

if (e.parameter.func == "WriteReadReport") { 
    var nom = e.parameter.nom ;
    var date = e.parameter.date ;
    var repas = e.parameter.repas ;
    var change = e.parameter.change ;
    var sieste = e.parameter.sieste ;
    var soins = e.parameter.soins ;
    var photo1 = e.parameter.photo1;
    var photo2 = e.parameter.photo2;
    var transmission = e.parameter.transmission ;
    sh.appendRow([nom,date,repas,change,sieste,soins,photo1,photo2,transmission]);
    SpreadsheetApp.flush();
    var ref = [   ];
  var rg = sh.getDataRange().getValues();
  for (var i=0;i<rg.length;i++) {
    if (rg[i][0] == nom) {
      ref.push(rg[i][0]);
      ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
      ref.push(rg[i][2]);
      ref.push(rg[i][3]);
      ref.push(rg[i][4]);
      ref.push(rg[i][5]);
      ref.push(rg[i][6]);
      ref.push(rg[i][7]);
      ref.push(rg[i][8]);
    }
  }
  return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON);
  }


j'ai le script seulement pour lire les données aussi : 

if (e.parameter.func == "Read"){
     
  SpreadsheetApp.flush();
    var ref = [   ];
  var rg = sh.getDataRange().getValues();
  for (var i=0;i<rg.length;i++) {
    if (rg[i][0] == nom) {
      ref.push(rg[i][0]);
      ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
      ref.push(rg[i][2]);
      ref.push(rg[i][3]);
      ref.push(rg[i][4]);
      ref.push(rg[i][5]);
      ref.push(rg[i][6]);
      ref.push(rg[i][7]);
      ref.push(rg[i][8]);
    }
  }
  return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON);  
}

donc j'utilise la fonction Read pour obtenir les données et je voudrais les modifier avec la fonction WriteReadReport

Given that it has already taken over 20 posts in this topic, and make very little progress, I decided it was going to be easier to provide you with an example:

Sheet Data:

image

Blocks:

Script:

function doGet(e) {
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SH);
  var rows = sh.getDataRange().getValues();


  if (e.parameter.func == 'Modifier') {
    var rowid;
    var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.index == rows[i][0] ) {
        rowid = (i);
      }
    }
    sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
  }
  return ContentService.createTextOutput("Data in row " + rowid + " modified"); 
}

App Screenshot (with data to change):

image

After Modify button is pressed:

image

image

Notes:

  1. Because I have a header row (titles) on my spreadsheet, and we have a +1 in the data setting line, we have to change the rowid in the script to rowid = (i);

Merci ,
Par contre je peux utiliser un nom (comme dans mon exemple) à la place d'un numéro dans la première colonne ?

Capture1

Yes you can. Make sure that the values in column A are unique.

ok, normalement ce sera unique car il y aura un seul nom unique lors de l'enregistrement sinon on ne pourra pas s'enregistrer.

voilà ce que je veux faire :
Le bouton2 me sert à lire les données que je veux modifier,
Le bouton22 me sert déjà à écrire et envoyer les données dans la sheet ainsi qu'à lire quand je suis sur un autre écran jusque là tout fonctionne, mais je voudrais modifier les données avec ce même bouton22 et ça ne fonctionne pas les données ne sont pas modifiées ,(elles sont ajoutés dans la sheet). Pouvez vous m'aider, est ce possible d'écrire/envoyer/lire et modifier avec le bouton22 ?
Voilà mes blocs :

et mon script complet :

function doGet(e) {
 
  var ss = SpreadsheetApp.openById('1BSUDHn08h6YlrtgfeoQEVhjdvNp3rGPxZiTVq9r-bSY');
  var sheet = ss.getSheetByName("Sheet1"); 
  var sh = ss.getSheetByName("Sheet2"); 
  var nom = e.parameter.nom ; 
  var motdepasse = e.parameter.motdepasse ;
  var msg;


  if ( e.parameter.func == "register" ) { 
    sheet.appendRow([nom,motdepasse]);
    return ContentService.createTextOutput("Nouveau compte"); 
  } 
  
  else if ( e.parameter.func == "testLogin" ) {
    var msg = "Information incorrecte";
    var loginData = sheet.getDataRange().getValues();
    for ( var i = 0; i < loginData.length; i++ ) {
      if ( nom == loginData[i][0]  && motdepasse == loginData[i][1] ) {
        msg = "connecté";
    }
  }
    return ContentService.createTextOutput(msg);

    
  }

  else if ( e.parameter.func == "supprimer" ) { 
   var loginData = sheet.getDataRange().getValues();
   for (var i = 0; i < loginData.length; i++ ) {
   if ( nom == loginData[i][0]  && motdepasse == loginData[i][1] ) {
        msg = "compte supprimé";  
        sheet.deleteRow(i+1);
    }
   }
   var reportData = sh.getDataRange().getValues();
   for (var i = 0; i < reportData.length; i++ ) {
     if ( nom == reportData[i][0] ) {
          msg = " compte supprimé";  
          sh.deleteRow(i+1);
     }
   }
   return ContentService.createTextOutput(msg);
    }
  

   if (e.parameter.func == "WriteReadReport") { 
    var nom = e.parameter.nom ;
    var date = e.parameter.date ;
    var repas = e.parameter.repas ;
    var change = e.parameter.change ;
    var sieste = e.parameter.sieste ;
    var soins = e.parameter.soins ;
    var photo1 = e.parameter.photo1;
    var photo2 = e.parameter.photo2;
    var transmission = e.parameter.transmission ;
    sh.appendRow([nom,date,repas,change,sieste,soins,photo1,photo2,transmission]);
    SpreadsheetApp.flush();
    var ref = [];
  var rg = sh.getDataRange().getValues();
  for (var i=0;i<rg.length;i++) {
    if (rg[i][0] == nom) {
      ref.push(rg[i][0]);
      ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
      ref.push(rg[i][2]);
      ref.push(rg[i][3]);
      ref.push(rg[i][4]);
      ref.push(rg[i][5]);
      ref.push(rg[i][6]);
      ref.push(rg[i][7]);
      ref.push(rg[i][8]);
    }
  }

  return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON);

  }

  if (e.parameter.func == "Read"){
     
  SpreadsheetApp.flush();
    var ref = [];
  var rg = sh.getDataRange().getValues();
  for (var i=0;i<rg.length;i++) {
    if (rg[i][0] == nom) {
      ref.push(rg[i][0]);
      ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
      ref.push(rg[i][2]);
      ref.push(rg[i][3]);
      ref.push(rg[i][4]);
      ref.push(rg[i][5]);
      ref.push(rg[i][6]);
      ref.push(rg[i][7]);
      ref.push(rg[i][8]);
    }
  }

  return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON);  
}

 if (e.parameter.func == "Modifier"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SH);
  var rows = sh.getDataRange().getValues();
  var rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
  sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
}
return ContentService.createTextOutput("Les données de " + rowid + " sont modifiées");
}

I recommended you just try to do one thing at a time, then develop on from there.

Did you test the example I provided, did that work for you?

Did you apply just the example I provided in your app, did that work for you?

oui désolé je vais trop vite.
voilà avec votre exemple ,

j'arrive à modifier les données dans la sheet mais j'ai un message d'erreur

Capture5

Le script

if (e.parameter.func == "Modifier"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SH);
  var rows = sh.getDataRange().getValues();
  var rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
  sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
}
return ContentService.createTextOutput("Les données de " + rowid + " sont modifiées");
}

"Les données de " + rowid + " sont modifiées"

You do not need to use the JSONTextDecode block on the responseContent for this, because it is just a string (text/label), not a JSON array.

image

j'ai supprimé le bloc JSONTextDecode et j'ai mis la ResponseContent au label mais j'ai toujours le message d'erreur

Because you are not returning all the data you just posted, the responseContent is a text string, it does not contain the row elements.

You already have these elements, because it is what you sent to the script, so just use what you have to populate your labels.

If you need to return the contents of the row, as proof that the modifications were made, then that will be the next step ?

j'ai fais comme ça mais j'ai toujours le même message

est ce que le problème ne viendrait pas de ça :
"Les données de " + rowid + " sont modifiées"

Look again at my example:

image

is all you need if your reponse = Modifier

If you want to return the values in the row you have just updated, then change your Modifier section of the script to this:

if (e.parameter.func == "Modifier"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SH);
  var rows = sh.getDataRange().getValues();
  var rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
  sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
}
// updates the spreadsheet
SpreadsheetApp.flush();
// gets the row data
var row = sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).getValues();
// returns the row data
return ContentService.createTextOutput(JSON.stringify(row));
}

Then set your blocks in the reponse = Modifier section back to how you had them:

image

j'ai modifié le script et les blocs

j'arrive à modifier les données dans la sheet mais quand je clik sur le bouton pour lire les données que j'ai modifiés j'ai un message d'erreur et je n'arrive pas à lire.

Dans les parenthèse du message d'erreur il y a les données

le script

if (e.parameter.func == "Modifier"){
var ss = SpreadsheetApp.openById(e.parameter.ID);
var sh = ss.getSheetByName(e.parameter.SH);
var rows = sh.getDataRange().getValues();
var rowid;
var data = JSON.parse('[' + e.parameter.DATA + ']');
for (var i=0;i<rows.length;i++) {
if ( e.parameter.nom == rows[i][0] ) {
rowid = (i);
}
}
sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
}
SpreadsheetApp.flush();
var row = sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).getValues();

return ContentService.createTextOutput(JSON.stringify(row));
}

You have a list of lists. Like this should fix that:

ça ne fonctionne pas avec ce bloc.

This does not help, you need to show why it does not work...

Here an example, based upon your responseContent format:

voici ce que j'obtient

C'est vrai, non ?

But you set all the elements to the same label/textbox ???

If that is what you want, then do this: