A voir également:
- Probleme en Visual Basic 6
- Visual basic - Télécharger - Langages
- Visual basic editor - Télécharger - Langages
- Visual petanque - Télécharger - Sport
- Microsoft 365 basic - Accueil - Microsoft Office
- Visual c++ 2019 - Guide
14 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Que se passe-til exactement ? Qu'observe tu qui ne corresponde pas à tes attentes.
bonjour,
le Do While Command1 = True ... Loop est une boucle inifini ... à aucun moment Command1 peut prendre la valeur False pour sortir de la boucle.
;o)
le Do While Command1 = True ... Loop est une boucle inifini ... à aucun moment Command1 peut prendre la valeur False pour sortir de la boucle.
;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
dans la boucle, il faut une instruction de test de fin de lecture du genre :
'
Lupin
dans la boucle, il faut une instruction de test de fin de lecture du genre :
Sub TestBoucle() Dim objLecture As Variant Do While Command1 = True date_mesure = Date + Time ' Lecture objLecture = ReadData DataBuffer(0) ' Test de fin de lecture If (objLecture = "") Then Command1 = False End If s = "" For i = 0 To 5 s = s + Str(DataBuffer(i)) + Chr(9) Next i Text1.Text = s Text2.Text = date_mesure Sleep (2000) Loop End Sub
'
Lupin
re :
évidament, ce n'était qu'un exemple,
je ne connais pas la DLL que tu utilise,
même moi sous VBE il me signale que la ligne
ReadData DataBuffer(0)
est inconnu !
Il te faut trouver la bonne syntaxe selon l'instructuion qui
me semble venir d'une DLL externe.
' Test de fin de lecture
If (ReadData DataBuffer(0) = "") Then
Command1 = False
End If
L'instruction [ ReadData ] est inconnu sous VBA ainsi que la variable [ DataBuffer(0) ].
La variable est facilement déclarable :
Dim DataBuffer(6) As Variant
mais l'instruction [ ReadData ] doit provenir d'une DLL. Il te faut
savoir comment l'utiliser pour connaître la fin de la lecture par un
test conditionnel qui terminera la boucle [ While ].
Lupin
évidament, ce n'était qu'un exemple,
je ne connais pas la DLL que tu utilise,
même moi sous VBE il me signale que la ligne
ReadData DataBuffer(0)
est inconnu !
Il te faut trouver la bonne syntaxe selon l'instructuion qui
me semble venir d'une DLL externe.
' Test de fin de lecture
If (ReadData DataBuffer(0) = "") Then
Command1 = False
End If
L'instruction [ ReadData ] est inconnu sous VBA ainsi que la variable [ DataBuffer(0) ].
La variable est facilement déclarable :
Dim DataBuffer(6) As Variant
mais l'instruction [ ReadData ] doit provenir d'une DLL. Il te faut
savoir comment l'utiliser pour connaître la fin de la lecture par un
test conditionnel qui terminera la boucle [ While ].
Lupin
J'ai trouvé une autre solution la voici sa plante toujours mais j'ai quand même avancer:
Do While Command1 = True
date_mesure = Date + Time
ici : ReadData DataBuffer(0)
If DataBuffer(0) = 0 Then
Sleep (1000)
else
s = ""
For i = 0 To 5
s = s + Str(DataBuffer(i)) + Chr(9)
Next i
Text1.Text = s
Text2.Text = date_mesure
Print toto
Print s
Loop
End Sub
voila maintenant avec cette modification sa me print toto et le resultat de s jusqu'a se que le logicielle rebug, c'est à dire environ 2 seconde apres le lancement du programme
Do While Command1 = True
date_mesure = Date + Time
ici : ReadData DataBuffer(0)
If DataBuffer(0) = 0 Then
Sleep (1000)
else
s = ""
For i = 0 To 5
s = s + Str(DataBuffer(i)) + Chr(9)
Next i
Text1.Text = s
Text2.Text = date_mesure
Print toto
Print s
Loop
End Sub
voila maintenant avec cette modification sa me print toto et le resultat de s jusqu'a se que le logicielle rebug, c'est à dire environ 2 seconde apres le lancement du programme
re :
re :
il n'y a toujours pas de test de fin pour initialiser Command1 a False dans la boucle
Do While
...
Loop
il te faut un test du genre :
If (ReadData DataBuffer(0) = 0) Then
Command1 = False
End If
Lupin
re :
il n'y a toujours pas de test de fin pour initialiser Command1 a False dans la boucle
Do While
...
Loop
il te faut un test du genre :
If (ReadData DataBuffer(0) = 0) Then
Command1 = False
End If
Lupin
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Peux-tu ajouter des print avant et après le readdata, pour verifier que c'est le readdata qui plante ton programme ?
c'est ce que j'ai fait et voici le resultat
Do While Command1 = True
print gt"1"
date_mesure = Date + Time
print gt"2"
ici : ReadData DataBuffer(0)
print gt"3"
If DataBuffer(0) = 0 Then
print gt"4"
Sleep (1000)
else
je vois le gt 1 ,gt2 et gt3.
je ne voi pas le gt4
Bon je suis désolé il faut ke je rende le pc il é bientot 17h, je vais cherché se soir, merci beaucoup,
si vous ete ici demain alors a demain, on continuera.
bonne soirée
Do While Command1 = True
print gt"1"
date_mesure = Date + Time
print gt"2"
ici : ReadData DataBuffer(0)
print gt"3"
If DataBuffer(0) = 0 Then
print gt"4"
Sleep (1000)
else
je vois le gt 1 ,gt2 et gt3.
je ne voi pas le gt4
Bon je suis désolé il faut ke je rende le pc il é bientot 17h, je vais cherché se soir, merci beaucoup,
si vous ete ici demain alors a demain, on continuera.
bonne soirée
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je suggére de remettre databuffer à zero avant d'appeller readdata, par exemple dans la boucle for i = 0 to 5.
Et de mettre un sleep aussi avant l'instruction loop. Peut-être que readdata n'aime pas être appellè trop fréquement ?
Tu peux montrer le code tel qu'il est maintenant ?
Et de mettre un sleep aussi avant l'instruction loop. Peut-être que readdata n'aime pas être appellè trop fréquement ?
Tu peux montrer le code tel qu'il est maintenant ?
voila le nouveau code
Option Explicit
'Declare use of the DLL
'K8047D.DLL interface
'GENERAL PROCEDURES
Private Declare Sub StartDevice Lib "k8047d.dll" ()
Private Declare Sub StopDevice Lib "k8047d.dll" ()
Private Declare Sub Sleep Lib "kernel32" (ByValdwMilliseconds As Long)
'INPUT PROCEDURE
Private Declare Sub ReadData Lib "k8047d.dll" (Array_Pointer As Long)
'OUTPUT PROCEDURE
Private Declare Sub SetGain Lib "k8047d.dll" (ByVal Channel_no As Long, ByVal Gain As Long)
Private Declare Sub LEDon Lib "k8047d.dll" ()
Private Declare Sub LEDoff Lib "k8047d.dll" ()
'Declare variables
Dim DataBuffer(0 To 7) As Long
Private Sub Check1_Click()
If Check1.Value = 1 Then LEDon Else LEDoff
End Sub
Private Sub Command2_Click()
If Command2 = True Then
Text1.Text = 0
Text3.Text = 0
End If
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
StartDevice
End Sub
Private Sub Form_Terminate()
StopDevice
End Sub
Private Sub Command1_Click()
Dim i As Integer
Dim s As String
Dim date_heure As Integer
Dim date_mesure As String
Dim J As Integer
Dim reply As Integer
J = 0
Do Until J = 100
aqui (J)
'Do While Command1 = True
date_mesure = Date + Time
ici: ReadData DataBuffer(0)
'If DataBuffer(0) = 0 Then
'Command1 = False
'Sleep (30)
'GoTo ici
'Else
' s = ""
'For i = 0 To 5
' s = s + Str(DataBuffer(2)) '+ Chr(9)
'Next i
' End If
For i = 1 To 1000
Next i
J = J + 1
Text1.Text = s
Text2.Text = date_mesure
'Sleep (2000)
'Loop
Dim delta As Integer
Dim ValMax As Integer
Dim ValMin As Integer
Dim ValMoy As Integer
If DataBuffer(2) > ValMax Then
ValMax = ValMax + DataBuffer(2)
Text6.Text = date_mesure
Text3.Text = ValMax
End If
Loop
End Sub
Private Sub Option1_Click(Index As Integer)
SetGain 1, Index
End Sub
Sub aqui(J)
Dim s As String
Dim i As Integer
ReadData DataBuffer(0)
s = ""
For i = 0 To 5
s = s + Str(DataBuffer(2)) '+ Chr(9)
Next i
Text1.Text = s
Print s
' End If
End Sub
comme tu peut le voir j'ai apelé une autre fonction, ou à l'intérieur de cette fonction il y a ma boucle, c'est assez barbare.
Option Explicit
'Declare use of the DLL
'K8047D.DLL interface
'GENERAL PROCEDURES
Private Declare Sub StartDevice Lib "k8047d.dll" ()
Private Declare Sub StopDevice Lib "k8047d.dll" ()
Private Declare Sub Sleep Lib "kernel32" (ByValdwMilliseconds As Long)
'INPUT PROCEDURE
Private Declare Sub ReadData Lib "k8047d.dll" (Array_Pointer As Long)
'OUTPUT PROCEDURE
Private Declare Sub SetGain Lib "k8047d.dll" (ByVal Channel_no As Long, ByVal Gain As Long)
Private Declare Sub LEDon Lib "k8047d.dll" ()
Private Declare Sub LEDoff Lib "k8047d.dll" ()
'Declare variables
Dim DataBuffer(0 To 7) As Long
Private Sub Check1_Click()
If Check1.Value = 1 Then LEDon Else LEDoff
End Sub
Private Sub Command2_Click()
If Command2 = True Then
Text1.Text = 0
Text3.Text = 0
End If
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
StartDevice
End Sub
Private Sub Form_Terminate()
StopDevice
End Sub
Private Sub Command1_Click()
Dim i As Integer
Dim s As String
Dim date_heure As Integer
Dim date_mesure As String
Dim J As Integer
Dim reply As Integer
J = 0
Do Until J = 100
aqui (J)
'Do While Command1 = True
date_mesure = Date + Time
ici: ReadData DataBuffer(0)
'If DataBuffer(0) = 0 Then
'Command1 = False
'Sleep (30)
'GoTo ici
'Else
' s = ""
'For i = 0 To 5
' s = s + Str(DataBuffer(2)) '+ Chr(9)
'Next i
' End If
For i = 1 To 1000
Next i
J = J + 1
Text1.Text = s
Text2.Text = date_mesure
'Sleep (2000)
'Loop
Dim delta As Integer
Dim ValMax As Integer
Dim ValMin As Integer
Dim ValMoy As Integer
If DataBuffer(2) > ValMax Then
ValMax = ValMax + DataBuffer(2)
Text6.Text = date_mesure
Text3.Text = ValMax
End If
Loop
End Sub
Private Sub Option1_Click(Index As Integer)
SetGain 1, Index
End Sub
Sub aqui(J)
Dim s As String
Dim i As Integer
ReadData DataBuffer(0)
s = ""
For i = 0 To 5
s = s + Str(DataBuffer(2)) '+ Chr(9)
Next i
Text1.Text = s
Print s
' End If
End Sub
comme tu peut le voir j'ai apelé une autre fonction, ou à l'intérieur de cette fonction il y a ma boucle, c'est assez barbare.
Et bien lorsque je lance mon programme, mon logicielle visual basic plante et sa me met la fenêtre habituelle de windows avec terminé maintenant. Après il faut que je relance mon programme.
Si j'enleve ma boucle mon programme fonctionne c'est avec ma boucle while que sa plante.
j'espere avoir été assez clair.
si, à la place du do, tu mets :
ici:
et à la place du loop,
goto ici
Que se passe-til ?
Tu n'as aucune indication du type d'erreur ni de l'endroit où l'erreur se produit ?
j'ai essayer de faire ce que vous m'avez suggerer et cela fait pareil, sa me plante le logicielle, il ne réagi plus, je doit le fermé.