Code valeur numérique

Bonsoir,

il me semble que le code suivant permet la saisie de valeur décimale avec la virgule ...

Pourriez vous me le confirmer ? avec les explications du code svp

merci d'avance pour votre éclairage

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then
    MsgBox "Caractère non autorisé"
    KeyAscii = 0
 End If
End Sub

Bonsoir,

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then
    MsgBox "Caractère non autorisé"
    KeyAscii = 0
 End If
End Sub

La fonction InStr (In String ?) se pose la question de savoir si les valeurs "0123456789.," sont dans (In) Chr(KeyAscii) (où Chr = caractère en anglais et KeyAscii le code Ascii de la touche appuyée) et si c'est le cas elle renvoie sa position donc un résultat positif envoie 1 ou plus (dans notre cas ce sera 1 car c'est à chaque appuis de touche, et non pas une série de touches)

En claire est ce que la touche appuyée est égal à 0 ou 1 ou 2 ou 3 ou 4 ou 5 ou 6 ou 7 ou 8 ou 9 ou . ou ,

Si ce test est = à 0 cela veut que la fonction n'a pas renvoyer de position de caractère donc le caractère appuyé ne fait pas partie de l'ensemble cherché, donc ce n'est pas une touche autorisée.

Le code suivant permet la saisie de valeur décimale avec la virgule et seulement cela, rien d'autre.

Pour ce qui est du KeyAscii<>8 il suffit de voir à quoi correspond le 8.

Edit : en fait Ascii 8 = l'espace donc le code vérifie qu'on appuie pas sur la barre espace...

@ bientôt

LouReeD

merci beaucoup pour ta réponse et tes explications

c toujours bon de savoir ce que nous utilisons

ceci dit je ne sais pas no plus ce que signifie le 8

j ai trouvé ce code sur le net...

merci encore

Humm,

le surlignement n'a pas suffit

le code Ascii 8 équivaut à la touche espace, donc le code interdi l'espace dans les décimales, il interdit aussi les moins...

en fait interdit tout sauf la ligne de chiffre avec le point et la virgule...

@ bientôt

LouReeD

Oups ! désolé j avais zappé ...

Merci pour ton rappel et ...ta patience

très bonne journée!


Ben tant qu'à faire , si je veut autoriser un nombre décimal négatif ?

Bonjour,

rajoutez "-" à la suite numérique.... non ?

@ bientôt

LouReeD

Bonsoir

logique...

Ah là là !! En plus j y avais pensé.....

Merci bien !

et ça marche ?

comme quoi le "And KeyAscii <> 8" ne sert à rien à moins que l'espace ne soit pas "accepté" dans "InStr(1, "0123456789.,", Chr(KeyAscii)) = 0"

@ bientôt

LouReeD

je viens de tester ..

eh non il n aime pas

alors il faut trouver le code Ascii correspondant au "-" et faire <> ce chiffre comme pour l'espace...

essayez le 45

au fait 8 c'est backspace et non space... donc le code accepte qu'on se trompe et qu'on efface le caractère inscrit suis-je bête ?

@ bientôt

LouReeD

rajouter"-" à la suite numérique.... non ?

finalement il faut bien le rajouter dans la suite numérique comme tu me l avais dit

désolé...

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If InStr(1, "0123456789.,-", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then
    MsgBox "Caractère non autorisé"
    KeyAscii = 0
 End If
End Sub

pas grave.... (YES!!!!! )

@ bientôt

LouReeD

Je profite de ta bonté et surtout de ton savoir..

J ai rajouté un msgbox pour avertir l'utilisateur qu il a saisi un nombre négatif

c 'est bizarre car si je saisi " - 15 " par exemple, la msg box apparait a la saisie du 1er chiffre ...

c est normal d'après toi ?

Thanks

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If InStr(1, "0123456789.,-", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then
    MsgBox "Caractère non autorisé"
     KeyAscii = 0
      End If
        If TextBox6.Value < 0 Then
            MsgBox ("Valeur négative ! "), vbExclamation
        End If
 End Sub

je dirais oui,

en effet la procédure est dans :

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

donc à chaque fois que vous appuyez sur une touche alors que vous êtes dans Textbox6, la procédure est lancée.

Premier caractère "-" pas d'annonce sur le négatif car "-" tout seul n'est pas négatif, mais dès que vous "tapez" 1 alors textbox6 = -1 donc valeur pouvant être négative, donc message d'alerte.

Maintenant reste à savoir quand vous voulez que le message s'affiche ?

@ bientôt

LouReeD

je pensais qu il s'afficherait une fois la saisie totale de la valeur

mais bon c'est pas si gênant que cela...

Merci

Après, il existe d'autre procédure "automatique" comme par exemple "Exit"

Elle est lancée lorsque l'on quitte le textbox6 par exemple :

Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' procédure lancée quand on "sort" de la textbox6
    If TextBox6.Value < 0 Then ' on test si c'est négatif
        MsgBox ("Valeur négative !"), vbExclamation ' on affiche le message
        TextBox6.Value = "" ' on efface la textbox6
        TextBox6.SetFocus ' on redonne le focus à la textbox6
    End If
End Sub

une fois sorti, VBA lance cette procédure, on détecte le négatif, on affiche le message, l'utilisateur clic sur [OK], on efface la valeur de la textbox6, puis on lui donne le focus pour que l'utilisateur puisse entrer une nouvelle donnée sans action de sa part pour revenir sur la textbox6.

Sous VBA pour connaître ce qui est possible, il y a en haut de la fenêtre de code deux listes déroulantes, celle de gauche vous permet de sélectionner un élément du Userform présent sur le Userform, et en fonction de l'élément choisi, la liste déroulante de droite vous donne les possibilités de "surveillance"

@ bientôt

LouReeD

Super instructif !

merci encore pour ta réactivité et ton partage du savoir

bonne soirée !

Merci pour la bonne soirée, je vous le retourne

Réactivité !? on me le dit souvent, mais c'est presque en ma défaveur, car le jour où "ça traine un peu"... on me le fait remarquer, je parle pas ici mais à mon boulot !

Partage de mon savoir ? Ici c'est pour ça, cela dit mon savoir n'est pas si grand mais j'arrive à me dépatouiller de certaines choses, parfois avec des usines à gaz mais bon ça marche !!! y a cas vois APACHES ! je pense que le code pourrait-être optimiser mais il est à l'image de mes connaissances...

@ bientôt

et merci encore de votre merci

LouReeD

Bonsoir,

je vais abuser alors...

ainsi dans le formulaire en question j ai 4 combo qui sont concernées par ces codes et j ai bêtement répété 4 fois les codes suivants

Pas très esthétique ...

Et il me semble que l on peut éviter ces répétitions par ce qu on appelle un module de classe ...

mais çà sa me semble assez complexe...

c'est quoi APACHES ?

merci d'avance

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If InStr(1, "0123456789.,-", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then
    MsgBox "Caractère non autorisé"
     KeyAscii = 0
      End If
 End Sub
Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' procédure lancée quand on "sort" de la textbox6
    If TextBox6.Value < 0 Then ' on test si c'est négatif
        MsgBox ("Valeur négative !"), vbExclamation ' on affiche le message
        TextBox6.Value = "" ' on efface la textbox6
        TextBox6.SetFocus ' on redonne le focus à la textbox6
    End If
End Sub

Bonsoir,

je peux facilement répondre à votre dernière question

Application Planning ACtivité HorairE Scrollmonth

c'est pour suivre des personnels tant en position journalière qu'en activité horaire...

Le mieux est de vous rendre sur le forum de l'application en suivant le lien sur ma signature

Pour les modules de classes, sur une application que l'on m'a demandé, j'ai réussi à mettre en place des procédure identique sur des checkbox, il faut que je me remette tout cela en mémoire et on verra bien

@ bientôt

LouReeD

Rechercher des sujets similaires à "code valeur numerique"