XL 2016 Bloquer le copier/coller sur des cellules dévérouillées

StefTah

XLDnaute Nouveau
Bonjour,

Je cherche à empêcher le copier/coller, ainsi que le "tirage" d'une cellule dans un fichier Excel sur des cellules déverrouillées.

En cherchant sur le site j'ai trouvé une macro, alors cela empêche bien le copier/coller mais cela s'applique aussi sur les cellules vérouillées et j'arrive encore à "tirer" la formule.

Je vous ai mis mon fichier en pièce jointe, si vous pouvez m'aider, je suis preneuse :)

Merci
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@StefTah
Sachant qu'un fichier *.xlsx ne contient pas par essence de code VBA,
Sachant que tu as trouvé une macro
Je sais donc sans ouvrir ton classeur que je ne verrai pas cette macro.
Chose qui aurait été bien utilie pour ajouter/corriger quelques lignes de VBA pour aboutir au résultat* souhaité.

*: bien qu'il s'agisse là d'un résultat potentiellement aléatoire puisqu'il suffit d'ouvrir le classeur sans activer les macros pour rendre le blocage inopérant.
Et si le projet VBA est protégé et les feuilles protégées, le moyen de supprimer ces protections qui n'en sont pas peuple un très grand nombre de pages web dédiées à Excel.
Te voilà donc prevenu(e) ;)
 

StefTah

XLDnaute Nouveau
@Staple1600

Toutes mes excuses, je n'y connais rien en macro :(

Si cela peut aider, voici ce que j'ai trouvé et que j'ai collé dans ThisWorkBook :


Private Sub Workbook_Open()
'Interdit le tirage des formules dans les 4 directions et le glisser déplacer
Application.CellDragAndDrop = False
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Interdit le collage sur la même feuille que celle qui a servi à faire la copie
Application.CutCopyMode = False
End Sub

Private Sub Workbook_Activate()
'Interdit le collage suite à une copie venant d'un autre classeur
Application.CutCopyMode = False
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Active le tirage des formules dans les 4 directions et
'la technique du glisser-déplacer pour les cellules.
Application.CellDragAndDrop = True

'Active la possibilité de collage
Application.CutCopyMode = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, StefTah


Il faut enregistrer le classeur en *.xlsm (pour conserver le code VBA)

Pour infos, avec ce code, on peut encore faire du copier/coller
(exemple avec CTRL+B qui correspond à copier vers le bas)
 
Dernière édition:

StefTah

XLDnaute Nouveau
@Staple1600

Bonjour Stapple1600,

  • Enregistrement du classeur en *.xlsm : OK fait
  • Coller le code dans ThisWorkBook : OK fait
Mais comment faire pour bloquer également le "tirage" de cellule (croix en bas à droite de la cellule) ? Et que le code ne s'applique qu'aux cellules déverrouillées ?

Merci :)

Stef
 

Staple1600

XLDnaute Barbatruc
Re

Préambule
Est-ce que le jeu en vaut la chandelle?
(voir message#2, notamment le dernier paragraphe)
 

StefTah

XLDnaute Nouveau
Oui sauf si tu as une idée pour résoudre mon problème : j'ai un fichier Excel pour gérer des inscriptions, comme les groupes sont limités à 10 personnes j'ai mis une mise en forme conditionnelle pour que les participants voient bien que la session est pleine. Malheureusement certain font des copier/coller ce qui rend ma mise en forme conditionnelle fausse.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@StefTah
Sans grande conviction (car il suffira d'ouvrir le classeur sans activer les macros pour ruiner la chose)
PS: Testé sur Excel 2003
1) Dans un module standard
VB:
Sub m_Copie(Statut As Boolean)
With Application
    .CutCopyMode = Statut
    .CellDragAndDrop = Statut
    .CopyObjectsWithCells = Statut
End With
End Sub
2) Dans ThisWorkBook
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call m_Copie(True)
Application.OnKey "^b"
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call m_Copie(False)
Application.OnKey "^b", ""
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call m_Copie(False)
Application.OnKey "^b", ""
End Sub
 
Private Sub Workbook_Activate()
Call m_Copie(False)
Application.OnKey "^b", ""
End Sub
NB:
En cas de dysfonctionnement d'Excel suite à l'emploi de ces codes, merci de vous adresser au bureau au fond à gauche où on peut lire sur la porte "Je vous avais prévenu ;) "
 
Dernière édition:

Discussions similaires


Haut Bas