Interdire le copier coller dans une zone de texte - VBA Excel

Résolu
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012 - 21 janv. 2012 à 16:50
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012 - 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

17 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 19:23
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 17:25
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
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 17:29
D'accord,ca semble plausible mais je vois pas trop comment je peux vider le presse papier à l'entrée dans ma textbox?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 17:35
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 17:49
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!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 17:54
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
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 18:04
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 18:07
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
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 18:16
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 18:20
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 18:24
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
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 18:29
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 18:32
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
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 18:37
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
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 19:37
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 janv. 2012 à 20:06
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
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
21 janv. 2012 à 21:14
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..
0
Rejoignez-nous