Bonjour,
Je trouve toujours une grande source d'inspiration sur ce site alors que je ne connais pas le VBA, mais j'arrive tout de même à bricoler des choses. Je me retrouve donc à vous soumettre un fichier et le code qui m'a permis d'insérer une ligne dans une plage délimitée. J'ai deux points à vous soumettre :
1/ j'aimerais que ma macro insére une ligne en-dessous de la cellule active et non pas en dessus.
2/ j'aimerais ajouter un message d'erreur via msgbox pour indiquer que l'action "d'insérer la ligne" n'est pas possible en dehors du champ, mais je ne comprends pas où mettre cette commande
Point complémentaire : toute remarque sur mon code sera la bienvenue (je suis vraiment un bricoleur et le code peut certainement être un peu plus propre)
Voilà mon code et le fichier attaché :
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 Sub Insert_BFU2() ' Cette macro permet d'insérer une ligne dans le document. Dim DernièreLigne As Long Dim x As Long Dim y As Long ' Définition de la zone cible, càd, la plage dans laquelle peut être inserée une ligne ' Astuce : la dernière ligne est définie comme étant la dernière ligne non-vide, pour obtenir une ligne non vide, j'ai saisi "MSF" dans la cellule choisie. x = ActiveCell.Row DernièreLigne = ActiveSheet.Range("AY7").End(xlDown).Row ' Si l'utilisateur se positionne en dehors de cette plage (ligne 7 à "dernière ligne"), la commande s'arrête If Not ((x > 9) And (x < DernièreLigne)) Then Exit Sub End If 'Déprotection de la feuille dont le mot de passe est "MSF" ActiveSheet.Unprotect Password:="MSF" ' Insertion de la nouvelle ligne : les cellules copiées cont de la colonne A à la colonne J With Range("A" & x & ":AY" & x) .Insert Shift:=xlDown .Offset(-1).FillDown .Offset(-1).Clear .Offset(-1).Locked = Falseµ .Offset(-1).NumberFormat = "#,##0.00" ' Une manière de contourner les erreurs d'exécution du script (peut certainement être revu et amélioré...) On Error Resume Next .Offset(-1).SpecialCells(xlCellTypeConstants, 23).ClearContents 'Protection de la feuille dont le mot de passe est "MSF" On Error GoTo 0 ActiveSheet.Protect UserInterfaceOnly:=True, Password:="MSF", DrawingObjects:=True, Contents:=True, Scenarios:=False _ , AllowSorting:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=False, _ AllowFormattingRows:=False End With End Sub
... Pour info, j'ai aussi ajouté une autre macro pour supprimer certaines lignes (seulement celles qui sont insérées) :
Je vous remercie pour votre aide
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 Sub Delete_BFU2() ' Cette macro permet de supprimer une ligne dans le document. Dim DernièreLigne As Long Dim x As Long Dim y As String ' Définition de la zone cible, càd, la plage dans laquelle peut être suprimée une ligne ' Astuce : la dernière ligne est définie comme étant la dernière ligne non-vide, pour obtenir une ligne non vide, j'ai saisi "MSF" dans la cellule choisie. x = ActiveCell.Row y = Cells(x, 1) DernièreLigne = ActiveSheet.Range("AY7").End(xlDown).Row ' Si l'utilisateur se positionne en dehors de cette plage (ligne 7 à "dernière ligne"), la commande s'arrête If Not ((x > 9) And (x < DernièreLigne)) Then Exit Sub End If If Not (y = "") Then Exit Sub End If 'Déprotection de la feuille dont le mot de passe est "MSF" ActiveSheet.Unprotect Password:="MSF" ' Suppression de la ligne selectionée With ActiveSheet Rows(ActiveCell.Row).Delete Shift:=xlUp ActiveSheet.Protect UserInterfaceOnly:=True, Password:="MSF", DrawingObjects:=True, Contents:=True, Scenarios:=False _ , AllowSorting:=True, AllowFiltering:=True, AllowFormattingCells:=True, AllowFormattingColumns:=False, _ AllowFormattingRows:=False End With End Sub
Partager