[Excel / VB] Rafraichissement de variable dan

Fermé
mougeat Messages postés 1 Date d'inscription vendredi 29 mai 2009 Statut Membre Dernière intervention 29 mai 2009 - 29 mai 2009 à 10:57
 mougeat - 29 mai 2009 à 21:49
Salut tout le monde,

Je suis entrain de créer un petit classeur excel dans lequel je récupère les variables d'un automate (électrique). Une fois les valeurs récupérées dans une cellule, je souhaite les insérer dans un tableau. Voila je suis bien arrivé à récupérer mes variables, je les copies bien dans mon tableau en changeant de ligne à chaque fois. Seulement voila la valeur dans ma variable qui copié dans chaque ligne est celle du début de lecture. Je n'arrive pas à rafraichir cette valeur.

Exemple :

Je récupère une valeur

I = 25A
Je recopie en ligne 1 de mon tableau 25
puis I passe à 75A
Je recopie en ligne 2 de mon tableau 25
etc.

Voilà mon code

Sub ChangeCase()

Dim LigneNum As Integer
Dim MesureCourant As Integer
Dim MesureTension As Integer
Dim MesureFrequence As Integer
Dim MesurePuissance As Integer

Application.StatusBar = "Merci de patienter mesure en cours"
NbMesure = Worksheets("config mesure").Range("B6").Value

BaseDeTempsTableau = Worksheets("config mesure").Range("B5").Value

For j = 1 To NbMesure

LigneNum = j + 3



MesureCourant = Worksheets("V230 config").Range("B7").Value
Worksheets("Tableau").Cells(LigneNum, 2).Value = MesureCourant
MesureCourant = 0

MesureTension = Worksheets("V230 config").Range("C7").Value
Worksheets("Tableau").Cells(LigneNum, 3).Value = MesureTension
MesureTension = 0

MesureFrequence = Worksheets("V230 config").Range("D7").Value
Worksheets("Tableau").Cells(LigneNum, 4).Value = MesureFrequence
MesureFrequence = 0

MesurePuissance = Worksheets("V230 config").Range("E7").Value
Worksheets("Tableau").Cells(LigneNum, 5).Value = MesurePuissance
MesurePuissance = 0

Worksheets("Tableau").Cells(LigneNum, 1).Value = j * BaseDeTempsTableau


If Worksheets("config mesure").Range("C5").Value = "seconde" Then
BaseDeTemps = "0:00:" & BaseDeTempsTableau
Application.Wait (Now + TimeValue(BaseDeTemps))
End If

If Worksheets("config mesure").Range("C5").Value = "milli seconde" Then
Application.Wait (Now + (TimeValue("00:00:01") / 1000) * BaseDeTempsTableau)
End If



Next j

Application.StatusBar = False
End Sub


Est-ce que quelqu'un a une idée de ce que je peu faire?


D'avance merci
A voir également:

9 réponses

Utilisateur anonyme
29 mai 2009 à 12:14
Bonjour,
Je ne sais pas comment tu récupères tes variables de ton automate, mais dans ta boucle tu prends toujours les valeurs depuis les cellules B7,C7,D7, E7 de la feuille "V230 config" !

Est ce que les valeurs à copier commencent en ligne 7 et continuent en 8,9,10 ...

Si c'est le cas la solution n'est pas loin.

A+
0
Salut, merci pour ta réponse, en fait B7, C7, D7, E7 je récupère la valeur venu de l'automate et cette valeur change n permanance en fonction des valeurs de cette automate. Donc

Prenons la cellule B7 pour exemple :

je reçois au début en B7 25A

que je souhaite copier dans la ligne 1 de mon tableau

puis B7 change et passe à 75A

Après X temps je souhaite recopier cette nouvelle valeur de B7 dans la ligne 2 de mon tableau etc.

ce qui se passe en B7, C7, D7, E7 marche actuellement bien grâce à un programme du fournisseur.
0
Utilisateur anonyme
29 mai 2009 à 15:27
la valeur en B7 change à quelle fréquence, 1s, 5s, 10... plus , moins
0
La valeur change très vite plus vite que 1s ou même plus vite que la valeur de la base temps
0

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

Posez votre question
Utilisateur anonyme
29 mai 2009 à 16:06
Pas facile de synchroniser.
Il n'y a pas moyen d'obtenir les valeurs les unes sous les autres (B7,B8, B9, ...)

les valeurs "captées" dans "V230 config" le sont elles par une macro? si oui, c'est à ce niveau qu'il faut intervenir,
si non il y a toutes les chances de "zapper" des valeurs.
0
Les valeurs reçu dans "V23 config" sont trasmises de l'automate à excel par le biai d'un programme unitronics (fournisseur de l'automate) j'arrive bien à voir ces valeurs changer instantanément dans l'onglet "V230 config". Moi je veu juste les recopier et les coller dans mon tableau.
C'est justement car ce n'est pas possible de les récupérer sous forme de tableau que je veu créer le mien.

Mon but final est d'avoir un relevé de température.

Je récupèe sur mon automate 4 entrées de température. Je retransmet ces valeurs dans mon fichier excel sur "V230 config". Ces valeurs changent dès que la température monte ou baisse. Puis à chaque X seconde, je copie ces valeurs les unes sous les autres dans le tableau se trouvant dans "tableau".

En ecrivant, il me vient une idée, ce n'est pas parce que je suis dans un onglet différent que sa ne marche pas?
0
NicoDisso Messages postés 230 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 22 août 2009 32
29 mai 2009 à 16:35
moi je dirai qu'il serait sympas de mettre du code dan sla feuille afin d'archiver toi meme ses données au fur et a mesure.
Ainsi a chaque fois que la cellule change, tu archives la valeur avec l'heure exacte et du coup tu as ton historique.
et non pas avec le temps qui s'écoule. ensuite dans ton tableau tu choisis les valeurs avec un test sur l'heure pour ta base de temps.

D'autre part, si il y a beaucoup de valeur en meme temps, peut etre qu'excel n'est pas rafraichit lorsque ton application tourne.
tapes DoEvents dans ton code afin que windows reprenne la main dessus, c'est peut etre juste ca.

En fait en tapant ça, je me suis rendu dans l'aide d'excel, parce que ca me parait bizarre quand meme et du coup tu as
application.wait
Marque une pause dans l'exécution de la macro jusqu'à une heure spécifiée. Renvoie la valeur True si l'heure spécifiée est atteinte.

Important La méthode Wait suspend toute activité de Microsoft Excel et peut vous empêcher d'accomplir toute autre opération sur votre ordinateur pendant la durée de la pause. Seules les tâches de fond telles que l'impression ou le recalcul se poursuivent.
Syntaxe

expression.Wait(Time)

expression Obligatoire. Expression qui renvoie un objet Application.

Time Argument de type Variant obligatoire. Heure, exprimée dans le format Date de Microsoft Excel, à partir de laquelle l'exécution de la macro doit reprendre.


du coup, peut etre que ca bloque l'appli par elle meme et que les données ne sont plus recues..

il faudrait essayer avec un timer avec un intervalle d'une seconde voir si ça fait pareil
0
Utilisateur anonyme
29 mai 2009 à 17:27
Bonne idée de NicoDisso!!

tu peux essayer dans la feuille "V230 config" :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, [B7:E7]) Is Nothing Then
    
    les lignes du module de transfert :
      ........
      Worksheets("Tableau").Cells(LigneNum, 2).Value = Worksheets("V230 config").Range("B7").Value
      .....

End If
End Sub


en supprimant la boucle for de la macro initiale

A+
0
Et bien merci beaucoup pour les infos, je testerai ça lundi, je n'ai plus d'automate chez moi.

Bone week end
0