web-dev-qa-db-fra.com

Comment puis-je créer des données sur un tri automatique Google Sheets?

Supposons que je souhaite que Google Sheets trie automatiquement certaines données, par exemple la colonne C.

Comment je fais ça?

Je sais que je peux trier les données manuellement en cliquant avec le bouton droit de la souris et en sélectionnant Trier les données, mais ce n'est pas ce que je recherche.

57
Diego Petrucci

Vous pouvez utiliser la fonction sort() pour cela, mais vous devez avoir vos données à un endroit et une copie automatiquement triée de ces données à un autre endroit.

Par exemple, disons que j'ai Sheet1 avec mes données:

   | A    | B    | C
=====================
 1 | This | this | 2
 2 | Is   | is   | 1
 3 | Test | test | 3

Ensuite, dans Sheet2, cellule A1, je mettrais cette fonction:

= trier (Sheet1! A: C, 3, TRUE)

Cela afficherait mes données, mais triées par colonne C (la troisième colonne), par ordre croissant.

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3
51
William Jackson

Il est également possible d’utiliser Scripts Google Apps pour réaliser un tri automatique sur place des données.

Cela peut être plus difficile à réaliser et plus sujet aux erreurs (je choisirais toujours la solution de William Jackson, +1 BTW), mais j’ai pensé que c’était assez intéressant à montrer.

J'ai une feuille qui ressemble à ceci:

auto-sorting sheet

J'ai ajouté un nouveau script, en utilisant ces étapes:

  • dans le menu, allez à Outils -> Editeur de script ...
  • select Crée un nouveau projet
  • dans la fenêtre de code vide qui apparaît, collez le code suivant, qui sera exécuté automatiquement chaque fois qu'une cellule est modifiée:

    function onEdit(event){
      var sheet = event.source.getActiveSheet();
      var editedCell = sheet.getActiveCell();
    
      var columnToSortBy = 4;
      var tableRange = "B3:E9";
    
      if(editedCell.getColumn() == columnToSortBy){   
        var range = sheet.getRange(tableRange);
        range.sort( { column : columnToSortBy } );
      }
    }
    
  • retournez à la feuille et commencez à jouer avec les valeurs pour voir le tableau se trier automatiquement à chaque fois

Remarque:

Dans le script ci-dessus,

  • la valeur 4 représente l'index de la colonne D (la colonne Value - celle qui va être triée)
  • la valeur "B3:E9" représente la plage de la table (à l'exclusion de la ligne d'en-tête)

Votre table sera probablement différente de la mienne, ces valeurs doivent donc être ajustées en conséquence.

41
Cristian Lupascu

Voici un script générique qui trie automatiquement en fonction de la 1ère colonne et suppose une ligne d'en-tête.

Pour créer un script:

  • Dans le menu, allez dans Outils -> Script Editor ...

Dans la fenêtre de code vide, collez le code suivant, qui s'exécutera automatiquement chaque fois qu'une cellule est modifiée:

 // LinkBack to this script:
 // http://webapps.stackexchange.com/questions/7211/how-can-i-make-some-data-on-a-google-spreadsheet-auto-sorting/43036#43036

 /**
 * Automatically sorts the 1st column (not the header row) Ascending.
 */
function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "A2:T99"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}
10
geekzspot

Une autre option sans script est:

=QUERY(A1:C3,"SELECT * ORDER BY C")  

La plage est restreinte (A1: C3) car les entrées vierges apparaissent en premier lieu dans l'ordre croissant.

6
pnuts

Google Sheets a Filtres pour cette raison même et ne vous oblige pas à créer une nouvelle feuille dans votre document.

Documentation: https://support.google.com/docs/answer/3540681

0
Jay

Utilisation de la solution de script, mais tri sur plusieurs colonnes

Je voulais trier par colonne du menu déroulant puis par date.

Pour ce faire, modifiez la ligne "range.sort" de l'un des fragments de code de Cristian ou de geekspotz, comme suit:

// Sorts descending by edited column, then ascending by column 1 
// Note the use of an array
range.sort([{column: columnToSortBy, ascending: false}, {column: 1, ascending: true}]);

La différence consiste à ajouter les crochets droits autour de votre déclaration entière (tableau) et à séparer les tris par des virgules.

Modification du code de tri extraite de la réponse du débordement de pile de Serge ici : Tri automatique sur feuilles

0
deepstructure