bonjour a vous tous
pour différencier de je vous joint les codes de remonter et descente d'une lignes sur une feuille après avoir sélectionné la cellule, dans mon fichier je sélectionne la ligne concernée en col C et j'appui sur le bouton en question
cela fonctionne meme si la ligne au dessus où en dessous est formatée ou écrite en gras la remonter où la descente se fait sans déranger les autres lignes
donc pour remonter

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Private Sub remonter_Click()
Dim T(), NoLigne As Long, S As Double, H As Double
Dim DerLig As Long, Ok As Boolean, ActLigne As Long
 
'Feuil1 est le nom de la propriété de l'objet "Feuille" visible
'dans la fenêtre de l'éditeur de code et non le nom de l'onglet
'de la feuille.
With Feuil1
    'Trouve la dernière ligne occupée dans les colonnes c:h
    DerLig = .Range("C:H").Find(What:="*", _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious).Row
    'Si ton tableau était vide, la dernière ligne serait
    'la première ligne de ton tableau.
    If DerLig < 19 Then DerLig = 19
End With
 
'Si l'usager a sélectionné une cellule dans la plage C19:Cx
If Not Intersect(ActiveCell, Range("C19:H" & DerLig)) Is Nothing Then
    'Une variable pour le numéro de ligne
    NoLigne = ActiveCell.Row
    'Si la ligne sélectionnées est en caractère grand et fusionnée
    If Range("C" & NoLigne).MergeCells = True And _
        Range("C" & NoLigne).Font.Bold = True Then
        'On remonte d'une ligne
        ActiveCell.Offset(-1).Select
        'On met fin à l'opération
        Exit Sub
    End If
    'si la ligne active est 19, fin des opérations
    'car on ne peut pas remonter plus haut
    If ActiveCell.Row = 19 Then Exit Sub
    'une petite boucle afin de trouver la ligne aus-dessus de la ligne
    'Active qui ne soit pas fusionnée et en caractère gras.
    Do
        NoLigne = NoLigne - 1
        If Range("C" & NoLigne).MergeCells <> True And _
            Range("C" & NoLigne).Font.Bold <> True Then
            'Si le critère est respecter, sortie de la boucle
            Ok = True
            Exit Do
        End If
    Loop Until NoLigne = 19
    'Une deuxième variable pour le numéro de la ligne de la cellule active.
    ActLigne = ActiveCell.Row
    'Au sortir de la boucle, si tout est Ok
    If Ok = True Then
        'met dans une variable tableau, le contenu de la ligne
        T = Rows(NoLigne).Cells.Value
        'met dans S la hauteur de la ligne active
        S = Rows(ActLigne).Height
        'met en H la hauteur de la ligne où sera copiée les données
        H = Rows(NoLigne).Height
        'Copie de la ligne active vers la ligne au-dessus
        Rows(NoLigne).Value = Rows(ActLigne).Value
        'Copie des valeurs de T dans la ligne active
        Rows(ActLigne) = T
        'Nouvelle hauteur de la ligne de la ligne active s'il y a lieu
        Rows(ActLigne).RowHeight = H
        'Nouvelle hauteur de la ligne de la ligne au-dessus s'il y a lieu.
        Rows(NoLigne).RowHeight = S
        'sélection de la ligne où ont été copiées les données
        Rows(NoLigne).Cells(1, 4).Select
    End If
End If
End Sub
et pour redescendre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Private Sub Descendre_Click()
 Dim T(), NoLigne As Long, S As Double, H As Double
Dim DerLig As Long, Ok As Boolean, ActLigne As Long
 
'Feuil1 est le nom de la propriété de l'objet "Feuille" visible
'dans la fenêtre de l'éditeur de code et non le nom de l'onglet
'de la feuille.
With Feuil1
    'Trouve la dernière ligne occupée dans les colonnes c:h
    DerLig = .Range("C:H").Find(What:="*", _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious).Row
    'Si ton tableau était vide, la dernière ligne serait
    'la première ligne de ton tableau.
    If DerLig < 19 Then DerLig = 19
End With
 
'Si l'usager a sélectionné une cellule dans la plage C19:Cx
If Not Intersect(ActiveCell, Range("C19:H" & DerLig)) Is Nothing Then
    'Une variable pour le numéro de ligne
    NoLigne = ActiveCell.Row
    'Si la ligne sélectionnées est en caractère grand et fusionnée
    If Range("C" & NoLigne).MergeCells = True And _
        Range("C" & NoLigne).Font.Bold = True Then
        'On Descend d'une ligne
        ActiveCell.Offset(1).Select
        'On met fin à l'opération
        Exit Sub
    End If
    'si la ligne active est la dernière ligne, fin des opérations
    'car on ne peut pas descendre plus bas
    If ActiveCell.Row = DerLig Then Exit Sub
    'une petite boucle afin de trouver la ligne au-dessous de la ligne
    'Active qui ne soit pas fusionnée et en caractère gras.
    Do
        NoLigne = NoLigne + 1
        If Range("C" & NoLigne).MergeCells <> True And _
            Range("C" & NoLigne).Font.Bold <> True Then
            'Si le critère est respecter, sortie de la boucle
            Ok = True
            Exit Do
        End If
    Loop Until NoLigne = 19
    'Une deuxième variable pour le numéro de la ligne de la cellule active.
    ActLigne = ActiveCell.Row
    'Au sortir de la boucle, si tout est Ok
    If Ok = True Then
        'met dans une variable tableau, le contenu de la ligne
        T = Rows(NoLigne).Cells.Value
        'met dans S la hauteur de la ligne active
        S = Rows(ActLigne).Height
        'met en H la hauteur de la ligne où sera copiée les données
        H = Rows(NoLigne).Height
        'Copie de la ligne active vers la ligne au-dessus
        Rows(NoLigne).Value = Rows(ActLigne).Value
        'Copie des valeurs de T dans la ligne active
        Rows(ActLigne) = T
        'Nouvelle hauteur de la ligne de la ligne active s'il y a lieu
        Rows(ActLigne).RowHeight = H
        'Nouvelle hauteur de la ligne de la ligne au-dessus s'il y a lieu.
        Rows(NoLigne).RowHeight = S
        'sélection de la ligne où ont été copiées les données
        Rows(NoLigne).Cells(1, 4).Select
    End If
End If
End Sub
pour supprimer une ligne référer vous a
qui fait lieu d'une publication précédente

Pascal