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

je n'est pas encore modifié mes blocs , c'était juste pour savoir si le script était correct pour continuer

You appear to have left out the setting and parsing of "data"

var data = JSON.parse('[' + e.parameter.DATA + ']');

oui j'avais oublié, merci.

j'ai essayé de placer les blocs mais ça ne fonctionne pas.
J'ai mis le contenu de la réponse dans le label "modifprenom11" et je retrouve toutes les données dans le label alors que que je veux que chaque donnée soit dans leur label pour pouvoir les modifier par la suite, et quand j'enlève le label je n'est plu de données, pouvez vous m'aider à corriger les blocs.

Does func=Modifier or func=Edit in your script ?

oui voilà func=Modifier

else if (e.parameter.func == "Modifier"){
rng = sh.getDataRange().getValues()
var rowid;
var data = JSON.parse('[' + e.parameter.DATA + ']');
for (var i=0;i<rng.length;i++) {
if ( e.parameter.nom == rng[i][0] ) {
rowid = (i+1);
sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
}
}
}

voilà func=writeReadReport

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);
}

OK, you are sending data in the wrong way. This needs to be in a list / json array.

I do actually show how it is done here:

but it is perhaps not obvious what is happening.

I can provide you with an example, but it will have to be tomorrow.

Here is how it should be:

image

j'ai modifié les blocs comme votre exemple mais c'est pareil j'ai toutes les données dans le même label ! est ce qu'il faut que je modifie le bloc web1 que j'ai mis plus haut (au niveau des traits bleu) ? je suis perdu

Your words do not explain or show where your problem lies.

Relevant blocks ?
Output from script (responseContent) ?
Changes, if any, to the google sheet / target rrecord ?

If you do not show what is happening / which part is not working, it is difficult to help.

ah oui désolé, avant de montrer mes blocs j'ai une question , est ce que on peut écrire (qui envoie les données dans la sheet)/lire et modifier les données avec le même bouton ?

Do you want to read the existing data before modifying it, or after modifying it.

In any case, I suggest you just do one thing at a time, get that one thing working, then expand on what you want to do. You already have script that reads the data.

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