Manipulation sur les textBox

tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 décembre 2009 - 12 janv. 2007 à 14:49
tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 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

16 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 janv. 2007 à 14:55
Rien compris !


et comment keyascii serait-il connu par l'événement chanfge, déjà, hein ?


Mais de toutes faççons : rien compris de ce que tu chercjhes à faire ...


Recommence et sois clair...
0
tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 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)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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"
<!--
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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 #
0

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

Posez votre question
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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.).

Voilà ce que je voulais dire à ce propos...


 
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
12 janv. 2007 à 19:34
OK avec toi  615490 jmfmarques . Attendons que  =952786 tonitto85   se manisfeste.
0
tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 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
       
    End If
End If
  
End Sub
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 ?

Apprends à être clair et précis ...
0
tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 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"
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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....
0
tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 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
0
tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 décembre 2009
13 janv. 2007 à 16:07
dsl je réctifie une erreur de frappe:


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 :"3"

sur le produit N°4 je trouve :  Réference : 
"123"       compteur :"4"
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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à .

Est-ce celà, qu'il t'est demandé de faire ?
0
tonitto85 Messages postés 16 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 19 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?
0
Rejoignez-nous