[VBA]Textbox - N'autoriser une chaîne de caractère définie - VBA Excel [Résolu]

talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 22 janv. 2012 à 12:52 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 23 janv. 2012 à 01:23
Bonjour,

J'ai un petit souci concernant le paramétrage d'une textbox sur VBA Excel
Je vous explique : J'ai insérer une textbox directement sur une feuille ( non pas sur unseform) qui doit repondre à 2 conditions :
- N'autoriser que des lettres en majuscules (ABCDEFGHIJKLMNOPQRSTUVWXYZ), et des chiffres (123456789)
- Empecher le copier coller de n'importe quelle valeur non définie ci-dessus.

J'avais réussi à empécher le copier coller de caractères non numériques avec le code ci dessous pour une textbox n'autorisant que du numérique. Voici ce que ca donnait :

............................
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
............................

Etant débutant, je ne vois pas comment traduire mes conditions (lettres Majuscules + chiffres)
Merci par avance
Afficher la suite 

24 réponses

Répondre au sujet
Utilisateur anonyme - 22 janv. 2012 à 14:32
+3
Utile
Pardon, j'étais resté en VB6...

VBA:
Dim mydate As Object

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If InStr("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", Chr(KeyAscii)) 0 Then KeyAscii 0
End Sub

Private Sub ClipClear()
  Set MyData = New DataObject
  MyData.SetText "Interdiction de copier/coller!"
  MyData.PutInClipboard
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
ClipClear
End Sub

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ClipClear
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ClipClear
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
ClipClear
End Sub


Je te laisse faire, acive. Vas-y (facile)

Oui... trop facile! j'ai juste copié un de tes codes Uc
C'est à croire que c'est moi qui a besoin de l'interdiction du copier/coller...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 janv. 2012 à 16:43
+3
Utile
T'as raison, acive ! Je n'avais pas vu que tu gérais également le clavier.

Mais chose promise, chose due ===>> j'avais dit un seul évènement ===>> le voilà :
Private Sub TextBox1_Change()
  Dim toto
  Static anc As String
  toto = Array("*[" & Chr(1) & "-/]*", "*[:-@]*", "*[([)\-" & Chr(255) & "]*")
  For i = 0 To UBound(toto)
    If TextBox1.Text Like toto(i) Then
      TextBox1.Text = anc: Exit Sub
    End If
  Next
  anc = TextBox1.Text
End Sub


Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 'ceci n'est là que pour rendre la vie facile à l'utilisateur
 'on peut le supprimer, mais on force alors l'utilisateur à presser la touche Maj pour rien
 KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub


En précisant que l'évènement Change, comme expliqué, n'est là que pour faciliter la vie, rien de plus.
Pas belle, la vie ?




____________________
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 janv. 2012 à 13:36
0
Utile
Bonjour,
Tu t'es trompé de rubrique ! VBA n'est pas VB6 !
"Fais-y dorénavant gaffe", s'il te plait (important).
Mais dis-nous (important également) :
-- sans te protéger des copiers/coller (facile et très rapide)
ou
-- en te protégeant de copiers/coller (facile mais plus lent)
?


____________________
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
Utilisateur anonyme - 22 janv. 2012 à 13:41
0
Utile
Salut,

Déjà pour la saisie tu peux faire quelque chose de ce genre:

Private Sub Text1_Change()
Text1.Text = UCase(Text1.Text)
Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
   If KeyAscii > 122 Or KeyAscii < 48 Or _
            (KeyAscii < 65 And KeyAscii > 57) Or _
            (keyascci > 90 And KeyAscii < 97) Then
      KeyAscii = 0
   End If
End Sub



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 janv. 2012 à 13:49
0
Utile
Bonjour, acive,
on ne sait pas encore s'il veut se protéger des copier/coller (car très différent dans ce cas)


____________________
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
Utilisateur anonyme - 22 janv. 2012 à 13:51
0
Utile
Ou encore:
 If InStr("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", Chr(KeyAscii)) 0 Then KeyAscii 0



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 22 janv. 2012 à 13:53
0
Utile
Oui, Uc c'est vrai, attendons donc la suite...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 janv. 2012 à 13:53
0
Utile
Ne change rien, acive, s'il veut se protéger des copier/coller non en conformité


____________________
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 - 22 janv. 2012 à 13:55
0
Utile
va falloir jouer avec deux évènements, s'il veut se "protéger".
Je te laisse faire, acive. Vas-y (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 - 22 janv. 2012 à 13:59
0
Utile
Désolé pour l'erreur!!

Je confirme que cela doit empecher les copier-coller, sinon, on peut insérer tout et n'importe quoi...

Merci bcp
Commenter la réponse de talined
Utilisateur anonyme - 22 janv. 2012 à 14:12
0
Utile
Un simple Clipboard.clear suffit non?

Private Sub Text1_Change()
Text1.Text = UCase(Text1.Text)
Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Clipboard.Clear
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
 If InStr("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", Chr(KeyAscii)) 0 Then KeyAscii 0
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Clipboard.Clear
End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Clipboard.Clear
End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Clipboard.Clear
End Sub



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 22 janv. 2012 à 14:35
0
Utile
J'ai même copié ta faute de frappe

Dim mydate As Object
'à remplacer par
 Dim mydata As Object


Mais bon ça fonctionne quand même...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 janv. 2012 à 14:49
0
Utile
Je me tords littéralement de rire (non méchamment, sois rassuré), mais c'est bon, le dimanche ...
Pourquoi ?
1) Parce que sous VBA : gros problème pour savoir sur quel évènement vider le presse-papier (on s'y casse les dents dans un cas très particulier, repéré dans une autre discussion de ce jour)
2) parce-que les copier/coller ne peuvent pas se faire qu'à l'aide de la souris (et alors ? il te faudra aussi gérer le clavier !)

Alors ?
- Ou on fait une usine à gaz
- ou on fait avec un seul évènement (le 2ème, dont j'ai parlé plus haut, n'est pas nécessaire et ne sera utilisé que pour faciliter la tâche de l'utilisateur)

Je vais vous laisser vous creuser un peu le cerveau. Je ne reviendrai que plus tard, pour vous montrer la "soluce fastoche"*
A plus, donc (et soyez sages).



____________________
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
Utilisateur anonyme - 22 janv. 2012 à 14:55
0
Utile
Mais ce code gère les évènements de la souris et du clavier, je ne vois pas trop où tu veux en venir.



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 22 janv. 2012 à 15:02
0
Utile
Merci bien Messieurs. Cela fonctionne.

Pour ma compréhension, pourrai-je avoir les explications concernant les declarations Moveup, Movedown, Keyup, Keydown svp?
Commenter la réponse de talined
Utilisateur anonyme - 22 janv. 2012 à 15:06
0
Utile
Re:
MouseDown c'est quand tu appuies sur un bouton de la souris (vers le bas)
MouseUp c'est quand tu relâches le bouton de la souris (vers le haut)
Et la même chose pour les touches du clavier (KeyUp et KeyDown)

A chacune de ces actions il vide le presse papiers (ClipBoard)



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
talined 44 Messages postés jeudi 8 décembre 2011Date d'inscription 14 mars 2012 Dernière intervention - 22 janv. 2012 à 15:18
0
Utile
Ok C'est très clair
Merci beaucoup Acive!!!
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 janv. 2012 à 17:05
0
Utile
Et au fait, talined :
Je ne vois aucun tag "réponse acceptée" sur aucune de tes 3 dernières discussions. Pourquoi ?
Pas résolues ? Vraiment ?


____________________
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 - 22 janv. 2012 à 17:17
0
Utile
Oui c'est vrai, j'avais oublié. C'est fait

Cependant, pourrais tu m'expliquer le contenu du code "array" car j'ai du mal a comprendre .

Merci bcp.
Commenter la réponse de talined
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 22 janv. 2012 à 17:27
0
Utile
Cependant, pourrais tu m'expliquer le contenu du code "array" car j'ai du mal a comprendre .

J'attendais cette question.
Il te faut alors, pour comprendre :
- 1) apprendre ce qu'est un array (ton aide VBA avec ce mot)
et une fois la chose comprise (et c'est facile lorsque l'on a lu)
- 2)ouvrir ton aide VBA sur le mot Like (l'opérateur Like) et là également lire attentivement
puis, ce 2ème cap étant franchi et compris :
3) ouvrir ton aide en ligne sur le mot chr (et là aussi, lire)


Voilà trois excellentes occasions de te tremper dans le seul bain qui convienne : ton aide VBA.

Tout le reste (le mécanisme que j'ai mis en oeuvre) est uniquement de la gymnastique de l'esprit.

____________________
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

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.

[VBA]Textbox - N'autoriser une chaîne de caractère définie - VBA Excel - page 2