nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 octobre 2010
-
23 déc. 2006 à 15:53
nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 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.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 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 ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 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...
nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 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 ")