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:
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
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
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 Premier ne répond pas à mes attentes car il ne bloque pas le CtrlV.

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.