Re- ...
Si je laisse les formules, et que j'utilise le formulaire, il n'inscrira la donnée qu'à la ligne où il n'y a plus aucune donnée sur mes colonnes F à H (onglet bdd). Je ne suis pas du tout calé en langage HTML pour lui dire de se soustraire de ces colonnes et de copier à la suite tant que les colonnes A à E sont bien vierges.
comment sont données ces formules ? avec arrayformula ? quoique je pense que cela n'a pas d'importance, il y a d'autres moyens que getLastRow() pour trouver la dernière ligne, par exemple, sur la colonne A
function getLastDataRow(sheet) {
var lastRow = sheet.getLastRow();
var range = sheet.getRange("A" + lastRow);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
}
ou bien encore, à condition que les données soient "brèves" car je les joins dans une chaîne de caractères :
function premLigneVide(f) {
var col = 'A';
var valeurs = f.getRange(col + ':' + col).getValues().join().split(",");
var vide = valeurs.indexOf("") + 1; // indexOf commence à 0 et les lignes à 1
return vide;
}
Avant d'utiliser le formulaire je me basais sur des validations de données. Sébastien a bien montré qu'on pouvait en insérer dans le formulaire mais de la même façon je ne connais pas le code html qui le permet.
une solution plus simple est de dédier un onglet à la saisie, dans ce cas, les listes déroulantes, c'est facile
https://docs.google.com/spreadsheets/d/1tU3koMXsQjKwPj2uXNvcTgaPAUHDQ4hRIb9CfptWL0c/edit?usp=sharing
J'ai commencé à "standardiser" le script, il "suffit" de quelques réglages
function onEdit(event) {
var f = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if (f.getName() == 'Saisie'){
var adresses = ["C3","C5","F5","C7","F7","C9","F9","C11","F11","E13"];
var valeurs = adresses.join().split(",");
var item = valeurs.indexOf(r.getA1Notation());
if (item < adresses.length - 1){ // sauf le dernier
f.setActiveSelection(adresses[item + 1]);
}
}
}
function saisir(){
var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = SpreadsheetApp.getActive();
var n = f1.getRange('F13').getValue();
var origine = ["C3","C5","F5","C7","F7","C9","F9","C11","F11","C13"];
if (n == 7) {
var destination = ["A","B","C","D","E","F","H","I","J","G"];
var f2 = doc.getSheetByName('BdD');
var derL = f2.getLastRow() + 1;
f1.getRange('C13').setValue(f2.getRange('G' + (derL - 1)).getValue() + 1);
for (var i = 0; i < origine.length; i++){
f2.getRange(destination[i] + derL).setValue(f1.getRange(origine[i]).getValue());
}
f1.getRangeList(origine).clearContent();
//f1.setActiveSelection(origine[0]);
} else {
Browser.msgBox('Merci de renseigner tous les champs !');
f1.setActiveSelection(origine[0]);
}
}
mais on peut poursuivre avec un formulaire en barre latérale, là il faudra, avec un peu de travail ...
- écrire le formulaire en html
- transférer les listes possibles à partir de la feuille
- puis transférer les donnés introduites vers la feuille