Bonjour,
N'étant qu'un amateur VBA, j'apprends avec l'aide des forums et l'utilisation de l'enregistreur, d'oû mes diffcultés. J'ai passé des heures à chercher des solutions sur ce forum mais je n'arrive à rien de bien concluant.
Je vous expose mon problème :
Je dispose d'un tableau, pour lequel un certain nombre de données sont des champs renseignés par l'utilisateur (liste déroulante ou champs libre), d'autres étant des champs calculés. J'ai créé une ligne masquée (ligne 6) au dessus de ce tableau et à l'aide d'une macro les utilisateurs doivent pouvoir insérer cette ligne dans le tableau (copier / coller standard).
Problème N°1 : j'aimerais que la macro "copie / colle" cette ligne en dessous de la ligne sélectionnée par l'utilisateur (actuellement ma macro "copie /colle" sur une ligne que j'ai identifiée). L'utilisateur doit pouvoir décider où il souhaite insérer cette ligne.
Edit : problème N°1 résolu après quelques recherches et de nombreux essais infructueux
Problème N°2 : J'aimerais que les macro ("insert" et "delete") ne soient actives que dans le tableau pour éviter que l'utilisateur ne supprime le titre par exemple ou les intitulés des colonnes. J'imagine qu'il faut pour cela nommer la plage correspondant au tableau, plage dont les coordonnées vont évoluer si nous ajoutons au supprimons des lignes. Je ne sais pas si cela est réalisable, ma difficulté n'ai pas de nommer cette plade, mais de la faire évoluer et surtout de n'autoriser les macros que dans cette plage (plage qui correspond à des lignes allant de 7 à 30 dans mon exemple).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub Insert() x = ActiveCell.Row ActiveSheet.Unprotect Password:="MSF" With Range("A" & x & ":Z" & x) .Insert Shift:=xlDown .Offset(-1).FillDown On Error Resume Next .Offset(-1).SpecialCells(xlCellTypeConstants, 23).ClearContents On Error GoTo 0 ActiveSheet.Protect Password:="MSF" ActiveSheet.Protect userinterfaceonly:=True, Password:="MSF", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowSorting:=True, AllowFiltering:=True End With End Sub
Problème N°3 : Lorsque je lance les macros, je m'assure que la feuille soit déprotégée, puis protégée à nouveau, mais j'aimerais qu'un certain nombre de fonctions restent accessibles à l'utilisateur : sélection de cellules vérouillées ou non, modification de format, utilisation de la fonction tri et enfin utilisation des filtres sur les cellules groupées.
Edit : problème N°3 résolu - Merci à Philippe !!! - voir le code proposé et son message ci-après
Je vous remercie par avance pour le temps que vous me consacrerez.
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 Sub TestAutoFilter() Dim sht As Worksheet, rng As Range Set sht = ThisWorkbook.Sheets("db") sht.Protect userinterfaceonly:=True ' Protection de la feuille Set rng = sht.Range("A1").CurrentRegion MsgBox rng.Address With sht If Not (.AutoFilterMode) Then .Range("A1").AutoFilter End With sht.AutoFilter.Sort.SortFields.Clear sht.AutoFilter.Sort.SortFields.Add Key:=Range( _ "L1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With sht.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Partager