Loop until, do, comment ça marche ???

Résolu
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005 - 24 mars 2005 à 11:50
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005 - 24 mars 2005 à 14:45
Salut à tous,
je veux faire une boucle, je m'explique.
J'ai un txtdate, et je souhaite que si le txtdate.text n'est pas numéric
(If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa."))
alors un message âpparait, et j'aimerais alors revenir vers la saisi de la date quand je clique sur le bouton ok du msgbox.

J'espere que je me suis bien expliqué.
Merci
A voir également:

17 réponses

sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
24 mars 2005 à 14:27
Dans ce cas utilise exit sub, cad

If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
textbox.setfocus()
'textbox etant le nom de l'objet contenant txtdate
exit sub 'interrompt l'execution de la procedure
end if


sg
3
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
24 mars 2005 à 11:59
salut si ca peut aider

while true
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")

else
exit while
wend

sg
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 11:59
Ok merci je test de suite..

;)
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 12:02
Le exit while ne passe pas, erreur...
Attendu do, for,sub....
0

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

Posez votre question
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
24 mars 2005 à 12:09
mets exit do dans ce cas... desolé j'etais avec vb.net


sg
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 12:09
Voila mon code :

While True
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
end while
End If

Wend


et j'ai l'erreur sur end while.
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 12:09
ok merci
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
24 mars 2005 à 12:10
C "exit while" ....


sg
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 12:17
le exit while marche pas .

Mon code :

While True
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
exit while 'là il y a l'erreur
Wend
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
24 mars 2005 à 12:22
tu es sur access...

while true
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
exit do
Wend

ou
do while true
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
exit do
loop


sg
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
24 mars 2005 à 12:28
Au fait je viens de relire ta question ... desolé... pas ac attentif

tu veux revenir sur le texbox contenant l'erreur si c le cas alors c plutot

If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")

textbox.setfocus()
end if

au fait sur les message precedent j'avais oublie le end if

while true
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
exit do
end if
Wend

ou
do while true
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
exit do
end if
loop


sg
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 13:06
J'ai mi ça :


while true
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
exit do
end if
Wend

et ça plante au niveau du "exit do"
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 13:11
et pour le 2eme :

do while true
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
Else
exit do
end if
loop

j'ai une boucle infinie au niveau du msgbox (je clic sur "ok", il réapparait", encore et encore, et....)
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
24 mars 2005 à 13:50
tu veux revenir sur le texbox contenant l'erreur si c le cas alors c plutot , c ca??
donc ce cas je pense que tu dois utiliser le code ci dessous:

If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
textbox.setfocus()
'textbox etant le nom de l'objet contenant txtdate
end if


sg
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 14:15
oui je sui daccord, mais apres je ne veu pas que le programme continu....
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 14:26
Voilà mon programme :

Option Explicit
Dim compte(9999, 10 + 1) As String
Dim matricule(999, 4 + 1) As String
Dim ventil(9999) As String
Dim nb_quartz As Integer
Dim nb_compta As Integer
Dim nb_ventil As Integer
Dim tot_deb As Integer
Dim tot_cred As Integer



Private Sub cmdlanc_Click()
'****************************déclaration des variables********************
Dim i As Integer
Dim p As Integer
Dim ligne As String
Dim tout_quartz As String
Dim tout_compta As String
Dim raison As String
Dim num As String
Dim vbcrlf As String
Dim lig As String
Dim solde As String
Dim numeric As String


'txtdate.MousePointer = True
If txtdate.Text = "" Then
cmdlanc.Visible = False
Else
End If

c'est là que je veux que ça boucle. mon code juste en dessous ne me plait pas, car
comme tu vois le programme quitte quand ya une erreur de saisi, alors que je veux que ça revienne dans le txtdate SANS quitter le programme (fer une boucle en gros). Mais c'est là mon point faible...

numeric = IsNumeric(txtdate)
If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
End
else
end if



'**************************************************************************************



'les erreurs sont ignorées
On Error Resume Next
vbcrlf = Chr$(13) + Chr$(10)

'************Ouverture du fichier QUARTZ en lecture*************************

Open (App.Path & "" & "Fichiers" & "" & "quartz400.txt") For Input As #1

nb_quartz = 0 'initialisation du nombre de lignes


'1ere ligne stockée dans la variable "ligne"

tout_quartz = ""
While Not EOF(1)
Line Input #1, ligne
tout_quartz = tout_quartz & ligne & vbcrlf


nb_quartz = nb_quartz + 1



'ReDim Preserve matricule(nb_quartz + 1, 4 + 1)
matricule(nb_quartz, 1) = Left(ligne, 6) 'matricule
matricule(nb_quartz, 2) = Mid(ligne, 7, 1) 'raison
matricule(nb_quartz, 3) = Mid(ligne, 8, 3) 'num
matricule(nb_quartz, 4) = Mid(ligne, 11, 8) 'pourcentage

Wend

' MsgBox matricule(nb_quartz, 1) & matricule(nb_quartz, 2) & matricule(nb_quartz, 3) & matricule(nb_quartz, 4)

'toutes les lignes sont stockées en mémoire
'**************************************************************************************************
Close #1


'****************************Ouverture du fichier COMPTA en lecture*****************************

Open (App.Path & "" & "Fichiers" & "" & "compta.txt") For Input As #1

nb_compta = 0 'initialisation du nombre de lignes


'1ere ligne stockée dans la variable "ligne"

tout_compta = ""
While Not EOF(1)
Line Input #1, ligne
tout_compta = tout_compta & ligne & vbcrlf


nb_compta = nb_compta + 1



'ReDim Preserve compte(nb_compta + 1, 10 + 1) compte(nb_compta, 1) Left(ligne, 6) 'date 6 compte(nb_compta, 2) Mid(ligne, 7, 6) 'compte 6 compte(nb_compta, 3) Mid(ligne, 13, 1) 'raison 1 compte(nb_compta, 4) Mid(ligne, 14, 3) 'num 3 compte(nb_compta, 5) Mid(ligne, 17, 2) 'cat 2 compte(nb_compta, 6) Mid(ligne, 19, 1) 'lieu 1 compte(nb_compta, 7) Mid(ligne, 20, 4) 'autre 4 compte(nb_compta, 8) Mid(ligne, 24, 6) 'matricule 6 compte(nb_compta, 9) Mid(ligne, 30, 12) 'montant 12 compte(nb_compta, 10) Mid(ligne, 42, 1) 'sens 1


Wend
' MsgBox compte(nb_compta, 1) & compte(nb_compta, 2) & compte(nb_compta, 3) & compte(nb_compta, 4) & compte(nb_compta, 5) & compte(nb_compta, 6) & compte(nb_compta, 7) & compte(nb_compta, 8) & compte(nb_compta, 9) & compte(nb_compta, 10)



Close #1



'****************************Exportation des infos dans un fichier*****************************


'comparer les matricules avec les 2 fichiers



'repérer le pourcentage


'format du fichier final
'"ep31012005638211V440PCF300046000000000012C"
'puis
'"es31012005638211V470PEF300047000000000010C"


'"
'es
'31012005 txt_date
'638211 num compte compte(i, 2)
'V raison compte(i, 3)
'470 num compte(i, 4)
'p lieu compte(i, 6)
'EF cat compte(i, 5)
'300047 matricule num compte(i, 8)
'000000000010 montant compte(i, 9) * pourcent
'C sens compte(i, 10)
'"


Dim j As Integer


j = 1


tot_deb = 0
tot_cred = 0


For i = 1 To nb_compta

solde = compte(i, 9) * pourcent(compte(i, 8), compte(i, 3), compte(i, 4))

If compte(i, 10) = "D" Then
tot_deb = tot_deb + solde
Else
tot_cred = tot_cred + solde
End If

solde = String(12 - Len(solde), "0") & solde

If i = 1 Then
ventil(j) = """" & "ep" & txtdate.Text & compte(i, 2) & compte(i, 3) & compte(i, 4) & compte(i, 6) & compte(i, 5) & compte(i, 8) & solde & compte(i, 10) & """"
Else
ventil(j) = """" & "es" & txtdate.Text & compte(i, 2) & compte(i, 3) & compte(i, 4) & compte(i, 6) & compte(i, 5) & compte(i, 8) & solde & compte(i, 10) & """"
End If

j = j + 1


Next i


nb_ventil = j + 1


txtdeb.Text = tot_deb
txtcred.Text = tot_cred


Dim ecart As Long
Dim ind As String
Dim id As String
Dim cpt As Integer


ecart = tot_deb - tot_cred
If ecart > 0 Then
ind = "Crédit"
id = "C"
Else
ind = "Débit"
id = "D"
End If


If ecart < 0 Then
ecart = Abs(ecart)
End If


lblecart.Caption = "Calcul de l'écart : il manque " & ecart & " au " & ind


Dim rep As Variant
rep = MsgBox("Voulez-vous lancer la correction automatique pour l'écart de " & ecart & " ? ", vbYesNo)


If rep = vbNo Then
End
Else
Dim flag As Boolean
Dim i_scan As Integer

Dim p_un As String
Dim p_deux As String
Dim p_trois As String
Dim p_quatre As String
Dim ttmp As String

flag = False
i_scan = 1
While flag = False And i_scan < nb_ventil

p_un = Left(ventil(i_scan), 12)
p_deux = Left(ventil(i_scan), 30)
p_trois = Mid(ventil(i_scan), 31, 12)
p_quatre = Mid(ventil(i_scan), 43, 2)
ttmp = """es" & txtdate.Text & "6"
If p_un ttmp And p_quatre id & """" Then

'String(12 - Len(solde), "0") & solde

ventil(i_scan) = p_deux & String(12 - (p_trois + ecart), "0") & (p_trois + ecart) & p_quatre
flag = True

If id = "C" Then
tot_cred = tot_cred + ecart
Else
tot_deb = tot_deb + ecart
End If
Else

i_scan = i_scan + 1
End If

Wend



End If



txtdeb.Text = tot_deb
txtcred.Text = tot_cred


'Kill "ventil.txt"
Dim fichier As String
fichier = InputBox("Entrer un nom du fichier de l'enregistrement de cette ventilation : ")
Open (App.Path & "" & "Fichiers" & "" & "" & fichier & ".txt") For Output As #3

For j = 1 To nb_ventil


Print #3, ventil(j)

Next j



MsgBox ("Votre fichier " & fichier & ".txt a été enregistré avec succès dans le répertoire FICHIERS")
Close #3
Dim reponse As Variant


reponse = MsgBox("Voulez-vous quitter le programme ?", vbYesNo)
If reponse = vbNo Then

Else
End
End
End If


End Sub


Function pourcent(mat As String, r As String, n As String) As Long


Dim i As Integer
Dim flag As Boolean


i = 0
flag = False


While i < nb_quartz And flag = False
If matricule(i, 1) mat And matricule(i, 2) r And matricule(i, 3) = n Then

flag = True
Else
i = i + 1

End If


Wend



If flag = True Then


pourcent = matricule(i, 4) / 100
Else


pourcent = 1

End If



End Function


Private Sub Form_Load()
If txtdate.Text <> "" Then
cmdlanc.Visible = False
End If


End Sub
0
tonywan Messages postés 34 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 24 mars 2005
24 mars 2005 à 14:45
Ca yest ça marche, grace a toi !!! :)

mon code final :

If numeric = False Then
MsgBox ("Entrer une date correcte sous le format jjmmaaaa.")
txtdate.Text = ""
txtdate.SetFocus
Exit Sub
End If

merci beaucoup !!
0
Rejoignez-nous