Bonjour à tous,
Je suis en charge de créer une feuille excel qui ne devra pas être modifié autrement qu'en copier coller valeurs. Je dois donc rediriger toute forme de "Coller" en collage de valeurs, que ce soit dans le menu Edit, clique droit, ou CtrlV.
J'ai donc tester les deux macros suivantes:
Et
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 Private Sub Workbook_BeforeClose(Cancel As Boolean) coller_on End Sub Private Sub Workbook_Open() coller_off End Sub Sub coller_off() With CommandBars(1).Controls("Edition") .Controls("Coller").Enabled = False .Controls("Collage spécial...").Enabled = False End With With CommandBars("Cell") .Controls("Coller").Enabled = False .Controls("Collage spécial...").Enabled = False On Error Resume Next With .Controls.Add(msoControlButton, , , 3, True) .Caption = "Coller la valeur" .OnAction = "Col_valeur" End With End With End Sub Sub coller_on() With CommandBars(1).Controls("Edition") .Controls("Coller").Enabled = True .Controls("Collage spécial...").Enabled = True End With With CommandBars("Cell") .Controls("Coller").Enabled = True .Controls("Collage spécial...").Enabled = True On Error Resume Next .Controls("Coller la valeur").Delete End With End Sub Sub Col_valeur() On Error Resume Next Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub
Le Premier ne répond pas à mes attentes car il ne bloque pas le CtrlV.
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 Option Explicit Dim mbCut As Boolean Dim mRngSource As Range Public Sub InitCutCopyPaste() Application.OnKey "^X", "DoCut" Application.OnKey "^x", "DoCut" Application.OnKey "+{DEL}", "DoCut" Application.OnKey "^C", "DoCopy" Application.OnKey "^c", "DoCopy" Application.OnKey "^{INSERT}", "DoCopy" Application.OnKey "^V", "DoPaste" Application.OnKey "^v", "DoPaste" Application.OnKey "+{INSERT}", "DoPaste" Application.OnKey "{ENTER}", "DoPaste" Application.OnKey "~", "DoPaste" Application.CellDragAndDrop = False End Sub Public Sub DoCut() If TypeOf Selection Is Range Then mbCut = True Set mRngSource = Selection Selection.Copy Else Set mRngSource = Nothing Selection.Cut End If End Sub Public Sub DoCopy() If TypeOf Selection Is Range Then mbCut = False Set mRngSource = Selection Selection.Copy Else Set mRngSource = Nothing End If Selection.Copy End Sub Public Sub DoPaste() If Application.CutCopyMode And Not mRngSource Is Nothing Then Selection.PasteSpecial xlValues If mbCut Then mRngSource.ClearContents Application.CutCopyMode = False Else ActiveSheet.Paste End If End Sub
Le second à l'air d'être plutôt pertinent. Voici les problèmes qui se posent:
1)la macro ne marche que manuellement, c'est à dire en faisant F8 dans le code VBA.
2)Est ce que tant que le fichier sera ouvert, la macro empêchera toute autre forme de "coller" dans les autres pages? (ca a été le cas pour la macro n°1)
3)GROS GROS PROBLEME, je ne peux plus étirer mes formules ou encore déplacer des cellules dans toutes mes feuilles excel, une des macros à du me faire merder ça et ne s'est pas réinitialisé, comment faire pour réinitialiser mon excel?
4) y a t il un moyen pour ne bloquer que le format de la page sans bloquer les valeurs? Toujours dans l'optique de ne pas changer le format lors du copier coller, ce qui m'éviterait de chercher a faire un copier coller valeur.
Ps je suis sur une version anglais d'excel, j'ai donc traduit coller par paste, collage spécial par paste special,...
Merci à tous.
Partager