Restreindre les valeurs possibles d'une cellule Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
V
VinceL
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 24 octobre 2007

Message par VinceL » 24 octobre 2007, 23:25

Bonjour a tous,

voici mon petit souci. mes utilisateurs mettent a jour une feuille excel.
Pour certains champs, j'ai cree une liste de valeur accessible via un menu deroulant. la feuille est protegee(betement avec l'option dans outils) afin qu'ils ne puissent pas bidouiller. Pour d'autre champs l'edition est libre. Si on essaie de rentrer directement une valeur dans la cellule, excel envoie un message d'erreur, et jusque ici tout va bien.

Seulement voila, quelques petits malins font des copier coller en prenant la valeur contenue dans un champ libre et en la collant dans un des champs qui ne devrait autoriser que les valeurs de la liste. il n'y a pas de message d'erreur qui s'affiche et la valeur collee se trouve donc dans une cellule qui ne devrait permettre que les valeurs de ma liste sans aucun souci.

Je ne veux pas empecher le copier coller(de toute facon je sais pas faire :) ) parce qu'ils doivent pouvoir coller une bonne valeur si elle est dans la liste mais j'aimerais bien qu'excel renvoie un message d'erreur si elle n'y est pas.

Merci de votre aide
s
souri84
Membre impliqué
Membre impliqué
Messages : 1'042
Inscrit le : 7 mai 2007
Version d'Excel : 2003 FR / 2007 UK

Message par souri84 » 24 octobre 2007, 23:35

pour empêcher le copier coller, un code circule sur internet, si tu veux je te l'envoi demain matin mais de toute façon, a priori ça ne te servira pas puisque tu ne veux pas l'interdire...
Excel 2003 / Excel 2007
V
VinceL
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 24 octobre 2007

Message par VinceL » 24 octobre 2007, 23:40

Bah ca me fera pas de mal de progresser en excel :) donc je suis preneur de ton bout de code meme si il m'aidera pas sur ce coup la.

Merci
s
souri84
Membre impliqué
Membre impliqué
Messages : 1'042
Inscrit le : 7 mai 2007
Version d'Excel : 2003 FR / 2007 UK

Message par souri84 » 24 octobre 2007, 23:41

ok je te l'envoi demain, il est sur mon ordi pro...
Excel 2003 / Excel 2007
s
souri84
Membre impliqué
Membre impliqué
Messages : 1'042
Inscrit le : 7 mai 2007
Version d'Excel : 2003 FR / 2007 UK

Message par souri84 » 25 octobre 2007, 09:23

Salut, voici le code à insérer dans un module:

Sub InterdireCopierCouper()
On Error Resume Next
With Application

'disables shortcut keys
.OnKey "^c", ""
.OnKey "^v", ""
.OnKey "^x", ""

'Disables Copy
.CommandBars("Edit").FindControl(ID:=19).Enabled = False
.CommandBars("Edit").FindControl(ID:=848).Enabled = False
.CommandBars("Cell").FindControl(ID:=19).Enabled = False
.CommandBars("Column").FindControl(ID:=19).Enabled = False
.CommandBars("Row").FindControl(ID:=19).Enabled = False
.CommandBars("Button").FindControl(ID:=19).Enabled = False
.CommandBars("Formula Bar").FindControl(ID:=19).Enabled = False
.CommandBars("Worksheet Menu Bar").FindControl(ID:=19).Enabled = False
.CommandBars("Standard").FindControl(ID:=19).Enabled = False
.CommandBars("Button").FindControl(ID:=848).Enabled = False
.CommandBars("Formula Bar").FindControl(ID:=848).Enabled = False
.CommandBars("Worksheet Menu Bar").FindControl(ID:=848).Enabled = False
.CommandBars("Standard").FindControl(ID:=848).Enabled = False
.CommandBars("Ply").FindControl(ID:=848).Enabled = False

'Disables Cut
.CommandBars("Edit").FindControl(ID:=21).Enabled = False
.CommandBars("Cell").FindControl(ID:=21).Enabled = False
.CommandBars("Column").FindControl(ID:=21).Enabled = False
.CommandBars("Row").FindControl(ID:=21).Enabled = False
.CommandBars("Button").FindControl(ID:=21).Enabled = False
.CommandBars("Formula Bar").FindControl(ID:=21).Enabled = False
.CommandBars("Worksheet Menu Bar").FindControl(ID:=21).Enabled = False
.CommandBars("Standard").FindControl(ID:=21).Enabled = False

'Disable Paste
.CommandBars("Edit").FindControl(ID:=22).Enabled = False
.CommandBars("Cell").FindControl(ID:=22).Enabled = False
.CommandBars("Column").FindControl(ID:=22).Enabled = False
.CommandBars("Row").FindControl(ID:=22).Enabled = False
.CommandBars("Button").FindControl(ID:=22).Enabled = False
.CommandBars("Formula Bar").FindControl(ID:=22).Enabled = False
.CommandBars("Worksheet Menu Bar").FindControl(ID:=22).Enabled = False
.CommandBars("Standard").FindControl(ID:=22).Enabled = False

'Disable PasteSpecial
.CommandBars("Edit").FindControl(ID:=755).Enabled = False
.CommandBars("Cell").FindControl(ID:=755).Enabled = False
.CommandBars("Column").FindControl(ID:=755).Enabled = False
.CommandBars("Row").FindControl(ID:=755).Enabled = False
.CommandBars("Button").FindControl(ID:=755).Enabled = False
.CommandBars("Formula Bar").FindControl(ID:=755).Enabled = False
.CommandBars("Worksheet Menu Bar").FindControl(ID:=755).Enabled = False
.CommandBars("Standard").FindControl(ID:=755).Enabled = False

End With
End Sub
Excel 2003 / Excel 2007
s
souri84
Membre impliqué
Membre impliqué
Messages : 1'042
Inscrit le : 7 mai 2007
Version d'Excel : 2003 FR / 2007 UK

Message par souri84 » 25 octobre 2007, 09:24

Et voici le code pour rétablir le copier coller

Sub RetablirCopierCouper()
On Error Resume Next
With Application
.OnKey "^c"
.OnKey "^v"
.OnKey "^x"

'Enables Copy
.CommandBars("Edit").FindControl(ID:=19).Enabled = True
.CommandBars("Edit").FindControl(ID:=848).Enabled = True
.CommandBars("Cell").FindControl(ID:=19).Enabled = True
.CommandBars("Column").FindControl(ID:=19).Enabled = True
.CommandBars("Row").FindControl(ID:=19).Enabled = True
.CommandBars("Button").FindControl(ID:=19).Enabled = True
.CommandBars("Formula Bar").FindControl(ID:=19).Enabled = True
.CommandBars("Worksheet Menu Bar").FindControl(ID:=19).Enabled = True
.CommandBars("Standard").FindControl(ID:=19).Enabled = True
.CommandBars("Button").FindControl(ID:=848).Enabled = True
.CommandBars("Formula Bar").FindControl(ID:=848).Enabled = True
.CommandBars("Worksheet Menu Bar").FindControl(ID:=848).Enabled = True
.CommandBars("Standard").FindControl(ID:=848).Enabled = True
.CommandBars("Ply").FindControl(ID:=848).Enabled = True

' Enables Cut
.CommandBars("Edit").FindControl(ID:=21).Enabled = True
.CommandBars("Cell").FindControl(ID:=21).Enabled = True
.CommandBars("Column").FindControl(ID:=21).Enabled = True
.CommandBars("Row").FindControl(ID:=21).Enabled = True
.CommandBars("Button").FindControl(ID:=21).Enabled = True
.CommandBars("Formula Bar").FindControl(ID:=21).Enabled = True
.CommandBars("Worksheet Menu Bar").FindControl(ID:=21).Enabled = True
.CommandBars("Standard").FindControl(ID:=21).Enabled = True

'Enables PasteSpecial
.CommandBars("Edit").FindControl(ID:=755).Enabled = True
.CommandBars("Cell").FindControl(ID:=755).Enabled = True
.CommandBars("Column").FindControl(ID:=755).Enabled = True
.CommandBars("Row").FindControl(ID:=755).Enabled = True
.CommandBars("Button").FindControl(ID:=755).Enabled = True
.CommandBars("Formula Bar").FindControl(ID:=755).Enabled = True
.CommandBars("Worksheet Menu Bar").FindControl(ID:=755).Enabled = True
.CommandBars("Standard").FindControl(ID:=755).Enabled = True

End With
End Sub
Excel 2003 / Excel 2007
V
VinceL
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 24 octobre 2007

Message par VinceL » 25 octobre 2007, 15:18

Merci pour ce code, je vais y jeter un oeil.

Est ce que quelqu'un a la solution a ma petite question?
merci.
p
petidani
Membre habitué
Membre habitué
Messages : 79
Inscrit le : 6 septembre 2006

Message par petidani » 25 octobre 2007, 18:46

Vous pouvez aussi utiliser le private sub pour bloquer des cellules.

CAD : dans le Vba choisir la feuille sur laquelle se trouve les cellules a remplir

et faire un code de blocage.

-----------------------------------------------------------------------------
Private Sub worksheet_change(ByVal target As Range)
If Range("A1").Value <> "" And Range("A1").Value <> "1" Then
MsgBox ("c'est faux")
Range("A1").Value = ""
Else
'
End If
End Sub
---------------------------------------------------------------------------------
En mettant bien sur les valeurs que vous voulez dedans.

A+

petidani
V
VinceL
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 24 octobre 2007

Message par VinceL » 26 octobre 2007, 01:11

Merci pour cet autre petit bout de code sauf que j'ai pas trop du comprendre la maniere de l'utiliser et qu'il me renvoie des erreurs tout le temps :)

Juste une question au sujet du code qui empeche le copier coller,
est ce qu'il est possible de ne l'appliquer que sur certaines feuilles d'un meme classeur?
je l'ai teste et la macro s'appliquait sur tous mes documents excel ouverts

Merci.

ps pas de nouvelles sur ma premiere question? c'est dommage meme si j'apprends quelques trucs sur d'autres sujets :) .
p
petidani
Membre habitué
Membre habitué
Messages : 79
Inscrit le : 6 septembre 2006

Message par petidani » 26 octobre 2007, 12:33

Bonjour,

Je vous joins le fichier avec un test en A1

Dans lequel on ne peut mettre que la valeur 1 (suite au code d'hier)

https://www.excel-pratique.com/~files/doc/TEST_EXCEL.xls

A+

petidani
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message