tonitto85
Messages postés16Date d'inscriptionsamedi 19 décembre 2009StatutMembreDernière intervention19 décembre 2009
-
12 janv. 2007 à 14:49
tonitto85
Messages postés16Date d'inscriptionsamedi 19 décembre 2009StatutMembreDernière intervention19 décembre 2009
-
16 janv. 2007 à 11:57
Bonjour tous le monde
j'ai un petit problème dans une application et j'espère que je trouve l'aide ici
je commance par donner ce programme et je vais commenter
Private Sub Text1_Change()
If keyascii = AscW("$") Then
For i = 1 To Val(Text3.Text)
Text2.SetFocus 'selectionner le texte2
' je doit attendre jusqu'a je tappe '$' sur le Text1
If Text1.Text = "123" Then
Text3.SetFocus 'selectionner le texte3
' je doit attendre jusqu'a je tappe '$' sur le Text2 Else
MsgBox "verifier votre Réference"
End If
Next i
End If
End Sub
alors mon programme contient 3 textBox, je doit entrer un chiffre dans texte1, et pour chaque i de i=1 à Val(text1.text), je doit enter une chaine de caractère dans text2, puis la comparer avec une autre fixe, si elles sont egales, je passe automatiquement au text2, et tapper une chaine de caractère, cela ce repetre jusqu'au atteindre la valeur numerique de text1.
mon problème est avec les ligne en rouge.
j'ai essayé avec faire appel a Text1_KeyPress, mais n'attend pas que je tape toute la chaine( la terminer par "$")
complement: les chaine de caractére se termine par '$', c'est ce '$' qui m'indique que j'ai terminer ma chaine de caractère
tonitto85
Messages postés16Date d'inscriptionsamedi 19 décembre 2009StatutMembreDernière intervention19 décembre 2009 12 janv. 2007 à 16:27
bon je me suis trompé, je veux bien mettre KeyPress ald de change
Private Sub Text1_KeyPress(KeyAscii As Integer)
If keyascii = AscW("$") Then
For i = 1 To Val(Text3.Text)
Text2.SetFocus 'selectionner le texte2
' je doit attendre jusqu'a je tappe '$' sur le Text1
If Text1.Text = "123" Then
Text3.SetFocus 'selectionner le texte3
' je doit attendre jusqu'a je tappe '$' sur le Text2 Else
MsgBox "verifier votre Réference"
End If
Next i
End If
End Sub
je reexplique:
j'ai 3 textbox
un pour entrer une valeur (text1)
les deux autres pour des chaines de caractères(text2 et text3)
je veux quand je tape une valeur dans text1, ('$' assure que j'ai terminer la valeur), une boucle doit s'ouvrir, et le programme me demande de faire entrer une chaine de caractère dans text2 (sans utiliser InputBox), puis comparer cette chaine avec une autre fixe ("123" par exemple), si elle sont egales, le programme doit me positionner sur text3, et quand je tappe une chaine de caractèr(qui se termine par '$'), le programme me reposionne sur text2, et ainsi de suite jusqu'a atteindre la valeur de text1.
donc c'est comme une alternance, une fois je tape sur text2, et une autre sur text3, jusq'a atteindre une valeur bien difinie(celle tappé dans text1)
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 12 janv. 2007 à 16:38
Oui, c'est un peu chaotique, ton code :
Dès que tu tapes une valeur dans text1, après appuie sur "$", Text2 se sélectionne,
on fait une boucle avec le text de text3
si 123 est dans Text1 (impossible, car il y aura toujour le "$" dedans)
et là je commence à me perdre...
Bref, il faut décomposer dans chaque évènement KeyPress de tes 3 textbox :
Demande toi ce qui doit se passer dans text1 une fois "$" pressé, ensuite une fois que text2 possède une valeur, puis text3...
Pour infos,
If KeyAscii = Asc("$") Then
KeyAscii = 0 ' ceci t'évite d'avoir le "$" dans le textbox
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 12 janv. 2007 à 17:45
A mon avis traiter cela par des boucles va etre une sacré usine à gaz.
Le mieux est de considérer chaque textbox indépendante et de mettre en place une synchronisation type ping-pong (on va prendre TB comme raccourci pour textbox)
- Au départ seule TB1 est active, TB2 et TB3 sont à enabled=false
- dès que tu capte un $ dans TB1, tu active TB2, tu désactive TB1 et tu passe le focus à TB2
- dans TB2, dès que tu capte un $ tu desactive TB2, tu active TB3 et tu passe le focus à TB3
- Il te faut un compteur en variable globale que tu incrémentera lorsque tu passera le focus à TB3
- Dans TB3 idem, dès que tu capte un $, tu teste ton compteur par raport à la valeur de TB1, pas égal on désactive tb3, on active TB2 et on lui passe le focus. Egal, fin du traitement
Chacune des textbox traite sa propre partie sans se soucié des autres.
Le ping-pong s'établie dans un premier temps entre TB1 et TB2 (juste un ping) puis ensuite entre TB2 et TB3 (ping) puis TB3 et TB2 (pong)
Evéentuellement le pong manquant entre TB3 et TB1 en fin de traitement
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Vous n’avez pas trouvé la réponse que vous recherchez ?
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 12 janv. 2007 à 19:04
BAH ! Rien compris ! Peut-être que c'est le GROS-GRAS-GRAND-ROUGE qui me perturbe ?
Pour passer d'une textbox à l'autre, pas de doute, c'est dans l'évènement KeyPress que tu dois gérer ça.
Private Sub Text1_KeyPress(KeyAscii As Integer)
If keyascii = Asc("$") Then
Text2.SetFocus
End If
End Sub
Puis :
Private Sub Text2_KeyPress(KeyAscii As Integer)
If keyascii = Asc("$") Then
Text3.SetFocus
End If
End Sub
Etc ....
Pour le reste, je ne vois pas... regardes l'évènement Validate de ton (tes) textboxes.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 12 janv. 2007 à 19:23
Déjà : comme il n'a rien précisé sur ce point, je suppose qu'il est sous VB et pas sous VBA ...
Il a dans ces conditions la possibilité de faire un groupe de textboxes indexées Text1(0), Text1(1) et Text1(2)
Celà présentera l'avantage de "voyager" avec beaucoup moins de code entre une textbox et l'autre, puisque VB connait l'index de la textbox dans laquelle il est et qu'il suffit de donner, le moment venu, le focus à la textbox Text1(index+1)
Celà lui facilitera également grandement ses comparaisons plus loin...
Il semble par ailleurs ne rentrer que des valeurs dans chaque textbox, sur une seule ligne . Il pourrait dans ce cas se passer de cette acrobatie de la frappe du signe $ et y aller allègrement du chr(13) pour dire que la saisie est finie...
etc...
Pour le reste : je lui suggère de nous présenter au moins un algorithme de ce qu'il veut réaliser (la seule rédaction de cet algorithme le forcera à gérer sa propre pensée et sera saluraire pour lui, d'une part,... et nous évitera de rentrer dans son jeu pour lui répondre en connaissance de cause.).
tonitto85
Messages postés16Date d'inscriptionsamedi 19 décembre 2009StatutMembreDernière intervention19 décembre 2009 13 janv. 2007 à 10:22
voila un programme j'espère qu'il est plus claire, tjr c'est le rouge qui me géne à faire
------------------------------------------------------------------------------------------------------
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = AscW("$") Then
'je doit entrer dans la boucle suivante
'For i=1 to Val(Text1.text)
' faire entrer un text dans Text2 (au meme tempsexecuter Private Sub Text2_KeyPress(KeyAscii As Integer))
' faire entrer un text dans Text3 (au meme tempsexecuter Private Sub Text2_KeyPress(KeyAscii As Integer))
'next i
End If
End Sub
------------------------------------------------------------------------------
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = AscW("$") Then
KeyAscii = 0
If Text2.Text = "123" Then
Text3.Text = ""
Text3.SetFocus ' je passe au text3
Else
MsgBox "verifier votre Réf"
Text2.Text = ""
Text2.SetFocus 'je reste tjr sur text2 pour re faire enter la Réference
End If
End If
End Sub
---------------------------------------------------------------------------------
Private Sub Text3_KeyPress(KeyAscii As Integer)
If KeyAscii = AscW("$") Then
KeyAscii = 0
If Text3.Text = "1" Then
Text2.Text = ""
Text2.SetFocus
Else
MsgBox "Compteur existe déja"
Text3.Text = ""
Text3.SetFocus 'je reste toujour sur text3 pour refaire enter la chaine de caractère
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 13 janv. 2007 à 11:27
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = AscW("$") Then
'je doit entrer dans la boucle suivante
'For i=1 to Val(Text1.text)
' faire entrer un text dans Text2 (au meme tempsexecuter Private Sub Text2_KeyPress(KeyAscii As Integer))
' faire entrer un text dans Text3 (au meme tempsexecuter Private Sub Text2_KeyPress(KeyAscii As Integer))
'next i
End If
End Sub
C 'est ceci qui n'est pas clair, déjà :
'For i=1 to Val(Text1.text)
' faire entrer un text dans Text2 (au meme tempsexecuter Private Sub Text2_KeyPress(KeyAscii As Integer))
' faire entrer un text dans Text3 (au meme tempsexecuter Private Sub Text2_KeyPress(KeyAscii As Integer))
'next i
Explique donc :
1) si tu frappes 123$, ta bpoucle va rentrer quoi 123 fois dans text2 et dans text3 ?
2) et quel Keypress, de quel Keyascii, veux-tu déclencher dans Text2 ?
tonitto85
Messages postés16Date d'inscriptionsamedi 19 décembre 2009StatutMembreDernière intervention19 décembre 2009 13 janv. 2007 à 13:04
je m'excuse, c'est la prmiere fois que je participe à ce genre de forum.
alors ma boucle doit repeter a chaque fois la demande de faire entrer "123" dans text2 et un chiffre dans text3 (text3 c'est pour moi un compteur), cette boucle doit commencer de 1 et terminer par la valeur entrée dans text1.
pour s'assurer que j'ai bien terminer ma sésie dans n'importe textbox, je dois tapper '$',
voile un petit algorithme de ce qui doit ce passer:
- entrer une valeur dans text1 (terminée par '$')
- de i = 1 à Val (text1.text) répéter:
* entrer une chaine de caractère dans text2 (terminée par '$', le '$' ne doit pas apparaitre (keyascii = 0))
* verifier s'elle est egale à '123'; si oui je passe au text3, si non je doit retapper la chaine
* sur text 3 je doit enter un chiffre (un compteur)
- next i
- si i = val(text1.text), msgbox " c'est fait"
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 13 janv. 2007 à 14:47
Toujours rien compris de façon ne laissant aucun doute !
J'abandonne donc...
A moins que tu nous montre enfin un algorithme clair de cette "chose" ...
Excuse-moi.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 13 janv. 2007 à 14:52
Je tre précise quue, si tu fais enfin cet algorithme "clarificateur" de ton mécanisme :
Ni le mot Keypress no le mot Keyascii, ni le mot SetFocus ne doivent y pararaître... Ce sont là des mots de VB et un algorithme se fait sans code de quelque langage que ce soit....
tonitto85
Messages postés16Date d'inscriptionsamedi 19 décembre 2009StatutMembreDernière intervention19 décembre 2009 13 janv. 2007 à 15:49
<!--[if !supportLists]-->
Esperant que cette fois je serais plus claire, normalement là où j'ai trouvé le prob est une tout petite partie dans mon programme, c'est pour ça que j'ai pas arrivé a transmettre mon besoin clairement:
-
<!--[endif]-->
lire une chaîne de caractère N°1 (des
chiffres)
<!--[if !supportLists]-->
-
<!--[endif]-->
de i = 1 à la chaîne N°1 faire :
<!--[if !supportLists]-->
·
<!--[endif]-->
lire une chaîne de caractère N°2
<!--[if !supportLists]-->
·
<!--[endif]-->
si cette chaîne = « 123 » (ou bien n'importe quelle chaine que je la fixe)
, passer au point suivant
Si non, relire la chaîne de caractère
N°2
<!--[if !supportLists]-->
·
<!--[endif]-->
lire chaîne de caractère N°3
<!--[if !supportLists]-->
·
<!--[endif]-->
si cette chaîne de caractère
existe dans un fichier texte, relire la chaîne
N°3
Si non, passer au i suivant
<!--[if !supportLists]-->
-
<!--[endif]-->
si boucle terminée ( i=chaîne N°1) ,
imprimer :
Chaîne N°1
Chaîne N°2.
pour ajouter plus de details sur l'utilisation de mon programme.
j'ai un colis qui contient des produits, sur le colis il y a une etiquette qui contient une reference + une quantité(la quantité des produit qu'il contient ), et aussi chaque produit dans ce colis contient la meme Réf + un compteur.
exemple:
sur le colis je trouve: Réference : "123" quantité "4"
sur le produit N°1 je trouve : Réference : "123" compteur :"1"
sur le produit N°2 je trouve : Réference : "123" compteur :"2"
sur le produit N°3 je trouve : Réference : "123" compteur :"4"
sur le produit N°4 je trouve : Réference : "123" compteur :"5"
alors mon programme doit verifier est ce que j'ai bien dans le colis la quantié exact des produit, de la meme Réf
ça en faisant lire dans un premier temps la Réf sur le colis + la quantité, et pour chaque prduit je doit lire là Réf + le compteur jusqu'au atteindre la quantité demandée sur le colis.
le compteur verifie que j'ai pas lu le meme produit deux fois
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 15 janv. 2007 à 17:38
Bien embrouillé tout çà !
Tu m'en fais transpirer !
Mais je crois avoir enfin commencé à deviner :
Toutefois, ce que j'ai compris n'aurait de sens (sinon je ne ne vois pas l'intérêt de regarder les références de tes produits) que si :
- tous tes produits étant étiquettés avec la référence du colis qui les contenait, tu déballes plusieurs colis, en vrac, sans rien recenser à ce moment là; puis que :
- tu reviens sur la totalité de tes produits déballés et mélangés et qu'alors
- tu les enregistres un par un dans plusieurs liste dont chacune a pour titre la référence lue sur le produit
et qu'enfin :
- tu fais le total de chaque liste pour voir s'il correspond au total annoncé sur le colis portant cette référence-là .
tonitto85
Messages postés16Date d'inscriptionsamedi 19 décembre 2009StatutMembreDernière intervention19 décembre 2009 16 janv. 2007 à 11:57
l'interret de ce programme c'est de verifier est ce que j'ai bien envoyer les bon produit avec la bonne quantité au client, et cela ce fais :
- en lisant l'etiquette du coli, qui contient la Réference + la quantité
-puis en lisant à cahque fois le prduit qui se trouve à l'interieur (ces produits sont biensure etiquettés, et chaque étiquette contient la Réference + un compteur)
- quand je lis la quantié exact( celle sur le colis), une etiquette s'imprime, avec la Réf et la quantité.
alors j'ai pu faire ce programme, mais mon soucis c'est de faire (le ping pong) , c'est de faire une boucle qui permet de lire la Réference puis le compteur N fois (N c'est la quantité sur le colis).
est ce que je peux te transmettre mon programme, l'executer chez vous, comme ça vous pouvez comprendre mon probleme?