Interdire le copier coller dans une zone de texte - VBA Excel [Résolu]

talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 16:50 - Dernière réponse : talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention
- 21 janv. 2012 à 21:14
Bonjour,

Je souhaiterais paramétrer mes zones de texte pour qu'il soit impossible de coller une valeur quelconque, provenant d'une cellule ou d'une autre zone de texte.

J'ai effectué pas mal de recherches sur ce sujet, et trouvé aucunes réponses...

Quelqu'un aurait-il une une solution à me proposer??

Merci!

Damien
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 19:23
3
Merci
Oui, cela arrive si, laissant le focus sur ta textbox, tu te rends sur une autre feuille puis reviens (car le focus n'a pas été perdu et GotFocus ne se rédeclenche donc pas.

Je vais donc te proposer une solution totalement différente :

efface tout, y compris ton évènement Keypress
Et ajoute ceci dans l'évènement Change de ta textbox
Private Sub TextBox1_Change()
 Static anc As String
 If Not IsNumeric(TextBox1.Text) Then
   TextBox1.Text = anc
 Else
   anc =  TextBox1.Text
 End If
End Sub


Elle ne pourra, dès lors qu'accepter des numériques (entiers ou décimaux avec séparateur virgule ) qu'ils soient frappés ou copiés/collés.

C'est encore la solution la moins chère
Si tu veux le séparateur point à la place du séparateur virgule, tu dis (encore que : pourquoi donc ?)




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 17:25
0
Merci
Bonjour,

Je te promets que si le presse-papier ne contient rien, on ne peut rien coller

Vide donc le presse-papier à l'entrée dans ta textbox


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 17:29
0
Merci
D'accord,ca semble plausible mais je vois pas trop comment je peux vider le presse papier à l'entrée dans ma textbox?
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 17:35
0
Merci
Ah !

Personnellement, j'utilise pour ce faire une fonction de l'Api de Windows.
Mais tu me parais débutant ===>> solution à la portée de tes connaissances, donc :

Dim mydate As Object
Private Sub TextBox1_Enter()
  Set MyData = New DataObject
  MyData.SetText ""
  MyData.PutInClipboard
End Sub


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 17:49
0
Merci
D'accord merci!
Oui en effet je suis débutant :)

Par contre, j'utilisais un Key press au niveau de ma textbox pour que l'utilisateur ne puisse pas entrer des valeurs non numériques. Voici mon code :

................
Private Sub ZT_DUREEAMT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If InStr("1234567890", Chr(KeyAscii)) = 0 Then
KeyAscii = 0: Beep

End If

End Sub
................

Est ce que je peux insérer ton code directement ou je suis obligé de définir "Enter" au niveau de ma textbox?

Merci!
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 17:54
0
Merci
Est ce que je peux insérer ton code directement ou je suis obligé de définir "Enter" au niveau de ma textbox?


je ne te comprends pas. Qu'entends-tu par "définir" ?
il s'agit là d'un évènement déjà existant !

Dim mydate As Object

est à mettre tout en haut, dans la partie déclarations (avant toute procédure)
et
Set MyData = New DataObject
  MyData.SetText ""
  MyData.PutInClipboard

est à mettre à l'intérieur de la procédure évènementielle Private Sub TextBox1_Enter()

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 18:04
0
Merci
Ce que je voulais dire, c'est comment j'insère ton code dans ma procédure suivante, en sachant que ma procédure est défini par un KeyPress et non un Enter :
................
Private Sub ZT_DUREEAMT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If InStr("1234567890", Chr(KeyAscii)) = 0 Then
KeyAscii = 0: Beep

End If

End Sub
................

Merci
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 18:07
0
Merci
je crois avoir été clair :
tu laisses la sub évènementielle KeyPress telle que tu l'as écrite
tu ajoutes la procédure évènementielle Enter telle que je l'aiu écrite




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 18:16
0
Merci
D'accord, je l'ai insérer comme tu me l'as dit mais il doit y avoir un petit probleme car j'arrives à coller les valeurs copiées dans ma Zone de texte :

.....................................
Dim MyDate As Object

Private Sub ZT_DUREEAMT_Enter()

Set MyData = New DataObject
MyData.SetText ""
MyData.PutInClipboard

End Sub

Private Sub ZT_DUREEAMT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If InStr("1234567890", Chr(KeyAscii)) = 0 Then
KeyAscii = 0: Beep

End If

End Sub
.....................................

Merci
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 18:20
0
Merci
Comprends pas !
Je viens de tester ===>> au poil et sans faille ?

Qu'appelles-tu ta "zone de texte" ? quel est ce contrôle ? sur quoi l'as(tu placé ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 18:24
0
Merci
Allez !
Je devine ....
Ta textbox est sur ta feuille et non sur un UserForm
Tu as recopié directement le code, en-tete inclue) alors qu'il ne correspond pas à un évènement (Enter).
Dans ton cas, ce sera l'évènement GorFocus.
Ne le crée pas ! On ne fait jamais cela !
double-clique sur ta textbox ===>> choisis dans la colonne de droite l'évènement GotFocus ===>> mets-y les instructions que tu avais mis dans un évènement (Enter) qui n'existe que sur textbox dans Userform !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 18:29
0
Merci
J'ai inséré une zone de texte dans "Inserer" et "Contrôles ActiveX".
Je l'ai nommé "ZT_DUREEAMT".

J'ai insérer le code en me positionnant sur cette Zone de texte. Par contre, Etant donné que j'ai EXCEL 2007, je n'ai pas accès à la déclaration "Enter". Je l'ai donc écrite manuellement.

Ca serait pas une erreur de variable car "Dim MyDate" est différent de "Set MyData"??

Merci
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 18:32
0
Merci
corrige ma faute de frappe. C'est bien MyData et on MyDate

Tu es donc bien sur la feuille et non dans userform ===>> lis mon dernier message


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 18:37
0
Merci
Oui tout à fait!

Merci cela marche!

Dernier petit bémole, si je copie une valeur d'un autre fichier Excel, elle se colle dans la zone de texte..

Aurais tu une solution??

Merci beaucoup
Commenter la réponse de talined
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 19:37
0
Merci
Parfait!!

Derniere question et je ne t'embête plus :

J'ai des zones de texte ou je n'accepte que des lettres en majuscules.
Comment je peux adapter ton dernier code avec du texte ( comment remplacer la condition Not isnumeric?)

Merci
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 21 janv. 2012 à 20:06
0
Merci
Ah non, là ! non !
Sujet totalement distinct ===>> discussion distincte (c'est un point de discipline à observer, si l'on veut s'y retrouver !)
Ceci étant dit : avant d'ouvrir une nouvelle discussion : essaye d'abord seul (c'est facile).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 21 janv. 2012 à 21:14
0
Merci
Oui d'accord.

J'ai essayé mais j'avoue que je ne vois point comment écrire que si la text box est différente d'une chaîne de texte en particulier, alors on interdit la saisie..
Commenter la réponse de talined

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.