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

  • Initiateur de la discussion Initiateur de la discussion ivan27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Solution
@ivan27
Ci-joint la dernière version avec un module de classe pouvant résoudre votre demande.
A votre disposition si vous désirez des explications complémentaires que vous ne trouvez pas dans le code ... 😎

Edit du 1/9 : re-dépot du fichier
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
 
ben non justement 😛 😉
-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:
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:
ben oui ca servirait a quoi de tester que le symbol 🙄 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
 
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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour