Empêcher le copier-coller uniquement sur certaines lignes et autres onglets

Bonjour, je ne suis pas un expert du code VBA, mais après de nombreuses recherches, j'ai trouvé un code VBA qui fait en parti le job. C'est à dire qui désactive les fonctions copie-coller.

Mais ce que j'aimerais c'est que la désactivation des fonctions copie-coller ne soient possible que sur une sélection de cellules (que je définirais moi même par la suite). Et il faudrait également qu'il ne soit pas possible de déplacer ou de copier un onglet.

Sub Workbook_DeActivate()

Dim oCtrl As Office.CommandBarControl
     For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
            oCtrl.Enabled = False
     Next oCtrl

     For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
            oCtrl.Enabled = False
     Next oCtrl

     Application.CellDragAndDrop = False
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    With Application
        .CellDragAndDrop = False
        .CutCopyMode = False 'Clear clipboard
    End With

End Sub

Merci à vous pour votre aide

Bonsoir Snowkite,

Le code que tu affiches agit sur l'ensemble de la feuille. Sur les barres secondaires (clic droit).

Mais n'empêche pas d'utiliser les raccourcis claviers pour couper ou copier.

Et si tu souhaites n'appliquer ton choix que sur certaines cellules. Il conviendra d'utiliser l'événement SelectionChange de la feuille.

Ci-dessous un exemple fait sur la cellule F5 d'une feuille.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$F$5" Then
Dim oCtrl As Office.CommandBarControl
     For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
            oCtrl.Enabled = False
     Next oCtrl

     For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
            oCtrl.Enabled = False
     Next oCtrl
     Application.OnKey "^{x}", ""
     Application.OnKey "^{c}", ""
Else:
For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
            oCtrl.Enabled = True
     Next oCtrl

     For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
            oCtrl.Enabled = True
     Next oCtrl
     Application.OnKey "^{x}"
     Application.OnKey "^{c}"
End If
End Sub

A adapter aux besoins en sélectionnant une plage de cellules contigües ou pas, au lieu d'une seule cellule (ici pour tester l'exemple).

Merci beaucoup pour ton aide, mais lorsque j'essais sur la ligne 56 par exemple de la cellule $ASH:BGH$56 et bien j'ai toujours accès à la fonction copier-coller. Même si je ne choisis qu'une seule cellule c'est identique.

Bonsoir Snowkite,

j'essais sur la ligne 56 par exemple de la cellule $ASH:BGH$56

Déjà, c'est un groupe de cellules et il manque un nombre...

Et non une cellule seule comme présenté dans l'exemple. Où la cellule est ciblée par son adresse. Et forcément donc une unique adresse.

A adapter aux besoins en sélectionnant une plage de cellules

Et une plage de cellules, c'est plusieurs adresses à cibler.

Remplacer

If Target.Address = "$F$5" Then

par

If Not Intersect(Target, Range("$ASH$56:$BGH$56")) Is Nothing Then

bonjour,

pourquoi ce traject difficile ? on peut protéger la structure pourqu'on ne peut pas ajouter ou effacer un onglet et on peut protéger une feuille.

14snowkite.xlsb (23.92 Ko)
Rechercher des sujets similaires à "empecher copier coller uniquement certaines lignes onglets"