Comment executer un programme excel à partir d'un capteur branché à un port duPC

nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005 - 2 avril 2005 à 18:20
nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005 - 15 avril 2005 à 18:08
Je cherche à commander une macro excel à l'aide d'un capteur branché au PC
Actuellement l'application est lancé à partie d'un bouton sur l'application excel.
Le chrono est lancé manuellement à partir de la souris donc moyennement fiable et lors d'utilisation
Le branchement sur un port du PC d' un capteur me permettrer de mieux gérer des départs et arrivées lors du chrono.
Quel port du PC faut-il utiliser ?
Comment le configurer pour effectuer la liaison avec excel et mon programme?

Merci d'avance au spécialiste du sujet ?




nannetarnal

10 réponses

olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
2 avril 2005 à 19:16
Salut, je peut t'indiquer une methode qui marche en Vb a toi de voir ce que tu peut en faire pour ton appli VBA.

Cela consiste a utiliser un bouton poussoir que tu brancherai sur ton port avec une DB9 dont les broches serait connecté de la facon suivante :

- broche 3 relié à broche 2
- broche 4 relié à broche 6
- broche 5 libre
- broche 7 relié à broche 8
- broche 9 libre
- interrupteur branché entre broche 1 et 6

ensuite tu peut utiliser ce code là :

Option explicit
Dim click_capte As Boolean
Dim capteur_click As Integer
Dim capteur_av As Integer

Private Sub Comm_OnComm()

If Comm.CommEvent <> comEvCD Then Exit Sub
If click_capte Then Exit Sub If Comm.CDHolding Then capteur_click 1 Else capteur_click 0
If capteur_click = capteur_av Then Exit Sub
click_capte = True
AntiRebond.Interval = 100 'timer antirebond voir code ci dessous
'détection du front montant venant du capteur If ((capteur_click 1) And (capteur_av 0)) Then
' Ici tu met le code que tu veut que ton capteur actionne
capteur_av = 1
End If If ((capteur_click 0) And (capteur_av 1)) Then
capteur_av = 0
End If

End sub

Private Sub AntiRebond_Timer()
click_capte = False
Comm_OnComm
End Sub

Il te faut un objet Ms Comm appellé "Comm" et un timer appellé "AntiRebond".

Dans cette exemple le capteur execute du code lorsque tu appui sur le bouton et ne fait rien lorsque tu relache le bouton.
En bidouillant les varibles "capteur_click" et "capteur_av" tu peut faire exécuter du code sur front montant et front descendant du capteur ou alors sur uniquement l'un des 2.

J'ai dejà utilisé ce code avec un bouton poussoir relié a mon pc grace a une prise DB9 connecté comme je te l'ais dit et ca fonctionner, mais cela fait deja un bon moment.

Voilà bonne chanche.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 avril 2005 à 20:50
Olivier> .... ton port avec une DB9 ....



Precise qu'il sagit du port série RS232, même si ça semble évident par la suite en analysant ton code.





Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
2 avril 2005 à 21:09
ok dsl, j'y ai pas pensé
0
nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005
6 avril 2005 à 15:47
Je ne maîtrise pas suffisamment le VB pour analyser ce code et des questions me viennent tout naturellement.

Sachant que je compte installer 2 boutons
1 démarrage chrono
1 arrêt chrono
Comment la déclaration de la liaison entre la RS232 ( pour 2 bouton poussoir ) et le code se fait-elle ?

Est ce je peux installer directement le code sous l'application VB d'Excel ?
C'est à dire après l'ouverture de mon fichier excel, la simple impulsion sur les boutons me permettent-elles de commander le programme "démarrage " ou le programme "arrêt"
Merci d'avance pour vos réponses et désolé que vous ailliez à faire à un novice de la spécialité<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


nannetarnal
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
6 avril 2005 à 18:53
Je ne suis pas un pro du VBA car je commence seulement a le pratiquer.

Mais je pense que si tu met le code suivant dans le ThisWorkbook, cela devrait suffir a faire ce que tu souhaite. Tu n'aura qu'a ouvrir ton apllication puis cliquer une fois sur le bouton pour allumer le chrono et une seconde pour l'éteindre.
A toi de bien configurer la valeur du timer antirebond selon sa sensibilité.

code :

Option explicit
Dim click_capte As Boolean
Dim capteur_click As Integer
Dim capteur_av As Integer
Dim chrono As Boolean

---------------------------
Private Sub Workbook_Open()
chrono=false
End Sub
---------------------------
Private Sub Comm_OnComm()
If Comm.CommEvent <> comEvCD Then Exit Sub
If click_capte Then Exit Sub If Comm.CDHolding Then capteur_click 1 Else capteur_click 0
If capteur_click = capteur_av Then Exit Sub
click_capte = True
'valeur du timer antirebond a configurer
AntiRebond.Interval = 100
'détection du front montant venant du capteur If ((capteur_click 1) And (capteur_av 0)) Then
If chrono = false then
chrono = true
'Ici tu met le code qui permet de demarer le chrono
Else:
chrono = false
'Ici tu met le code qui te permet d'arreter le chrono
End if
capteur_av = 1
End If If ((capteur_click 0) And (capteur_av 1)) Then
capteur_av = 0
End If
End sub
---------------------------
Private Sub AntiRebond_Timer()
click_capte = False
Comm_OnComm
End Sub
---- -----------------------

Voila j'espère que j'ai répondu a ta question.

Bonne chance

Olivier
0
nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005
7 avril 2005 à 06:13
Je compte essayer ton code pour vérifier si cela marche mais malheureusement je ne pourrais pas l'utiliser sur mon application car je gére plusieurs départs et plusieurs arrivées, et donc je ne peux pas utiliser le même bouton pour le début et fin du chronométrage.
Actuellement c'est la même personne qui gére les numéros des motos entrée et sortie de piste + les départs et arrivées.
L'automatisation des lancements et arrêts chronos avec ton systéme mais permettrer de gérer que les numérotations mais il est indispensable d'avoir 2 boutons sur la rs232 qui commanderer le code "départ" et le code "arrivée".
Ton code ne me permet pas de lancer 5 départs concécutives puis 5 arrivées concécutives
Désolé de te soliciter encore une fois.
Si cela t'interesse je pourrais te faire passer mon application, tu as peut-étre des amis qui sont amateur de motocross ou d'enduro.

nannetarnal
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
7 avril 2005 à 19:14
Ok de toute facon tu a plusieurs port série donc tu peut utiliser plusieurs bouton.

Il te suffit d'utiliser 2 objets Ms Comm et 2 Timer antirebond.

Il faut donc que tu ouvre les 2 ports série à l'ouverture de l'appli et les referme à la fermeture de ton appli..

Tu peut donc faire deux fonction "init_capteur" et "stop_capteur" par exemple :

Sub init_capteur()
feuil.Comm1.CommPort = 1
feuil.Comm1.Settings = "9600,N,8,1"
feuil.Comm1.PortOpen = True
feuil.Comm1.InputMode = 0

feuil.Comm2.CommPort = 2
feuil.Comm2.Settings = "9600,N,8,1"
feuil.Comm2.PortOpen = True
feuil.Comm2.InputMode = 0
End Sub

Sub stop_capteur() If feuil.Comm1.PortOpen True Then feuil.Comm1.PortOpen False If feuil.Comm2.PortOpen True Then feuil.Comm2.PortOpen False
End Sub

Il te suffit maintenant de faire appel à la fonction "init_capteur" à l'ouverture de ton appli et appel a la fonction "stop_capteur" à la fermeture de l'appli.

Voila ce que ca pourrait donner :

Dans ThisWorbook ca fera ca :

Option explicit
---------------------------
Private Sub Workbook_Open()
init_capteur
chrono1=false
chrono2=false
End Sub
---------------------------
Private Sub Workbook_Deactivate()
Stop_capteur
End Sub
----------------------------

Dans Module1 ca fera ca :

Option explicit
-----------------------------
Sub init_capteur()
feuil.Comm1.CommPort = 1
feuil.Comm1.Settings = "9600,N,8,1"
feuil.Comm1.PortOpen = True
feuil.Comm1.InputMode = 0

feuil.Comm2.CommPort = 2
feuil.Comm2.Settings = "9600,N,8,1"
feuil.Comm2.PortOpen = True
feuil.Comm2.InputMode = 0
End Sub
-----------------------------
Sub stop_capteur() If feuil.Comm1.PortOpen True Then feuil.Comm1.PortOpen False If feuil.Comm2.PortOpen True Then feuil.Comm2.PortOpen False
End Sub
-----------------------------

Dans ta feuille ca fera ca :

Option explicit
Dim click_capte1 As Boolean
Dim capteur_click1 As Integer
Dim capteur_av1 As Integer
Dim click_capte2 As Boolean
Dim capteur_click2 As Integer
Dim capteur_av2 As Integer
-------------------------------
Private Sub Comm_OnComm()
If Comm1.CommEvent <> comEvCD Then Exit Sub
If click_capte1 Then Exit Sub If Comm1.CDHolding Then capteur_click1 1 Else capteur_click1 0
If capteur_click1 = capteur_av1 Then Exit Sub
click_capte1 = True
'valeur du timer antirebond a configurer
AntiRebond1.Interval = 100
'détection du front montant venant du capteur If ((capteur_click1 1) And (capteur_av1 0)) Then
'Ici tu met le code qui permet de demarer le chrono
capteur_av1 = 1
End If If ((capteur_click1 0) And (capteur_av1 1)) Then
capteur_av1 = 0
End If
End sub
---------------------------
Private Sub Comm_OnComm()
If Comm2.CommEvent <> comEvCD Then Exit Sub
If click_capte2 Then Exit Sub If Comm2.CDHolding Then capteur_click2 1 Else capteur_click2 0
If capteur_click2 = capteur_av2 Then Exit Sub
click_capte2 = True
'valeur du timer antirebond a configurer
AntiRebond2.Interval = 100
'détection du front montant venant du capteur If ((capteur_click2 1) And (capteur_av2 0)) Then
'Ici tu met le code qui te permet d'arreter le chrono
capteur_av2 = 1
End If If ((capteur_click2 0) And (capteur_av2 1)) Then
capteur_av2 = 0
End If
End sub
---------------------------
Private Sub AntiRebond1_Timer()
click_capte1 = False
Comm1_OnComm
End Sub
---------------------------
Private Sub AntiRebond2_Timer()
click_capte2 = False
Comm2_OnComm
End Sub
---------------------------

Par contre pour gerer plusieurs moto et donc plusieurs chrono, j'y ai pas trop réfléchi a toi de voir.

Et oui effectivement ton appli peut m'interesser, cela peut être interessant de voir le code complet de l'appli et pourquoi peut etre l'utiliser.

a+
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
7 avril 2005 à 19:22
Dsl, je reprend une ou 2 chose :

Les variables chrono1 et chrono2 ne sont plus utile, donc tu peut enlever ca :
chrono1=false
chrono2=false

Ce qui donne dans ThisWorbook :

Option explicit
---------------------------
Private Sub Workbook_Open()
init_capteur
End Sub
---------------------------
Private Sub Workbook_Deactivate()
Stop_capteur
End Sub
----------------------------

2ème chose :

J'ai oublié de préciser qu'il faut bien évidement faire attention de bien brancher ton premier cable rs232 dans le port série numéro1, et le 2ème cable dans le port série numéro2. Si tu te trompe de port ca ne fonctionnerra pas. Le nombre de port série varie selon les pc et le numéro des ports aussi donc a toi de faire des tests pour connaitre le numéro de port de chacun de tes ports.

Voilà

a+
0
nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005
11 avril 2005 à 15:57
Je vais faire le branchement avec un contact dans les semaines à venir
je te ferais le retour du resultat

Encore merci


nannetarnal
0
nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005
15 avril 2005 à 18:08
J'ai saisi les codes sur une application mineur et apparement certaine ligne de son pas reconnu

Je te joins le fichier ainsi que le message qui apparait à l'ouverture.
Recontacte moi sur [mailto:anneetjerome@wanadoo.fr anneetjerome@wanadoo.fr]


nannetarnal
0
Rejoignez-nous