Script mise à jour formulaire

Bonjour,

J'ai un fichier qui permettait de mettre à jour une base de donnée à partir d'une feuille qui servait de formulaire.
Ce fichier marche parfaitement.

J'en ai fait une copie pour utiliser le fichier dans un autre contexte mais il ne fonctionne plus.

Est-ce que quelqu'un pourrait m'aider? Je ne vois pas d'où peut provenir le problème.

L'idéal serait que je vous donne accès au fichier directement. Comment puis-je faire?

Voici le code actuel

const nomFeuilleBaseDeDonnees = 'Réponses'
const debutDonnees = 1
const rangeID = 'G1'

const doc = SpreadsheetApp.getActiveSpreadsheet();
const bdd = doc.getSheetByName(nomFeuilleBaseDeDonnees)

function onOpen() {
  SpreadsheetApp.getUi().createMenu('↓ MODIFICATION ↓')
    .addItem('👉 Appliquer les modifications', 'saisir')
    .addToUi();
}

function onEdit(e) {
  var f = e.source.getActiveSheet();
  var r = e.source.getActiveRange();
  if (f.getName().substring(0,12) == 'Fiche client' && r.getA1Notation() == rangeID){
    if (r.getValue()>0 && r.getValue()<=(bdd.getLastRow()-debutDonnees+1)){afficher(r.getValue())} 
    else {r.setValue(e.oldValue)}
  }
}

function saisir(){
  var saisie = doc.getActiveSheet()
  var id = saisie.getRange(rangeID).getValue()
  var data = bdd.getRange(id+debutDonnees-1,1,1,bdd.getLastColumn()).getValues()
  var coord = coordXY()
  var myForm = saisie.getDataRange().getValues()
  for (var i =0; i<coord.length;i++){if(coord[i][0]!=-1){data[0][i]=myForm[coord[i][0]][coord[i][1]]}}
  bdd.getRange(id+debutDonnees-1,1,1,bdd.getLastColumn()).setValues(data)
  SpreadsheetApp.getActive().toast('Modification(s) enregistrée(s) !', 'Fin de script 🗃️')
}

function afficher(id){
  var saisie = doc.getActiveSheet()
  var data = bdd.getRange(id+debutDonnees-1,1,1,bdd.getLastColumn()).getValues().flat()
  var coord = coordXY()
  var myForm = saisie.getDataRange().getValues()
  var formules = saisie.getDataRange().getFormulas()
  for (var i =0; i<coord.length;i++){if(coord[i][0]!=-1){myForm[coord[i][0]][coord[i][1]] = data[i]}}
  saisie.getDataRange().setValues(myForm)
  for (var i=0;i<formules.length;i++){
    for (j=0;j<formules[i].length;j++){
      if (formules[i][j]!=''){saisie.getRange(i+1,j+1).setFormula(formules[i][j])}
    }
  }
}

function coordXY(){
  var coord=[]
  var adresses = bdd.getRange('1:1').getValues().flat();
  adresses.forEach(function(ad){ 
    if(ad!='') {coord.push([ ad.match(/\d+/)[0]-1 , letterToColumn(ad.match(/\D+/)[0])-1 ])}
    else {coord.push([-1,-1])}
  })
  return coord
}

function letterToColumn(letter) {
  var column = 0, length = letter.length;
  for (var i = 0; i < length; i++) { column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1) }
  return column;
}

Lorsque je lance le script pour enregistrer la modification de la feuille dans la base de données, j'ai cette erreur qui s'affiche

image

Vous sauriez à quoi ça correpond?

sans voir sur quelle ligne l'erreur s'active ce n'est pas évident.

Pourriez vous donner la ligne en anomalie?

En gros cette erreur se produit lorsque vous essayez d'accéder à une propriété d'une variable qui n'est pas définie

Comment je peux trouver ça? Lorsque je lance l'exécution directement à partir de google script, il n'y a pas d'erreur.

Bonjour,

Dans App script lancez-le, et faites une capture de l'écran du bas avec l'erreur :

screenshot 2023 04 05 08 40 57

C'est bien ce que j'ai fait mais je n'ai aucun message d'erreur à ce niveau là.

Cette erreur apparaît au moment où je lance le script d'enregistrement des modifications directement à partir du fichier

image

Au niveau du script, je n'ai pas de messages.

image
Rechercher des sujets similaires à "script mise jour formulaire"