IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Message d'alerte après écriture Hyperterminal


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Message d'alerte après écriture Hyperterminal
    Bonjour à tous,

    voila je ne sais pas vraiment si je suis dans la bonne rubrique mais j'ai une machine de tests connecté à mon ordinateur. Je lis les données que la machine m'envoie grâce à hyperterminal (le terminal de windows).

    Je souhaiterais avoir un message d'avertissement (Msgbox sous excel) à chaque fois que la machine m'envoie des données donc qu'il y ait écriture sous hyperterminal. Est-ce possible selon vous?

    Je vous remercie d'avance et vous souhaite une bonne fin de journée!
    Cordialement,
    Jujel

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    L' exemple ci-joint ressemble à votre cas : Déclenchement macro sur réception mesure

    Le fichier Excel reçoit des mesures, une macro événementielle est déclenchée à la réception de la mesure du dernier capteur. Les mesures alimentent une boite noire contenant différentes formules de calcul. Les résultats de la boite noire sont ensuite transférés dans une feuille de synthèse.

    Cet outil a pour but justement de surveiller en temps réel le résultat des calculs.

    Je n'ai pas su comment il fonctionnait avec l'automate.

    Cordialement.

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Salut,

    Sans parler du monitoring des données une fois qu'elles sont dans Excel,
    je crois qu'un des problèmes de jujel est de récupérer les données depuis un port série
    (Hyperterminal gère également les connexions TCP, il faudra donc à préciser port série ou TCP).

    Pour la suite je considèrerais que la liaison vers la machine se fait via une liaison série type RS-232.

    Le problème pour l'utilisation de ce type de port, est que lorsqu'une application accède au port série, elle le verrouille.
    Donc si hyperterminal est ouvert pour envoyer/récupérer des données, Excel ne pourra pas utiliser le même port série.
    Et de toute façon ça ne fonctionnerait pas : une application lirait une partie des caractères du buffer de l'UART et l'autre lirait le reste

    Donc soit tu utilise hyperterminal, soit Excel pour accéder au port série.

    Pour des anciennes versions d'Excel il existait un composant ActiveX pour interfacer facilement Excel avec le port série.
    voir le tuto sur Microsoft Comm Control 6.0 d'Alexandre Lokchine.
    Pour les versions plus récente, une solution est de créer une interface VBA aux fonctions de l'API Windows
    pour accéder au port série. exemple post #2

    A+

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par BlueMonkey Voir le message

    Merci pour l'explication, c'est clair.

    Cordialement.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour Eric, bonjour BlueMonkey,

    tout d'abord merci pour vos réponses, je pense que je peux m'inspirer du premier lien d'Eric, qui dans l'idée est à peu près ce que je dois faire.

    Cependant j'aimerais apporter quelques précisions quant à mon projet:
    - comme le dit BlueMonkey en effet je suis en connexion RS232 avec ma machine de test et je récupère les données que la machine m'envoie après chaque test dans un fichier texte via Hyperterminal (Capturer le texte dans Hyperterminal)

    - C'est seulement ensuite que Excel intervient: j'importe le fichier texte avec tous les résultats du jour via une macro qui met tous les résultats en forme également.

    Mon souhait serait donc plus de pouvoir vérifier que des informations de la machine s'écrivent DANS Hyperterminal, afin de mettre une alerte sur mon fichier excel qui sera ouvert en même temps.

    Je m'explique: le fichier excel me permet de badger des codes-barres tout au long de la journée. Ces codes-barres correspondent à des produits que je met en test dans la machine. Une fois les tests terminés, le fichier excel me permet de joindre en quelquesorte le code-barres aux résultats correspondants.

    C'est dans le cas d'un oubli de scan de code-barres que mon fichier pose problème, c'est pourquoi j'aimerais me mettre un avertissement (Msgbox: "Avez vous bien scanné le code-barres?") après chaque test (donc écriture dans Hyperterminal).

    Est-ce que selon vous, cela est possible?

    J'ai lu que l'on pouvait manoeuvrer Hyperterminal via Excel et VBA en l'ouvrant par exemple Shell ou en envoyant des commandes Sendkeys, mais je ne vois pas comment vérifier qu'il y a une réception de données.

    Je vous remercie d'avance pour votre aide et pour les réponses déjà fournie que je vais étudier encore plus en détail.

    +

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jujel Voir le message
    Bonjour Eric, bonjour BlueMonkey,

    J'ai lu que l'on pouvait manoeuvrer Hyperterminal via Excel et VBA en l'ouvrant par exemple Shell ou en envoyant des commandes Sendkeys, mais je ne vois pas comment vérifier qu'il y a une réception de données.

    +
    Bonjour,

    Je ne connais pas du tout hyperterminal.

    Question : Comment se présente une réception de données ? Est-ce un fichier horodaté à chaque mesure ou un seul fichier avec des mesures qui s'ajoutent au fur et à mesure ?

    Dans le fichier exemple, c'est l'horodatage qui manque, je pensais le mettre au point mais nous n'avons pas été plus loin.

    Sinon, on peut lancer une macro selon un intervalle défini. S'il y a autant de fichiers que de mesures, on compare les fichiers présents dans le répertoire avec la liste de ceux déjà remontés. S'il s'agit de mesures dans un seul fichier, on compare des mesures. Il faudrait indiquer si les fichiers de mesure sont détruits après incorporation dans Excel.

    Il faudrait mettre en ligne des fichiers de mesure et modifier le fichier exemple pour voir comment doivent être ajoutées les mesures.

    Cordialement.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Alors la réception de données se fait sur le moniteur de Hyperterminal, les lignes de codes qu'envoie la machine sont écrites l'une à la suite de l'autre. Pour ma part j'utilise l'option qui m'écrit toutes les lignes dans un seul fichier texte!

    Je vous joins un fichier texte pour que vous puissiez voir (vous verrez aisément les différents tests avec la mise en page).
    Très important: le fichier texte n'est lisible qu'à la fermeture de Hyperterminal. En gros on crée le fichier texte via Hyperterminal, les lignes sont écrites au fur et à mesure (mais "invisibles" si on ouvre le fichier texte pendant la procédure) et deviennent visibles à la fin de la procédure en fermant Hyperterminal ou en arretant la copie dans le fichier texte.

    J'ouvre ensuite le fichier texte obtenu dans excel et je met en forme, mais en aucun cas le fichier texte n'est détruit.

    Est-ce que l'histoire du fichier texte est exploitable selon vous? durant la procédure en elle même? Cela me semble la solution la plus simple. Même si executer une macro toutes les x minutes est une possibilité également concevable mais certes moins fiable!
    Fichiers attachés Fichiers attachés

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    La meilleure solution est de se passer d'Hyperterminal pour la capture, et de récupérer les données directement sous Excel.

    Raisons :
    - il n'y a pas de lien direct entre Excel et Hyperterminal. Donc pour les faire communiquer, il faut faire du bricolage (Sendkeys ...) donc la stabilité n'est pas garantie.
    - Hypertherminal n'existe plus dans les versions récentes de Windows. (problème de portabilité lors du remplacement du PC)


    Maintenant l'exemple, les lignes suivantes permettent de demander depuis Excel un enregistrement de l'état de l'hyperterminal dans un fichier temporaire.
    Il faut appeler au démarrage LanceLaCapture(), puis périodiquement EnregistreEtRedemarreLaCapture() pour qu'hyperterminal enregistre le contenu de la capture dans le fichier temporaire.
    Il suffit ensuite de relire périodiquement le fichier temporaire depuis Excel pour voir s'il y a de nouvelles lignes.
    A la fin il faut appeler ArreteLaCapture pour stopper la capture depuis HyperTerminal.
    (A noter que tu peux utiliser cette méthode pour faire ton enregistrement de fichier final)


    Code à mettre dans un module VBA d'Excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Const MonFichierDechange As String = "C:\tmp\test.txt"
     
    Sub LanceLaCapture()
        Call AppActivate("HyperTerminal")
        Call Sleep(5)
        Call SendKeys("%tc", True)
        Call Sleep(5)
        Call SendKeys(MonFichierDechange, True)
        Call SendKeys("{TAB}", True)
        Call SendKeys("{TAB}", True)
        Call SendKeys("~", True)
    End Sub
     
    Sub ArreteLaCapture()
        Call AppActivate("HyperTerminal")
        Call SendKeys("%tcs", True)
    End Sub
     
    Sub EnregistreEtRedemarreLaCapture()
        ArreteLaCapture
        LanceLaCapture
    End Sub

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci BlueMonkey pour ta réponse.

    En effet, je sais qu'avec MSCOMM il est possible de passer par excel, mais j'ai une base de données relativement importante de fichiers excel que j'ai fait et conçu spécialement pour la réception de données avec Hyperterminal et ca m'embêterait vraiment de mettre 4 mois de travail "à la poubelle", même si je te l'accorde tout faire dans Excel aurait été bien plus simple.

    Sinon concernant Hyperterminal, il n'est en effet plus présent sur les nouvelles versions de Windows mais il suffit de récupérer le .exe et le .dll d'une vieille version de Windows et les copier dans la nouvelle. Du coup j'ai hyperterminal qui fonctionne chez moi sous windows 7.

    Je vais tester plus complètement ta macro demain, mais de ce que j'ai pu tester en premier lieu ca m'a l'air tout simplement parfait et ce que je voulais! Tu me sauves la vie déjà rien que pour le lancement et l'arrêt de la capture texte. Je te remercie grandement BlueMonkey. Je redonnerais des nouvelles.

    Merci beaucoup!

    J'ai effectué un petit test rapide Bluemonkey avec tes macros. Il s'avère que la première fois lorsqu'on lance la capture, cela marche bien, lorsqu'on la coupe également, mais pour reprendre la capture après un arrêt hyperterminal ne veut pas. Concrètement cela marche la première fois au lancement de la capture et la création du fichier texte, mais pas les autres fois. Saurais-tu pourquoi?

    En tout cas je te remercie déjà beaucoup, car c'est une excellente piste que tu m'as donné

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Bonjour,

    pour reprendre la capture après un arrêt hyperterminal ne veut pas.
    Pour récupérer la mise à jour périodiquement, il faut utiliser la fonction EnregistreEtRedemarreLaCaptureMais si depuis hyperterminal, la capture est arrêté manuellement, il faut appeler LanceLaCapture, avant de pouvoir de nouveau appeler périodiquement EnregistreEtRedemarreLaCapture.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'ai bien suivi vos consignes et en effet il me semble que le lanceLaCapture ne fonctionne pas dans Enregistreetrelancelacapture. Je commence avec LanceLaCapture, la le fichier capture le texte. J'appuie ensuite sur Enregistreetlancelacapture et là la capture s'arrête (se suspend en fait) uniquement et ne reprend pas.

    J'ai trouvé en bidouillant une manière d'arrêter complètement la capture du texte (pas de suspension) et de la redémarrer mais j'ai peur que ce soit plus instable.

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Re.

    Le problème de commander une application avec des SenKey c'est la synchronisation entre les opérations.
    En effet l'envoi de cette fonction est asynchrone par rapport au traitement qui en résulte dans Hyperterminal.
    Donc difficile à dire d'où vient le problème comme ça.

    Sur un PC XP où j'ai fait les tests, ça à l'air de passer.
    Mais ça doit dépendre de la taille du fichier à enregistrer.

    Pour essayer, tu peux ajouter un Sleep 100 dans la fonction EnregistreEtRedemarreLaCapture() entre le
    ArreteLaCapture et LanceLaCapture.

    Si ça fonctionne mieux, pour stabiliser il faudra peut être remplacer le Sleep 100 par une surveillance de la date du fichier d'échange,
    pour savoir si la sauvegarde est terminée (= l'opération de capture est terminée sous hyperterminal).

    Mais comme dit plus tôt, cette méthode n'offre pas de réelle garantie de stabilité.
    Dans l'idée de remplacer la communication via hyperterminal, il est peut possible de créer des fichiers :
    - texte (sauvegarde hyperterminal)
    - et Excel identiques à ceux de la base de donnée existante
    en remplaçant la communication RS232 via hyperterminal, par une communication directe avec Excel.

    En effet Excel peut très bien enregistrer des données dans un fichier au format texte, ou exporter tout ou partie des données dans un nouveau classeur.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse BlueMonkey. J'ai suivi tes conseils et ajouté un Sleep avec une durée de 1 seconde, histoire qu'Hyperterminal ait le temps d'acquérir les commandes envoyées.

    Ca m'a l'air de vraiment bien fonctionner maintenant et j'ai réussi en faisant plusieurs tests avec la machine à avoir des résultats impécables.

    Ma foi si je vois que l'automatisation des tests ne fonctionne plus ou mal dans les prochains jours, je n'aurais pas le choix en effet de choisir cette solution en passant uniquement par excel.

    En tout cas c'est exactement ce que j'esperais donc je te remercie sincèrement pour tout le temps passé à répondre à mes questions et pour toute l'aide que tu m'as apporté. Je n'y serais jamais arrivé sans toi!

    Je valide le topic et ta solution. Merci encore et bonne journée à toi!

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Content que ça fonctionne pour toi
    Bonne journée également.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CKEditor] Message d'alerte après une mise à jour via Ckeditor
    Par Adel1982 dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 24/05/2010, 12h56
  2. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39
  3. Boite de message d'alerte
    Par JustinT dans le forum ASP
    Réponses: 5
    Dernier message: 27/05/2004, 23h46
  4. Réponses: 9
    Dernier message: 24/03/2004, 12h15
  5. Surcharger le message d'erreur après un OnException
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 2
    Dernier message: 24/04/2003, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo