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 :

copier une cellule toutes les 100ms


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 29
    Points
    29
    Par défaut copier une cellule toutes les 100ms
    Bonjour,

    Je voulais savoir s'il serai possible de copier une cellule toutes les 100ms et de la coller dans une autre cellule pendant un temps total de 25mn.

    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Peux-tu détailler le but de la manœuvre, car cela va surcharger ton processeur par des boucles de temporisation.

    Philippe

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 29
    Points
    29
    Par défaut
    cela va me permettre d'avoir un tableau pour créer une courbe de traction pour un essai de rupture pour une chaîne mécanique

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Je comprends mieux (formation mécanique à la base), mais si je me souviens de mes souvenirs.

    Lorsque tu fais une courbe de traction, tu as un étirement en fonction de la force, ce qui te donne un domaine élastique et ensuite la rupture.

    Je ne vois pas où intervient le temps (mes souvenirs sont peut-être mauvais )

    Philippe

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 29
    Points
    29
    Par défaut
    Le temps va etre l'échantillonnage des valeurs que je vais recevoir pour pouvoir copier la cellule par exemple:

    ma cellule des donées est en a1, moi je ve copier cette valeur toute les 100ms puis la mettre sur a2.
    puis recopier 100ms plus tard cette cellule sur a3 et etc.

    Dès ma traction finie je prend toutes cellules de A2 à A... et je fais mon graphique après

    jonathan

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    si je peux intervenir,
    tu as quoi en a1? une valeur statique ou dynamique?
    cette valeur en a1 provient d'où?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par mercatog Voir le message
    si je peux intervenir,
    Bien sûr

    De plus, pourquoi décaler une donnée et ne pas écrire dans les cellules suivantes ?

    Peux-tu mettre une copie d'écran de ce que tu veux obtenir, car tout cela est loin d'être clair.

    Philippe

  8. #8
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Points : 833
    Points
    833
    Par défaut
    Bonsoir à tous,

    un petit tour vers cette discussion :
    http://www.developpez.net/forums/d85...tion-wait-vba/

    et en regardant la fonction "GetTickCount()".

    ESVBA

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 29
    Points
    29
    Par défaut
    voici le l'image de ce que je veux obtenir

    http://www.developpez.net/forums/att...1&d=1264142149
    Images attachées Images attachées  

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    Comment est lue la valeur en A1 à partir de ton automate?
    Une réponse optimisée proviendrait de tes explications

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 29
    Points
    29
    Par défaut
    ma valeur en A1 est lue par le logiciel pcway sur mon automate panasonic moi avec cette valeur transmis par mon automate je pensait copier cette valeur en fesant un echantillonnage de 100ms, pour après tracer mon graphique.

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    dans un module public
    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
    Option Explicit
     
    Declare Function GetTickCount Lib "kernel32" () As Long
    Sub TempEchant()
    Dim Te As Long
    Te = GetTickCount
    Do While GetTickCount < Te + 100 '100ms
        DoEvents
    Loop
    End Sub
     
    Public Sub Echantillon()
    Dim LastLig As Integer
    LastLig = 2
    Do While LastLig <= 15000  '25mn x 60s x 10
        Sheets("Feuil1").Range("A" & LastLig).Value = Sheets("Feuil1").Range("A1").Value
        LastLig = LastLig + 1
        TempEchant
    Loop
    End Sub

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Points : 29
    Points
    29
    Par défaut
    J'ai pris ce code et je l'ai mis dans général quand je le met en exécution, j'ai une erreur de compilation

    des constantes,chaîne de longueur fixe, des tableau,types défini par l'utilisateur et instruction declare ne sont pas autorisés comme membre public

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pourtant ça fonctionne chez moi
    ci-joint fichier test

  15. #15
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Juste pour émettre une idée, si j'ai bien compris ton automate renseigne la cellule A1 dynamiquement, c'est a dire que cette valeur change toutes les .... x ms. Toi dans tout ca tu souhaite faire une ré échantillonnage toutes les 100ms.
    etant donné que la valeur change dans A1, il te suffirait peut etre de "piéger" se changement dans la OnChange de la feuille, puis de comparait a l'aide de GetTickCount si le dernier changement a eu lieu il y a 100ms ou plus.
    Si le changement a eu lieu il y a moins de 100ms, tu sort de la boucle.
    Si le changement a eu lieu il y a 100ms ou plus (toujours tenir compte d'un risque de passer de 99ms à 101ms), tu exécutes un code qui met la valeur de A1 dans la prochaine cellule vide.
    [Edit]
    Tiens un truc comme ca
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim TimeUp As Long
     
    On Error Resume Next 'pour ne pas risquer de quitter la boucle sans faire App.EnableEvents = True, sinon excel devient mué :D
    'Si cela arriver, il suffit de faire une procedure avec juste la ligne Application.EnableEvents = True et de l'executer pour remettre les chose en ordre.
    'Est on dans la bonne cellule?
    If Not Intersect(Range("A1"), Target) Is Nothing Then 'C'est bien A1 qui provoque le change
        TimeUp = GetTickCount
        If TimeUp >= LastTime + 100 Then 'Le dernier echantillon a ete pris il y a au moins 100ms
            Application.EnableEvents = False 'Permet de ne pas faire une boucle dut au changement de la cellule que l'on renseigne
            Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Value = Range("A1").Value
            Application.EnableEvents = True
            LastTime = TimeUp
        End If
    End If
     
    End Sub
    et dans un Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Public LastTime As Long 'representera l'heure du dernier echantillon
    Declare Function GetTickCount Lib "kernel32" () As Long
     
    Sub test()
    'Juste en cas de soucis ;), voir explication dans le code de OnChange de la feuil
    Application.EnableEvents = True
    End Sub
    [/Edit]
    A++
    Qwaz

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/08/2011, 12h36
  2. VBA: copier et transposer 2 cellules toutes les X-ieme colonnes
    Par vadius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2011, 12h57
  3. [XL-2007] modifier dans une plage toutes les cellules qui contiennent un mot précis en VBA
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/10/2010, 19h24
  4. [XL-2007] Somme : une cellule toutes les 5 cellules
    Par neoguilb dans le forum Excel
    Réponses: 1
    Dernier message: 29/09/2009, 16h36
  5. [E-03] copier une cellule toutes les 7 lignes
    Par hdisnice dans le forum Excel
    Réponses: 7
    Dernier message: 22/03/2009, 13h43

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