copie d'un texbox ne prend pas le dernier caractère

mx8

XLDnaute Nouveau
Bonjour,

J'ai créé un textbox dans un USF.
Le contenu du texbox est limité aux lettres et aux chiffres.

quand je lui donne l'ordre :

Range("B8") = TextBox2.Value

Il manque le dernier caractère.

Voici mon code :

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ" & Chr(9), Chr$(KeyAscii)) = 0 Then
KeyAscii = 0
End If

Range("B8") = TextBox2.Value

End Sub

Si je tape :123ABC

La valeur copiée en B8 est 123AB Manque C

Par avance merci pour vos réponses.
MX8
 

Pierrot93

XLDnaute Barbatruc
Re : copie d'un texbox ne prend pas le dernier caractère

Bonjour mx

peut être scinder ton code en 2 en utilisant en plus l'événement "KeyUp" :

Code:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ" & Chr(9), Chr$(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End Sub

Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Range("B8") = TextBox2.Value
End Sub

bonne journée
@+
 

pierrejean

XLDnaute Barbatruc
Re : copie d'un texbox ne prend pas le dernier caractère

Bonjour mx8

Je n'ai pas vraiment l'explication mais teste comme ceci

Code:
[COLOR=blue]Private Sub TextBox1_Change()[/COLOR]
[COLOR=blue]Range("B8") = TextBox1[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ" & Chr(9), Chr$(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End Sub

Edit: Salut Pierrot
 

mx8

XLDnaute Nouveau
Re : copie d'un texbox ne prend pas le dernier caractère

Merci pour vos propositions et pendant ce temps j'ai trouvé cette solution qui effectivement était de scinder le code que j'ai également fait évoluer dans le nombre de caractères possible et la nature de ceux-ci :

Private Sub CommandButton3_Click()
'Range("B8").Select

Range("B8") = TextBox2.Value

End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" & Chr(9), Chr$(KeyAscii)) = 0 Then
KeyAscii = 0
MsgBox "Caractère non autorisé"
ERREUR = True
End If
If Len(TextBox2) > 12 Then
MsgBox "13 caractères maxi"
ERREUR = True
KeyAscii = 0
End If
End Sub

C'est un brouillon test que je vais transposer dans mon projet.

Cela vous parait il cohérent ?
 

Pierrot93

XLDnaute Barbatruc
Re : copie d'un texbox ne prend pas le dernier caractère

Re, PierreJean:)

perso pour limiter le nombre de caractères possible dans un "textbox", j'utiliserais la propriété "MaxLength" et ce lors de l'initialisation de l'usf... mais c'est juste un avis...

Code:
Private Sub UserForm_Initialize()
TextBox1.MaxLength = 8
End Sub
 

laetitia90

XLDnaute Barbatruc
Re : copie d'un texbox ne prend pas le dernier caractère

bonjour mx8,Pierrot93 pierrejean
j'ai teste comme cela ca marche ???

Code:
Option Explicit
Option Compare Text
Private Sub CommandButton1_Click()
Range("B8") = TextBox2
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

et dans proprietée de la textbox MaxLength=12
 

GeoTrouvePas

XLDnaute Impliqué
Re : copie d'un texbox ne prend pas le dernier caractère

j'utiliserais la propriété "MaxLength" et ce lors de l'initialisation de l'usf... mais c'est juste un avis...

Tout à fait d'accord avec Pierrot, c'est la solution la plus logique que tu peux éventuellement compléter avec un msgbox si tu tiens absolument à informer l'utilisateur.

MsgBox "Caractère non autorisé"
Dans l'application que je suis en train de développer, j'avais choisi comme toi d'afficher un msgbox lorsqu'un caractère non autorisé était frappé mais je suis revenu en arrière. En effet, il n'y a rien de plus désagréable que d'avoir un msgbox qui s'affiche à la moindre erreur de frappe. Pour solutionner ça, j'ai décidé de simplement mettre le fond de mon textbox en rouge pour signaler l'erreur (le fond repasse en blanc dès qu'on ressaisi un caractère autorisé). Visuellement c'est le même résultat et l'utilisateur n'a pas frapper la touche Entrée pour virer le msgbox :

Code:
Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzé'èçàù^âêîôûäëïöüÿ-/ ", VBA.Chr(KeyAscii)) = 0 Then
        Textbox1.BackColor = &HFF&
        KeyAscii = 0
    End If
End Sub

Private Sub Textbox1_Change()
    Textbox1.BackColor = &H80000005
End Sub
 
G

Guest

Guest
Re : copie d'un texbox ne prend pas le dernier caractère

Bonjour le fil,
bonjour à tous,

Mx8@ si tu veux mettre la valeur dans la cellule en cours de frappe, il faut le faire sur évènement KeyUp ordre des évènements oblige.
1 - KeyDown
2 - KeyPress 'Le caractère en cours n'existe pas encore dans le textBox
3 - KeyUp ' Ici il existe
Code:
[COLOR=blue]Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)[/COLOR]
[COLOR=blue][COLOR=red]Range("B8") = TextBox2.Value[/COLOR]
End Sub[/COLOR]
 
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ" & Chr(9), Chr$(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End Sub

A+
 

mx8

XLDnaute Nouveau
Re : copie d'un texbox ne prend pas le dernier caractère

Merci à vous tous : Pierrot93, pierrejean, Laetitia90, GeotrouvaPas et Hasco.
Que des bonnes solutions, moi qui me perd grave entre les différentes affectations de "key".

Mais tous vos bons conseils sont vraiment formateurs, j'apprécie !

.....j'avais choisi comme toi d'afficher un msgbox lorsqu'un caractère non autorisé était frappé..... il n'y a rien de plus désagréable que d'avoir un msgbox qui s'affiche à la moindre erreur de frappe. ....

Suis d'accord avec toi mais mon projet va s'adresser à une gente qui dit "je ne connais rien à l'informatique":D alors je fais en sorte de me mettre à leur place pour penser à l'impensable donc je "bombarde" avec modération des msgbox pour les guider en même temps qu'ils avancent.:rolleyes:
 

Discussions similaires

Réponses
20
Affichages
1 K

Statistiques des forums

Discussions
312 677
Messages
2 090 815
Membres
104 673
dernier inscrit
lautard