K8055 + Visual basic et excel
charlesprogelec
Messages postés
3
Statut
Membre
-
charlesprogelec Messages postés 3 Statut Membre -
charlesprogelec Messages postés 3 Statut Membre -
Bonjour,
Je vais vous expliquez mon idée je veux installe 1 capteur TOR branché sur un relay puis au K8055 relié en USB à mon PC( avec excl et vb 2010).
Ainsi chaque fois que mon capteur detectera quelque chose ma digital input 1 sera à 1. De plus je souhaite recuperer mes données date et heure de chaque detection sur excel pour pouvoir tracer des graphes avec excel. J'ai comme vous l'avez vu ,j'ai mis un while 1 dans l'idée que lorsque je lance mon apllication exe elle tourne en continue de plus je fais un test pour voir si l'on change de jour car si on change de jour je crée un nouveau fichier.J'ai aussi mis une sauvegarde automatique tout les 100 flacons. Le probleme c'est que quand je compile
je vois
Erreur 1004 définie par l'application ou par l'objet
J'espère que vous pourriez me donner quelque piste pour m'aider à faire marcher ce programme.
Je vais vous expliquez mon idée je veux installe 1 capteur TOR branché sur un relay puis au K8055 relié en USB à mon PC( avec excl et vb 2010).
Ainsi chaque fois que mon capteur detectera quelque chose ma digital input 1 sera à 1. De plus je souhaite recuperer mes données date et heure de chaque detection sur excel pour pouvoir tracer des graphes avec excel. J'ai comme vous l'avez vu ,j'ai mis un while 1 dans l'idée que lorsque je lance mon apllication exe elle tourne en continue de plus je fais un test pour voir si l'on change de jour car si on change de jour je crée un nouveau fichier.J'ai aussi mis une sauvegarde automatique tout les 100 flacons. Le probleme c'est que quand je compile
je vois
Erreur 1004 définie par l'application ou par l'objet
J'espère que vous pourriez me donner quelque piste pour m'aider à faire marcher ce programme.
'Je lance le programme au démarrage
'Lancer un programme au démarrage du PC -> Sans toucher au registre( menu Démarrer )
'Option Explicit
Private Declare Function OpenDevice Lib "K8055d.dll" (ByVal CardAddress As Long) As Long
Private Declare Sub CloseDevice Lib "K8055d.dll" ()
Private Declare Function SetCurrentDevice Lib "K8055d.dll" (ByVal CardAddress As Integer) As Integer
Private Declare Function SetTimer Lib "user32.DLL" ( _
ByVal HWnd As Long, ByVal nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Private Declare Function KillTimer Lib "user32.DLL" ( _
ByVal HWnd As Long, ByVal nIDEvent As Long)
Private Declare Function ReadAllDigital Lib "K8055d.dll" () As Long
Private Declare Function ReadDigitalChannel Lib "K8055d.dll" (ByVal Channel As Long) As Boolean
Private Declare Sub SetAllDigital Lib "K8055d.dll" ()
Private Declare Function WriteAllDigital Lib "K8055d.dll" (ByVal Data As Long) As Long
Private Declare Function ReadCounter Lib "K8055d.dll" (ByVal CounterNr As Long) As Long
Private Declare Sub ResetCounter Lib "K8055d.dll" (ByVal CounterNr As Long)
Private Declare Sub SetCounterDebounceTime Lib "K8055d.dll" (ByVal CounterNr As Long, ByVal DebounceTime As Long)
'////////////////////////////Initialisation des variables/////////////////////////////
Dim Channel(8) As String
Dim TimerID As Long
Dim TimerSeconds As Single
Dim Connected As Boolean
Dim Byt As Boolean
Dim Date_jour As String
Dim heure_detection As String
' Dim Date_jour As Date
' Dim heure As Date
Dim nb_flacon As Integer
Dim N As Long
Dim D As String
'variable connexion à la carte
Dim CardAddress As Long
Dim h As Long
'////////////////////////////////////LES FONCTIONS////////////////////////////////
'Fonction derniere ligne
Sub Derniereligne(N As Long)
Static Derniere_ligne As Long
Derniere_ligne = ActiveSheet.Columns.End(xlDown).Row
N = Derniere_ligne + 1
End Sub
' Function Entier
'Function Entier(Nombre) As Boolean
'Entier = Int(Nombre) = Nombre
'End Function
'Fonction dernier fichier du repertoire
Function DernierFichier(Chemin As String)
Dim fichier As String, DerniereDate As Date
fichier = Dir(Chemin)
Do While fichier <> ""
If FileDateTime(Chemin & fichier) > DerniereDate Then
DerniereDate = FileDateTime(Chemin & fichier)
DernierFichier = fichier
End If
fichier = Dir()
Loop
End Function
Sub OuvrirDernierDoc()
Dim Chemin As String
Chemin = "K:\reactif\Charles\FICHIER PROD\"
ChangeFileOpenDirectory = Chemin
Workbooks.Open (Chemin & DernierFichier(Chemin))
End Sub
'////////////////////////////////////PROGRAMME PRINCIPALE//////////////////////////////////
Private Sub Workbook_Open()
Call OuvrirDernierDoc 'call de la fonction dernier doc (avant le while 1)
'//////connexion à la carte//////
CardAddress = 0 'j utilise 1 seul VM110
h = OpenDevice(CardAddress)
Select Case h
Case 0, 1, 2, 3
ActiveSheet.Cells(1, 4).Value = "card" + Str(h) + " connected"
Case -1
ActiveSheet.Cells(2, 4).Value = "card" + Str(CardAddress) + " no found"
End Select
'//Boucle infinie//
While 1
Date_jour = Format(Now, "yyyy-mm-dd") 'je recupere que jour/moi/année
'je definie date jour avant de fair le test
'///////////////////////////// TEST CHANGEMENT DE JOUR ///////////////////////////////////
If Date_jour = ActiveSheet.Cells(1, 5).Value Then
'///////////////////////////// DEFINITON DES COLONNES ///////////////////////////////////
'On nomme les colonnes
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nombre de Flacon"
Range("A2").Select
Columns("A:A").ColumnWidth = 16.71
Range("B1").Select
ActiveCell.FormulaR1C1 = "Heure"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Date"
Range("C2").Select
'///////////////////////////// LES VARIABLES ///////////////////////////////////
nb_flacon = Cells(3, 4)
Byt = ReadDigitalChannel(1)
'///////////////////////////// Remplissage du tableau ///////////////////////////////////
' Remplir 3 colonnes : une disant le nombre de flacon et une les jours et l'autre les heures
If (Byt = True) Then
' prévoir un anti rebond avec détection de front descendant
nb_flacon = nb_flacon + 1 'j'increment maintenant car si nouveau tableau 0+1=1 et si recup d'un ancien excelje dois incrementer l'ancienne avleur avant de la copier
Date_jour = Format(Now, "yyyy-mm-dd") 'je recupere que jour/moi/année
heure_detection = Format(Now, "HH:m:ss.fff") 'je recupere que heure/min/sec
Derniereligne (N) 'je prend ma dernier ligne au cas ou je reprend un ancien fichier
ActiveWorkbook.ActiveSheet.Cells(N, 1).Value = nb_flacon
ActiveWorkbook.ActiveSheet.Cells(N, 2).Value = heure_detection
ActiveWorkbook.ActiveSheet.Cells(N, 3).Value = Date_jour
'j'incremente mon nombre de flacon
ActiveWorkbook.ActiveSheet.Cells(3, 4).Value = nb_flacon 'apres l'incrementation je recopie la valeur de nb_flacon
ActiveWorkbook.ActiveSheet.Cells(1, 5).Value = Date_jour 'j'ecris la date sur la case (1,5)
'///////////////// Function sauvegarder ///////////////////////////////////////
Dim Save As Double
Save = nb_flacon / 100
'sauvegarde tout les 100 flacons en testant si la valeur divisé par 100 est un entier
If CInt(Save) = Save Then
ActiveWorkbook.Save
End If
End If
Else
'///////////////////////////// CHANGEMENT DE JOUR ///////////////////////////////////
'creer nouveau classeur si nouvelle journee
D = Day(Now) & "_" & Month(Now) & "_" & Year(Now) & "_" & Hour(Now) & "_" & Minute(Now)
Workbooks.Add
ChDir "N:\Charles\FICHIER PROD"
ActiveWorkbook.SaveAs Filename:="N:\Charles\FICHIER PROD\Production flacon du_" & D & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End If
Wend
End Sub
A voir également:
- K8055 + Visual basic et excel
- Visual basic - Télécharger - Langages
- Word et excel gratuit - Guide
- Liste déroulante excel - Guide
- Si et ou excel - Guide
- Microsoft 365 basic - Accueil - Microsoft Office
4 réponses
Bonjour,
Cette erreur se produit quand un objet ne peut pas être atteint, genre feuille qui n'existe pas, controle désactivé ou caché...
C'est quelle ligne qui pose problème?
:)
Cette erreur se produit quand un objet ne peut pas être atteint, genre feuille qui n'existe pas, controle désactivé ou caché...
C'est quelle ligne qui pose problème?
:)
[CODE]
Do While fichier <> ""
If FileDateTime(Chemin & fichier) > DerniereDate Then
DerniereDate = FileDateTime(Chemin & fichier)
DernierFichier = fichier
End If
fichier = Dir()
Loop
[/CODE]
ben ça reste dans la boucle loop de la recherche du fichier le plus recent ça fait 9 fois la boucle puis sa lance le chargement et je vois le mesg d'erreur
sachant que j'ai deja testé cette partie du programme dans un autre fichier excel et que ça marche oO
Do While fichier <> ""
If FileDateTime(Chemin & fichier) > DerniereDate Then
DerniereDate = FileDateTime(Chemin & fichier)
DernierFichier = fichier
End If
fichier = Dir()
Loop
[/CODE]
ben ça reste dans la boucle loop de la recherche du fichier le plus recent ça fait 9 fois la boucle puis sa lance le chargement et je vois le mesg d'erreur
sachant que j'ai deja testé cette partie du programme dans un autre fichier excel et que ça marche oO
Regardes dans ton dossier Chemin = "K:\reactif\Charles\FICHIER PROD\"
si du n'as que des fichiers .xls (ou .xlsx), il se pourrait que le fichier retourné par ta fonction ne soit pas un fichier excel.
pour vérifier tu mets ça
Chemin = "K:\reactif\Charles\FICHIER PROD\"
MsgBox Chemin & DernierFichier(Chemin)
End
tu verras bien ce qu'il t'affiche.
si du n'as que des fichiers .xls (ou .xlsx), il se pourrait que le fichier retourné par ta fonction ne soit pas un fichier excel.
pour vérifier tu mets ça
Chemin = "K:\reactif\Charles\FICHIER PROD\"
MsgBox Chemin & DernierFichier(Chemin)
End
tu verras bien ce qu'il t'affiche.
cela me retourne bien un fichier xlsx qui ne prend pas en compte les macros, il me faut donc des xlsm
Classeur Excel (code) .xlsm Format de fichier XML prenant en charge les macros pour Excel 2010 et Excel 2007. Stocke les codes macro VBA ou les feuilles de macros Excel 4.0 (.xlm).
sur l'image qui suit ça ouvre le fichier le plus recent et créé un nouveau fichier
http://cjoint.com/12mi/BEoj5N6pPsl.htm
je met en xlsm met le probleme reste en plus si je clique deux fois je crée un fichier en plus car en connectant ma carte elle ne voie pas quand ma input est à 1
j'ai créé une feuille que j'ai completé moi meme
http://cjoint.com/12mi/BEokpqh66vr.htm
ainsi quand ma feuille est completée, le test du changement de jour marche
Classeur Excel (code) .xlsm Format de fichier XML prenant en charge les macros pour Excel 2010 et Excel 2007. Stocke les codes macro VBA ou les feuilles de macros Excel 4.0 (.xlm).
sur l'image qui suit ça ouvre le fichier le plus recent et créé un nouveau fichier
http://cjoint.com/12mi/BEoj5N6pPsl.htm
je met en xlsm met le probleme reste en plus si je clique deux fois je crée un fichier en plus car en connectant ma carte elle ne voie pas quand ma input est à 1
j'ai créé une feuille que j'ai completé moi meme
http://cjoint.com/12mi/BEokpqh66vr.htm
ainsi quand ma feuille est completée, le test du changement de jour marche