XL 2013 autoriser uniquement le coller "valeur" sur une plage de cellule.

cyrikou

XLDnaute Occasionnel
Bonjour à tous,

Est possible de n'autoriser que le "coller" "valeur" sur une plage de cellule d'une feuille . J'ai besoin de cette fonction car les utilisateurs de mon fichier, colle généralement en standard, ce qui provoque des problèmes de compatibilité, de mise en forme, ect....

Merci d'avance :cool:
 

DoubleZero

XLDnaute Barbatruc
Re : autoriser uniquement le coller "valeur" sur une plage de cellule.

Bonjour, cyrikou, le Forum,

Sélectionner les cellules pour lesquelles le "copier-coller" doit être proscrit, nommer la sélection "NON", et copier le code suivant dans le module de l'onglet :

Code:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal c As Range)
'Adaptation d'un code de job75 (Merci !)
    If Not Intersect(c, [NON]) Is Nothing Then Application.CutCopyMode = 0
End Sub

A bientôt :)
 

cyrikou

XLDnaute Occasionnel
Re : autoriser uniquement le coller "valeur" sur une plage de cellule.

Merci pour la réponse mis cela ne répond pas vraiment à ma question. C'est le mode copier "valeurs" que je veux activer sur la plage de cellule et pas les autres modes (format, formules, etc...). Merci tout de même car ce code me sera utile dans le futur, j'en suis sur .:cool:
 

eriiic

XLDnaute Barbatruc
Re : autoriser uniquement le coller "valeur" sur une plage de cellule.

Bonjour,

ne l'interdit pas mais remplace par le collé valeur :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [plage]) Is Nothing Then
        Target.Copy
        Application.EnableEvents = False
        Application.Undo
        Target.PasteSpecial Paste:=xlPasteValues
        Application.EnableEvents = True
    End If
End Sub
Si le collé dépasse de [plage] c'est la totalité qui sera en collé valeur.
eric
 

Pièces jointes

  • Classeur4.xlsm
    15.4 KB · Affichages: 109
  • Classeur4.xlsm
    15.4 KB · Affichages: 78
Dernière édition:

cyrikou

XLDnaute Occasionnel
Re : autoriser uniquement le coller "valeur" sur une plage de cellule.

Merci pour le code, je l'ai modifié un peu pour obtenir exactement la copie des valeurs (dans le cas du code plus haut, il y a le choix pour conserver la mise en forme d'origine, ou prendre la mise en forme de la feuille d'accueil, ce qui peut être genant si les valeurs copiées ont une mise en forme différente que le fichier de travail.

Le code suivant ne permet que de coller les valeurs (1,2,3...) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("plage")) Is Nothing Then
        Target.Copy
        Application.EnableEvents = False
        Application.Undo
        Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.EnableEvents = True
    End If

end sub

Merci Eric:cool:
 

misterno

XLDnaute Nouveau
Bonjour,
Je ne comprend pas bien le fonctionnement que tu veux.
Tu as collage Mise en forme ou collage spécial format pour ça.
eric

Bonjour Eric,

J'ai un fichier que je diffuse à plusieurs utilisateurs pour qu'ils y saisissent leurs demandes…
les cellules on un formatage particulier une lige sur deux pour faciliter la lecture.
Et certaines demandes des utilisateurs peuvent être répétitives pour partie d'une ligne à l'autre.
Ce qui les conduit renseigner le fichier tantôt par saisie au clavier, tantôt par copier/coller.
Or le "copier/coller" détruit la mise en forme du document ( et il n'est pas envisageable de demander aux utilisateurs ultra basics de faire "collage spéciale ou valeur " )
Donc mon idée est de laisser possible la saisie au clavier ET de forcer le "collage de valeur" ( sans la mise en forme).
Si tu as une solution je suis super preneur.
( Le script correspond presque à ma demande sauf qu'il ne permet pas la saisie clavier )

Merci
 

eriiic

XLDnaute Barbatruc
Re,
Bonjour Patrick,

donc c'est un collage valeur (qui conserve les formats d'origine) comme décrit dans ce topic que tu veux, et non un collage format.
Teste ce qui est proposé.

Et si tu mets ta plage en (Insertion /) Tableau, les formats 1 ligne/2 sont créés automatiquement et conservés sur les copiés-collés normaux.
eric
 

patricktoulon

XLDnaute Barbatruc
re
perso le repaste apres un undo ,c'est pas ma tasse de thé
surtout que ".value" donne la valeur
donc
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    With Application
        .EnableEvents = False
        x = Target.Value
        .Undo
        Target.Value = x
        .EnableEvents = True
    End With
End Sub
 

misterno

XLDnaute Nouveau
re
perso le repaste apres un undo ,c'est pas ma tasse de thé
surtout que ".value" donne la valeur
donc
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    With Application
        .EnableEvents = False
        x = Target.Value
        .Undo
        Target.Value = x
        .EnableEvents = True
    End With
End Sub


Bonjour Messieurs,
Merci pour votre aide.
Cette fois, le code correspond exactement à mon besoin.

Merci encore.
 

Cdy

XLDnaute Nouveau
Bonjour à tous !

Merci pour votre contribution, qui m'a rendue un fière service!
Je suis juste ennuyée : ce code ne permet que de coller, il ne permet pas une saisie manuelle (enfin on peut écrire, mais la valeur disparait...)
Auriez vous une petite adaptation pour permettre ou la saisie manuelle ou le collage seulement en valeur?

Vous en remerciant par avance !

PS : Pardon, ce poste n'étant pas tout jeune... j'utilise Excel 2016
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 928
Membres
103 404
dernier inscrit
sultan87