Probleme en Visual Basic 6
Fermé
bichon-26
Messages postés
7
Date d'inscription
mercredi 18 juin 2008
Statut
Membre
Dernière intervention
15 décembre 2010
-
18 juin 2008 à 10:20
bichon-26 - 19 juin 2008 à 13:58
bichon-26 - 19 juin 2008 à 13:58
A voir également:
- Probleme en Visual Basic 6
- Visual basic - Télécharger - Langages
- Microsoft 365 basic - Guide
- Microsoft visual c++ runtime - Guide
- Visual paradigm - Télécharger - Gestion de données
- Gta 6 prix - Guide
14 réponses
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
Ambassadeur
1 539
18 juin 2008 à 11:06
18 juin 2008 à 11:06
Que se passe-til exactement ? Qu'observe tu qui ne corresponde pas à tes attentes.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
18 juin 2008 à 11:17
18 juin 2008 à 11:17
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)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
18 juin 2008 à 11:27
18 juin 2008 à 11:27
Eh bien c'est à toi de le définir ... je ne fais que te dire où est le problème.
;o)
;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
18 juin 2008 à 13:20
18 juin 2008 à 13:20
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
Utilisateur anonyme
18 juin 2008 à 14:06
18 juin 2008 à 14:06
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
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
1 539
18 juin 2008 à 16:18
18 juin 2008 à 16:18
bizarre ce if sans endif...
bichon-26
>
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
18 juin 2008 à 16:40
18 juin 2008 à 16:40
non escuse moi je l'ai oublié quand j'ai recopié, j'ai bien un end if.
Utilisateur anonyme
18 juin 2008 à 15:43
18 juin 2008 à 15:43
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
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
Ambassadeur
1 539
18 juin 2008 à 16:27
18 juin 2008 à 16:27
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
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
1 539
18 juin 2008 à 16:54
18 juin 2008 à 16:54
Tu veux dire que le programme se plante après le gt3, sans faire print toto ?
bichon-26
>
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
18 juin 2008 à 21:35
18 juin 2008 à 21:35
oui voila c'est ça
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
Ambassadeur
1 539
19 juin 2008 à 11:08
19 juin 2008 à 11:08
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 ?
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
1 539
>
bichon-26
19 juin 2008 à 13:25
19 juin 2008 à 13:25
databuffer(i)=0 pour chaque i.
bichon-26
>
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
19 juin 2008 à 13:30
19 juin 2008 à 13:30
ah non pardon escuse moi, je suis debutant et j'avez oublié de mettre le (i) de databuffer(i),
j'ai le regret de vous dire que sa plante toujours.
j'ai le regret de vous dire que sa plante toujours.
yg_be
Messages postés
23235
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 septembre 2024
1 539
>
bichon-26
19 juin 2008 à 13:36
19 juin 2008 à 13:36
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.
18 juin 2008 à 11:10
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.
18 juin 2008 à 11:38
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 ?
18 juin 2008 à 11:48
18 juin 2008 à 12:45
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é.
18 juin 2008 à 13:18