Import yahoo ligne vide erreur
hello,
bon j'ai un programme qui va chercher les données direct sur yahoo finance, ça fonctionne, seul problème c'est quand il y a une ligne vide chez yahoo sur les cotations, exemple le 14/03/2022, pas de données sur la plupart des cotations françaises allez savoir pourquoi,
Ci-joint le fichier avec le code pour que vous compreniez mieux:
Au moment du select case j, pour remplacer les ".", la partie avec :
sValeur = CDbl(VBA.Replace(Valeur(j), ".", ","))
m'affiche une erreur si une des lignes du csv de chez yahoo est vide,
j'ai essayé de mettre un on error resume next & on error goto 0 avant/ après la boucle
On Error Resume Next
Select Case j
Case 0
sValeur = VBA.DateSerial(VBA.CLng(VBA.Left(Valeur(0), 4)), _
VBA.CLng(VBA.Mid(Valeur(0), 6, 2)), VBA.CLng(VBA.Right(Valeur(0), 2)))
Case 6
sValeur = VBA.CLng(VBA.Replace(Valeur(j), ".", ","))
Case Else
sValeur = CDbl(VBA.Replace(Valeur(j), ".", ","))
End Select
On Error GoTo 0
Mais au lieu d'ignorer ou d'afficher 0, je me retrouve avec un nombre qui n'a rien à faire là,
Je voudrais que ça ignore les lignes vides du CSV, pour ne pas que ça me sorte un chiffre bizarre ou un 0 pour que ça ne fausse pas les stats ou les moyennes mobiles.
Je vous joins l'excel, avant dernière ligne des cotations le 14/03/2022 vous pouvez observer ce que ça me sort,
Merci de votre aide :)
Autant pour moi, ce fichier est le bon
Bonjour,
Votre code modifié:
Option Explicit
Sub recuphisto()
Dim URL As String
Dim sCode As String
Dim Http As New WinHttpRequest
Dim sCotes As String
Dim Lignes
Dim Valeur
Dim i As Long
Dim j As Long
Dim sLigne As String
Dim sValeur As Variant
sCode = Range("titre")
Application.ScreenUpdating = False
Application.Calculation = xlAutomatic
URL = "https://query1.finance.yahoo.com/v7/finance/download/" & sCode & "?period1=" & Range("DDC") _
& "&period2=" & Range("DFC") & "&interval=1d&events=history"
If Range("A2") <> "" Then Range(Range("Debut").Offset(1, 0), Range("Debut").End(xlToRight).End(xlDown)).Delete xlUp
Http.Open "GET", URL, False
Http.Send
sCotes = Http.ResponseText
Lignes = VBA.Split(sCotes, Chr(10))
For i = 1 To UBound(Lignes)
sLigne = Lignes(i)
Valeur = VBA.Split(sLigne, ",")
For j = 0 To UBound(Valeur)
On Error Resume Next
Select Case j
Case 0
sValeur = VBA.DateSerial(VBA.CLng(VBA.Left(Valeur(0), 4)), VBA.CLng(VBA.Mid(Valeur(0), 6, 2)), VBA.CLng(VBA.Right(Valeur(0), 2)))
Case 6
sValeur = VBA.CLng(VBA.Replace(Valeur(j), ".", ","))
Case Else
If Valeur(j) = "null" Then
sValeur = ""
Else
sValeur = CDbl(VBA.Replace(Valeur(j), ".", ","))
End If
End Select
On Error GoTo 0
If j < 5 Then Range("Debut").Offset(i, j) = sValeur
If j = 6 Then Range("Debut").Offset(i, j - 1) = sValeur
Application.StatusBar = VBA.Format(Cells(i, 1), "Short date")
Next j
Application.StatusBar = False
Next i
Dim dl&, sum20#, sum50#, sum100#, y&, m20#, m50#, m100#
dl = Cells(Rows.Count, 1).End(xlUp).Row
With Range("A2")
For y = 1 To dl - 1
If y > 20 Then m20 = .Cells(y - 20, 2) Else m20 = 0
If y > 50 Then m50 = .Cells(y - 50, 2) Else m50 = 0
If y > 100 Then m100 = .Cells(y - 100, 2) Else m100 = 0
sum20 = sum20 + .Cells(y, 2) - m20
sum50 = sum50 + .Cells(y, 2) - m50
sum100 = sum100 + .Cells(y, 2) - m100
.Cells(y, 7) = sum20 / Application.Min(y, 20)
.Cells(y, 8) = sum50 / Application.Min(y, 50)
.Cells(y, 9) = sum100 / Application.Min(y, 100)
Next y
End With
Application.EnableEvents = False
Sheets("TCD").PivotTables("TCD1").RefreshTable
Application.EnableEvents = True
End SubCdlt
Parfait merci beaucoup pour cette réponse très matinale !
Cdlt