Textbox numerique

Résolu
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010 - 23 déc. 2006 à 15:53
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010 - 27 déc. 2006 à 15:28
Hello,

Je vous avais sollicité pour paramétrer un textbox numérique. Je voulais rentrer que des valeurs numériques, ne pas utiliser "return"  et si ce n'était pas le cas afficher un message. Voila comment je m'en suis sorti, si cela peut aider d'autres débutants en VB5.
J'ai recopié ce code pour chacune de mes textbox:





Private Sub txtRecette_KeyPress(KeyAscii As Integer)

If InStr("1234567890" & Chr(8), Chr$(KeyAscii)) = 0 Then
KeyAscii = MsgBox("Erreur de frappe! C'est un nombre qu'il faut saisir!", vbExclamation)
txtRecette.SelStart = 0
txtRecette.SelLength = Len(txtRecette.Text)
End If

Avant de lancer un calcul, je voulais m'assurer que toutes mes textbox étaient remplies . Voici le code. Je pense qu' il y a plus simple, mais cela fonctionne:

If txtCR.Text = "" Then
MsgBox "Vous avez oublié de remplir le champs COTISATION DE REFERENCE !", vbOKOnly
txtCR.SetFocus
    Else
        If txtRecette.Text = "" Then
        MsgBox "Vous avez oublié de remplir le champs RECETTE !", vbOKOnly
        txtRecette.SetFocus
        Else
            If txtAchat.Text = "" Then
            MsgBox "Vous avez oublié de remplir le champs ACHAT !", vbOKOnly
            txtAchat.SetFocus
            Else
                If txtLocation.Text = "" Then
                MsgBox "Vous avez oublié de remplir le champs LOYER ET CHARGES LOCATIVES !", vbOKOnly
                txtLocation.SetFocus
                Else
                    If txtTravaux.Text = "" Then
                    MsgBox "Vous avez oublié de remplir le champs TRAVAUX !", vbOKOnly
                    txtTravaux.SetFocus
                    Else
                        If txtTransport.Text = "" Then
                        MsgBox "Vous avez oublié de remplir le champs TRANSPORT ET DEPLACEMENT !", vbOKOnly
                        txtTransport.SetFocus
                        Else
                            If txtFrais.Text = "" Then
                            MsgBox "Vous avez oublié de remplir le champs FRAIS DIVERS DE GESTION !", vbOKOnly
                            txtFrais.SetFocus
                            Else
                                If txtDotation.Text = "" Then
                                MsgBox "Vous avez oublié de remplir le champs DOTATION AUX AMORTISSEMENTS !", vbOKOnly
                                txtDotation.SetFocus
                Else

'CALCUL

Enfin, au lancement de mon programme, un feuille d'accueil apparait et me demande une année. J'ai rédigé ce code pour m'assurer que la textbox est bien remplie par un nombre. Une alternative à keypress:

If IsNumeric(vntanneeTP) Then
frm1.Show
Else
MsgBox "Vous devez saisir une ANNEE ! ", vbExclamation
'txtReponse.Text = ""
txtReponse.SelStart = 0
txtReponse.SelLength = Len(txtReponse.Text)
txtReponse.SetFocus
End If

Si ces codes peuvent aider. Si vous avez des idées pour les simplifier, merci de me répondre. A bientôt.

Nono

13 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 déc. 2006 à 11:14
Et ensuite regarde ceci (avec une textbox text2) :

Private Sub Text2_LostFocus()
  If Not IsDate("01/01/" & Text1.Text) Or Len(Text1.Text) < 4 Then
     Text1.SetFocus
     MsgBox "ce n'est pas une année, çà !!!)"
     Exit Sub
  End If
  '----- et tes instructions ----
End Sub

Tu connais maintenant les 2 principes !
A toi de composer et conjuguer comme tu l'entends avec
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 déc. 2006 à 11:17
pardon (gros doigts) lire dans le 2ème exemple :

Private Sub Text2_LostFocus()
  If Not IsDate("01/01/" & Text2.Text) Or Len(Text2.Text) < 4 Then
     Text2.SetFocus
     MsgBox "ce n'est pas une année, çà !!!)"
     Exit Sub
  End If
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 déc. 2006 à 18:26
Pour ta 1ère partie :


Je te conseille de recommencer en utilisant un groupe indexé de textboxes. Ton code en sera à la fois grandement simplifié et beaucoup plus rapide .
Tu aurais par ailleurs pu utiliser Isnumeric à la place d'un instr (plus lent), dire que Keyascii = 0 si pas numeric, avec un beau beep et pas besoin de msgbox ni du reste.


¨Pour le contrôlede l'année :

Cà ne va pas du tout !
on pourrait saisir avec celà une année de 8 chiffres !
Fait un contrôle avec isdate sur une chaine "01/01" & la_saisie_à_contrôler

Essaye et reviens si tu as une difficulté !


 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 déc. 2006 à 18:27
pardon !
lire : "01/01/" & la_saisie_à_contrôler
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
23 déc. 2006 à 21:22
Hello,

Merci pour les conseils. Je vais essayer. Les forums permettent d'apprendre énormément !

Par contre, je débute en visual basic et je n'ai pas encore appris à indexer de textboxes. Comment faire, car effectivement cela simplifierait énormément le code ?

Enfin, une question est restée en suspens pour l'instant sur le forum, comment afficher les résultats d'une boucle do while dans un tableau à 2 colonnes ?

Merci d'avance
NONO
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 déc. 2006 à 21:54
Pour indexer un groupe de contrôles

1) tu insères le 1er de ces contrôles
2) tu mets sa propriété index à 0
3) tu le sélectionnes (en cliquant dessus) et le copie
4) tu le colles ===>>> sera alors créé le même contrôle avec l'index 1
et ainsi de suite autant de fois que tu veux...

En double-cliquant sur ce contrôle, tu arriveras à son code-événement : regarde bien : il y a maontenant un argument index)

A toi de l'utiliser dans ton code.

C'est facile... Commence à réfléchir seul et reviens si tu ne vois vraiment pas comment t'en servir astucieusement.


Pour ton autre sujet : je ne sais pas ce dont il s'agit !
Une boucle while sur quoi et qui doit faire quoi, exactement  ?
Si tu as ouvert une conversation à ce sujet : mets ici le lien qui y correspond et nous irons y jeter un coup d'oeil, mais il ne faut pas ouvrir 2 sujets dans la même conversation.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 déc. 2006 à 21:58
Apparemment ton autre sujet serait là :

http://www.vbfrance.com/infomsg_CREER-TABLEAU-AFFICHER-RENTRER-VALEURS_863578.aspx

mais alors ! dis-voir, tu l'as mis sur le forum VB.net alors qu'ici tu es sur le forum vb6....

Alors ?
Tu développes sous quoi finalement ? VB6 ou VB.Net ?
Lequel des 2 sujets (le présent ou l'autre) est sur le forum erroné ?
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
23 déc. 2006 à 22:11
Re-Hello,

Je développe sur VB5 ...
Désolé... Je n'ai pas regardé sur quel forum je suis. Je suis nouvellement inscrit et je ne savais pas qu'il y a avait un forum pour VBNet, VB6, etc...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
23 déc. 2006 à 22:21
Va donc sur l'autre et ajoute toi-même la demande de transfert sur VB6.

Un modérateur le fera volontiers...
Puis on verra ta question.
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
24 déc. 2006 à 10:40
Hello,

RECTIFICATION !!!!!!!!!!!!!!!!!!!!!
J'apprends bien le VB6 sur un bouquin que je conseille d'ailleurs aux débutants car il est GENIAL . Je crois que ma tête a explosé hier, il m'arrive en ce moment de rêver de codes, et je dois dire que la nuit porte conseil !!
Le bouquin s'intitule:
"Programmation avec microsoft
"Visual Basic 6.0
"Cours et exercices

de Diane Zac , edition Reynald Goulet

Donc concerant tes conseils, peut on utiliser la fonction isdate et indexer les textboxes sur VB6 ?

Bonnes fêtes à tous, je dois quitter le forum.
NONO
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 déc. 2006 à 11:07
Regarde déjà ceci (en admettant que tu aies fait ce que je t'ai expliqué plus haut et que tu aies donc créé un groupe indexé de textboxes text1(0), text1(1), text1(2).....text1(n)

ce code suffit pour toutes les traiter :

Private Sub Text1_LostFocus(Index As Integer)
   If Text1(Index).Text = "" Then
      Text1(Index).SetFocus
      MsgBox "çà va pas la tête, non ?"
    Exit Sub
   End If
'--------- et tes instructions éventuelles
End Sub
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
26 déc. 2006 à 10:41
Meric jmmarques
Je vais tester tes conseils dès que possible.
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
27 déc. 2006 à 15:28
Bonjour,

J'ai testé IsDate et not IsDate hier soir. Cela fonctionne très bien mais tant que la textbox n'est pas remplie correctement mes boutons de commande ne sont plus fonctionnelles (cmdQuitter, cmdEffacer ...).  Comment peut on coder ?

Peux-tu m'expliquer littéralement le code "If Not IsDate("01/01/" & <gras>Text2.Text)</gras> Or Len(Text2.Text) < 4"

J'ai compris que si le nombre de caractère de text2.text est inférieur à 4 alors la message box apparait. Mais comment peut-on traduire "If Not IsDate("01/01/" & Text2.Text)", car lorsque j'écris par la date sous cette forme 05/08/2006 la message box apparait et seule une année à 4 chiffres est acceptée.

Par ailleurs,  pourrait-on de la même manière paramétrer le jour ou le mois. Par exemple écrire If Not IsDate("01/" & Text2.Text & " /2006 ")

Merci d'avance pour les réponses
NONO
0
Rejoignez-nous