Microsoft 365 Imposer la saisie du signe + ou - dans une textbox

ivan27

XLDnaute Occasionnel
Bonsoir à tous,

Dans une textbox, numérique, je souhaiterais obliger l'utilisateur à saisir le signe + ou - devant le nombre qui suit

exemple : +30 ou -5

Si la saisie ne commence pas par le signe + ou - alors Msgbox d'erreur.

Merci d'avance pour votre aide

Bonne fin de soirée

Ivan
 

ivan27

XLDnaute Occasionnel
Bonsoir tout le monde,

fanch55, j'ai trouvé l'erreur. Un code contradictoire de mon côté...
Petit dysfonctionnement dans l'utilisation :
Si un utilisateur essaye de saisir un chiffre sur une textbox vide, il n'y arrive pas. (Jusque-là rien d'anormal). Par contre, s'il saisi d'abord un nombre préfixé +/-; qu'il quitte la textbox; il peut y retourner et saisir un nombre sans préfixe +/-.
C'est pareil chez vous ?
Ivan
 

patricktoulon

XLDnaute Barbatruc
ben non justement :p ;)
-4 ou - 1000 ou +4 ou +1000 c'est un numérique en VBA
pour le formatage j'utilise les "#" :ce qui fait que se sont des numériques qui sont attendus
démonstration
demo5.gif


demo 2 test ça
VB:
Sub test()
MsgBox IsNumeric(Format("+123,Aj1", "###.###"))
MsgBox IsNumeric(Format("+123,451", "###.###"))
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
@fanch55 et ben c'est bon non? c'est ce que l'on attend comme réponses ;)
alors pourquoi tu a l'erreur ??? c'est pas ici qu'il faut chercher si tu veux mon avis
si tu a 365 je ne suis qu'a moitié étonné avec un crack de la suite d'office on a relevé pas moins de 734 absurdités tout domaine dans vba confondu et il en trouve encore
perso j'ai abandonné a la 50 eme a peu prés ma conclusion et résolution était déjà prise
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
ben oui ca servirait a quoi de tester que le symbol :rolleyes: d'autant plus qu'il est testé plus haut ;)
et oublie cette façon de fonctionner quand tu dis "texte entré"
dans le keypress le texte entré ne contient pas la touche tapée ;)
dans le code V n'est pas égal au .value ;) et heureusement ;)

en gros avec cette méthode j'ai le keypress et le change en même temps sans que la touche soit entérinée par le keyup
c'est ce qui me permet de tester la chaîne complète (avec la touche)
mais peut être n'a tu pas compris ma méthode
 

patricktoulon

XLDnaute Barbatruc
bon ben test le right(v,len(v)-1) alors de toute façon le symbol(caractere(1)) est déjà testé
VB:
Option Explicit
Sub textbox_KeyPress(txtb, KeyAscii As MSForms.ReturnInteger)
    Dim V$, X&, forme$
    If KeyAscii = 46 Then KeyAscii = 44
    With txtb
        V = .Value & Chr(KeyAscii)
         If Len(V) Then If InStr("+-", Left(V, 1)) = 0 Then KeyAscii = 0: MsgBox "le signe ""+"" ou ""-"" est obligatoire"   'on vire si + ou moins n'est pas le premier
        X = InStr(V, ",")
        forme = Left(V, 1) & Application.Rept("#", Len(V) - 1): If X > 2 Then Mid(forme, X) = "."
       If Len(V) > 1 And Not IsNumeric(Format(Right(V, Len(V) - 1), forme)) Then KeyAscii = 0
    End With
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
Sauf que la textbox a systématiquement la virgule en séparateur quels que soient les paramètres régionaux, alors que les autres cellules et textbox normales respectent bien ces paramètres .
c'est moi qui le décide ça aussi ;)

If KeyAscii = 46 Then KeyAscii = 44
ou l'inverse tu fait ce que tu veux

dans ce modèle on décampe pas du pavé numérique pour aller chercher la virgule
plus ergonomique pour un txtb numerique

avec ces quelque lignes tu contrôle absolument tout tout

cahier des charges
  1. le symbole obligatoire en premier
  2. le point est remplacé par la virgule automatiquement
  3. seulement caractère numérique et virgule autorisés
  4. la virgule ne peut se trouver qu’après le (2d ou plus)caractère qui est forcement numérique
  5. pas deux virgules possibles dans le textbox
  6. pas deux symboles possibles dans le textbox
en gros le 3 ,4 ,5 et 6 est géré par le test isnumeric(format.......
rien qu'avec le test numeric tu bloque automatiquement les autres touche
avec format si la chaîne est valide alors format(v,forme)=le format numeric de v
c'est vraiment très simple comme concept
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 609
dernier inscrit
AmineAB33