Attendre la fin d'une acquisition

Attendre la fin d'une acquisition - VB/VBA/VBS - Programmation

Marsh Posté le 29-11-2012 à 13:48:31    

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:  
 

Code :
  1. PulseLabShop.start
  2. check = timer
  3. start = timer
  4. tempo=10
  5. while check<tempo+start
  6. msgbox "attends 10s"
  7. check=timer
  8. 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  

Code :
  1. Dim FunctionData As Object
  2.     Dim Data As Variant
  3. Set FunctionData = Project.FunctionOrganiser.FunctionGroups("LOG" ).Functions("Spectre dB (Input " & NumeroMicro & " )" ).FunctionData
  4.     Data = FunctionData.GetAllValues(True)


 
 
j'aurais voulu verifier si la derniere case etait vide et attendre tant qu'elle ne l'est pas  
 
genre

Code :
  1. while data(1600,0) is empty
  2. 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é)  
 
merci d'avance !

Reply

Marsh Posté le 29-11-2012 à 13:48:31   

Reply

Marsh Posté le 29-11-2012 à 14:21:03    

Bonjour,
tu as essayé avec  

Code :
  1. while data(1600,0) = ""
  2. wend


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 29-11-2012 à 14:50:26    

à l'instant, il aime pas plus ...

Reply

Marsh Posté le 29-11-2012 à 16:04:48    

Code :
  1. While (Data(1600, 0)) = QNAN
  2.     Data = FunctionData.GetAllValues(True)
  3. Wend


 
permet de bloquer la macro met ne permet plus a l'acquisition de reprendre comme pourrait le faire la msgbox...
 
donc, cette solution ne semble pas la bonne


Message édité par bruelhagerri le 29-11-2012 à 16:05:08
Reply

Marsh Posté le 30-11-2012 à 09:06:02    

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!)
 

Code :
  1. Public Sub UserForm_Activate()
  2.     popup.Hide
  3. End Sub


 
userform popup s'ouvre et se ferme
 

Code :
  1. Sub fenetrepopup()
  2.     UserForm2.Hide
  3.     waiting
  4.     Dim Check, start, tempo As Long
  5. Check = Timer
  6. start = Timer
  7. While Check < start + 20
  8. Check = Timer
  9.     popup.Show
  10.     waiting
  11. Wend
  12.     UserForm2.Show
  13. 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:
 

Code :
  1. Public Sub waiting()
  2. Dim i As Integer
  3. For i = 1 To 1000
  4.     DoEvents
  5. Next i


 
     
 
Des idées ?
merci

Reply

Marsh Posté le 30-11-2012 à 16:09:29    

            Bonjour !   Je ne vois pas très bien la problématique mais voici le code de ma fonction de pause (gérant le passage à minuit de la fonction Timer)
                             me donnant une totale satisfaction en VBA Office …

Code :
  1. Sub Pause(Optional P = 0.01)
  2.       D = Timer
  3.       F = D + P
  4.     While Timer < F
  5.        If Timer < D Then F = F - 86400:  D = 0
  6.        DoEvents
  7.     Wend
  8. End Sub

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed