jeanlaracine
XLDnaute Nouveau
Bonjour,
j'ai développpé une macro excel qui permet de récupérer les données d'un baromètre via le port serie RS232 d'un PC.
J'ai crée un Userform avec des boutons pour démarrer l'acquisition et un module pour ma routine de traitement des données récupérer et l'affichage. Avec la commande MsComm event, j'attend que le baromètre envoie les données sur le port pour les récupérer et les traiter. A chaque nouvelle acquisition, j'enregistre le fichier sur le disque dur du PC (l'ensemble du code est disponible ci-dessous). Toutes les 10s le baromètre envoie la mesure sur le port serie.
L'ensemble fonctionne pendant quelques minutes et de façon aléatoire "une erreur d'exécution 50290" apparait ce qui bloque l'execution de la macro. Cette erreur cible sur une ligne du CODE MODULE de traitement des données mais le truc c'est que ce n'est pas la même ligne à chaque fois...
En appronfondissant un peu, il s'avère qu'il n'y a aucun problème si je n'utilise pas le PC. Dès que je fait autre chose en parallèle, ça plante.
Je pense peut-être que cela vient que la fenêtre active n'est pas celle d'Excel...à voir...Comment garder la fenêtre Excel active (tout en restant réduite dans la barre de tâche) au moment de l'éxécution du code? C'est peut être une piste...
Si vous avez une idée pour comprendre et résoudre cette erreur, je suis preneur car je ne vois pas ce qui bloque !:cry:
CODE USER FORM:
Private Sub CommandButton1_Click()
'Vider le buffer
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
'fixe la taille de la memoire tampon d'entrée à 2048 octets'
MSComm1.InBufferSize = 4096
'fixe la taille de la memoire tampon de sortie à 2048 octets'
MSComm1.OutBufferSize = 4096
'choisir un port série
MSComm1.CommPort = 2
' Indique au contrôle qu'il doit lire la totalité du tampon si la propriété Input est utilisée.
MSComm1.InputLen = 0
'paramétrage du port
MSComm1.Settings = "4800,E,7,1"
MSComm1.RTSEnable = False
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.Handshaking = 0
'ouvre le port
MSComm1.PortOpen = True
End Sub
--------------------------------------
Private Sub CommandButton2_Click()
'ferme le port
MSComm1.PortOpen = False
Unload Me
End Sub
--------------------------------
Public Sub MSComm1_OnComm()
'création de la variable tampon
Dim tampon As String
Select Case MSComm1.CommEvent
Case comEvReceive ' Si on reçoit des données
tampon = MSComm1.Input 'la variable tampon est remplie'
Call Traitement(tampon) ' Routine de traitement de l'affichage sous tableau excel'
End Select
End Sub
--------------------------------------------------
CODE MODULE :
Sub Traitement(tampon As String)
'activer la feuille excel
Feuil3.Visible = True
'affichage et mise en forme dans une cellule texte
ActiveSheet.Visible = True
Cells(2, 2).Value = tampon
Cells(3, 2).Value = tampon
Application.DisplayAlerts = False
Range("B3").Select
Selection.TextToColumns Destination:=Range("B3"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=" ", FieldInfo:=Array(Array(1, 9), Array(2, 9), Array(3, 9), Array(4, 9), Array(5, _
9), Array(6, 1), Array(7, 9)), TrailingMinusNumbers:=True
Range("E9").Select
ActiveCell.FormulaR1C1 = "=R[-6]C[-3]/10"
Application.DisplayAlerts = True
'affichage date et heure
Application.DisplayAlerts = False
Range("B9:C9").Select
Selection.ClearContents
Range("B9").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Range("B9").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("B9"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 4), Array(10, 9), Array(12, 1)), TrailingMinusNumbers _
:=True
Range("C9").Select
Selection.NumberFormat = "h:mm;@"
Application.DisplayAlerts = True
'sauvegarde du fichier
ActiveWorkbook.Save
'activer la feuille excel
Feuil3.Visible = True
End Sub
---------------------------
Merci d'avance de vos suggestion
Vivien
j'ai développpé une macro excel qui permet de récupérer les données d'un baromètre via le port serie RS232 d'un PC.
J'ai crée un Userform avec des boutons pour démarrer l'acquisition et un module pour ma routine de traitement des données récupérer et l'affichage. Avec la commande MsComm event, j'attend que le baromètre envoie les données sur le port pour les récupérer et les traiter. A chaque nouvelle acquisition, j'enregistre le fichier sur le disque dur du PC (l'ensemble du code est disponible ci-dessous). Toutes les 10s le baromètre envoie la mesure sur le port serie.
L'ensemble fonctionne pendant quelques minutes et de façon aléatoire "une erreur d'exécution 50290" apparait ce qui bloque l'execution de la macro. Cette erreur cible sur une ligne du CODE MODULE de traitement des données mais le truc c'est que ce n'est pas la même ligne à chaque fois...
En appronfondissant un peu, il s'avère qu'il n'y a aucun problème si je n'utilise pas le PC. Dès que je fait autre chose en parallèle, ça plante.
Je pense peut-être que cela vient que la fenêtre active n'est pas celle d'Excel...à voir...Comment garder la fenêtre Excel active (tout en restant réduite dans la barre de tâche) au moment de l'éxécution du code? C'est peut être une piste...
Si vous avez une idée pour comprendre et résoudre cette erreur, je suis preneur car je ne vois pas ce qui bloque !:cry:
CODE USER FORM:
Private Sub CommandButton1_Click()
'Vider le buffer
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
'fixe la taille de la memoire tampon d'entrée à 2048 octets'
MSComm1.InBufferSize = 4096
'fixe la taille de la memoire tampon de sortie à 2048 octets'
MSComm1.OutBufferSize = 4096
'choisir un port série
MSComm1.CommPort = 2
' Indique au contrôle qu'il doit lire la totalité du tampon si la propriété Input est utilisée.
MSComm1.InputLen = 0
'paramétrage du port
MSComm1.Settings = "4800,E,7,1"
MSComm1.RTSEnable = False
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.Handshaking = 0
'ouvre le port
MSComm1.PortOpen = True
End Sub
--------------------------------------
Private Sub CommandButton2_Click()
'ferme le port
MSComm1.PortOpen = False
Unload Me
End Sub
--------------------------------
Public Sub MSComm1_OnComm()
'création de la variable tampon
Dim tampon As String
Select Case MSComm1.CommEvent
Case comEvReceive ' Si on reçoit des données
tampon = MSComm1.Input 'la variable tampon est remplie'
Call Traitement(tampon) ' Routine de traitement de l'affichage sous tableau excel'
End Select
End Sub
--------------------------------------------------
CODE MODULE :
Sub Traitement(tampon As String)
'activer la feuille excel
Feuil3.Visible = True
'affichage et mise en forme dans une cellule texte
ActiveSheet.Visible = True
Cells(2, 2).Value = tampon
Cells(3, 2).Value = tampon
Application.DisplayAlerts = False
Range("B3").Select
Selection.TextToColumns Destination:=Range("B3"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=" ", FieldInfo:=Array(Array(1, 9), Array(2, 9), Array(3, 9), Array(4, 9), Array(5, _
9), Array(6, 1), Array(7, 9)), TrailingMinusNumbers:=True
Range("E9").Select
ActiveCell.FormulaR1C1 = "=R[-6]C[-3]/10"
Application.DisplayAlerts = True
'affichage date et heure
Application.DisplayAlerts = False
Range("B9:C9").Select
Selection.ClearContents
Range("B9").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Range("B9").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("B9"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 4), Array(10, 9), Array(12, 1)), TrailingMinusNumbers _
:=True
Range("C9").Select
Selection.NumberFormat = "h:mm;@"
Application.DisplayAlerts = True
'sauvegarde du fichier
ActiveWorkbook.Save
'activer la feuille excel
Feuil3.Visible = True
End Sub
---------------------------
Merci d'avance de vos suggestion
Vivien