je travaille en vba sur le logiciel pulselabshop (v6.0)
ce soft sert à récupérer des signaux acoustiques
ma macro permet de faire plusieurs acquisitions à la suite puis enregistrer les données dans un fichier texte; chaque acquisition dure 10s
mon problème est le suivant:
l'avancement du code de la macro n'attends pas la fin de l'acquisition (code: pulselabshop.start).
j'ai trouvé un moyen de la faire fonctionner mais j'aimerai éviter de devoir cliquer lors des mesures successives:
sans l'apparition de la msgbox, l'acquisition ne se fait pas, la commande etant passé. j'ai déjà essayer les "sleep" et "do event", même constat. j'ai essayer également de créer un userframe avec date d'expiration de 10s, mais elle aussi prends le dessus sur ma mesure.
j'ai pas trouvé de flag indiquant la fin des mesures non plus.
pour finir, voici ou sont sauvegardé les données
Dim FunctionData As Object
Dim Data As Variant
Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input " & NumeroMicro & ")").FunctionData
Data = FunctionData.GetAllValues(True)
j'aurais voulu verifier si la derniere case etait vide et attendre tant qu'elle ne l'est pas
genre
while data(1600,0) is empty
wend
mais avant d'être remplie, cette case est de type <type mismatch>, donc je sais pas comment faire ma condition, is empty ne marchant pas :furieux:
(de toute façon je doute que ça marche ...)
comment puis je faire ? thread avec l'userform? (si oui, je veux bien l'adresse d'un cours simple en VB, j'en ai pas trouvé)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
bruelagerri
Le jeudi 29 Novembre 2012 à 09:17 par bruelagerri :
bonjour à tous,
je travaille en vba sur le logiciel pulselabshop (v6.0) ce soft sert à récupérer des signaux acoustiques ma macro permet de faire plusieurs acquisitions à la suite puis enregistrer les données dans un fichier texte; chaque acquisition dure 10s mon problème est le suivant:
l'avancement du code de la macro n'attends pas la fin de l'acquisition (code: pulselabshop.start). j'ai trouvé un moyen de la faire fonctionner mais j'aimerai éviter de devoir cliquer lors des mesures successives:
PulseLabShop.start check = timer start = timer tempo while checkmsgbox "attends 10s" check=timer wend
sans l'apparition de la msgbox, l'acquisition ne se fait pas, la commande etant passé. j'ai déjà essayer les "sleep" et "do event", même constat. j'ai essayer également de créer un userframe avec date d'expiration de 10s, mais elle aussi prends le dessus sur ma mesure.
j'ai pas trouvé de flag indiquant la fin des mesures non plus.
pour finir, voici ou sont sauvegardé les données Dim FunctionData As Object Dim Data As Variant Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input " & NumeroMicro & ")").FunctionData Data = FunctionData.GetAllValues(True)
j'aurais voulu verifier si la derniere case etait vide et attendre tant qu'elle ne l'est pas
genre while data(1600,0) is empty wend
mais avant d'être remplie, cette case est de type , donc je sais pas comment faire ma condition, is empty ne marchant pas :furieux:
(de toute façon je doute que ça marche ...)
comment puis je faire ? thread avec l'userform? (si oui, je veux bien l'adresse d'un cours simple en VB, j'en ai pas trouvé)
merci d'avance !
j'ai choisi de créer un userform comme une messagebox mais avec une date limite de 20s. le problème étant que quand cette user s'affiche elle bloque le code. j'aimerai la faire devenir modal donc (comme la msgbox non ?) pour l'instant le soft fonctionne pke j'ai fait un truc dégueulasse (et mauvais pour la santé des épileptiques!)
Public Sub UserForm_Activate() popup.Hide End Sub
userform popup s'ouvre et se ferme
Sub fenetrepopup() UserForm2.Hide waiting Dim Check, start, tempo As Long Check = Timer start = Timer While Check < start + 20 Check = Timer popup.Show waiting Wend UserForm2.Show End Sub
et la en fait j'appelle popup qui se ferme pendant 20 secondes. si je met ma tempo dans userform popup, mon acquisition s’interrompt. Userform2 est ma form principale, et pour info, waiting:
Public Sub waiting() Dim i As Integer For i = 1 To 1000 DoEvents
Next i
Des idées ? merci
Le jeudi 29 Novembre 2012 à 09:17 par bruelagerri :
bonjour à tous,
je travaille en vba sur le logiciel pulselabshop (v6.0)
ce soft sert à récupérer des signaux acoustiques
ma macro permet de faire plusieurs acquisitions à la suite puis
enregistrer les données dans un fichier texte; chaque acquisition dure
10s
mon problème est le suivant:
l'avancement du code de la macro n'attends pas la fin de l'acquisition (code:
pulselabshop.start).
j'ai trouvé un moyen de la faire fonctionner mais j'aimerai
éviter de devoir cliquer lors des mesures successives:
sans l'apparition de la msgbox, l'acquisition ne se fait pas, la commande etant
passé. j'ai déjà essayer les "sleep" et "do
event", même constat. j'ai essayer également de créer
un userframe avec date d'expiration de 10s, mais elle aussi prends le dessus
sur ma mesure.
j'ai pas trouvé de flag indiquant la fin des mesures non plus.
pour finir, voici ou sont sauvegardé les données
Dim FunctionData As Object
Dim Data As Variant
Set FunctionData =
Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre
dB (Input " & NumeroMicro & ")").FunctionData
Data = FunctionData.GetAllValues(True)
j'aurais voulu verifier si la derniere case etait vide et attendre tant qu'elle
ne l'est pas
genre
while data(1600,0) is empty
wend
mais avant d'être remplie, cette case est de type ,
donc je sais pas comment faire ma condition, is empty ne marchant pas :furieux:
(de toute façon je doute que ça marche ...)
comment puis je faire ? thread avec l'userform? (si oui, je veux bien l'adresse
d'un cours simple en VB, j'en ai pas trouvé)
merci d'avance !
j'ai choisi de créer un userform comme une messagebox mais avec une date limite de 20s. le problème étant que quand cette user s'affiche elle bloque le code. j'aimerai la faire devenir modal donc (comme la msgbox non ?)
pour l'instant le soft fonctionne pke j'ai fait un truc dégueulasse (et mauvais pour la santé des épileptiques!)
Public Sub UserForm_Activate()
popup.Hide
End Sub
userform popup s'ouvre et se ferme
Sub fenetrepopup()
UserForm2.Hide
waiting
Dim Check, start, tempo As Long
Check = Timer
start = Timer
While Check < start + 20
Check = Timer
popup.Show
waiting
Wend
UserForm2.Show
End Sub
et la en fait j'appelle popup qui se ferme pendant 20 secondes.
si je met ma tempo dans userform popup, mon acquisition s’interrompt.
Userform2 est ma form principale, et pour info, waiting:
Public Sub waiting()
Dim i As Integer
For i = 1 To 1000
DoEvents
Le jeudi 29 Novembre 2012 à 09:17 par bruelagerri :
bonjour à tous,
je travaille en vba sur le logiciel pulselabshop (v6.0) ce soft sert à récupérer des signaux acoustiques ma macro permet de faire plusieurs acquisitions à la suite puis enregistrer les données dans un fichier texte; chaque acquisition dure 10s mon problème est le suivant:
l'avancement du code de la macro n'attends pas la fin de l'acquisition (code: pulselabshop.start). j'ai trouvé un moyen de la faire fonctionner mais j'aimerai éviter de devoir cliquer lors des mesures successives:
PulseLabShop.start check = timer start = timer tempo while checkmsgbox "attends 10s" check=timer wend
sans l'apparition de la msgbox, l'acquisition ne se fait pas, la commande etant passé. j'ai déjà essayer les "sleep" et "do event", même constat. j'ai essayer également de créer un userframe avec date d'expiration de 10s, mais elle aussi prends le dessus sur ma mesure.
j'ai pas trouvé de flag indiquant la fin des mesures non plus.
pour finir, voici ou sont sauvegardé les données Dim FunctionData As Object Dim Data As Variant Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG").Functions("Spectre dB (Input " & NumeroMicro & ")").FunctionData Data = FunctionData.GetAllValues(True)
j'aurais voulu verifier si la derniere case etait vide et attendre tant qu'elle ne l'est pas
genre while data(1600,0) is empty wend
mais avant d'être remplie, cette case est de type , donc je sais pas comment faire ma condition, is empty ne marchant pas :furieux:
(de toute façon je doute que ça marche ...)
comment puis je faire ? thread avec l'userform? (si oui, je veux bien l'adresse d'un cours simple en VB, j'en ai pas trouvé)
merci d'avance !
j'ai choisi de créer un userform comme une messagebox mais avec une date limite de 20s. le problème étant que quand cette user s'affiche elle bloque le code. j'aimerai la faire devenir modal donc (comme la msgbox non ?) pour l'instant le soft fonctionne pke j'ai fait un truc dégueulasse (et mauvais pour la santé des épileptiques!)
Public Sub UserForm_Activate() popup.Hide End Sub
userform popup s'ouvre et se ferme
Sub fenetrepopup() UserForm2.Hide waiting Dim Check, start, tempo As Long Check = Timer start = Timer While Check < start + 20 Check = Timer popup.Show waiting Wend UserForm2.Show End Sub
et la en fait j'appelle popup qui se ferme pendant 20 secondes. si je met ma tempo dans userform popup, mon acquisition s’interrompt. Userform2 est ma form principale, et pour info, waiting:
Public Sub waiting() Dim i As Integer For i = 1 To 1000 DoEvents
Next i
Des idées ? merci
Gloops
Bonjour,
Pour attendre qu'un traitement soit réalisé, il y a trois solutions : - la meilleure est d'attendre une valeur de retour, mais encore s'agit-il que le code à appeler soit suffisamment bien documenté dans ce sens - on peut attendre un certain temps (comme dix secondes par exemple) à condition que la durée du traitement soit connue - ou on peut surveiller l'existence d'une certaine fenêtre ; tant que l a fenêtre existe, c'est que le traitement n'est pas terminé. Encore s'agit-il que le traitement appelé d'une part ouvre une fenêtre (dont il y aura besoin de connaître le titre), d'autre part n'oublie pas de la fermer.
Pour surveiller l'existence de la fenêtre on attendra que son numéro soit nul, grâce à ceci :
Une API se déclare dans un module (non lié à un formulaire), en Pri vate, et on y écrit une fonction d'appel qui sera Public.
Dans le module d'un formulaire (en tout cas sous Access), une déclaration d'API ne sera admise que si on la précise Private. En principe, on préfère comme je dis dans le paragraphe précédent, p our éviter un appel d'API avec des arguments incorrects.
A ce que j'ai compris, si il y a un contrôle de données à effectuer sur le résultat du traitement, on peut toujours (proposer de) le relancer tant que ce n'est pas bon. En essayant d'être le plus clair possible su r les causes possibles d'erreur et les solutions à y apporter.
Bonjour,
Pour attendre qu'un traitement soit réalisé, il y a trois solutions :
- la meilleure est d'attendre une valeur de retour, mais encore
s'agit-il que le code à appeler soit suffisamment bien documenté dans ce
sens
- on peut attendre un certain temps (comme dix secondes par exemple) à
condition que la durée du traitement soit connue
- ou on peut surveiller l'existence d'une certaine fenêtre ; tant que l a
fenêtre existe, c'est que le traitement n'est pas terminé. Encore
s'agit-il que le traitement appelé d'une part ouvre une fenêtre (dont il
y aura besoin de connaître le titre), d'autre part n'oublie pas de la
fermer.
Pour surveiller l'existence de la fenêtre on attendra que son numéro
soit nul, grâce à ceci :
Une API se déclare dans un module (non lié à un formulaire), en Pri vate,
et on y écrit une fonction d'appel qui sera Public.
Dans le module d'un formulaire (en tout cas sous Access), une
déclaration d'API ne sera admise que si on la précise Private. En
principe, on préfère comme je dis dans le paragraphe précédent, p our
éviter un appel d'API avec des arguments incorrects.
A ce que j'ai compris, si il y a un contrôle de données à effectuer sur
le résultat du traitement, on peut toujours (proposer de) le relancer
tant que ce n'est pas bon. En essayant d'être le plus clair possible su r
les causes possibles d'erreur et les solutions à y apporter.
Pour attendre qu'un traitement soit réalisé, il y a trois solutions : - la meilleure est d'attendre une valeur de retour, mais encore s'agit-il que le code à appeler soit suffisamment bien documenté dans ce sens - on peut attendre un certain temps (comme dix secondes par exemple) à condition que la durée du traitement soit connue - ou on peut surveiller l'existence d'une certaine fenêtre ; tant que l a fenêtre existe, c'est que le traitement n'est pas terminé. Encore s'agit-il que le traitement appelé d'une part ouvre une fenêtre (dont il y aura besoin de connaître le titre), d'autre part n'oublie pas de la fermer.
Pour surveiller l'existence de la fenêtre on attendra que son numéro soit nul, grâce à ceci :
Une API se déclare dans un module (non lié à un formulaire), en Pri vate, et on y écrit une fonction d'appel qui sera Public.
Dans le module d'un formulaire (en tout cas sous Access), une déclaration d'API ne sera admise que si on la précise Private. En principe, on préfère comme je dis dans le paragraphe précédent, p our éviter un appel d'API avec des arguments incorrects.
A ce que j'ai compris, si il y a un contrôle de données à effectuer sur le résultat du traitement, on peut toujours (proposer de) le relancer tant que ce n'est pas bon. En essayant d'être le plus clair possible su r les causes possibles d'erreur et les solutions à y apporter.