Empêcher Copier, Couper, Coller pour certaine colonne
Bonsoir,
Je viens solliciter votre aide pour une méthode qui empêcherais un utilisateur de copier, couper, coller des valeurs dans certaine colonne de ma feuille excel.
Je m'explique j'ai un classeur excel avec plusieurs feuilles, je souhaiterais que pour la feuille n°8, on puisse pour les colonnes E, G, et de J à L uniquement introduire des valeurs saisies manuellement et que l'on ne puisse pas faire de copier, couper, coller de valeur dans ces colonnes.
Mais pour les autres colonnes ou autres feuilles de mon classeur, je puisse le faire.
Pourriez vous m'aider ? je pense que cela doit être possible via une macro, mais ce n'est pas du tout mon domaine, et sur internet je n'ai trouvé que une macro interdisant le copier coller dans tout le classeur excel.
Merci d'avance pour votre aide
Cordialement
LordUnreal
Bonsoir,
Il faut être plus précis : Copier ou Coller.
Empêcher de coller dans des plages définies des éléments pris n'importe où est une chose.
Empêcher de copier dans ces plages pour coller ailleurs en est une autre.
Comme mentionné, ci dessus les deux.
Je dispose d'une mise en forme conditionnelle dans ces colonnes, et si l'on colle des données dedans ou si l'on copie des données de ces colonnes, la mise en forme conditionnelle se modifie :
- si les données que l'on veut coller on été copier à partir d'une cellule avec une mise en forme conditionnel) celle présent dans la la cellule est modifié,
- et si les données sont copiés à partir de cette colonne, ils emportent la mise en forme conditionnel avec.
Les personnes qui seront amené à faire usage du fichier, adore les copier/coller, et ne se soucie guère du traitement des données qui s'effectue derrière ... malgré plusieurs demande, je passe mon temps à refaire les mises en formes conditionnelles, donc je souhaiterais sécuriser ces colonnes, en leur enlevant cette possibilité.
Cordialement
LordUnreal
Essaie ce code à placer dans le module de la feuille concernée.
Dim NoCopCol As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Union(Me.Columns("E"), Me.Columns("G"), Me.Columns("J:L"))) _
Is Nothing Then
Application.CutCopyMode = False
NoCopCol = True
Else
If NoCopCol Then Application.CutCopyMode = False
NoCopCol = False
End If
End SubEventuellement, tu pourras ajuster le test de départ qui là cible les colonnes entières que tu as indiquées.
Cette macro réagit au déplacement. Si tu te rends dans une des colonnes visées, elle vide le presse-papier. Si donc tu y venais avec l'intention de coller tu en es pour tes frais. En plus, elle met à True une variable booléenne de niveau module.
Ce qui conduit à ce qu'au déplacement suivant, cette variable étant à True, elle vide encore le presse-papier, au cas où tu aurais copié.
Le copier-coller pour les autres colonnes entre elles demeure fonctionnel.
Je trouve rigolo la chose, car on trouve souvent cette commande (CutCopyMode = False) dans du code produit par l'enregistreur de macro, et pieusement reproduites dans leurs macros par les gens qui enregistrent sans savoir quoi. En fait si elle s'y trouve enregistrée c'est parce qu'une des manipulations a abouti à vider le presse-papier. On peut donc toujours la supprimer parce que la même manip. enregistrée aura le même résultat, la garder serait en fait l'exécuter deux fois ! J'avais recensé jusqu'à présent deux cas où cette commande a une utilité... Tu en ajoutes un 3e, intéressant !
Cordialement.
Merci MFerrand, cela fonctionne parfaitement.
Je suis content que tu y trouve un plus avec cette 3ème utilité
Je pense être assez bon en excel "courant" mais les macros offres aussi une infinité de possibilité et je tend de plus en plus à m'intéresser à celle ci
Excel est un magnifique outil :p