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 Sub

Cdlt

Parfait merci beaucoup pour cette réponse très matinale !

Cdlt

Rechercher des sujets similaires à "import yahoo ligne vide erreur"