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
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 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
pour supprimer une ligne référer vous a
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
qui fait lieu d'une publication précédente
Pascal
Partager