Search code examples
sortinggoogle-apps-scriptgoogle-sheetsrow

Google sheets script to sort rows imported from another tab by column


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

Solution

  • 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();
      }
    };