Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Importare (una) tabella da web

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

Re: Importare (una) tabella da web

Postdi Gianca532011 » 19/02/17 15:54

Risolto...forse .
Al posto di wait ho inserito quest'altra macro che lavora con la stessa frequenza definita in " mTempo"
Codice: Seleziona tutto
Sub M_Ritardo()
 mTempo = Now + TimeValue("00:02:00")
OraAttuale = Now
Do While Now < mTempo
DoEvents
Loop
'MsgBox "Tempo scaduto"

End Sub


e qui il costrutto finale, spero definitivo, almeno per ora. :D salvo nuove idee.

http://www.filedropper.com/webquery11b643
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Sponsor
 

Re: Importare (una) tabella da web

Postdi Gianca532011 » 20/02/17 16:28

Tanto per " non farmi mancare nulla" come si fa con una query ad importare una tabella che si trova su due pagine ?
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Anthony47 » 20/02/17 18:23

Hummm.... Che significa "una tabella che si trova su due pagine"?
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare (una) tabella da web

Postdi Gianca532011 » 21/02/17 09:46

ciao, intendo una unica tabella web splittata su due pagine (tipo questa sotto) che, in excel, poi vorrei riunire in un foglio dati unico.

http://www.borse.it/quotazioni/paniere/ ... -Cap-Index
http://www.borse.it/quotazioni/paniere/ ... dex/page:2

ho pensato di creare due interrogazioni query con indirizzo di destinazione adeguato, l'uno successivo all'altro, ma mi chiedevo se non sista una forma più semplice e meno macchinosa.



Aggiungo un'altra domanda : come si fa a rimuovere dal forum file e macro non corrette ( leggi schifezze) che il sottoscritto nel suo percorso di apprendimento eseguito per "tentativi spesso fallimentari", possa aver postato ? Ciò solo per non dare indicazioni sbagliate-errate a chi, magari come me alle prime armi, ne faccia uso . E vero che di solito faccio le debite segnalazioni , però sarebbe preferibile fare "pulizia" e lasciare ciò che effettivamente funziona.
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 21/02/17 10:08

Dimenticavo, l'importazione dei dati è sempre con refresh di 1 o 2 minuti .
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Anthony47 » 22/02/17 14:41

Confesso che io ho smesso di seguire le tue scelte quindi non conosco la situazione attuale del tuo file.
Comunque direi che se sai che due tabelle sono da accodare l'una all'altra allora devi copiare la prima (dall'area di query all'area in cui le duplichi) e a questa prima tabella accodi la seconda depurata dall'header.
Sfruttando il fatto che le query hanno un intervallo dati associato (puoi intuirne il "Nome" tra le Proprieta' dell'intervallo dati, ma devi poi controllarlo in Formule /Gestione nomi) il tutto si traduce, per il tabellone di cui hai dato i due url, in
Codice: Seleziona tutto
Sheets("Foglio2").Range("FTSE_Italia_Mid_Cap_Index").Copy
Sheets("Foglio3").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
Sheets("Foglio2").Range("_2").Offset(1, 0).Copy
Sheets("Foglio3").Range("A1").Offset(Sheets("Foglio2").Range("FTSE_Italia_Mid_Cap_Index").Rows.Count).PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False

Nel mio esempio le query erano in Foglio2 e il tabellone viene ricreato in Foglio3, se nel tuo caso i fogli sono diversi allora adatta le formule; ovviamente anche i "nomi" degli intervalli delle query sono da adattare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare (una) tabella da web

Postdi Gianca532011 » 22/02/17 20:29

grazie Anthony, recepito e messo "in cascina " per future idee.
Per ora ho concluso il lavoro sul quale giro da una settimana, ma mi sembra "abbastanza" riuscito, magari non sarà il massimo dell'eleganza però funziona. Ci ho anche messo una cella lampeggiante e l'interruzione della macro con tasto esc o Ctrl break. :D
E' stata dura ma sono soddisfatto .

http://www.filedropper.com/webquery11b645np
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Anthony47 » 24/02/17 00:03

Se "funziona!", se "questo l'ho fatto io", allora per definizione e' bellissimo
Alla prossima!
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare (una) tabella da web

Postdi Gianca532011 » 24/02/17 07:58

" allora per definizione e' bellissimo " ... di più, di più... è eccelso.

Un po' di autoironia non guasta mai, anzi è salutare.

ciao e grazie
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 26/02/17 19:09

Altro problema un poco più complesso, almeno per me .
Vorrei scaricare una serie di dati da https://finance.yahoo.com/quote/CSCO/ke ... ics?p=CSCO in cui CSCO è l'acronimo di un titolo azionario, ma vorrei fare la scansione dei titoli inseriti in una colonna .

Quindi la domanda è se esiste un metodo per sostituire nella query di ricerca un "qualcosa" che si rifaccia alla mio acronimo e vada a cercare nella cartella /quote/ di yahoo che , presumo essere la cartella contenitore.

l'alternativa è di mettere il collegamento web nella colonna e quindi fare la scansione , però mi piace di meno, mi sembra più macchinosa .

Ho cercato nel forum e su internet ma non ne ho cavato granchè di utile.
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 27/02/17 15:39

Un passo avanti :

Codice: Seleziona tutto
Sub TestDownloadFromYahoo1()
Dim strUrl As String
Dim cn As Object
For Each cn In ThisWorkbook.Connections
            cn.Delete
        Next

Range("A1:H200").Select
Selection.EntireRow.Delete

strUrl = "http://finance.yahoo.com/quote/CSCO/key-statistics?p=CSCO"

'http://finance.yahoo.com/lookup/all?s=all&t=A&m=ALL    ' pagina con tutti i titoli 5200
'http://finance.yahoo.com/quote/AGN/key-statistics?p=AGN  ' funziona per singolo titolo
'http://finance.yahoo.com/lookup/all?s=all&t=A&m=ALL?s=" & "IBM + ORCL + AMZN" & "&f=sl1&e=.csv"   mio tentativo

    With Sheets("Supporto").QueryTables.Add(Connection:="URL;" & strUrl, Destination:=Sheets("Supporto").Cells(1, 1))
        .BackgroundQuery = True
        .TablesOnlyFromHTML = False
        .Refresh BackgroundQuery:=False
        .SaveData = False
    End With
     
   
  Range("A1:H58").Select
    Selection.EntireRow.Delete
 
 
End Sub


Con questa macro copio in colonna tutti i dati che si trovano in Statistic del titolo CSCO , resta il problema di scaricarne altri e metterli in sequenza, non su uno stesso foglio , perchè le specifiche voci di dettaglio possono cambiare da titolo a titolo ma in fogli successivi . Sempre piu complicata si fa la cosa :D
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Anthony47 » 28/02/17 01:40

Quindi il pendente e' riuscire a scaricare un elenco di titoli su fogli diversi...
Su un foglio che chiameremo Lista creati una lista a partire da riga2 dove in colonna A segni il foglio da utilizzare e in colonna B inserisci il simbolo da indagare.
Usiamo questa variante della tua Sub TestDownloadFromYahoo1:
Codice: Seleziona tutto
Sub TestDownloadFromYahoo1(ByRef myIndx As Range)
Dim strUrl As String, mySymb As String
Dim cn As Object

'For Each cn In ThisWorkbook.Connections
'            cn.Delete
'        Next
Sheets(myIndx.Value).Select
mySymb = myIndx.Offset(0, 1).Value
'
Range("A1:H200").Select
Selection.EntireRow.Delete
strUrl = "http://finance.yahoo.com/quote/" & mySymb & "/key-statistics?p=" & mySymb

'http://finance.yahoo.com/lookup/all?s=all&t=A&m=ALL    ' pagina con tutti i titoli 5200
'http://finance.yahoo.com/quote/AGN/key-statistics?p=AGN  ' funziona per singolo titolo
'http://finance.yahoo.com/lookup/all?s=all&t=A&m=ALL?s=" & "IBM + ORCL + AMZN" & "&f=sl1&e=.csv"   mio tentativo

    With ActiveSheet.QueryTables.Add(Connection:="URL;" & strUrl, Destination:=ActiveSheet.Cells(1, 1))
        .BackgroundQuery = True
        .TablesOnlyFromHTML = False
        .Refresh BackgroundQuery:=False
        .SaveData = False
    End With
Range("A1:H57").Select
Selection.EntireRow.Delete
Range("A1:H1").Clear
Range("A1") = mySymb
End Sub

Questa deve essere richiamata passandogli ognuna delle righe compilate su foglio Lista, cosa che potremo fare con questa seconda Macro:
Codice: Seleziona tutto
Sub doAll()
Dim I As Long
'
With Sheets("Lista")
    For I = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
        TestDownloadFromYahoo1 (.Cells(I, 1))
    Next I
   .Select
End With
MsgBox ("Aggiornamento completato...")
End Sub

Quando l'elenco su foglio Lista e' pronto va lanciata la Sub doAll

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare (una) tabella da web

Postdi Gianca532011 » 28/02/17 20:35

grazie Anthony, come al solito la tua macro è impeccabile .

Ho modificato l'insieme inserendo altre due macro per rimuovere/ricreare i fogli agganciati all'elenco in colonna A. le aggiungo qui sotto , per verifica .

Codice: Seleziona tutto
Sub CreaFogli()
Dim mNome As String
On Error Resume Next
Application.ScreenUpdating = False
Call eliminaFogli

   Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Lista")
    Dim k As Long

    k = sh.Range("A2", sh.Range("A2").End(xlDown)).Rows.Count
    If k = 1048576 Then
        k = 1
   End If
    MsgBox (k)

For r = 2 To k + 1
    mNome = Worksheets("Lista").Cells(r, 1)
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = mNome
    ActiveSheet.Range("A1") = mNome
    Next
If mNome = "" Then
Exit Sub
End If
Application.ScreenUpdating = True
Set sh = Sheets("Lista").Activate.Range("a1").Select


End Sub



Codice: Seleziona tutto
Sub eliminaFogli()
Dim sh As Worksheet
Dim tSh As Worksheet
'elimina tutti fogli tranne quello attivo
Set sh = Sheets("Lista")
                  Sheets("Lista").Activate

Application.DisplayAlerts = False
For Each tSh In ThisWorkbook.Worksheets
    If tSh.Name = sh.Name Then
    Else
        tSh.Delete
    End If
Next
Application.DisplayAlerts = True

End Sub


e questo è il risultato finale .

http://www.filedropper.com/provaanthony1

Ps se non hai nulla in contrario vorrei inserire il file su un forum di finanza sul quale sono attivo ( FinanzaonLine ) fammi sapere se ci sono controindicazioni, ovviamente non mancherò di segnalare la provenienza e salvaguardare il copyright .
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 04/03/17 20:36

Cambio di rotta, ovvero mi sono accorto che le specifiche dei dati sono sempre le stesse, quindi la domanda é :se volessi importare in un solo foglio (Riepilogo) mettendo i dati in colonna Come devo modificare la tue due macro ?

Ci ho provato, ma non sono andato oltre il primo titolo :oops:
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 04/03/17 21:05

... poi ho incasinato tutto .
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 05/03/17 17:55

Oppure, se meno complicato, si può copiare la colonna B2:B71 da tutte le pagine create, eccetto Lista , nella pagina "riepilogo", con accostamento per colonne successive. :eeh: detto cosi sembra una bazzecola , ma sono due giorni che ci provo con risultati ... che vi lascio immaginare ..

Allego immagine attuale.

http://www.filedropper.com/esempio



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

Re: Importare (una) tabella da web

Postdi Gianca532011 » 05/03/17 18:55

Questo mi è "quasi riuscito" 8) per favore vietato ridere, ovvero fa quasi tutto "al contrario ."

http://www.filedropper.com/yahoo5
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Anthony47 » 06/03/17 01:09

Tranquillo, nessuno ride
Pero' visto che vai avanti da solo io non ho idea di che cosa stai chiedendo...
La migliore ipotesi e' questa variante alla attuale Sub doAll:
Codice: Seleziona tutto
Sub doAll()
Dim i As Long
Application.ScreenUpdating = False
Sheets("Riepilogo").Range("B1").Resize(200, 250).ClearContents   '*** AZZERA Riepilogo
With Sheets("Lista")
    For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
        TestDownloadFromYahoo1 (.Cells(i, 1))
        nextc = Sheets("Riepilogo").Cells(1, Columns.Count).End(xlToLeft).Column + 1
        Range(Range("B1"), Range("B200").End(xlUp)).Copy Sheets("Riepilogo").Cells(1, nextc)
    Next i
   .Select
End With
Application.ScreenUpdating = True
MsgBox ("Aggiornamento completato...")
End Sub
Questa accumula i dati in Riepilogo man mano che vengono aggiornati dalle Query.
Attenzione: la riga marcata *** cancella il contenuto di Riepilogo da colonna B in avanti; se questo non e' voluto devi cancellare quella riga.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Importare (una) tabella da web

Postdi Gianca532011 » 07/03/17 16:28

Ciao Anthony e ancora grazie, la modifica da te fatta è perfetta, tanto da far insorgere un altro problema, ovvero di allineamento tra i dati come scaricati dal sito. Mi spiego ; nel foglio "Riepilogo " in colonna 1 ho le specifiche dei titoli e a lato colonna 2 etc vengono aggiunti le colonne con i valori dei vari titoli, e fin qui tutto Ok , mi sono però accorto che le righe scaricate dal sito non si allineano perfettamente alla griglia di colonna 1.

Quindi mi sono ingegnato ( si fa per dire ) a trovare/assemblare una macro che riportasse in posizione le colonne però :) ho osservato qualche inconveniente : ovvero l'istruzione che gestisce la ricerca non è puntuale , a volte sbaglia nel definire la colonna con gli over range , oltre a ciò ho notato che l'istruzione di spostamento mi lascia 2 o 3 righe a fondo colonna . dove sbaglio ?

Codice: Seleziona tutto
Sub M_ordina_click()
Dim sh As Worksheet
Dim riga As Long
Dim colonna As Long
Dim differenza As Long

   Set sh = ThisWorkbook.Sheets("Riepilogo")
   Sheets("Riepilogo").Activate
   sh.Cells.EntireColumn.AutoFit


With Cells.SpecialCells(xlCellTypeConstants).Areas
    riga = .Item(.Count)(.Item(.Count).Count).Row
    colonna = .Item(.Count)(.Item(.Count).Count).Column
    valore = Cells(riga, colonna).Text
End With

differenza = (riga - 71)  ' 71 è il valore standard delle righe ( se il sito non cambia impaginazione.
Cells(1, 12).Value = riga  ' ultima cella andata "sotto" rispetto alle altre
Cells(1, 13).Value = colonna ' colonna interessata
Cells(1, 14).Value = differenza ' delta righe "sotto"
 
If (riga - 71) = 0 Then
MsgBox ("Tutto ok")
Exit Sub
ElseIf (riga - 71) > 0 Then
Range(Cells(2 + differenza, colonna), Cells(riga, colonna)).Copy Destination:=Cells(2, colonna)
Range(Cells(riga, colonna), Cells((riga + differenza), colonna)).Clear
MsgBox ("colonna pareggiata")
Range("L1:N1").Clear
End If


'Sheets("Riepilogo").Range("B1").Resize(100, 100).ClearContents   '*** AZZERA Riepilogo
   
'Range("B1:z100").Sort Key1:=Range("B1"), Order1:=xlLeftToRight, _
'Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
'xlLeftToRight, DataOption1:=xlSortNormal
Set sh = Nothing

End Sub


dato che non ho ancora capito come aggiungere le immagini allego il file in toto.

http://www.filedropper.com/yahoo4a_1
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

Re: Importare (una) tabella da web

Postdi Gianca532011 » 07/03/17 17:52

ho notato che l'istruzione di spostamento mi lascia 2 o 3 righe a fondo colonna


mi rispondo da solo : perchè ho usato il COPIA e non taglia, copia etc. :oops:
Giancarlo
win 10 - Office 2016 Ita
Gianca532011
Utente Senior
 
Post: 258
Iscritto il: 27/05/11 10:18

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "Importare (una) tabella da web":


Chi c’è in linea

Visitano il forum: Making, Paolo67 e 18 ospiti