je ne voulais pas mettre de gestion d'erreur sans trouver la cause
en effet, dans ce cas, la ligne de fin getLastRow() est de 1 et donc on ne peut pas trouver les valeurs ...
j'avais pourtant essayé avec aucune ligne dans commande et cela fonctionnait, mais maintenant je comprends que la présence des cases à cocher sur toute la colonne fait que le getLastRow() comprend aussi les lignes sans rien mais avec cette case à cocher
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem('👉 Archiver commandes', 'archiverCommande')
.addItem('👉 Archiver maintenance', 'archiverMaintenance')
.addToUi();
}
function archiverCommande() {
archiver("Commandes","Historique Commande");
}
function archiverMaintenance() {
archiver("Maintenance","Historique Tâches de Maintenance");
}
function archiver(depuis,vers) {
var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(depuis);
var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(vers);
if (feuille.getLastRow()==1){
SpreadsheetApp.getActive().toast('Aucune donnée !', 'Fin de script 🗃️')
return
}
var data = feuille.getRange(2,1,feuille.getLastRow()-1,feuille.getLastColumn()).getValues()
var archiveData = []
var lignes = []
var ligne = 1
var col = feuille.getLastColumn()-1
try {
data.forEach(function (row) {
ligne++
if (row[col]) {
archiveData.push(row)
lignes.push(ligne)
}
})
archive.getRange(archive.getLastRow() + 1, 1, archiveData.length, archiveData[0].length).setValues(archiveData)
lignes.reverse().forEach(x => feuille.deleteRow(x));
SpreadsheetApp.getActive().toast('Ligne(s) '+lignes.flat()+' archivée(s) !', 'Fin de script 🗃️')
} catch (e) {
SpreadsheetApp.getActive().toast('Rien à archiver !', 'Fin de script 🗃️')
}
}