Comment trier par date de modification

Bonjour, je souhaite triez automatiquement des colonnes de valeurs de manières a ce que elles soient trié en fonction de la date de modification.

exemple : j'ai 3 cellules complété et lorsque je vais remplir ou modifier la 4eme elle va remonter en 1ere position dans la colonne et les autres vont se décaler vers le bas.

J'ai vraiment besoin de trouver une solution merci d'avance pour votre aide.

(PS : je suis sur sheets)

Bonjour,

un exemple à adapter (ici : colonne 2, feuille "Final Data")

function onEdit(e) {
  autoSort(e)
}
function autoSort(e) {
  const row = e.range.getRow()
  const column = e.range.getColumn()
  const f = e.source.getActiveSheet()
  if(!(f.getSheetName()=== "Final Data" && column ===2 && row >=2)) return
  var range = f.getRange(2,1,f.getLastRow()-1,f.getLastColumn())
  range.sort({column: 2, ascending: false})
}

Merci pour cette réponse intéressante !

Je dois mettre ce code dans l'app script ?

Si oui il s'exécutera automatiquement en permanence ? dsl je suis vraiment débutant la dedans

Merci encore

Je dois mettre ce code dans l'app script ?

Si oui il s'exécutera automatiquement en permanence ?

réponses : oui et oui

si tu as des soucis pour adapter à ton besoin, mets un lien vers ton fichier après simplification et anonymisation

Waw quelle rapidité !

pas besoin d'anonymiser j'ai recréé une feuille dans l'idée avec des données aléatoire:

https://docs.google.com/spreadsheets/d/1pbdjaye9GpeKfjCysWKxlxTHxC8yvgipvhzp5IOXXkU/edit?usp=sharing

en fait ton fichier ne m'éclaire pas sur ton besoin !

exemple : j'ai 3 cellules complété et lorsque je vais remplir ou modifier la 4eme elle va remonter en 1ere position dans la colonne et les autres vont se décaler vers le bas.

où sont les 4 cellules, je pensais naïvement que tu avais 4 colonnes A B C D et que lorsque D était renseigné on triait toute la base de donées en fonction d'une colonne

donc là je ne vois pas du tout ce que tu veux faire

dsl je me suis mal exprimé !

Quand je disais 4 cellules cest 4 lignes de la meme colonne (heures/14) car les lignes serront rempli automatiquement par un google form donc lorsque une nouvelle ligne serra créé ou modifié elle se place en 1er et les autres se décalent vers le bas en gardant l'ordre de modification.

Bon, s'il s'agit à l'origine d'un google form, alors on peut faire ceci

// déclarer le déclencheur
function onFormSubmit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = sheet.getActiveRange().getRow();
  var column = e.values.length + 1;
  var range = sheet.getRange(2, 1, row-1, column);
  range.sort({column: 1, ascending: false});
}

Mais ton fichier ne semble pas être quelque chose qui recueille les données d'un google form !

Non il ne faut pas prendre compte du fait que sa vienne d'un google form car sa passe par d'autres fichiers avant donc j'utilise le données grace a la fonction IMPORTRANGE.

Comme je l'avais dis avant le fichier que j'ai partagé c'est un exemple dans l'idée de mon fichier original.

désolé, je n'ai pas tous les éléments en main pour pouvoir t'aider

tu as besoin de quoi ? on pourrais échanger autre part ce serrai plus simple envoi moi un message sur whatsapp : 07 80 36 23 13

désolé mais ton fichier ne correspond pas à ce que tu demandes

exemple : j'ai 3 cellules complété et lorsque je vais remplir ou modifier la 4eme elle va remonter en 1ere position dans la colonne et les autres vont se décaler vers le bas.

où sont les 3 cellules dans ton fichier ?

où est la 4ème ?

peux-tu me donner un cas avec le résultat attendu dans la seconde feuille par exemple

les 4 cellules sont celle de la colonne "heures/14". L'idée est la suivante : jai ces données la et une nouvelle donnée est importé a la suite et donc elle remonte automatiquement en 1ere place et le reste descend d'1 case.

image image capture

c'est plus clair

quand tu dis en automatique ... comment est-elle apportée à la feuille ?

Alors en gros chaque personne a son formulaire. Chaque formulaire envoi les données dans un sheet. Pour finir les données sont importé depuis ce sheet dans le fichier final (celui dans lequel j'ai le problème de trie) grâce a la fonction IMPORTRANGE.

J'espère être assez clair

ne peut pas être fait en automatique si la valeur n'est pas introduite manuellement

voir menu en haut "M E N U"

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Effectuer une permutation', 'permuter')
    .addToUi();
}
function permuter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sh = ss.getSheetByName('Feuille 1')
  var fin = sh.getLastDataRow('F')
  var valeur = sh.getRange('F'+fin).getValue()
  sh.getRange('F7:F'+fin).setValues(sh.getRange('F6:F'+(fin-1)).getValues())
  sh.getRange('F6').setValue(valeur)
  Browser.msgBox('Valeur de la ligne '+fin+' remontée !')
}
Object.prototype.getLastDataRow = function(col){
  var lastRow = this.getLastRow();
  if (col == null){col='A'}
  var range = this.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }  
};

Il n'y a absolument aucun moyen que ce sois fait en automatique ? car l'idée est de ne pas avoir a aller sur le fichier et juste afficher les valeurs des cellules dans une iframe.

quel est l'événement manuel qui déclenche ces opérations en cascade ?

la seule entré manuelle de laquelle tout découle c'est le remplissage du google form.

ben voilà, on en revient à onformsubmit alors ...

il faudrait essayer

// déclarer le déclencheur
function onFormSubmit(e) {
  permuter()
}
function permuter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sh = ss.getSheetByName('Feuille 1')
  var fin = sh.getLastDataRow('F')
  var valeur = sh.getRange('F'+fin).getValue()
  sh.getRange('F7:F'+fin).setValues(sh.getRange('F6:F'+(fin-1)).getValues())
  sh.getRange('F6').setValue(valeur)
  Browser.msgBox('Valeur de la ligne '+fin+' remontée !')
}
Object.prototype.getLastDataRow = function(col){
  var lastRow = this.getLastRow();
  if (col == null){col='A'}
  var range = this.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }  
};

mais comme je n'ai pas la vision complète du projet, je ne peux pas certifier la solution

Rechercher des sujets similaires à "comment trier date modification"