Macro pour cryptomonaie

Bonjour,

J'ai une application Excel avec une API qui me permet de récupérer des infos sur des bitcoins. Tout fonctionne bien il suffit d'actualiser pour que les valeurs se mettent à jour.

J'ai 2 valeurs dans les cellules F2 et H2, quand j'actualise ces valeurs changent. Je voudrais créer un tableau avec 2 colonnes heure et quote contenant l'historique de ces changements.
J'ai donc écrit une macro que je lance pour fabriquer mon tableau mais les valeurs ne se mettent pas à jour.

Voici ce que j'ai écrit.

Sub Historique()

Nb_tours = 0

ligne = 9

Do While Nb_tours <= 10 '----- Le programme va voir 10 fois de suite si les valeurs ont changées

Nb_tours = Nb_tours + 1

'----- Actualise les données

Sheets("map").Select

ActiveWorkbook.RefreshAll

'----- Attente pour l'actualisation se fasse normalement 10 secondes

Application.Wait (Now + TimeValue("00:01:00"))

Sheets("latest_id=1,1027,1839,3635 (3)").Select

ActiveWorkbook.RefreshAll

Application.Wait (Now + TimeValue("00:01:00"))

'----- Ecrit heure dans l'historique

'Range("A" & ligne).Value = Range("H2").Value '----- On fabrique une chaine qui fait A9, A10, A11...

'----- Ecrit la qote dans l'historique

Range("B" & ligne).Value = Range("F2").Value '----- On fabrique une chaine qui fait B9, B10, B11...

'----- Attente 3 minutes avant de passer au test suivant

Application.Wait (Now + TimeValue("00:03:00"))

ligne = ligne + 1

Loop

End Sub

Edit modo : code entre balises SVP

Le programme tourne normalement mais les valeurs ne sont pas actualisées. Si quelqu'un a une idée ?

Merci

Bonjour,

Ceci est une minute : Application.Wait (Now + TimeValue("00:01:00"))

Ceci est 10 secondes : Application.Wait (Now + TimeValue("00:00:10"))

ric

Bonjour et merci mais le problème n'est pas l'attente, c'est que les valeurs ne sont pas réactualisées.

Bonjour GA87,

Quand tu veux coller du code dans un post ... s.t.p. utilise le bouton </> et colle le code dans la fenêtre qui va apparaître ... merci ...

Est-ce tu as fait un pas-à-pas ( touche F8 ) sur ton code afin de t'assurer que le tout se déroule normalement ... que ce sont les bonnes feuilles qui sont sélectionnées ... que les infos sont lues et écrites dans les bonnes cellules ??

Note : pour sélectionner une feuille ... il est préférable d'utilise .Active au lieu de .Select 

ric

bonjour,

quand j'actualise ces valeurs changent.

Actualiser, cela veut dire, utiliser le bouton F9 ? Si vous le faitez à main, vous faitez quoi ?

F2 et H2, ce sont des cellules de la feuille "latest_id=1,1027,1839,3635 (3)" ou de "map" ?

Bonjour à tous,

Merci pour vos réponses.

Les cellules F2 H2 dans dans la feuille "latest_id=1,1027,1839,3635 (3)", ces cellules évoluent toutes les 20 à 30 secondes, l'ancienne valeur disparait pour donner la nouvelle, et je voudrais garder de temps en temps l'historique de ces changements.

Quand j'utilise le Pas à Pas, tout fonctionne très bien, je constate simplement que dans la feuille de calcul, j'ai le cercle rond de la souris qui tourne souvent, ce qui veut dire que l'ordi est occupé à quelque chose. C'est normal à la demande d'actualisation mais il le fait à d'autre moments je ne sais pas pourquoi.

J'attends que l'ordi est fini pour continuer et comme ça, ça fonctionne.

re,

le circle rond, c'est l'Application.Wait.

Ces macros fonctionnent avec "application.ontime" tout les 3 minutes. Pour le bon fonctionnement, il y a aussi een macro dans thisworkbook.

Public dNextTime

Sub Update_OnTime()

     With Sheets("latest_id=1,1027,1839,3635 (3)")
          ligne = .Range("A" & Rows.Count).End(xlUp).Row
          b = (.Range("A" & ligne).Value = Range("H2").Value) And (.Range("B" & ligne).Value = .Range("F2").Value)     'valeurs n'ont pas modifié
          If Not b Then .Range("A" & ligne + 1).Resize(, 3).Value = Array(.Range("H2").Value, .Range("F2").Value, Now)
     End With

     Stoppen
     dNextTime = Now + TimeValue("00:03:00")
     Application.OnTime dNextTime, "Update_onTime"

End Sub

Sub Stoppen()
     On Error Resume Next
     Application.OnTime dNextTime, "Update_onTime", , 0
     On Error GoTo 0
End Sub
3ga87.xlsb (23.79 Ko)

Bonjour et merci BsAlv,

Je vais essayer ton code demain parce que l'accès aux données par l'API est gratuit avec un nombre limité par jour que j'ai dépassé, donc je dois attendre.

Je donnerai des nouvelles lundi.

Bon Week end à tous.

re,

alors il faut penser à optimaliser votre quotum !

Comment faut-il le faire ? Peut on desactiver/mettre en pause cet API et l'activer une fois chaque heure ou 1/2 heure ?

Comment faitez-vous pour l'activer en ouvrant le fichier ?

Oui, on peut régler l'appel, sur Excel dans le menu

- Données

- Il y a un bouton Actualiser

- sinon dans Requête et connexion

- on peut régler entre 1 et 60mn

J'ai déconnecté l'appel dan Excel et c'est moi qui actualise dans la macro en faisant un Refresh.

re,

dans la macro "Activation_API", vous devez changer ce qu'il doit se passer en cas d'activation ou d'attente.

Il y a 2 temps (en minutes) à changer dans les cellules jaunes.

Public dNextTime, bFlipFlop

Sub Bouton_Commencer()
     bFlipFlop = False     'reset ce drapeua pour qu'on commence directement avec une activation de l'API
     Update_OnTime
End Sub

Sub Update_OnTime()

     With Sheets("latest_id=1,1027,1839,3635 (3)")
          ligne = .Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne d'écriture
          b = (.Range("A" & ligne).Value = Range("H2").Value) And (.Range("B" & ligne).Value = .Range("F2").Value)     'valeurs ne sont pas modifié
          If Not b Then .Range("A" & ligne + 1).Resize(, 4).Value = Array(.Range("H2").Value, .Range("F2").Value, Now, IIf(bFlipFlop, "Start", "Stop")) 'en cas de modification, écrire les nouvelles données
     End With

     Stoppen
     bFlipFlop = Not bFlipFlop  'inverser le drapeau   '
     dNextTime = Now + IIf(bFlipFlop, TimeSerial(0, Range("temps_d_action").Value, 0), TimeSerial(0, Range("temps_d_attente").Value, 0)) 'temps où la macro ser lancée de nouveau
     Activation_API
     Application.OnTime dNextTime, "Update_onTime"

End Sub

Sub Stoppen()
     On Error Resume Next
     Application.OnTime dNextTime, "Update_onTime", , 0
      Application.StatusBar = ""
     On Error GoTo 0
End Sub

Private Sub Activation_API()
     If bFlipFlop Then
          Application.StatusBar = "Refresh = Activation de l'API et attendre les nouvelles données pendant " & Range("temps_d_action").Value & " minute(s) jusqu'à " & Format(dNextTime, "hh:mm:ss")
          ThisWorkbook.RefreshAll '-----> par exemple !!!!
     Else
          Application.StatusBar = "En garde pendant " & Range("temps_d_attente").Value & " minute(s) jusqu'à " & Format(dNextTime, "hh:mm:ss")
     End If
End Sub
2ga87.xlsb (26.15 Ko)

Bonjour BsAlv,

Super, merci beaucoup, tout fonctionne et j'ai découvert l'utilisation de Application.OnTime.

Bonne journée et merci encore.

Rechercher des sujets similaires à "macro cryptomonaie"