Script apps google sheet
f
Bonjour,
J'ai crée un script sur google sheet permettant d'alimenter une base de données avec un formulaire. "ajouter des données" "effacer des données" "rechercher des données" & "modifier des données.
Ce script fonctionne très bien sauf un bug que je n'arrive pas à corriger. Sur la fonction modifier des données. Si j'ai indiqué une valeur avec un premier enregistrement et que je veux supprimer cette valeur en utilisant la touche Suppr et que je fais modifier les données celle-ci ne se modifie pas. sauf si initialement il y avait 200 et que je mets 100 alors ça fonctionne.
// Fonction pour soumettre les modifications de données à la feuille de base de données
function majMODIF() {
var myGooglSheet = SpreadsheetApp.getActiveSpreadsheet(); //déclarer une variable et définir avec la feuille google active
var shUserForm = myGooglSheet.getSheetByName("Formulaire"); //déclarer une variable et la définir avec la feuille de calcul du formulaire utilisateur
var datasheet = myGooglSheet.getSheetByName("TVX 2023"); //déclarer une variable et la définir avec la feuille de calcul Base de données
//pour créer l'instance de l'environnement d'interface utilisateur pour utiliser les fonctionnalités de la boîte de message
var ui = SpreadsheetApp.getUi();
// Affiche une boîte de dialogue avec un titre, un message et les boutons "Oui" et "Non". L'utilisateur peut également
//fermez la boîte de dialogue en cliquant sur le bouton de fermeture dans sa barre de titre.
var response = ui.alert("Enregistrement", 'Voulez-Vous Modifier La Ligne ? ', ui.ButtonSet.YES_NO);
// Vérification de la réponse de l'utilisateur et effacement du formulaire si l'utilisateur sélectionne Oui
if (response == ui.Button.NO) {
return;//exit from this function
}
//Validation de l'entrée. Si la validation est vraie, procédez au transfert des données vers la feuille de base de données
if (validateEntryMODIF() == true) {
// paramètres
const ss = SpreadsheetApp.getActiveSpreadsheet();
const [src, dst] = ["Formulaire", "TVX 2023"];
const rng = ['B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'B11', 'B12', 'B13', 'B14', 'B15', 'B16','B17', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D19', 'D21', 'E5', 'E11', 'E15', 'E20', 'F5', 'F11', 'F15', 'F20', 'G5','G11', 'H5','H15','I20','I22','I23']
const col = [1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 25, 28, 29, 30, 34, 35, 36, 44, 45, 46, 47, 48, 49, 51, 52, 53, 61, 66, 67, 6, 18, 21, 24 ,7, 19, 22, 26, 13, 20, 14, 23, 65, 50, 54]
if (rng.length != col.length) { return }
// recherche ligne
const str = ss.getSheetByName(src).getRange(rng[0]).getDisplayValue();
const ids = ss.getSheetByName(dst).getRange(1, col[0], ss.getSheetByName(dst).getLastRow(), 1).getDisplayValues().flat()
let ligne = +ids.indexOf(str) + 1
if (ligne == 0) {
ligne = ss.getSheetByName(dst).getLastRow() + 1
}
// capture des données
const rngSrc = rng.map(e => `'${src}'!${e}`);
const values = Sheets.Spreadsheets.Values.batchGet(ss.getId(), { ranges: rngSrc })
// injection des données
const rngDst = col.map(c => `'${dst}'!${columnToLetter(c)}${ligne}`);
const data = rngDst.map((e, i) => ({ range: e, values: values.valueRanges[i].values }));
Sheets.Spreadsheets.Values.batchUpdate({ data, valueInputOption: "USER_ENTERED" }, ss.getId());
function columnToLetter(column) {
var temp, letter = '';
while (column > 0) {
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
ui.alert(' "Modification De La Ligne ' + shUserForm.getRange("B4").getValues() + ' "');
//Effacer les données du formulaire de saisie de données
shUserForm.getRange("B4:B17").clearContent();
shUserForm.getRange("D4:D16").clearContent();
shUserForm.getRange("D19:D21").clearContent();
shUserForm.getRange("G20:H20").clearContent();
}
}