Enregistrement automatique malgres raffraichissement

  • Initiateur de la discussion Nitro
  • Date de début
N

Nitro

Guest
Bonjour à tous et merci d'avance pour toute réponse...

Voila mon problème :

Dans mon fichier, j'ai 2 cellules qui changent de valeur environ toutes les 2 minutes (rafraichissement toutes les minutes).

Mais j'aimerais dans ma 2eme feuille enregistrer les differentes valeurs que peuvent prendre ces 2 cellules.

Dans ma premiere cellule j'ai une heure ex : 06:18
et dans l'autre une nombre ex : 700

Ces valeurs changent en fonction de ce qui est rentré dans le fichier "Essai.csv".
Dans ma 2eme feuille, je veux enregistrer les differentes valeurs de cette maniere :

06:16 700
06:18 800
06:20 750
06:22 900
.....

Pouvez-vous me dire le code que je dois faire ??
Merci d'avance,
 

Pièces jointes

  • essai.zip
    10.6 KB · Affichages: 15
  • essai.zip
    10.6 KB · Affichages: 10
  • essai.zip
    10.6 KB · Affichages: 11
M

mDF

Guest
Bonjour,

Dans l'évènement "Change" de l'objet "Worksheet" de la feuille 1, j'ai mis :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$4" Then
Worksheets(2).Cells(1, 1).End(xlDown).Offset(1, 0).Value = Range("$B$4").Value
Worksheets(2).Cells(1, 1).End(xlDown).Offset(0, 1).Value = Range("$C$4").Value
End If
End Sub

(Voir pièce jointe)

Je pense que ça peut répondre à ton problème...

Salutations.
Didier
 

Pièces jointes

  • essai.zip
    13.6 KB · Affichages: 12
  • essai.zip
    13.6 KB · Affichages: 14
  • essai.zip
    13.6 KB · Affichages: 15
N

Nitro

Guest
Bonjour Didier et tout d'abord merci beaucoup pour votre réponse et de vous
interesser à mon problème...

J'ai extrait les fichiers que vous m'avez transmis. J'ai bien remarqué les
changements mais je ne comprend le fonctionnement de votre element : rien ne
se passe ...
les chiffres indiques en B4 et en C4 n'inscrivent pas automatiquement dans
les colonnes A et B de la feuille "Données enregistrées"...

Est-ce un problème de chez moi ???

Merci d'avance,

Cordialement,

Frédéric
 
M

mDF

Guest
Bonsoir Frédéric,

Il ne s'agit pas d'un problème chez toi, mais d'un problème chez moi (désolé, vu l'heure tardive ou je t'ai répondu, je ne devais pas avoir tous mes esprits !)

Effectivement, l'évènement Change de l'objet Worksheet est incapable de détecter les évènements d'actualisation automatique des données.

Après même constat pour l'évènement Calculate du même objet.... on ne peut y échapper, il faut passer par l'objet QueryTable et un module de classe qui pourra surveiller l'évènement Refresh de ce dernier.

Conclusion, on efface tout et on recommence...

N'étant pour ma part pas très à l'aise avec la chose, j'ai quelque peu galérer, mais Ô miracle, je pense avoir trouvé la solution !

Tu trouveras ci-joint une nouvelle version qui devrait répondre à ton problème maintenant.

Bon courage.

DIDIER
 

Pièces jointes

  • Essai2.zip
    18.5 KB · Affichages: 16
  • Essai2.zip
    18.5 KB · Affichages: 14
  • Essai2.zip
    18.5 KB · Affichages: 13
N

Nitro

Guest
Je vais encore vous embeter et vous solliciter quelques instants (promis c'est la derniere fois) ... mais j'ai 2 autres petites questions :

- Dans cet enregistrement, au lieu de recopier uniquement les 2 valeurs des cellules B4 et C4, peut-on recopier la ligne entière (4) ??

- La suite de ma demande concerne la mise en forme graphique des données enregistrées dans l'onglet "données enregistrées".
Peut on réaliser un graphique "glissant" qui prendrait pour dernière valeur celle venant d'être enregistrée. Sachant bien sur que le nombre de données dans le graphique sera de 250 (limite pour excel).

Je suis vraiment navré de devoir vous solliciter encore une fois mais pouvez-vous encore m'aider ??

Merci beaucoup d'avance,

Frédéric
 
M

mDF

Guest
Bonjour Nitro,

Pour répondre à ta première question, il faut modifier la procédure "Historiser" du Module1 par quelque chose comme ça :

Sub Historiser()
Dim DL As Long
With Worksheets(2)
'on cherche la dernière ligne utilisée de la feuil 2
DL = .Cells(1, 1).End(xlDown).Row
'et on recopie à la fin les valeurs de la feuil 1
Sheets(1).Rows(4).Copy Destination:=.Rows(DL + 1)
End With
End Sub

En ce qui concerne la partie graphique, désolé... mais ce n'est vraiment pas ma tasse de thé ! Je pense qu'il conviendrait mieux de t'adresser aux spécialistes du Forum en la matière.

Cela dit, du point de vue pédagogique, je porte un intérêt certain à ton projet qui me parait un bon sujet de base à mes propres interrogations.
Aussi, je profiterais certainement moi aussi des réponses que tu ne manqueras certainement pas de trouver ici (XLD c'est une mine d'informations très instructives !)

En espérant que ma modeste contribution aura pu t'aider.

DIDIER
 
N

Nitro

Guest
Bonjour Didier et merci pour votre réponse.

J'ai testé et remplacé par le script que vous m'avez indiqué en dernier (en
le placant au bon endroit pourtant)... malheureusement, le fichier ne
fonctionne plus et la ligne n'ai pas recopié...

Pouvez-vous me dire pourquoi ??

Merci d'avance,


Frédéric
 
M

mDF

Guest
Bonsoir Frédéric,

Question : Après avoir modifié le code, as-tu enregistré, fermé et ré-ouvert le classeur ?

L'initialisation de l'objet QueryTable de la classe1 est lancée à l'ouverture du classeur (dans Workbook_Open()), aussi, si tu modifies le code VBA, la déclaration de l'objet est perdue. Il faut donc réouvrir le classeur pour que tout re-fonctionne normalement.

A toutes fins utiles, tu trouveras ci-joint l'exemple remodifié.

- La connexion avec le fichier .csv est initialisée dans l'évènement Workbook_open(). C'est là que tu pourras éventuellement modifier le chemin d'accès du .csv à surveiller...

DIDIER
 

Pièces jointes

  • EnrgAutoQuery.zip
    20.4 KB · Affichages: 15

Statistiques des forums

Discussions
312 331
Messages
2 087 360
Membres
103 529
dernier inscrit
moket07