Comment inverser l'ordre des lignes sélectionnées?

33

Existe-t-il un moyen simple d’ inverser l’ordre des lignes sélectionnées ? (Ou que diriez-vous de toutes les lignes , si cela est plus facile.)

Plus précisément, dans ce cas, aucune colonne ne peut être utilisée pour trier les éléments dans le bon ordre. Alors, étant donné un tas de lignes dans un ordre arbitraire, est-il possible d'inverser cet ordre?

Par exemple...

entrez la description de l'image ici

... après l'inversion de ces 5 lignes, "Waitrose 756" devrait figurer en premier et "Sans objet" en dernier.

Jonik
la source
"Aucune colonne ne peut être utilisée pour le tri" Pourquoi ne pas simplement ajouter une colonne avec des valeurs croissantes (1, 2, 3, ...), trier par ordre décroissant sur cette colonne, puis la supprimer?
Patrick
Il s'agit d'une requête très courante, car de nombreuses personnes démarrent une feuille de calcul avec une ligne pour chaque entrée, en ajoutant de nouvelles lignes en bas, puis après 100 lignes réalisent qu'elles veulent l'inverser pour ajouter des lignes en haut, car il faut trop de temps pour rechercher la dernière ligne non vide la plus basse chaque fois que vous souhaitez ajouter une nouvelle donnée. Malheureusement, autant que je sache, il n’ya aucun moyen de le faire, pas si vous voulez que vos formules et votre mise en forme restent les mêmes après l’inversion.
Phil Goetz

Réponses:

24

Pour inverser l'ordre de la plage sélectionnée (par opposition au tri selon une colonne spécifique), vous pouvez utiliser le script suivant:

function reverseOrder()
{
  var range = SpreadsheetApp.getActiveRange();
  var values = range.getValues();
  range.setValues(values.reverse());
}

L'ajout de ce script onOpen créera un élément de menu appelé Extra , contenant un élément appelé Reverse :

function onOpen ()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menu = [{name: "Reverse", functionName: "reverseOrder"}];
  ss.addMenu("Extra", menu);
}
AdamL
la source
3
Merci. Il m'a fallu un moment pour comprendre comment les ajouter pour que l'élément de menu apparaisse (Outils -> Gestionnaire de script ...), mais une fois que j'ai terminé, cela fonctionne!
Jonik
@ AdamL, comment pouvons-nous faire cela sans script?
Pacerier
1
@AdamL: Idéal pour déplacer du texte, mais il ne parvient pas à déplacer la couleur d'arrière-plan de la cellule, etc. Comment peut-on étendre le script pour effectuer cela également?
Gruber
1
@Pacerier: excuses pour la réponse extrêmement tardive, mais une solution consisterait à créer une colonne d'assistance avec des nombres dans l'ordre croissant et à trier la plage par ordre décroissant (puis vous pourrez supprimer les valeurs d'assistance).
AdamL
@Gruber: la première option serait que le script copie / colle une cellule à la fois; la deuxième option serait d'obtenir tous les formats requis pour la plage, de les inverser également et de les définir. Je dirais que la première option peut convenir pour les petites plages, mais terrible pour les grandes. la deuxième option serait le meilleur choix pour couvrir tous les cas d'utilisation.
AdamL
21

Voici un exemple de la procédure à suivre sans script: veuillez noter que cette méthode suppose que vos données ne sont que des données. Cela peut avoir des conséquences étranges si vous avez des formules faisant référence à d'autres cellules de la même plage:

  1. Insérez une nouvelle colonne (à titre d'exemple, nous l'appellerons colonne A).
  2. Dans A1, mettez la valeur [1]. (Vous pouvez commencer par A10 ou A50 si vous voulez seulement trier une plage)
  3. Dans A2, insère la formule [= A1 + 1]. (Ajustez si vous n'avez pas commencé à A1 à l'étape 2)
  4. Étendez la formule en A2 au bas des données que vous souhaitez inverser.

    Tout doit maintenant être numéroté de 1 au nombre de lignes dans la plage que vous triez.

  5. Sélectionnez toutes les lignes de la plage que vous avez configurée.
  6. Cliquez sur le menu Données et sélectionnez "Trier par plage A, Z -> A".

Vos données doivent maintenant être inversées dans l’ordre. En raison de la manière dont nous avons configuré la formule de numérotation, le numéro sera réinitialisé et continuera à partir de 1 en haut ... mais les données réelles dans les autres colonnes devraient toutes être inversées.

Mir
la source
2
C'est si obscurément facile que j'ai dû frapper mon front pour ne pas y penser. Réponse fantastique. +1
GroggyOtter
2
Pour les étapes 2 à 4, vous n'avez même pas besoin d'une formule. Entrez simplement 1 dans A1, 2 dans A2, sélectionnez les deux et faites-le glisser le plus loin possible.
Patrick
4

En suivant l'exemple de Mir, vous pouvez placer la fonction SORT dans la cellule D3, par exemple, pour inverser l'ordre des données dans la colonne C:

=sort(C3:C,A3:A,False)
artu
la source