Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

programmation vba sous excel



  1. #1
    Nono les gazzz

    programmation vba sous excel


    ------

    salut a tous,

    alors voila j'ai une petite programmation a faire et vu que sa fait au moin 3 ans que je n'est pas toucher a vba je m'en refere a vous

    j'explique mon probleme:

    -alors j'ai une tension delivré par tout un circuit dont je vous passe les explications, cette tension et l'image d'une vitesse de rotation.
    je possede une carte d'acquisition avec sa dll et tous se qu'il faut et il me faut faire un programme qui toute les 0.5 seconde relève cette valeur l'envoie dans une cellules excel puis la 1/2 sec plus tard envoie la nouvelle tension dans la cellule du dessous.

    bon selon un de mes prof même si la carte graphique a des entrées analogique ma tension n'arrivera pas sous la forme ..V direct, mais sa c'est pas un probleme je voulais savoir comment envoyé cette valeur dans un cellule (donc la fonction ) et comment 0.5 sec plus tard l'envoyé dans la cellule du dessous.

    Et de plus je voulais savoir si les propriétè excell sont conservé exemple: je lis l'entres analogique de ma carte ds la cellule A1, dans B1 je tape "=2*A1" est ce que sa va faire le calcul auto et ensuite si je met un grahique en rentrant des point pas encore existant et que je lance mon application la croube va se tracer tout seul en temps reel ?

    voila un peu toutes mes questions,

    en vous remerciant d'avance

    NOno

    -----

  2. Publicité
  3. #2
    TiClic

    Re : programmation vba sous excel

    C'est a priori relativement simple à traiter, moyennant une petite manip. La récupération des données est un autre problème. Tu vas commencer par télécharger ce contrôle ActiveX que tu dois coller dans windows/system. Hummm ! si tu es sous Mac, pas la peine d'aller plus loin.

    Je ne connais pas la liste des contrôles de la dernière version d'Excel, mais la version 2000 n'a pas de timer. Donc une fois que tu as installé ce contrôle sur ta feuille, tu le paramètres comme suit :
    - propriété TimerVBA1.Active = True
    - propriété TimerVBA1.Intervalle = 500 (ce sont des millisecondes).

    Et tu entres tout simplement ton code dans le contrôle :

    Public Compteur As Integer

    Private Sub TimerVBA1_Timer()
    Compteur = Compteur + 1
    Set Cel = Range("A1")
    Cel.Offset(Compteur - 1, 0) = Compteur + 1000
    End Sub
    Ce petit code incrémente la valeur de 1000 d'une unité toutes les 1/2 seconde et copie le résultat en descendant dans la colonne de gauche.

    Question à 1€ : tes données électroniques, tu les récupères par la RS232 ?

  4. #3
    Nono les gazzz

    Re : programmation vba sous excel

    merci deja de ton aide et ta de la chance tu m'aurais demandé sa ya 2 semaine j'aurais dis rs232 kesako ? mais j'ai eu le cours sur les reseau la semaine derniere donc non pas par la rs232 mais par l'usb a travers une carte d'acquistion velleman dont je galere un peu a comprendre le fonctionnement, le prof m'a dit elle marche tiens le guide demmerde toi ^^

    je vais joindre le pdf avec pour que tu voit de quoi il retourne.

    Nono

    PS: merci encore de ton aide qui ne m'est que benefique ^^
    Images attachées Images attachées

  5. #4
    TiClic

    Re : programmation vba sous excel

    alors voila j'ai une petite programmation a faire


    Bon, j'ai lu la doc. Dedans, tu as des exemples d'utilisation de la librairie en question (T8055d.dll) pour les langages de développement les plus courants (C++ Builder, Delphi, VB etc.).

    Il faut que tu copies cette DLL dans le dossier ..\windows\system32 que tu la déclares dans ta base de registre (comme tout composant OLE qui ne s'installe pas tout seul) à l'aide du logiciel Regsvr32.exe fourni par Windows. Et que tu la références dans ton projet.

    C'est bien que ton professeur t'ait demandé de te dé...der avec la doc, ça t'a obligé à effectuer des recherches. Mais demande-lui si VBE pour Excel (qui n'a pas la puissance d'un vrai langage de programmation) suffira. S'il te dit oui, yapuka. S'il n'en est pas certain, mef !

  6. A voir en vidéo sur Futura
  7. #5
    Nono les gazzz

    Re : programmation vba sous excel

    oué deja fait tou sa je vois que mes lectures on porté ces fruit il m'a dit que pour ce projet sela suffirait il en s'agit que de receptioné une info analogique toute les 0.5 sec et de l'envoyé sous excel en descendant d'une ligne. Ensuite les calcule d'excel s'occupe du reste ^^.


    par contre voila j'ai trouvé et choisi parmis les declaration a mettre celle a prendre mais le programme je rame un peu, j'ai compris se que tu as ecrit plus haut mais je ne vois comment l'appliqué dans mon cas, il faut simplement lire le port analogique a1 , et l'ecrire masi ej n'y arrive pas ensuite ton timer J'aimerais que par exemple quand il ordonne toute les 0.5sec d'ecrire a1 dans la cellule A1 on va dire il ecrivent le temps qui correpond a coté par exemple au hasard

    120 0.5
    152 1.0
    320 1.5

    les chiffres sont totalement prix au hasard.


    en fait si je te demande sa ce que la tension etant une image d'une vitesse il me faut calculer une acceleration et donc il me faut un intervalle de temps.


    voila si tu pouvvais m'aider a elaborer le programme complet sa m'aiderais :

    C'est un banc a inertie moto ^^

    Nono

    ps: merci de tout

  8. #6
    TiClic

    Re : programmation vba sous excel

    voila si tu pouvvais m'aider a elaborer le programme complet sa m'aiderais :
    Ca c'est impossible, car je n'ai pas de carte électronique USB VM110 (je suppose que tu parles de cette carte) et je n'ai ni la librairie qui se trouve sur le CD-ROM (K8055D.DLL), ni le driver pour la piloter si elle n'est pas automatiquement reconnue.

    Il va falloir que tu te mettes sérieusement à Visual Basic (ou un autre langage : C, Delphi, etc.) si tu veux établir une conversation DDE avec Excel. Parce que ta dernière question se règle en 15 secondes de code.
    Private Sub TimerVBA1_Timer()
    Compteur = Compteur + 1
    Valeur = Int(Rnd(1) * 10000) / 100
    Set Cel = Range("A1")
    Cel.Offset(Compteur - 1, 0) = Valeur
    Cel.Offset(Compteur - 1, 1) = Compteur / 2
    End Sub
    Ce petit script à coller dans le contrôle ActiveX TimerVBA1_Timer tire une valeur aléatoire, la copie dans la colonne A1 toutes les 1/2 seconde en descendant et inscrit dans la colonne B1, à la même hauteur le temps écoulé depuis la mise en route du Timer. Tu mets 2 boutons sur ta feuille, tu appelleras le premier "Marche" et le second "Arrêt". Il va falloir que tu récupères la valeur de la lecture dans la variable Public Valeur, pour qu'elle puisse être traitée par le Timer.

    Option Explicit
    Public Valeur as integer
    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Long) As Long
    Private Declare Sub CloseDevice Lib "k8055d.dll" ()
    Private Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long) As Long
    Private Declare Sub ReadAllAnalog Lib "k8055d.dll" (Data1 As Long, Data2 As Long)
    Private Declare Sub OutputAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long, ByVal Data As Long)
    Private Declare Sub OutputAllAnalog Lib "k8055d.dll" (ByVal Data1 As Long, ByVal Data2 As Long)
    Private Declare Sub ClearAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub SetAllAnalog Lib "k8055d.dll" ()
    Private Declare Sub ClearAllAnalog Lib "k8055d.dll" ()
    Private Declare Sub SetAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub WriteAllDigital Lib "k8055d.dll" (ByVal Data As Long)
    Private Declare Sub ClearDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub ClearAllDigital Lib "k8055d.dll" ()
    Private Declare Sub SetDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long)
    Private Declare Sub SetAllDigital Lib "k8055d.dll" ()
    Private Declare Function ReadDigitalChannel Lib "k8055d.dll" (ByVal Channel As Long) As Boolean
    Private Declare Function ReadAllDigital Lib "k8055d.dll" () 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)

    ' Bouton marche
    Private Sub Marche_Click()
    Dim Adresse As Long
    Dim h As Long
    ' Ne pas déclarer la variable Valeur

    TimerVBA1.Intervalle = 500 ' toutes les 500 millisecondes
    TimerVBA1.Active = True ' mise en route du timer

    Adresse = 0 ' concerne la carte électronique
    Adresse = 3 - (Check1(0).Value + Check1(1).Value * 2)
    h = OpenDevice(Adresse)

    ' Analyse des résultats - toi il faut que tu récupères la variable Valeur avec une des fonctions ci-dessus

    Select Case h
    Case -1
    MsgBox "Carte " & Str(Adresse) & " introuvable",vbCritical + vbOKOnly,"Communication impossible"
    Case 0, 1, 2, 3
    MsgBox "Carte " & Str(h) + " connectée",vbInformation + vbOKOnly,"Communication établie"
    End Select

    End Sub

    ' Bouton Arrêt
    Private Sub Arrêt()
    CloseDevice
    TimerVBA1.Active = False
    End
    End Sub

  9. Publicité
  10. #7
    Nono les gazzz

    Re : programmation vba sous excel

    ok merci je vais essayer de me demmerder avec sa c'est tres sympa de ta part d'aoivr pris le temps de m'aider je t'en remercie encore et je te tiendrais au courant de l'avancement de mon banc d'inertie moto sur ce meme topic en attendant bon week end a toi

    NOno

  11. #8
    TiClic

    Re : programmation vba sous excel

    Ton programme, il existe sur le forum de Velleman avec deux petites différences par rapport à celui que je t'ai indiqué :
    - l'auteur fait appel à une API Timer qui te permet de te passer du contrôle ActiveX que je t'ai signalé,
    - le Timer est programmé toutes les secondes. Sur la ligne ci-dessous il faudra remplacer la valeur 1000& par 500&

    TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc)

  12. #9
    Nono les gazzz

    Re : programmation vba sous excel

    ah bon je vais aller y faire un tour le programme est aussi une sorte de compte tour ?

    NOno

    merci encore pour ton aide

  13. #10
    Nono les gazzz

    Re : programmation vba sous excel

    rebonjour a tous,

    voila mon projet doit etre terminé pour mi mars et je me vois tres court au niveau du temps je requiere donc un petit coup de amin supplementaire sacahnt que normalement je ne m'attele qu'a la partie mecanique deja enorme ^^

    voila donc est ce que Ticlic ou une autre aimable personne de forum pourrait elle m'aider a finir mon programme ? svp

    je repondrait a toutes les questions qui me seront posé mais j'ai vraiement besoin de boucler rapidement cette partie de mon projet car il me reste un travail enorme et j'ai peur de ne pouvoir finir a temps !

    merci a tous ceux pret a m'aider et merci encore a ticlic de tous ces precieux conseil


    Nono

  14. #11
    Nono les gazzz

    Re : programmation vba sous excel

    upp svp c'est assez urgent j'ai besoin d'aide pour finir le porgramme au plus vite ! je repondrais a toues les questions

    Nono

    merci d'avance a vous tous

    et a vos clavier

  15. #12
    umfred

    Re : programmation vba sous excel

    pour t'aider, je pense qu'il faudrai nous dire ce que tu arrive a faire déja et où tu en es (par exemple en mettant ton code (commenté de préférence)), sur quoi tu bloques etc etc

  16. Publicité
  17. #13
    Nono les gazzz

    Re : programmation vba sous excel

    Bonjour a tous,

    desolé du retard j'avais toute la partie mecanique a finir pour ce banc d'essai ^^

    bon voila ce que j'ai fait :


    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Long) As Long
    Private Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Long) As Long


    Public Sub deb() 'le bouton deb initialise la carte
    Dim h As Long
    h = OpenDevice(0)
    End Sub

    Public Sub StartClick() 'le bouton start click lance l'acquisition

    Dim Data As Long
    Dim i As Long
    For i = 1 To 500
    Data = ReadAnalogChannel(1)
    ActiveSheet.Cells(1, 1) = Data
    Next i
    End Sub


    voila ce programme est un test il reactualise 500 fois la valeur acquerit par l'entrée analogique 1 et la place dans une case (1,1)

    voila je voudrais simplement que l'on modifie se programme pour que déja à chaque reactualisation il note la valeur dans la ligne du dessous.

    ensuite que la reactualisation se fasse toutes les 0.1s jusqu'a se que j'appuie sur un bouton nommé "arrêt" (pas crée ici mais qui stoperait l'acquisition).

    et enfin que toutes les 0.1s a chaque fois qu'il note la valeur acquerit il note aussi le temps ecoulé depuis le debut de l'acquisition.

    voilà c'est tout merci d'avance a ceux qui m'aideront car je n'est pas compris ce que ticlic m'a expliqué au dessus avec le "timerid".

    merci d'avance arno

  18. #14
    TiClic

    Re : programmation vba sous excel

    Si tu places le contrôle ActiveX sur ta feuille comme je te l'ai indiqué au début et si tu effectues un double-clic sur le contrôle en question, tu vas voir ça :

    Private Sub TimerVBA1_Timer()

    End Sub

    Tu entres ton code entre les deux, ce qui va donner ça :

    Private Sub TimerVBA1_Timer()
    Dim Data as long
    Compteur = Compteur + 1 ' Le compteur correspond au n° de la ligne suivante
    Data = ReadAnalogChannel(1)
    Set Cel = Range("A1")
    Cel.Offset(Compteur - 1, 0) = Data
    Cel.Offset(Compteur - 1, 1) = Compteur / 10
    End Sub

    Attention, tu as changé la règle du jeu, on était parti sur une lecture toutes les 1/2 secondes. Pour réduire à 1/10 de seconde, il faut changer la propriété TimerVBA1.Intervalle = 100 au lieu de 500.

    Essaye toujours ça, mais comme je te l'ai dit, sans la carte et la DLL je navigue un peu à vue.

  19. #15
    Nono les gazzz

    Re : programmation vba sous excel

    merci titclic en faite ce que je n'avais pas saisie c'était surtout a quoi correspondait compteur et la j'ai tout de suite mieux compris je vais tenter de faire sa j'ai telecharger le contrôle activex faut juste que je le copie dans system32 ? ok je vais essayer sa pour l'instant et je vous retiens au courant en attendant merci ^^

    Nono

    PS: j'ai donc le dossier nommé timervba_1... telechargé , faut il que je copie tous le dossier ou ressortir tous les elements et les copier un par un ?
    je vais essayer de l'ajouté a la barre outil
    Dernière modification par Nono les gazzz ; 25/02/2009 à 13h16.

  20. #16
    Nono les gazzz

    Re : programmation vba sous excel

    c'est bon apparament le controle activex devrait marcher je l'ai copier dans systeme et j'ai reussi en cliquant sur outil -> reference a le selectionner (... .ocx) et il reconnait timervba_1.

    Mais je met ou sa :
    Private Sub TimerVBA1_Timer()
    Dim Data as long
    Compteur = Compteur + 1 ' Le compteur correspond au n° de la ligne suivante
    Data = ReadAnalogChannel(1)
    Set Cel = Range("A1")
    Cel.Offset(Compteur - 1, 0) = Data
    Cel.Offset(Compteur - 1, 1) = Compteur / 10
    End Sub

    a l'interieur de

    Public Sub StartClick()4

    end sub

    ?

    merci encore

    Nono

  21. #17
    Nono les gazzz

    Re : programmation vba sous excel

    bonsoir a tous,

    sayez mon controle marche enfin donc nikel ce petit timer merci ticlic allez encore une petite question et je suis au bout de mon programme, quand je clik sur la petit horloge mise sur mon useform j'obtien bien

    Private Sub TimerVBA1_Timer()

    End Sub

    ensuite je met ce que tu m'a dis jusqu'a la sava mais je voudrais que ce timer et ces actions ne soit lancé que lorsque je clique sur mon bouton start alors comme je le fait en progra de pic j'ai embrické tout cela comme ca :

    Private Sub start_Click()
    Private Sub TimerVBA1_Timer()
    Dim Data As Long
    Compteur = Compteur + 1 ' Le compteur correspond au n° de la ligne suivante
    Data = ReadAnalogChannel(1)
    Set Cel = Range("A1")
    Cel.Offset(Compteur - 1, 0) = Data
    Cel.Offset(Compteur - 1, 1) = Compteur / 10
    End Sub
    End Sub

    J'ai en faite simplement mit ce que l'on avait trouvé dans le start click mais la sa ne marche pas sa me dit qu'il n'y a pas le "end sub " attendu au bout de "Private Sub start_Click()" voila donc comment faire pour que ce fragement de programme :

    Private Sub TimerVBA1_Timer()
    Dim Data as long
    Compteur = Compteur + 1 ' Le compteur correspond au n° de la ligne suivante
    Data = ReadAnalogChannel(1)
    Set Cel = Range("A1")
    Cel.Offset(Compteur - 1, 0) = Data
    Cel.Offset(Compteur - 1, 1) = Compteur / 10
    End Sub

    ne se mette en route que lorsque je click sur start ?

    Nono

  22. #18
    JPL
    Responsable des forums

    Re : programmation vba sous excel

    Petit rappel de la charte du forum :
    Respectez les lecteurs du forum, n'écrivez pas vos messages en style SMS ou phonétique. Utilisez la fonction "prévisualisation" pour vous relire et limiter les fautes d'orthographe.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  23. Publicité
  24. #19
    TiClic

    Re : programmation vba sous excel

    Private Sub start_Click()
    Private Sub TimerVBA1_Timer()
    Dim Data As Long
    Compteur = Compteur + 1 ' Le compteur correspond au n° de la ligne suivante
    Data = ReadAnalogChannel(1)
    Set Cel = Range("A1")
    Cel.Offset(Compteur - 1, 0) = Data
    Cel.Offset(Compteur - 1, 1) = Compteur / 10
    End Sub
    End Sub
    Ca c'est strictement interdit. Tu n'as pas le droit d'imbriquer des routines : donc
    Private Sub start_Click()
    Private Sub TimerVBA1_Timer()
    Tu oublies jusqu'à la fin de tes jours.

    On est bien d'accord, au départ, les propriétés du Timer sont les suivantes :
    .intervalle = 100 ' 1/10 de seconde
    .active=false ' on attend l'ordre de lancer le timer

    Maintenant, tu mets deux boutons sur ta feuille, le premier pour lancer le programme et le second pour l'arrêter.
    - dans le bouton "Lancer" tu tapes la commande :
    TimerVBA1.Active = True ce qui va déclencher les instructions placées dans le contrôle ActiveX Timer
    - dans le bouton "Arrêter" tu tapes la commande :
    TimerVBA1.Active = false ce qui va provoquer une interruption du Timer et arrêter ton programme.

  25. #20
    Nono les gazzz

    Re : programmation vba sous excel

    désolé je rectifie les fautes si il y en a

    merci

    Nono

    PS: plus qu'a tester le programme il est fini

    EDIT: désolé encore je n'avais pas vu le message de ticlic j'ai fini par hier soir dans la soirée a finir mon programme tout seul j'était assez fier de moi donc sa fonctionne merci de toute tes precieuse infos j'ai hâte de le tester sur la carte ! ^^

Discussions similaires

  1. Reference Dialog Box en VBA Excel
    Par pat7111 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 14/01/2009, 17h40
  2. Excel VBA textbox
    Par roms42 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 29/05/2008, 10h34
  3. Programmation sous excel
    Par vascochien dans le forum Logiciel - Software - Open Source
    Réponses: 49
    Dernier message: 02/04/2007, 08h38
  4. Contrôles et VBA en Excel
    Par fderwelt dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 20/10/2006, 11h09
  5. Impression excel / vba
    Par Pierrot77 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/03/2004, 09h10
Découvrez nos comparatifs produits sur l'informatique et les technologies.