Condividi:        

Dati da Borsaitaliana

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Dati da Borsaitaliana

Postdi Gianca532011 » 21/11/24 18:05

Ciao, questa e' la continuazione di viewtopic.php?f=26&p=667765#p667765
Mi è sopraggiunto un ulteriore problema ovvero con la macro, grazie a voi elaborata, scarico parte dei dati dalla Scheda di B.ita.na , che però non riporta la Scadenza del titolo. Ergo ho replicato la macro utilizzando una seconda origine dei dati : Dati completi , sia sul TLX che sul Mot, però la seconda macro (test2) non mi funziona ovvero non scarica l'unico dato che mi serve . Sbaglio metodo oppure ...
Allego file e codice .

Codice: Seleziona tutto
Option Explicit
Public Sub Test2()    '
    Dim Html As Object
    Dim CollA As Object
    Dim N As Long, i As Integer
    Dim dati As Variant
    Dim dati1 As Variant
    Dim intest As Variant, Intest2 As Variant
    Dim MyIsin As String
    Dim uR As Long
    Dim R
    Dim Ws1 As Worksheet
    Set Ws1 = Sheets("Isin")
    Ws1.Select
    Ws1.Activate
    Application.EnableEvents = False

    ' stessa intestazione + Scadenza del titolo
    intest = Array("Isin", "Descrizione", "Ultimo", "Chiusura", "Variazione % ", "Valuta", "Lotto", "Cedola Periodale", "Cedola annua", "Rendimento a scadenza Lordo", "Rendimento a scadenza netto", _
                   "Rateo Lordo %", "Rateo Netto %", "Duration", "Mkt", "Scadenza")
    Range("A1:P1") = intest
    uR = Ws1.Cells(Rows.Count, 1).End(xlUp).Row
   ' Ws1.Range("B2:P" & uR).Clear
   
    ' codifica come stringa
    Set Ws1 = Sheets("Isin")
    Ws1.Select
    Ws1.Activate
    Application.EnableEvents = False
    '
     
    ' codifica come stringa
    With Ws1
        .Range("C2:P" & uR).NumberFormat = "@"

        ' --------------converti isin a maiuscolo-------------------------------
        Dim X As Object
        For Each X In Range("A2:A" & uR)
            X.Value = UCase(X.Value)
        Next

        '----------------------------------->>>>>>>>>>>>>>>>---------------------------
        Set Html = CreateObject("htmlfile")
        With CreateObject("WINHTTP.WinHTTPRequest.5.1")

            For N = 2 To uR
                MyIsin = Cells(N, 1)
                If MyIsin <> "" Then

                    'Provo su Mot >> Dati Completi
                    .Open "GET", "https://www.borsaitaliana.it/borsa/obbligazioni/mot/euro-obbligazioni/dati-completi.html?isin=" & Cells(N, 1) & " lang=it", False  ' Mot
                    .send
                    Html.body.innerHTML = .responseText
                    Application.Wait Now + TimeValue("00:00:01")    'pausa di 1 secondi
                   
                    Set CollA = Html.getElementsByClassName("t-text -right")
                   
                    If Not CollA Is Nothing Then
                        If CollA.Length > 5 Then    '+++
                            'trovato su Mot
                            'gestisci i dati da Mot
                            On Error Resume Next    '   questo non è possibile toglierlo
                            dati1 = Array(0, 0, , , , , , , , , , , , , , , 25)
                            For i = 2 To 17
                                Cells(N, i) = CollA(dati1(i)).innerText
                            Next i
                            'On Error GoTo 0

                            'Debug.Print N, MyIsin, "Su Mot"
                        End If
                    End If
                    'Prova  su TLx ?
                    If Cells(N, 15) <> "MOT" Then    '.condizione per attivare la ricerca tlx.

                        .Open "GET", "https://www.borsaitaliana.it/borsa/obbligazioni/eurotlx/dati-completi.html?isin=" & Cells(N, 1) & "lang = it", False     ' tlx"
                        .send
                        Html.body.innerHTML = .responseText
                        Application.Wait Now + TimeValue("00:00:01")    'pausa di 1 secondi
                        Set CollA = Nothing
                        'On Error Resume Next
                        Set CollA = Html.getElementsByClassName("t-text -right")
                        ' On Error GoTo 0
                        If Not CollA Is Nothing Then
                            If CollA.Length > 5 Then    '+++
                                'trovato su tlx
                                'gestisci i dati da tlx
                                'On Error Resume Next
                                dati = Array(, , , , , , , , , , , , , , 25)
                                For i = 2 To 17
                                    Cells(N, i) = CollA(dati(i)).innerText
                                Next i
                                If Cells(N, 15) = "" Then
                                    Cells(N, 15) = "TLX"
                                End If
                                On Error GoTo 0
                                '
                                'Debug.Print N, MyIsin, "Su Tlx"
                            End If    '..
                        End If
                    End If
                End If

            Next N
        End With
    End With

    ' --------------------converte testo a numero--------------------------------
    For Each R In Sheets("Isin").UsedRange.SpecialCells(xlCellTypeConstants)
        If IsNumeric(R) Then
            R.Value = CSng(R.Value)
            R.NumberFormat = "0.00"
        End If
    Next
    '
    Range("C2:D" & uR).NumberFormat = "#,##0.00"
    Range("F2:F" & uR).NumberFormat = "#,##"
End Sub


https://www.mediafire.com/file/k89whxi7 ... .xlsm/file
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 345
Iscritto il: 27/05/11 10:18

Sponsor
 

Re: Dati da Borsaitaliana

Postdi Anthony47 » 21/11/24 21:40

Il tuo codice prepara, sul primo Isin, questo url:
https://www.borsaitaliana.it/borsa/obbl ... 345370CX67 lang=it

Ma a questo indirizzo evidentemente non esiste, infatti risponde la pagina "Obbligazioni - Cerca Strumento":
https://www.borsaitaliana.it/borsa/obbl ... nzata.html

Insomma devi capire quale url va usato per l'informazione che vuoi estrarre
Avatar utente
Anthony47
Moderatore
 
Post: 19432
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Dati da Borsaitaliana

Postdi Gianca532011 » 22/11/24 09:24

Ciao Anthony,
SI, ho corretto il codice poichè avendo già il riferimento di borsa corretto (Mot o TLX ) , già selezionato e scritto nella colonna O dalla prima macro, si potrebbe semplificare il tutto con un If di scelta, ovvero se l'Isin trovato è sul TLX >> vai direttamente al suo link oppure, caso Else, vai al MOT ... Ma Non funziona ! Cioè non mi da errore ma nemmeno scarica la data di scadenza !! maledetto :evil:
Non è che faccio casino con l'array ? se sbaglio indice va a pallino tutto ?
Codice: Seleziona tutto
Sub Test2()    '
    Dim Html As Object
    Dim CollA As Object
    Dim N As Long, i As Integer
    Dim dati As Variant
    Dim dati1 As Variant
    Dim intest As Variant, Intest2 As Variant
    Dim MyIsin As String
    Dim uR As Long
    Dim R
    Dim Ws1 As Worksheet
    Set Ws1 = Sheets("Isin")
    Ws1.Select
    Ws1.Activate
    Application.EnableEvents = False

    '
    intest = Array("Isin", "Descrizione", "Ultimo", "Chiusura", "Variazione % ", "Valuta", "Lotto", "Cedola Periodale", "Cedola annua", "Rendimento a scadenza Lordo", "Rendimento a scadenza netto", _
                   "Rateo Lordo %", "Rateo Netto %", "Duration", "Mkt", "Scadenza")
    Range("A1:P1") = intest
    uR = Ws1.Cells(Rows.Count, 1).End(xlUp).Row
    ' Ws1.Range("B2:P" & uR).Clear

    ' codifica come stringa
    Set Ws1 = Sheets("Isin")
    Ws1.Select
    Ws1.Activate
    Application.EnableEvents = False
    '

    ' codifica come stringa
    With Ws1
        .Range("C2:P" & uR).NumberFormat = "@"

        ' --------------converti isin a maiuscolo-------------------------------
        Dim X As Object
        For Each X In Range("A2:A" & uR)
            X.Value = UCase(X.Value)
        Next

        '----------------------------------->>>>>>>>>>>>>>>>---------------------------
        Set Html = CreateObject("htmlfile")
        With CreateObject("WINHTTP.WinHTTPRequest.5.1")

            For N = 2 To uR
                MyIsin = Cells(N, 1)
                If MyIsin <> "" Then
                    If Cells(N, 15) = "MOT" Then
                            'Provo su Mot >> Dati Completi
                            .Open "GET", "https://www.borsaitaliana.it/borsa/obbligazioni/mot/euro-obbligazioni/dati-completi.html?isin=" & Cells(N, 1) & " lang=it", False  ' Mot
                            .send
                            Html.body.innerHTML = .responseText
                            Application.Wait Now + TimeValue("00:00:01")    'pausa di 1 secondi

                            Set CollA = Html.getElementsByClassName("t-text -right")

                            If Not CollA Is Nothing Then
                                If CollA.Length > 5 Then    '+++
                                    'trovato su Mot
                                    'gestisci i dati da Mot
                                    On Error Resume Next    '   questo non è possibile toglierlo
                                    dati1 = Array(0, 0, , , , , , , , , , , , , , 25)
                                    For i = 2 To 15
                                        Cells(N, i) = CollA(dati1(i)).innerText
                                    Next i
                                    'On Error GoTo 0

                                End If
                            End If
                        Else                 'Non è sul Mot quindi vai su TLx

                            'https://www.borsaitaliana.it/borsa/obbligazioni/eurotlx/dati-completi.html?isin=US345370CX67&lang=it
                            .Open "GET", "https://www.borsaitaliana.it/borsa/obbligazioni/eurotlx/dati-completi.html?isin=" & Cells(N, 1) & "lang = it", False     ' tlx"
                            .send
                            Html.body.innerHTML = .responseText
                            Application.Wait Now + TimeValue("00:00:01")    'pausa di 1 secondi
                            Set CollA = Nothing
                            'On Error Resume Next
                            Set CollA = Html.getElementsByClassName("t-text -right")
                            'On Error GoTo 0
                            If Not CollA Is Nothing Then
                                If CollA.Length > 5 Then    '+++
                                    'trovato su tlx
                                    'gestisci i dati da tlx
                                    'On Error Resume Next
                                    dati = Array(0, 0, , , , , , , , , , , , , 25)
                                    For i = 2 To 16
                                        Cells(N, i) = CollA(dati(i)).innerText
                                    Next i
                                    On Error GoTo 0
                                End If     '..
                            End If
                        End If
                    End If
               
            Next N
        End With
    End With


    ' --------------------converte testo a numero--------------------------------
    For Each R In Sheets("Isin").UsedRange.SpecialCells(xlCellTypeConstants)
        If IsNumeric(R) Then
            R.Value = CSng(R.Value)
            R.NumberFormat = "0.00"
        End If
    Next
    '
    Range("C2:D" & uR).NumberFormat = "#,##0.00"
    Range("F2:F" & uR).NumberFormat = "#,##"
End Sub


Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 345
Iscritto il: 27/05/11 10:18

Re: Dati da Borsaitaliana

Postdi Anthony47 » 22/11/24 12:06

Quale e' l'informazione di cui parliamo, che se non c'e' su A si va su B?
Fai uno screenshot della pagina A da cui vuoi scaricare, dammi l'url come lo leggi dalla barra dell'indirizzo del browser e circoletta l'informazione da prelevare; idem per la pagina B
Pero' mi sembra strano che si debba procedere a tentativi; nel senso: non si sa a priori di un Isin quale sito pubblica i suoi attributi?

PS: quando costruisci la query credo che si debba usare & " & lang=it", dove la & in corsivo a te manca
Avatar utente
Anthony47
Moderatore
 
Post: 19432
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Dati da Borsaitaliana

Postdi Gianca532011 » 22/11/24 12:12

Questi sono i link corretti :

Codice: Seleziona tutto
TLX "Dati Completi"
https://www.borsaitaliana.it/borsa/obbligazioni/eurotlx/dati-completi.html?isin=US345370CX67&lang=it
MOT Dati Completi
https://www.borsaitaliana.it/borsa/obbligazioni/mot/euro-obbligazioni/dati-completi.html?isin=XS1958656982&lang=it


e l'informazione che cerco è la Scadenza del titolo.
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 345
Iscritto il: 27/05/11 10:18

Re: Dati da Borsaitaliana

Postdi Gianca532011 » 22/11/24 12:56

qui lo screenshot per il Tlx

Immagine
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 345
Iscritto il: 27/05/11 10:18


Torna a Applicazioni Office Windows


Topic correlati a "Dati da Borsaitaliana":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti