K8055 + Visual basic et excel
charlesprogelec
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
charlesprogelec Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
charlesprogelec Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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 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