Déplacer 1 ligne sélectionnée vers le haut ou le bas grâce à un bouton

Bonjour, je désirerais déplacer 1 ligne à l'aide d'1 bouton ou 1 (bouton toupie). C'est à dire faire remonter ou descendre 1 ligne quand on appuie sur le bouton (pour changer sa position). Dans l'image ci-dessous déplacer la ligne 11 sélectionnée soit entre la ligne 9 et la ligne 10 quand on appuie sur le bouton "Haut/Monter" soit entre la ligne 12 et la ligne 13 quand on appuie sur le bouton "Bas/Descendre".

2024 06 05 162835

Si quelqu'un avait une ou des solutions à me proposer, ce serait super.

Merci d'avance.

Bonsoir,

Sous Excel vous avez l'enregistreur de macro qui peut vous aider :

Sub Macro1()
'
' Macro1 Macro
'

'
    Selection.Cut
    Rows("10:10").Select
    Selection.Insert Shift:=xlDown
End Sub

Ceci coupe une ligne ici la sélection était la ligne 11, puis on sélectionne la ligne 10, avec le clic droit, on choisi "insérer la ligne copiée".

Ensuite avec un peu de nettoyage et de suppression de "Select" on obtient ceci pour monter une ligne :

Sub monte()
    ' on copie/coupe la ligne de la cellule sélectionnée
    ActiveCell.EntireRow.Cut
    ' on insert la ligne coupée au niveau de cette ligne -1 en décalant le reste vers le bas
    ActiveCell.Offset(-1).Insert Shift:=xlDown
End Sub

Mais il faut mettre des "garde-fous" car si vous sélectionnez une cellule de la ligne 1, alors le OffSet(-1) (qui décale la référence de l'objet d'une ligne vers le haut) va provoquer une erreur car la ligne(0) n'existe pas sur une feuille donc il faut ajouter une gestion d'erreur ou bien un test :

Sub monte()
    ' test faisabilité : si ligne = 1 on ne fait rien et on quitte
    If ActiveCell.Row = 1 Then Exit Sub
    ' on copie/coupe la ligne de la cellule sélectionnée
    ActiveCell.EntireRow.Cut
    ' on insert la ligne coupée au niveau de cette ligne -1 en décalant le reste vers le bas
    ActiveCell.Offset(-1).Insert Shift:=xlDown
End Sub

Et pour pouvoir répéter l'action sans devoir resélectionner la ligne à déplacer vous pouvez ajouter ceci : ActiveCell.Offset(-1).Select

Sub monte()
    ' test faisabilité : si ligne = 1 on ne fait rien et on quitte
    If ActiveCell.Row = 1 Then Exit Sub
    ' on copie/coupe la ligne de la cellule sélectionnée
    ActiveCell.EntireRow.Cut
    ' on insert la ligne coupée au niveau de cette ligne -1 en décalant le reste vers le bas
    ActiveCell.Offset(-1).Insert Shift:=xlDown
    ' on déplace la cellule active d'une ligne vers le haut en sélectionnant cette dernière
    ActiveCell.Offset(-1).Select
End Sub

Je vous laisse trouver la fonction inverse...

@ bientôt

LouReeD

Bonjour LouReed.

Merci pour votre réponses rapide et vos solutions.

J'ai repris la 4ème partie dans VBA et j'ai affecté la macro à 1 bouton et cela fonctionne parfaitement.

J'ai bien compris chaque étape mais je ne pratique pas l'encodage et le language. J'ai essayé de reproduire votre solution pour descendre la ligne, j'ai supprimé le test de faisabilité pour la ligne 0 (zéro) ; j'ai changé les valeurs -1 par +1 et le xlDown par un xlUp... Est-ce la bonne manière car cela ne fonctionne pas ? Pourriez-vous corriger ma ou mes erreurs, SVP ?

Merci d'avance.

------------------------------------------------------------------------

Sub monte()
' test faisabilité : si ligne = 1 on ne fait rien et on quitte
If ActiveCell.Row = 1 Then Exit Sub
' on copie/coupe la ligne de la cellule sélectionnée
ActiveCell.EntireRow.Cut
' on insert la ligne coupée au niveau de cette ligne -1 en décalant le reste vers le bas
ActiveCell.Offset(-1).Insert Shift:=xlDown
' on déplace la cellule active d'une ligne vers le haut en sélectionnant cette dernière
ActiveCell.Offset(-1).Select
End Sub
-------------------------------------------------------------
Sub descend()
' on copie/coupe la ligne de la cellule sélectionnée
ActiveCell.EntireRow.Cut
' on insert la ligne coupée au niveau de cette ligne +1 en décalant le reste vers le haut (je suppose que c'est ici le problème car le décalage se fait vers le haut en ligne 0 ; il faut certainement ajouter/insérer 1 ligne avant tout en ligne 1)
ActiveCell.Offset(1).Insert Shift:=xlUp
' on déplace la cellule active d'une ligne vers le bas en sélectionnant cette dernière
ActiveCell.Offset(1).Select
End Sub

Bonjour,

Que vous montiez ou descendiez le principe de collage par insertion et décalage des lignes vers le bas reste le même, ce n'est que la désignation de la ligne de référence qui change.

Si vous descendez la ligne 10, vous l'insérer entre la ligne 11 et 12, comme sous Excel les lignes insérées se mettent entre l'entête et la ligne de "référence " il vous faut sélectionner la ligne 12.

Donc de 10 pour aller à 12 il faut un offset de +2. Par contre pour la sélection finale c'est +1...

15en-haut-en-bas.xlsm (15.72 Ko)

@ bientôt

LouReeD

Super LouReed, avec l'explication et cette modification, cela fonctionne parfaitement. Merci.

Bonsoir,

merci de votre retour et remerciement ! Content que cela vous convienne !

@ bientôt

LouReeD

Rechercher des sujets similaires à "deplacer ligne selectionnee haut bas bouton"