Interdire collage spécial

Bonjour le forum,

Je cherche à empêcher les utilisateurs de faire un copier /collage spécial. J'ai trouvé ce code mais j'ai une erreur au niveau de la ligne surlignée. Pourriez-vous m'aider. Merci

Application.CommandBars("Cell").Controls("Coller").Visible = False
    Application.CommandBars("Cell").Controls("Collage spécial...").Visible = False
    Application.CommandBars("Cell").Controls("Couper").Visible = False
    Application.CommandBars("Cell").Controls("Insérer...").Visible = False
    Application.CommandBars("Cell").Controls("Supprimer...").Visible = False
    Application.CommandBars("Cell").Controls("Liste déroulante de choix...").Visible = False
    'Application.CommandBars("Cell").Controls("Nommer une plage...").Visible = False
'    Application.CommandBars("Cell").Controls("Lien hypertexte").Visible = False
Set Tools = Application.CommandBars("Cell")
    With Tools.Controls.Add(, , , 3, True)
        .BeginGroup = False
        .Caption = "Coller..."
        .OnAction = "Collage"
    End With

bonjour Benoist28200,

Dans un module colle le code:

Option Explicit 

Sub ToggleCutCopyAndPaste(Allow As Boolean) 
     'Activate/deactivate cut, copy, paste and pastespecial menu items
    Call EnableMenuItem(21, Allow) ' cut
    Call EnableMenuItem(19, Allow) ' copy
    Call EnableMenuItem(22, Allow) ' paste
    Call EnableMenuItem(755, Allow) ' pastespecial

     'Activate/deactivate drag and drop ability
    Application.CellDragAndDrop = Allow 

     'Activate/deactivate cut, copy, paste and pastespecial shortcut keys
    With Application 
        Select Case Allow 
        Case Is = False 
            .OnKey "^c", "CutCopyPasteDisabled" 
            .OnKey "^v", "CutCopyPasteDisabled" 
            .OnKey "^x", "CutCopyPasteDisabled" 
            .OnKey "+{DEL}", "CutCopyPasteDisabled" 
            .OnKey "^{INSERT}", "CutCopyPasteDisabled" 
        Case Is = True 
            .OnKey "^c" 
            .OnKey "^v" 
            .OnKey "^x" 
            .OnKey "+{DEL}" 
            .OnKey "^{INSERT}" 
        End Select 
    End With 
End Sub 

Sub EnableMenuItem(ctlId As Integer, Enabled As Boolean) 
     'Activate/Deactivate specific menu item
    Dim cBar As CommandBar 
    Dim cBarCtrl As CommandBarControl 
    For Each cBar In Application.CommandBars 
        If cBar.Name <> "Clipboard" Then 
            Set cBarCtrl = cBar.FindControl(ID:=ctlId, recursive:=True) 
            If Not cBarCtrl Is Nothing Then cBarCtrl.Enabled = Enabled 
        End If 
    Next 
End Sub 

Sub CutCopyPasteDisabled() 
     'Inform user that the functions have been disabled
    MsgBox "Sorry!  Cutting, copying and pasting have been disabled in this workbook!" 
End Sub 

Dans Thisworkbook, colle le code :

Option Explicit 

Private Sub Workbook_Activate() 
    Call ToggleCutCopyAndPaste(False) 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Call ToggleCutCopyAndPaste(True) 
End Sub 

Private Sub Workbook_Deactivate() 
    Call ToggleCutCopyAndPaste(True) 
End Sub 

Private Sub Workbook_Open() 
    Call ToggleCutCopyAndPaste(False) 
End Sub 

Sauvegarde et ferme le fichier.

Source: http://www.vbaexpress.com/kb/getarticle.php?kb_id=373

cordialement,

Bonjour xorsankukai,

J'ai toujours le problème.

copier coller

Re,

Pourtant ça fonctionne chez moi

Re,

Ça y est , ça fonctionne mais le problème c'est que je veux garder le "Copier", c'est le "Collage spécial" que je ne veux pas.

bonjour à tous

quand quelqu'un a une question pas ordinaire, c'est que le problème est mal posé (dans 99% des cas)

ici quel est le problème de fond ?

Bonjour jmd...

Je me solidarise !

Je n'ai jamais été très favorable aux manipulations d'interface, il est rare que cela n'entraîne pas d'effet connexe non voulu...

De plus, depuis l'apparition du ruban, ce dernier échappe aux manipulations habituelles antérieures par VBA...

Et c'est de toute façon le plus souvent une fausse solution reposant sur une absence d'analyse du problème réel posé, auquel on a substitué un problème supposé par transposition sur l'interface...

J'appuie donc tout à fait la démarche consistant à revenir au vrai problème, celui posé basiquement : ce qu'on veut provoquer ou éviter, concrètement, et préalablement à toute généralisation hâtive !

Bonne journée.

Cordialement.

Bonjour jmd, bonjour MFerrand,

Le problème de fond est le suivant:

Je souhaite que les utilisateurs ne puissent faire qu' une seule manipulation :

Copier -> Coller les valeurs.

Merci

Ça c'est l'inverse de ce que tu demandais précédemment : interdire le collage spécial !

Maintenant tu ne veux donc autoriser que le collage valeurs

Par ailleurs cette formulation est déjà une traduction du problème incluant l'adoption tacite d'une solution, sans être conduit à cette solution par l'analyse du problème...

La question doit commencer au niveau de ce qui peut générer l'action de copier et coller, la nature de son contenu, les emplacements où cela peut se produire, les effets susceptibles de survenir que l'on veut éviter... examen nécessaire pour envisager tout l'éventail des moyens que l'on peut déployer pour y faire face...

Cordialement.

MFerrand a écrit :

Ça c'est l'inverse de ce que tu demandais précédemment : interdire le collage spécial !

Maintenant tu ne veux donc autoriser que le collage valeurs

Je ne vois pas en quoi interdire le collage spécial est l'inverse d' autoriser le collage des valeurs, ce sont deux actions différentes.

J'avais trouver ceci mais le " .Controls("Collage spécial...").Enabled = False " ne fonctionne pas.

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

Je ne vois pas en quoi interdire le collage spécial est l'inverse d' autoriser le collage des valeurs, ce sont deux actions différentes.

Préalable à discussion ! Il faut réviser Excel !

Le collage valeurs est un collage spécial !

Il y en a d'autres : on peut ne coller que les formats, on peut aussi tout coller, on peut assortir le collage d'opérations, transposer les données collées...

Et si on veut interdire le collage spécial en autorisant le collage standard (je ne sais d'ailleurs pas si ce serait possible), on interdirait pas le collage mais seulement la possibilité de le cibler de façon spécifique.

Rechercher des sujets similaires à "interdire collage special"