Protection Format de cellule particulier
Bonjour à tous, long time no see
Je reviens pour une ptite question qui s'avère relativement gênante dans la pratique. Je m'explique. J'ai un classeur excel dont toutes les feuilles sont protégées avec certaines cellules dévérouillées. Il y a impossibilité de changer le format de cellule. Un utilisateur peut rentrer des données dans les cellules dévérouillées. Il fait en l'occurrence souvent des copier/coller (provenant d'excel ou non, de cellules avec formules ou non). Ou il fait des étirements.
Le problème dans tout ça, c'est que lorsqu'il fait ces manips, le copier/coller et les étirements insèrent aussi les propriétés de format de cellule (nouvelle bordure, couleur, etc...). Il copie aussi par ailleurs la formule si la cellule d'origine en est une. D'autant plus que la feuille étant protégée, l'utilisateur ne peut pas rechanger les formats à son souhait.
Je souhaiterais donc si possible:
1. Forcer le copier/coller par valeur, quand l'utilisateur fait un copier/coller normal
2. Empêcher la copie du format lors d'un copier/coller ou d'un étirement de cellule.
Pensez-vous que ce soit jouable? J'espère avoir bien expliquer mon problème, car je ne crois pas qu'une feuille en exemple aide beaucoup à comprendre le truc
Merchiiii beaucouchhh
Bonjour
La solution semble être d'interdire le collage et de faire en sorte que l'utilisateur entre ses données au clavier
(Frédéric Sigonneau)
Méthode radicale pour interdire le copier/coller (peut s'affiner en jouant sur les paramètres Target et Sh) :
dans le module ThisWorkbook de ton classeur
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Range)
Application.CutCopyMode = False
End Sub
C'est une solution.
Cordialement,
Amadéus
Hello Amadéus,
Merci pour cette solution mais elle n'est malheureusement pas viable pour mon cas.
En revanche, serait-il possible d'exploiter ce genre de fonction pour forcer un copier/coller par valeur ?
Genre récupérer l'événement "si coller" et appliquer la fonction coller par valeur ? (Perso je ne sais pas comment récupérer un tel événement)
Re bonjour
Désolé, mais VBA n'étant pas mont fort, je passe le témoin à.....
J'espère pour toi que Mytå que je salue au passage fera un tour par ici..
Cordialement,
Amadéus
Salut Elftor, Amadéus et le forum
On pourrait pour le copier-coller supprimer toutes les commandes, voir le lien
https://www.excel-pratique.com/forum/viewtopic.php?t=1620
Et créer à la place son propre sous-menu Copier-Coller
Sub SupprimerCommande()
On Error Resume Next
Application.CommandBars("Edit").Controls("MonCopier").Delete
End Sub
Sub AjouterCommande()
Set Tools = Application.CommandBars("Edit")
With Tools.Controls.Add(, , , , True)
.BeginGroup = True 'Séparation avant le bouton de commande
.Caption = "MonCopier"
.OnAction = "Nom de la macro à exécuter"
End With
End Sub
Pour le glisser-déposer je regarde si c'est possible...
Mytå
Re le forum
Pour empecher le glisser-déposer et le pinceau(Reproduire mise en forme)
Il y a surement mieux mais voila mon ébauche.
Dim PrevCel As Range
Dim Etat As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CutCopyMode = xlCut Then Exit Sub
If Target.Address <> PrevCel.Address Then
If Etat = True Then
Etat = False: Exit Sub
End If
Etat = True
Application.Undo
Application.CutCopyMode = False
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set PrevCel = Target
End Sub
Mytå
Mmmmmh ca a l'air pas mal tout ça !
Donc si je résume par rapport à mon problème.
Il est possible d'enlever juste la commande "coller" du menu edition, puis de rajouter une nouvelle commande coller "customisée".
Dans cette dernière fonction, on pourrait..
1. Si le copier provient d'une cellule excel (du meme classeur ou d'un autre), forcer le collage par valeur
2. Si le copier provient d'ailleurs, faire un copier de la chaine de caractère dans la cellule, sans aucune mise en forme quelconque
Sinon je ne comprends pas très bien l'emplacement de toutes ces fonctions dans le classeur.
Peux-tu m'aider ?
Salut le forum
Rien testé à toi de voir, j'ai juste regrouper les macros dans le fichier.
Mytå
Yes, merci Myta. Je comprends bien mieux le système maintenant.
J'ai pu relever quelques dysfonctionnements par des tests. Le premier est qu'il y a un bug dès la première action sur une feuille, que j'ai corrigé car PrevCel n'avait pas d'allocation de range (J'ai rajouté donc dans Worksheet_Change: If PrevCel Is Nothing Then Exit Sub)
Cependant le glisser-déposer ne fonctionne pas très bien, je crois que c'est du au fait que la ligne Application.Undo réappelle Worksheet_SelectionChange et Worksheet_Change mais je n'en suis pas sûr. Je ne sais pas trop comment le corriger.
Un autre problème subsiste aussi car les changements des commandBars et Cie sont appliqués sur l'application Excel entière, donc à tous les workbooks.
Je n'ai pas encore eu le temps d'essayer de coder ma fonction "coller" customisée mais je vais essayer de faire ça.