I am new to scripting in google sheets and I am trying to add a function in a script to sort a range by column value in ascending order.
I'm using a script that allows me to move rows from one tab to another based on payment status. All imported rows are placed in row 7, just below the header. As a result, the lines are completely messy.
I have tried so many things that I am lost. I don't know if I've tried the wrong function or if I'm placing them in the wrong place in the script.
function onEdit(e) {
var sh = e.source.getActiveSheet();
var rng = e.source.getActiveRange();
if (sh.getName()=='Suivi Clients' && rng.getColumn()==21){
if(rng.getValue()=='OUI' || rng.getValue()=='ANNULÉ'){
var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Clients Finalisé')
dest.insertRowBefore(7)
var plage = sh.getRange('C' + rng.getRow() + ':G' + rng.getRow())
plage.copyTo(dest.getRange("C7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('L' + rng.getRow() + ':N' + rng.getRow())
plage.copyTo(dest.getRange("L7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('P' + rng.getRow())
plage.copyTo(dest.getRange("P7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('U' + rng.getRow() + ':W' + rng.getRow())
plage.copyTo(dest.getRange("U7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
sh.deleteRow(rng.getRow())
}
}
if (sh.getName()=='Clients Finalisé' && rng.getColumn()==21){
if(rng.getValue()=='NON'){
var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Suivi Clients')
dest.insertRowBefore(7)
var plage = sh.getRange('C' + rng.getRow() + ':G' + rng.getRow())
plage.copyTo(dest.getRange("C7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('L' + rng.getRow() + ':N' + rng.getRow())
plage.copyTo(dest.getRange("L7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('P' + rng.getRow())
plage.copyTo(dest.getRange("P7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('U' + rng.getRow() + ':W' + rng.getRow())
plage.copyTo(dest.getRange("U7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
sh.deleteRow(rng.getRow())
}
}
// other onEdit here
}
Dans l'onglet "Suivi Clients" je voudrais trier par colonne G et dans l'onglet "Clients Finalisé" je voudrais trier par colonne P.
That's one of the functions I tried:
function sort() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Suivi Clients");
var range = sheet.getRange("B6:W");
range.sort(7);
}
Try
function sortSC() { // Suivi Clients
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Suivi Clients");
var range = sheet.getRange("B6:W" + (sheet.getLastDataRow(3)));
range.sort({column:7,ascending:true});
}
function sortCF() { // Clients Finalisé
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Clients Finalisé");
var range = sheet.getRange("B6:W" + (sheet.getLastDataRow(3)));
range.sort({column:16,ascending:true});
}
Object.prototype.getLastDataRow = function (col) {
var lastRow = this.getLastRow();
if (col == null) { col = 1 }
var range = this.getRange(lastRow, col);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
};
FYI, complete script
function onEdit(e) {
var sh = e.source.getActiveSheet();
var rng = e.source.getActiveRange();
if (sh.getName() == 'Suivi Clients' && rng.getColumn() == 21) {
if (rng.getValue() == 'OUI' || rng.getValue() == 'ANNULÉ') {
var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Clients Finalisé')
dest.insertRowBefore(7)
var plage = sh.getRange('C' + rng.getRow() + ':G' + rng.getRow())
plage.copyTo(dest.getRange("C7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('L' + rng.getRow() + ':N' + rng.getRow())
plage.copyTo(dest.getRange("L7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('P' + rng.getRow())
plage.copyTo(dest.getRange("P7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('U' + rng.getRow() + ':W' + rng.getRow())
plage.copyTo(dest.getRange("U7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
sh.deleteRow(rng.getRow())
SpreadsheetApp.flush()
sortCF()
}
}
if (sh.getName() == 'Clients Finalisé' && rng.getColumn() == 21) {
if (rng.getValue() == 'NON') {
var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Suivi Clients')
dest.insertRowBefore(7)
var plage = sh.getRange('C' + rng.getRow() + ':G' + rng.getRow())
plage.copyTo(dest.getRange("C7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('L' + rng.getRow() + ':N' + rng.getRow())
plage.copyTo(dest.getRange("L7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('P' + rng.getRow())
plage.copyTo(dest.getRange("P7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var plage = sh.getRange('U' + rng.getRow() + ':W' + rng.getRow())
plage.copyTo(dest.getRange("U7"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
sh.deleteRow(rng.getRow())
SpreadsheetApp.flush()
sortSC()
}
}
if (sh.getName() != 'Suivi Clients') return;
var editRange = {
top: 6,
left: 3,
right: 7
};
var thisRow = e.range.getRow();
if (thisRow < editRange.top || thisRow > editRange.bottom) return;
var thisCol = e.range.getColumn();
if (thisCol < editRange.left || thisCol > editRange.right) return;
removeEmpty()
}
function sortSC() { // Suivi Clients
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Suivi Clients");
var range = sheet.getRange("B6:W" + (sheet.getLastDataRow(3)));
range.sort({ column: 7, ascending: true });
}
function sortCF() { // Clients Finalisé
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Clients Finalisé");
var range = sheet.getRange("B6:W" + (sheet.getLastDataRow(3)));
range.sort({ column: 16, ascending: true });
}
Object.prototype.getLastDataRow = function (col) {
var lastRow = this.getLastRow();
if (col == null) { col = 1 }
var range = this.getRange(lastRow, col);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
};