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 :

connecter une balance avec Excel [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Novembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 30
    Par défaut connecter une balance avec Excel
    Bonjour à tous,

    Avant toute chose, je précise que je suis débutant.

    Voici mon problème, je désir récupérer des données provenant d’une balance (paramètre : bauds 9600, parité aucune, bits de données 8, Bits d’arrêt 1).

    Le but est de faire une série de 18 mesures, pour faire une courbe et ensuite d’effacer ces données pour pouvoir refaire une série.

    J’arrive à communiqué avec la balance, mais je suis obligé de passé par une UserForm. Lorsque je valide « OK » avec la MsgBox , la première valeur est correcte, mais si je revalide « OK » celle-ci n’est pas toujours correcte. Je suis obligé de faire « Cancel » et de relancer les étapes.

    J’aimerai savoir, si je suis obligé de passer par une UserForm ?

    Ou quel est le code pour empêcher la MsgBox à réapparaître après la 1er mesure ?

    Comment faire une série de 18 mesures, puis revenir à la 1ère ?

    Je vous joins le code que j’applique :

    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
    25
    26
    Private Sub CommandButton1_Click()
    'Vider le buffer
    MSComm1.InBufferCount = 0
    'Choisir un port série
    MSComm1.CommPort = 1 '1 est le n° de port
    'Paramétrage du port; les valeurs sont fournies par le constructeur de l'appareil.
    'les valeurs :bauds, parité, bits de données, bit d'arrêt
    MSComm1.Settings = "9600,n,8,1"
    'Ouvre le port
    MSComm1.PortOpen = True
    'Lecture de la trame
    Dim Reponse As Variant, Msg$, Pds$
    On Error Resume Next: Err.Clear
    Do
        Reponse = MsgBox("Appuyer sur OK" & vbCrLf & Msg$, vbOKCancel, "Lire la valeur")
        If Reponse <> vbOK Then Exit Do
        MSComm1.InputLen = 20
        Msg$ = MSComm1.Input: If Err Then Exit Do
    T! = Timer: While Abs(Timer - T) < 0.3: DoEvents: Wend 'delay
        Pds$ = Mid(Msg$, 11, 4)
        ActiveCell.Value = Pds$ 'colle le poids dans la cellule active
        ActiveCell.Offset(1, 0).Activate 'cellule suivante  
    Loop
    'Ferme le port
    MSComm1.PortOpen = False
    End Sub
    Je vous remercie d’avance

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Il n'est pas forcément évident de te répondre puisque nous n'avons pas la balance avec nous. Personnellement, j'aurais quelques questions à te poser pour pouvoir cerner d'où vient le problème.

    Tout d'abord si tu ne veux que 18 valeurs, je ne comprends pas pourquoi tu fais une boucle while et pas for :
    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
    'Boucle sur 18 mesures
    For i = 1 To 18
        Reponse = MsgBox("Appuyer sur OK" & vbCrLf & Msg$, vbOKCancel, "Lire la valeur")
     
        If Reponse <> vbOK Then Exit For
     
        MSComm1.InputLen = 20
     
        Msg$ = MSComm1.Input: If Err Then Exit For
     
        T! = Timer: While Abs(Timer - T) < 0.3: DoEvents: Wend 'delay
     
        Pds$ = Mid(Msg$, 11, 4)
     
        ActiveCell.Value = Pds$ 'colle le poids dans la cellule active
        ActiveCell.Offset(1, 0).Activate 'cellule suivante
    Next i
    Ensuite, quand tu dis que la valeur n'est pas toujours exacte, que cela signifie-t-il ? Une virgule mal placée ? Un chiffre significatif manquant ? Une précision inéxacte ?

    Je ne comprends pas bien non plus ton "delay" ? C'est un timer/une pause pour empécher de prendre trop vite les valeurs ?

    Enfin, quel message est exactement retourné dans "Msg$" puisque tu prends uniquement "Mid(Msg$, 11, 4)" que tu places dans "Pds$" pour te retourner le poids qui est sencé être calculé.

    N'aillant jamais connecté de balance à excel ^^; je ne suis surement pas la personne la plus qualifiée pour te répondre. Je décortique seulement ton programme. =)

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Novembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 30
    Par défaut
    Slt,

    Merci Kimy_Ire pour ton code « boucle »

    Pour mon problème de valeur qui n’est pas toujours exacte. Ma 1ère mesure est toujours correcte puis sur les suivantes, la virgule sera absente ou un chiffre et parfois apparition de lettres.

    Actuellement, si sur ton code je fais une boucle sur 1, je peux faire des mesures sans erreur.

    Je continue à chercher… encore merci

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Cast peut-être ton poids en single :
    Pds$ = CSng(Mid(Msg$, 11, 4))
    Ensuite dis moi ce que retourne exactement "Msg$" (par exemple avec "MsgBox Msg$" juste après ton message).

  5. #5
    Membre averti
    Homme Profil pro
    Technicien Qualité
    Inscrit en
    Novembre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Qualité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 30
    Par défaut
    Pour une pesée de 0.37gr, le code avec "CSng" me renvoie rien dans la feuille Excel et la "MsgBox Mgs$" me donne "SS 0.37 Kg S".

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Puisque ta première mesure est toujours correcte, tu peux essayer d’exécuter plusieurs fois cette première mesure, c'est-à-dire l’intégralité de la procédure.
    Dans l’exemple suivant, la procédure complète est lancée 18 fois avec un délai de 2 secondes entre 2 pesées.
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub CommandButton1_Click()
    Dim PauseTime, Start
    Dim Cel As Range
        If (MsgBox("Cliquez sur Oui pour lancer les 18 pesées", 4)) = vbYes Then
            PauseTime = 2    ' Définit la durée.
            Set Cel = ActiveCell
            For i = 1 To 18
                Start = Timer    ' Définit l'heure de début.
                Do While Timer < Start + PauseTime
                    DoEvents    ' Donne le contrôle à d'autres processus.
                Loop
                Peser Cel
                Set Cel = Cel.Offset(1, 0)
            Next i
        Else
            End
        End If
    End Sub
    Private Sub Peser(C As Range)
        'Vider le buffer
        MSComm1.InBufferCount = 0
        'Choisir un port série
        MSComm1.CommPort = 1 '1 est le n° de port
        'Paramétrage du port; les valeurs sont fournies par le constructeur de l'appareil.
        'les valeurs :bauds, parité, bits de données, bit d'arrêt
        MSComm1.Settings = "9600,n,8,1"
        'Ouvre le port
        MSComm1.PortOpen = True
        'Lecture de la trame
        Dim Reponse As Variant, Msg$, Pds$
        On Error Resume Next: Err.Clear
        MSComm1.InputLen = 20
        Msg$ = MSComm1.Input: If Err Then Exit Do
        T! = Timer: While Abs(Timer - T) < 0.3: DoEvents: Wend 'delay
        Pds$ = Mid(Msg$, 11, 4)
        C.Value = Pds$ 'colle le poids dans la cellule active
        'Ferme le port
        MSComm1.PortOpen = False
    End Sub
    Cordialement.

  7. #7
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Citation Envoyé par nadyves Voir le message
    Pour une pesée de 0.37gr, le code avec "CSng" me renvoie rien dans la feuille Excel et la "MsgBox Mgs$" me donne "SS 0.37 Kg S".
    Je n'arrive vraiment pas à comprendre comment tu arrives a récupérer la bonne valeur avec "Pds$ = Mid(Msg$, 11, 4)" si ton message "Msg$" vaut quelque chose comme : "SS 0.37 Kg S"...

    As-tu essayé de boucler tes 18 mesures avec "Pds$ = Mid(Msg$, 6, 4)" ? (Cela dépend cepedant du nombres d'espaces que ton message possède) Après il se peut que ce message varie d'une boucle à une autre, ce qui serait bizare...
    Dernier point, si tu restes sur le code que tu appliques au final, tu n'as plus besoin de boucler : donc supprime le "for i".

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

Discussions similaires

  1. Calculer une dispersion avec excel
    Par ANTMA dans le forum Excel
    Réponses: 6
    Dernier message: 10/02/2008, 03h22
  2. Connecter une base avec DSN
    Par fquen dans le forum ASP
    Réponses: 11
    Dernier message: 27/07/2007, 20h07
  3. Connection à une BDD avec un new mdw
    Par electrosat03 dans le forum Sécurité
    Réponses: 3
    Dernier message: 19/01/2007, 11h23
  4. [VB.NET] Comment connecter une BD avec ADO ?
    Par Friz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 13/02/2006, 17h42
  5. copie d'une arborescence avec excel vb
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/11/2005, 08h31

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