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