Eviter le copier coller dans plusieurs listes déroulantes

phandil

XLDnaute Nouveau
bonjour,

j'essaie de protéger les listes déroulantes du copier coller et de l'inscription manuel.

J'ai 3 listes déroulantes faisant à chaque fois références à 3 feuilles différentes qui ont chacune une liste nommé différente

Pour l'instant avec mes recherches j'ai trouvé comment protéger une liste mais pas moyen de protéger les 2 autres

Voici le code

Code:
Dim validation As Boolean
Dim validation1 As Boolean
Dim validation2 As Boolean

Dim trouvé As Boolean
Dim trouvé1 As Boolean
Dim trouvé2 As Boolean
validation = False
validation1 = False
validation2 = False

For Each cellule In Sheets("XXXX_test").Range("LISTE_TEST")
    If Target.Value = cellule.Value Then trouvé = True
Next
On Error Resume Next
validation = Target.validation.InCellDropdown
If validation = True And trouvé = False Then Target.ClearContents
On Error GoTo 0

For Each cellule In Sheets("XXXX_FRN").Range("liste_fournisseur")
    If Target.Value = cellule.Value Then trouvé1 = True
Next
On Error Resume Next
validation1 = Target.validation1.InCellDropdown
If validation1 = True And trouvé1 = False Then Target.ClearContents
On Error GoTo 0

For Each cellule In Sheets("XXXX_NIVEAU").Range("liste_niveau")
    If Target.Value = cellule.Value Then trouvé2 = True
Next
On Error Resume Next
validation2 = Target.validation2.InCellDropdown
If validation2 = True And trouvé2 = False Then Target.ClearContents
On Error GoTo 0


End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Cells.SpecialCells(xlCellTypeAllValidation), Target) Is Nothing Then
    Application.CutCopyMode = False
End If
Application.EnableEvents = True
End Sub
Merci d'avance pour vos réponses
 

Papou-net

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

Bonjour phandil,

Là aussi, tu augmenterais tes chances de réponses en joignant un fichier support de travail pour les éventuels répondeurs.

A +

Cordialement.

PS : est-ce le même fichier que dans ta demande précédente ?
 

phandil

XLDnaute Nouveau
Re : Eviter le copier coller dans plusieurs listes déroulantes

oui l'autre sujet étant clot j'ai réouvert un fil de discussion ici

euh pour la création d'un fichier exemple...je vais voir dès que j'ai 5 minutes pour l'adapter

merci
 

Papou-net

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

Bonsoir phandil,

Effectivement, c'est plus explicite avec une pièce jointe.

Mais le problème est assez ardu à résoudre, car les opérations de copie ne déclenchent pas l'événement Change, donc pas d'action possible sur les cellules déroulantes. Je suis en train d'explorer une piste, mais pour le moment je n'ai pas encore pu finaliser la solution et il se fait tard. Je te tiendrai donc au courant demain, si tout va bien, ou sinon au plus tôt.

A +

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

RE :

Finalement, la curiosité étant plus forte que le sommeil, je te propose donc une solution que j'ai trouvée et adaptée à ton exemple.

Je me suis inspiré d'une publication de MichD sur le forum Microsoft Community, et je l'ai adaptée à ton cas particulier.

Pour résumer :

- La sélection de la feuille Feuil1 désactive la fonction de copie par Drag & Drop, la sélection de n'importe quelle autre feuille la rétablit.

- Un clic droit sur une des cellules à liste de validation vide le Presse-papier et donc rend le Coller inactif.

Cordialement.


PS : pour rendre l'exemple plus parlant, et pour vérifier le bon fonctionnement du programme, j'ai modifié les valeurs des plages "essai2" et "essai3".
 

Fichiers joints

pascal21

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

Application.CommandBars("Cell").Controls("Coller").Visible = false
Application.CommandBars("Cell").Controls("Copier").Visible = false
bonjour à tous
sans avoir regardé le fichier joint
une solution, entre autres, permettant de supprimer dans le menu contextuel du clic doit les lignes copier et coller
à adapter aux cellules concernées et remettre à true lors du changement de feuille
n'empêche pas le copier coller par ctrl/C et Ctrl/V malheureusement
 

Papou-net

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

Bonjour à tous,

J'ai repris mon exemple de la veille car j'avais oublié de tester la copie avec les boutons du ruban. Cette copie restait opérationnelle si l'on utilisait le bouton Coller après sélection par clic gauche d'une cellule avec liste de validation. Ce n'est plus possible désormais.

@ Pascal21 :

Les commandes de barres d'outils que tu préconises ne fonctionnent plus avec XL2010 et n'empêchent pas les actions par ctl-C et ctl-V, comme la copie par glissement de la souris d'ailleurs.

@ 00 :

Très astucieuse ton idée qui respecte la structure d'origine du code de notre ami phandil. Seule petite remarque de ma part : le collage spécial n'est pas désactivé et permet donc de modifier le formatage de la cellule. Mais ce n'est pas forcément un inconvénient, seul le demandeur peut se prononcer sur ce point. Tout ceci ne m'empêche pas de t'envoyer 1999 bisous, en attendant le 2000ème.

A bientôt.
 

Fichiers joints

laetitia90

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

bonjour tous :):):)

pour empecher collage on peut tenter cela

Code:
 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 If Not Intersect(Target, [a1:c1]) Is Nothing And Target.Count > 1 Then Cancel = 1
 If Not Intersect(Target, [a1:c1]) Is Nothing And Target.Count = 1 Then Cancel = 1
End Sub
je profite de l'occasion pour féliciter DoubleZero barbatruc:):):):):):):):):)
 

laetitia90

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

re tous:):):)

une autre piste qui peut être interessante utiliser sendkeys attention quand peut méme sendkeys peut avoir des effets "pervers" par exemple deactiver la touche verr num en tenir compte !!!!
Code:
 SendKeys "{NUMLOCK}"
le code pourrait se résumer a une seule ligne mais bon!!!! pas trop de temps sorry

Code:
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect(Target, [a1:c1]) Is Nothing And Target.Count = 1 Then SendKeys "{ESC}"
End Sub
ou encore plus simplement pourquoi pas

Code:
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect(Target, [a1:c1]) Is Nothing And Target.Count = 1 Then _
 Application.CutCopyMode = False
End Sub
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

Bonjour à tous,

Bravo à Laetitia:) pour sa dernière proposition : on ne peut faire plus simple avec une seule procédure.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [a1:c1]) Is Nothing And Target.Count = 1 Then _
Application.CutCopyMode = False
End Sub
Voici donc la formule finale, qui tient compte des listes déroulantes, quelle que soit leur position dans la feuille de calcul et le nombre de cellules sélectionnées :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then Application.CutCopyMode = False
Application.EnableEvents = True
End Sub
Fichier ci-joint.

Cordialement.
 

Fichiers joints

phandil

XLDnaute Nouveau
Re : Eviter le copier coller dans plusieurs listes déroulantes

Bonjour à tous !

et tout d'abord merci pour vos différentes piste et pour le temps consacré :)

Quelques remarques sur les solutions proposés repris des différents fichiers excel:

Pour le classeur 2: Parfait pour le copier-coller seulement j'ai un soucis assez bizarre...dans 2 listes déroulantes j'ai toujours la possibilité d'écrire du texte dans la cellule ! Alors que les 2 autres les cellules sont protégé....

J'ai un peu de mal à comprendre leur différence...J'envoie le fichier excel en copie

pour le classeur 3: ATTENTION le copier coller venant d'un programme tierce fonctionne (limitation uniquement situé sur le copier -coller des feuilles il me semble.

merci d'avance pour vos réponses

cordialement
 

Fichiers joints

Papou-net

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

Bonjour à tous,

RE Phandil :

Pour le classeur 2: Parfait pour le copier-coller seulement j'ai un soucis assez bizarre...dans 2 listes déroulantes j'ai toujours la possibilité d'écrire du texte dans la cellule ! Alors que les 2 autres les cellules sont protégé....
Pour ma part, je n'ai relevé qu'une cellule dans ce cas : B4. C'est dû au fait que la plage mentionnée dans la liste de validation (=LISTE_TEST) n'existe pas dans le classeur.

pour le classeur 3: ATTENTION le copier coller venant d'un programme tierce fonctionne (limitation uniquement situé sur le copier -coller des feuilles il me semble.
Essaie peut-être avec la version 4 qui vide le presse-papier si une cellule avec liste de validation est sélectionnée :

Code:
Private Declare Function OpenClipboard Lib "user32" _
    (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
  OpenClipboard 0
  EmptyClipboard
  CloseClipboard
  Application.CutCopyMode = False
End If
Application.EnableEvents = True
End Sub
Cordialement.
 

Fichiers joints

phandil

XLDnaute Nouveau
Re : Eviter le copier coller dans plusieurs listes déroulantes

J'avais déjà retravaillé le code pour le copier-coller ==> pas de problème

Seulement pour le premier point il y a un paramètre qui me semblait ingnifant mais qui visiblement prend tout son sens:

Dans ma liste déroulante j'ai un blanc !

et visiblement ce blanc qui peut être une option fait "sauter" la sécurité écriture

CF fichier en pièce jointe: changement de la liste essai1
 

Fichiers joints

Papou-net

XLDnaute Barbatruc
Re : Eviter le copier coller dans plusieurs listes déroulantes

RE Phandil,

Effectivement, un blanc dans la cellule autorise une saisie non contrôlée par la validation des données. Pour y pallier, il suffit de décocher la case "Ignorer si vide". Cette option n'empêchera pas une valeur nulle dans la cellule.

Cordialement.
 

Fichiers joints

phandil

XLDnaute Nouveau
Re : Eviter le copier coller dans plusieurs listes déroulantes

ca ne fonctionne pas mais ce n'est pas grave, j'ai remplacé le blanc par un "-"

merci ;)

(j'ai un autre soucis encore suite au prochain épisode !)
 

Discussions similaires


Haut Bas