Ma macro ne fonctionne bien qu'en pas a pas...
Résolu/Fermé
?kri
Messages postés
43
Date d'inscription
lundi 8 juillet 2013
Statut
Membre
Dernière intervention
4 décembre 2020
-
1 mars 2014 à 09:13
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 2 mars 2014 à 18:21
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 2 mars 2014 à 18:21
A voir également:
- Ma macro ne fonctionne bien qu'en pas a pas...
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Tapez cette phrase, en respectant bien les espaces et la ponctuation. - Guide
- Mon ordinateur ne va pas bien - Guide
6 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
Modifié par Patrice33740 le 1/03/2014 à 18:03
Modifié par Patrice33740 le 1/03/2014 à 18:03
Difficile de répondre sans multimètre et sans utiliser le port série
mais sur le plan séquentiel, ton code n'est pas très cohérent, il serait préférable d'utiliser cet ordre :
Cordialement
Patrice
mais sur le plan séquentiel, ton code n'est pas très cohérent, il serait préférable d'utiliser cet ordre :
Private Sub CommandButton1_Click() Dim Pos As String Dim Resultat As String 'affiche un message UserForm1.Label2.Visible = True Label2.Caption = "" UserForm1.Repaint 'choisir un port série MSComm1.CommPort = 2 'DMM '19200 bauds, Parite Impaire, 7 bits de données, 1 bit d'arrêt MSComm1.Settings = "19200,o,7,1" 'Vide le buffer MSComm1.InBufferCount = 0 MSComm1.InputMode = 0 'ouvre le port MSComm1.PortOpen = True MSComm1.InputLen = 17 'fixe le nombre de caracteres a lire Seq = MSComm1.Input 'place la sequence lue dans Seq 'ferme le port MSComm1.PortOpen = False Label2.Caption = "Capture terminée" Sheets("Lancement").Activate Range("A1").Select 'vide les cellules de la feuille Range("A1:O1").ClearContents Pos = 1 Do While Pos <= 15 Resultat = Mid(Seq, Pos, 1) ActiveCell.Value = Resultat Label1.Caption = Resultat ActiveCell.Offset(0, 1).Select Pos = Pos + 1 Loop End Sub
Cordialement
Patrice
?kri
Messages postés
43
Date d'inscription
lundi 8 juillet 2013
Statut
Membre
Dernière intervention
4 décembre 2020
25
1 mars 2014 à 19:40
1 mars 2014 à 19:40
Merci d'avoir répondu.
Il est vrai que mon code n'est pas très soigné, mais mes dernières expériences de programmation étaient en basic sous Dos... au siècle dernier. Je manque donc un peu d'entrainement.
Pour en revenir à mon petit problème, la macro tourne puisque les cellules sont vidées, que la sélection se déplace comme prévu, et que la macro se termine normalement.
Les données lues en pas a pas sont exactes ( confirmées avec un logiciel d'extraction de données port série via un émulateur USB/Série et le datasheet du constructeur) et correspondent à l'affichage du multimètre. (calculs faits dans le classeur)
Je travaille sous Excel 2000, Win 7 64bits
J'ai fait les modifications que vous avez suggérées mais cela ne change rien.
Faudrait-il introduire un délai pour que les cellules aient le temps de se remplir, et si oui, comment?
Merci de votre aide,
Kri
Il est vrai que mon code n'est pas très soigné, mais mes dernières expériences de programmation étaient en basic sous Dos... au siècle dernier. Je manque donc un peu d'entrainement.
Pour en revenir à mon petit problème, la macro tourne puisque les cellules sont vidées, que la sélection se déplace comme prévu, et que la macro se termine normalement.
Les données lues en pas a pas sont exactes ( confirmées avec un logiciel d'extraction de données port série via un émulateur USB/Série et le datasheet du constructeur) et correspondent à l'affichage du multimètre. (calculs faits dans le classeur)
Je travaille sous Excel 2000, Win 7 64bits
J'ai fait les modifications que vous avez suggérées mais cela ne change rien.
Faudrait-il introduire un délai pour que les cellules aient le temps de se remplir, et si oui, comment?
Merci de votre aide,
Kri
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
2 mars 2014 à 00:16
2 mars 2014 à 00:16
Re,
Je ne suis spécialiste des ports séries mais la lecture s'opère en une seule fois :
Au lieu d'exécuter en pas à pas, tu peut placer des points d'arrêt aux endroits stratégiques pour voir si le délai est nécessaire et où le placer si besoin.
« Faudrait-il introduire un délai pour que les cellules aient le temps de se remplir, et si oui, comment? » Non, absolument pas, les données sont contenues dans «Seq», la boucle ne sert qu'à les répartir dans les différentes cellules.
Je ne suis spécialiste des ports séries mais la lecture s'opère en une seule fois :
Seq = MSComm1.Input. Lors de l'exécution en pas à pas, le délai entre chaque instruction est gigantesque. Peut-être faut-il ajouter un délai entre l'ouverture du port et la lecture ???
Au lieu d'exécuter en pas à pas, tu peut placer des points d'arrêt aux endroits stratégiques pour voir si le délai est nécessaire et où le placer si besoin.
« Faudrait-il introduire un délai pour que les cellules aient le temps de se remplir, et si oui, comment? » Non, absolument pas, les données sont contenues dans «Seq», la boucle ne sert qu'à les répartir dans les différentes cellules.
?kri
Messages postés
43
Date d'inscription
lundi 8 juillet 2013
Statut
Membre
Dernière intervention
4 décembre 2020
25
2 mars 2014 à 13:36
2 mars 2014 à 13:36
Merci Patrice
Effectivement le temps d'acquisition du port était trop long.
Du coup la séquence n'était pas stockée. J'ai donc rajouté la ligne
Application.Wait (Now+TimeValue ("0:00:02")) avant le stockage de la séquence
Il faudrait probablement mettre un délai plus long avec un port à 4800 Bauds.
Je continue
Merci encore
Kri
Effectivement le temps d'acquisition du port était trop long.
Du coup la séquence n'était pas stockée. J'ai donc rajouté la ligne
Application.Wait (Now+TimeValue ("0:00:02")) avant le stockage de la séquence
Il faudrait probablement mettre un délai plus long avec un port à 4800 Bauds.
Je continue
Merci encore
Kri
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
?kri
Messages postés
43
Date d'inscription
lundi 8 juillet 2013
Statut
Membre
Dernière intervention
4 décembre 2020
25
2 mars 2014 à 13:36
2 mars 2014 à 13:36
Merci Patrice
Effectivement le temps d'acquisition du port était trop long.
Du coup la séquence n'était pas stockée. J'ai donc rajouté la ligne
Application.Wait (Now+TimeValue ("0:00:02")) avant le stockage de la séquence
Il faudrait probablement mettre un délai plus long avec un port à 4800 Bauds.
Je continue
Merci encore
Kri
Effectivement le temps d'acquisition du port était trop long.
Du coup la séquence n'était pas stockée. J'ai donc rajouté la ligne
Application.Wait (Now+TimeValue ("0:00:02")) avant le stockage de la séquence
Il faudrait probablement mettre un délai plus long avec un port à 4800 Bauds.
Je continue
Merci encore
Kri
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
2 mars 2014 à 18:21
2 mars 2014 à 18:21
De rien, au plaisir de te relire sur le Forum.