Remplacer & par 1 lors de la saisie dans textbox

Résolu/Fermé
Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024 - 6 déc. 2020 à 13:29
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 - 6 déc. 2020 à 18:48
Bonjour,

Je ne sais pas pour vous mais il m'arrive souvent, comme je n'ai pas de clavier numérique, de saisir des chiffres de cette manière &é" au lieu de 123.
Afin d'éviter ceci, j'aimerai trouver comment au fur et à mesure de ma saisie remplacer les caractères &é"'(-è_çà par 1234567890; et par la même occasion forcer les majuscules.

Pour les majuscules j'utilise :
Private Sub TextBox1_Change()
    Me.TextBox1.Text = UCase(Me.TextBox1.Text)
End Sub


Bon dimanche et par avance merci.

Ludwig
A voir également:

4 réponses

yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 Ambassadeur 1 551
6 déc. 2020 à 14:14
bonjour,
peut-être:
Private Sub TextBox1_Change()
    Me.TextBox1.Text = UCase(Me.TextBox1.Text)
    Me.TextBox1.Text = replace(Me.TextBox1.Text,"&","1")
    ' ...
    Me.TextBox1.Text = replace(Me.TextBox1.Text,"à","0")
End Sub
0
Utilisateur anonyme
6 déc. 2020 à 14:51
Bonjour

si tu travailles en VB.Net, il y a plus optimisé (en temps d'exécution)

Il faut dériver le textbox et réécrire la méthode ProcessCmdKey
Voilà un exemple en C# (le langage de base de .Net, VB.Net c'est "juste" un skin VB)
https://codes-sources.commentcamarche.net/forum/affich-1526742-keydown-keypress#5

Et de quoi passer de C# à VB.Net
https://lite.qwant.com/?q=c%23+to+vb&client=opensearch
0
Utilisateur anonyme
6 déc. 2020 à 15:19
Je n'ai pas expliqué pourquoi ça n'est pas optimisé de faire des Replaces dans l'évènement Change (et c'est valable quelque soit le VB utilisé, mais y'a qu'en .Net où j'ai une bonne solution)

Admettons que ton textBox contienne AZERTYUIOP et que tu viennes de taper à.

On va appliquer les 10 Replace les un après les autres.
Chaque Replace va scruter chaque caractère pour voir s'il s'agit de celui qu'il doit remplacer:
  • AZERTYUIOPà pour trouver &,
  • AZERTYUIOPà pour trouver é
  • etc...sans rien faire jusqu'à
  • AZERTYUIOPà pour trouver à, et là il trouve à qu'il remplace par 0 le textBox devient AZERTYUIOP0


Donc l'évènement Changed est à nouveau déclenché et on recommence à scruter AZERTYUIOP0 10 fois pour rien.

Au final 220 Replaces sont exécutés et un seul porte ses fruits.

Evidement c'est fait en un battement de cils, mais comme je suis un peu tordu, je vais copier coller
&é"'(-è_çà
dans mon textBox
Il y a changement, donc
&é"'(-è_çà
devenir
1é"'(-è_çà
qui va lancer un nouveau évènement change, l'un deux "Change" en cours d'exécution (je ne sais pas lequel sera prioritaire sur l'autre...) va rechanger le texte en
12"'(-è_çà
qui déclenchera une 3eme exécution de l'évènement etc...etc...

A vue de nez 10 évènements Changed qui vont faire chacun 10 Replaces, en espérant que toutes les exécutions en parallèle ne vont pas entrer en conflit.

Là ça va commencer à se voir, et je ne te dis pas si tu tapes une touche entre temps....


0
Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024 1
6 déc. 2020 à 17:48
Bonjour et merci pour vos réponses,

J'ai testé la première solution, celle avec replace().
C'est rapide mais ne fonctionne pas pour les touches é, è, ç et à.

Je suis allé voir ton lien et fait une conversion mais des lignes de code sont en rouge.

Dommage qu'il n'existe pas une fonction comme ucase().
Je vais continuer à chercher.

Encore merci pour vos réponses et bon dimanche.

Ludwig
0
Utilisateur anonyme
6 déc. 2020 à 18:06
Je suis allé voir ton lien et fait une conversion mais des lignes de code sont en rouge.

Ben tu codes en VB.Net ou pas?
SI c'est un autre VB c'est sûr ça ne marchera pas....

Si c'est bien VB.Net, as tu dérivé le textbox?
Quelles lignes sont en rouge?
0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
6 déc. 2020 à 18:37
as-tu ajouté les 8 lignes manquantes pour les remplacement de 2 à 8?
0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551 > yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024
6 déc. 2020 à 18:48
ceci sera un peu plus rapide. cela me semble assez peu important, l'ordi travaille juste un tout petit peu à chaque caractère entré:
Private Sub TextBox1_Change()
dim t as string
static aa as boolean
if not aa then
   aa = true
   t=Me.TextBox1.Text
   t = UCase(t)
   t = replace(t,"&","1")
    ' ... ajouter les 8 lignes de 2 à 8
   t = replace(t,"à","0")
   it t <> Me.TextBox1.Text then
       Me.TextBox1.Text = t
   end if
   aa = false
end if
End Sub
0