Déplacer des lignes avec le clavier dans Calc

8

Comment peut-on déplacer une ligne vers un emplacement différent avec le clavier? J'ai trouvé ce guide pour la souris mais, en raison d'un handicap, j'ai du mal à utiliser la souris pour cela.

Notez que je ne cherche pas à "trier manuellement" et que l'utilisation d'une colonne supplémentaire "tri ordinal" n'est pas une solution de contournement viable. Je suis cependant conscient des excellentes capacités de tri de Calc.

dotancohen
la source
3
Déplacer des lignes dans LibreCalc est extrêmement fastidieux. J'ai soulevé un bug il y a 3 ans pour mettre en œuvre l' option de menu contextuel simple , « Insérer les lignes de coupe » d'Excel , et on m'a dit que c'est un double d'un bug soulevé en 2011: insérer des cellules copiés . En juin 2016, le problème n'était toujours pas résolu.
Dan Dascalescu
Fonctionne facilement ici en 2019 ... Lisez les commentaires ci-dessous pour voir ...
MattSlay

Réponses:

6

Je ne sais pas s'il existe un moyen de "déplacer" des lignes à l'aide du clavier, mais utiliser c & p et insérer / supprimer des lignes à l'aide du clavier devrait offrir les mêmes fonctionnalités:

  • accédez à la première cellule (la plus à gauche) de la ligne à déplacer;
  • appuyez sur SHIFT+ SPACEpour sélectionner la ligne entière;
  • appuyez sur CTRL+ Cpour copier la ligne;
  • appuyez sur CTRL+ -pour supprimer la ligne en cours;
  • accédez à la ligne cible;
  • appuyez sur ALT+ Ipour ouvrir le Insertmenu;
  • appuyer Rpour insérer une nouvelle ligne (la ligne actuelle sera décalée vers le bas);
  • appuyez sur CTRL+ Vpour coller la ligne à son nouvel emplacement.

Étant donné que les opérations de copier / coller sont parfois très ennuyeuses, vous pouvez créer une macro simple pour couper des cellules et une autre pour les coller, déplaçant le contenu existant vers le bas.

Voici un code très simple pour "déplacer" les cellules sélectionnées:

Option Explicit

Sub CopyAndCut
    ' ---------------------------------------------------------
    ' define variables
    Dim document   as object
    Dim dispatcher as Object
    Dim oSelections As Object
    ' ---------------------------------------------------------
    ' get access to the document and selections (if any)
    document    = ThisComponent.CurrentController.Frame
    oSelections = ThisComponent.getCurrentSelection()
    If IsNull(oSelections) Then Exit Sub        
    ' ---------------------------------------------------------
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())
    ' -------------------------------------------------------------
    ' Check the width of the selection - if 1024 columns, we assume
    ' the complete row was selected and should get deleted
    If 1024 = oSelections.Columns.getCount() Then
        dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())
    End If
End Sub

Sub InsertWithMoveDown
    ' ---------------------------------------------------------
    ' define variables
    Dim document   as object
    Dim dispatcher as object
    ' ---------------------------------------------------------
    ' get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    ' ---------------------------------------------------------
    ' Paste contents with "Move Down" option
    Dim args1(5) as New com.sun.star.beans.PropertyValue
    args1(0).Name = "Flags"
    args1(0).Value = "A"
    args1(1).Name = "FormulaCommand"
    args1(1).Value = 0
    args1(2).Name = "SkipEmptyCells"
    args1(2).Value = false
    args1(3).Name = "Transpose"
    args1(3).Value = false
    args1(4).Name = "AsLink"
    args1(4).Value = false
    args1(5).Name = "MoveMode"
    args1(5).Value = 0
    dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
End Sub

Sub InsertWithMoveRight
    ' ---------------------------------------------------------
    ' define variables
    Dim document   as object
    Dim dispatcher as object
    ' ---------------------------------------------------------
    ' get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    ' ---------------------------------------------------------
    ' Paste contents with "Move Right" option
    Dim args1(5) as New com.sun.star.beans.PropertyValue
    args1(0).Name = "Flags"
    args1(0).Value = "A"
    args1(1).Name = "FormulaCommand"
    args1(1).Value = 0
    args1(2).Name = "SkipEmptyCells"
    args1(2).Value = false
    args1(3).Name = "Transpose"
    args1(3).Value = false
    args1(4).Name = "AsLink"
    args1(4).Value = false
    args1(5).Name = "MoveMode"
    args1(5).Value = 1
    dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
End Sub

Après avoir copié le code dans votre bibliothèque utilisateur, affectez simplement CopyAndCutà, par exemple, Alt+ C, InsertWithMoveDownà, par exemple, Alt+ V, et InsertWithMoveRightà, par exemple, Alt+ R(tous ces raccourcis sont vides par défaut).

Maintenant, vous pouvez sélectionner des cellules ou des lignes à l'aide de la souris ou du clavier, les couper avec Alt+ C, passer à la cellule cible et les coller avec Alt+ Vou Alt+ R.

tohuwawohu
la source
Génial, merci! Dans LO 4.1, on sélectionne la ligne entière avec Shift-Space. À part ça, tout a bien fonctionné et j'ai appris deux nouveaux raccourcis. Je vous remercie!
dotancohen
2
Cela devient très ennuyeux si vous devez déplacer plus d'une rangée.
Dan Dascalescu
2
Essayez de déplacer 3 lignes de la ligne 1 à la ligne 101 (de sorte que l'emplacement actuel et le nouvel emplacement sont suffisamment éloignés pour que le glisser-déposer soit compliqué). Vous découvrirez à quel point il est agaçant de créer les lignes vides pour coller celles que vous avez copiées, puis revenez à la ligne 1 pour les supprimer (car la découpe laisse des lignes vides).
Dan Dascalescu
@DanDascalescu: vous avez raison. Donc, j'ai écrit deux petites macros qui devraient faire la partie ennuyeuse du travail. De cette façon, vous pouvez utiliser des raccourcis clavier pour couper et coller des cellules sans utiliser les paste specialoptions. Je sais, c'est encore loin d'être une solution parfaite ...
tohuwawohu
14

Pour déplacer une ligne dans Open Office Calc:

  1. Sélectionnez la cellule de la colonne A de la ligne à déplacer.
  2. Appuyez sur Shift-Space pour mettre en évidence toute la ligne.
  3. Appuyez sur la ALTtouche et maintenez-la enfoncée.
  4. Faites glisser la ligne (une ligne noire épaisse apparaît) vers le haut ou le bas jusqu'à l'emplacement souhaité.
  5. Si votre travail semble correct, cliquez sur l'icône Enregistrer dans la barre d'outils.
  6. Dans le cas contraire, ALT- Zpour annuler.

Si vous souhaitez écraser et détruire l'emplacement cible, ne maintenez pas la touche ALT enfoncée. Cliquez simplement sur la ligne en surbrillance et faites-la glisser vers son nouvel emplacement. Les données à l'emplacement cible seront détruites et remplacées par les données de la ligne déplacée.

menthe
la source
4
Cela semble bien, mais l’étape 4 implique la souris - pendant que l’opérateur essaie de déplacer les lignes à l’aide du clavier.
tohuwawohu
2
Fonctionne également avec LO Calc. Doit échanger les étapes 3 et 4: commencez à faire glisser, puis maintenez la touche ALT enfoncée avant de déposer les lignes à leur nouvel emplacement.
tohuwawohu
J'ai testé cela dans la version 6.3 de Libre Office Calc et cela fonctionne exactement comme il a été écrit, sans avoir à inverser les étapes 3 et 4. J'ai remarqué que si vous appuyez ou que vous relâchez la touche ALT, même lorsque vous déplacez la ligne, vous remarquerez les lignes noires qui la changent. .. Lignes épaisses (sans que ALT soit enfoncé) pour afficher la ligne cible totalement écrasée; si vous appuyez sur ALT (pour déplacer la ligne), la ligne supérieure est épaisse et la ligne inférieure est fine. Mon hypothèse est que cela fonctionnera également dans les versions précédentes, mais je ne pouvais tester que dans la version 6.3.
MattSlay
Vous pouvez également utiliser plusieurs lignes ... Après avoir appuyé sur SHIFT_SPACE, maintenez la touche MAJ enfoncée, puis appuyez sur la touche fléchée HAUT ou BAS pour sélectionner d'autres lignes adjacentes. Relâchez ensuite la touche SHIFT et suivez les étapes décrites pour déplacer ou remplacer par la souris et la touche ALT.
MattSlay