Pb pour forcer à écrire en numérique

Résolu/Fermé
Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024 - 27 sept. 2021 à 22:44
 Utilisateur anonyme - 3 oct. 2021 à 07:40
Bonsoir à tous,

Je ne sais pas pour vous, mais il m'arrive assez souvent de taper ceci " &é" " au lieu de " 123 " ou " 123?45 " au lieu de " 123,45 ".
Afin de palier à ce problème et dans le cas où une valeur numérique est attendue, j'ai écrit cette fonction.

Function FormatSaisieTbox(Texte)

  interdit = Array("&", "é", """", "'", "(", "-", "è", "_", "ç", "à", "?", ":")
  autorise = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", "/")
 
  recherche = Texte
  
  For i = LBound(interdit) To UBound(interdit)
    recherche = Replace(recherche, interdit(i), autorise(i), 1, 1, vbTextCompare)
  Next
  
  FormatSaisieTbox = recherche

End Function


Cette fonction fonctionne parfaitement bien tant que le chiffre est positif. S'il est négatif, le signe " - " se transforme invariablement en " 6 ". Je ne trouve pas l'astuce pour contourner ce problème et je sollicite donc votre aide.

J'utilise cette fonction principalement dans l'évènement change d'une textbox.

Private Sub TextBox1_Change()

  With UserForm1.TextBox1
    .Value = FormatSaisieTbox(.Value)
  End With

End Sub


Par avance merci et bonne soirée.

Ludwig
A voir également:

3 réponses

yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 551
28 sept. 2021 à 08:46
bonjour,
tu pourrais, soit ne pas transformer en 6 un "-" en début du texte, soit ne changer que si aucun caractère n'est un chiffre.
A moins que tu choisisses une autre option?
0
Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024 1
2 oct. 2021 à 17:01
Bonjour,

Désolé pour ma réponse tardive.

Comment savoir si le chiffre chiffre entré sera négatif ou pas. Comment reconnaitre "-66" de "666" ?
Soit, cocher une CheckBox pour une valeur négative.
Soit, considérer le 1er caractère comme un sigle "+" ou "-". Donc, si le chiffre commence par "+" ou "=", le chiffre est positif. Si le chiffre commence par "-" ou "6", le chiffre est négatif.
Dans cette dernière solution comment tester dans l'évènement change de la TexteBox la saisie au fur et mesure de la frappe ? Tester le 1er nombre, puis, le second, puis, le troisième, etc...
Actuellement, je change après chaque frappe toute la saisie.

Par avance merci.

Ludwig
0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024
Modifié le 2 oct. 2021 à 17:24
Tu nous demandes comment extraire un caractère d'une chaine de caractères?
0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024
2 oct. 2021 à 17:50
choisi une solution avant de te demander comment la mettre en place.
je pense que ta fonction est tellement mal écrite que tu oublies toutes les autres possibilités.
si j'étais toi, je prendrais quelques exemples de chaines frappées, et, pour chaque exemple, je déciderais du résultat attendu.
0
Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024 1 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
Modifié le 2 oct. 2021 à 18:00
Pas vraiment non ;)
En fait, j'aimerais tester que le caractère qui vient d'être saisi, et non, comme je le fais, tester, à chaque fois toute la chaine de caractères. Ainsi, je pourrai tester le 1er caractère, le changer si besoin puis passer au suivant sans tester à nouveau le 1er. Et ainsi de suite.

  For i = LBound(interdit) To UBound(interdit)
    recherche = Replace(recherche, interdit(i), autorise(i), Len(Texte), 1, vbTextCompare)
  Next


J'ai remplacé le 1 (Où commencer la recherche du caractère à changer) par len(Texte) afin de remplacer que le dernier caractère mais j'ai un débogage.

Pardon. Dans ce cas précis, je charge une TextBox d'un UserFrom par la valeur d'une cellule.
0
Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024 1 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
2 oct. 2021 à 18:20
Je viens de prendre un gros coup au moral. Je la trouvais bien cette fonction (pour mon niveau).
Je vais t'avouer un truc, je ne vois pas les autres possibilités.
Je vais continuer ma recherche.

Merci .
0
Utilisateur anonyme
2 oct. 2021 à 18:42
Bonjour

avec quel vb tu codes?
  • VBS
  • VBA -> précisez:
    • Word
    • Excel
    • Access
    • Powerpoint
    • Autre
  • VB6 (ou antérieur, précisez)
  • VB.Net - précisez la Framework et ->
    • Winform
    • WPF
    • Autre

0
Bonjour
mettre un KeyPress dans ton userform


Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 44, 48 To 57
KeyAscii = KeyAscii
Case 46
KeyAscii = 44
Case Else
KeyAscii = 0
End Select
End Sub


A+
Maurice
0
Utilisateur anonyme
2 oct. 2021 à 21:59
Et si c'est pas VBA?
0
Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024 1 > Utilisateur anonyme
2 oct. 2021 à 23:44
Merci à tous pour vos réponses.
C'est du VBA Excel Office 365.

Suite au conseil de yg_be et afin d'arriver plus facilement à mes fins, j'ai ajouté une CheckBox à mon UserForm.
Si cochée, je multiplie la valeur par -1.
C'est pour moi plus simple et fonctionne très bien avec ma fonction du départ.

Encore merci à tous.
0
Utilisateur anonyme > Louloude74 Messages postés 62 Date d'inscription mercredi 1 août 2018 Statut Membre Dernière intervention 17 avril 2024
3 oct. 2021 à 07:40
Tant mieux.
SI un jour tu as besoin d'une solution en .Net, j'ai ça sous le coude
0