Condividi:        

Macro excel per estrazione dati da url

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

Macro excel per estrazione dati da url

Postdi adry8991666 » 29/09/16 14:57

Buongiorno a tutti,
avrei necessità di scrivere una macro che estrae dei dati da due URL fornite nel foglio. Premetto che oltre a qualche macro semplice non sono molto ferrato con VBA e sinceramente non ho molte idee per realizzare ciò.
Come potete vedere dal file, l'idea è quella di popolare la colonna D e F dal link presente nella colonna I, e popolare la colonna E con il link in colonna H.
Nell'esempio con le schermate allegate nel file, nella cella E3 vorrei inserire l'Overall Rating (87), in D3 born/age (May 11,1992) e in F3 il valore di mercato (35 mln).
Tutto ciò da iterare per tutti i giocatori, presenti in più fogli sempre nello stesso formato.

E' possibile secondo voi fare ciò con una macro?
Attendo consigli,
Adriano
http://www.filedropper.com/provamacro
adry8991666
Newbie
 
Post: 4
Iscritto il: 29/09/16 14:32

Sponsor
 

Re: Macro excel per estrazione dati da url

Postdi Anthony47 » 30/09/16 00:32

Lo puoi fare con delle webquery, di cui vai a modificare la "Connection" per allinearla al pes_id.
La webquery ti porta su foglio tutte le informazioni contenute sul sito pesdb.net, da queste attingi le poche informazioni che ti servono; devi vedere tu se il layout e' fisso (quindi sai che in una certa cella trovi sempre l'eta') o se devi fare un Find di un parametro per trovarne la posizione.
La query per il sito pesdb.net la crei su Foglio2 (che deve essere dedicato solo a questa funzione) con questa macro:
Codice: Seleziona tutto
Sub CreaWQPesDB()
'Crea Query, basta lanciarla solo una volta
'
'Cancella eventuali Query gia' presenti:
Sheets("Foglio2").Select
For Each wq In ActiveSheet.QueryTables
    wq.Delete
Next wq
'Crea nuova query:
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://pesdb.net/pes2017/?id=44383", Destination:=Range("$B$2"))
        .Name = "QueryAnth"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = "1"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
    Range("B3").Select
End Sub

Poi per modificare la Connection potrai usare questo codice:
Codice: Seleziona tutto
ccon = Sheets("Foglio2").Range("B3").QueryTable.Connection
cid = Mid(ccon, InStr(1, ccon, "=", vbTextCompare) + 1)
Sheets("Foglio2").Range("B3").QueryTable.Connection = Replace(ccon, cid, Selection.Value, , , vbTextCompare)
Sheets("Foglio2").Range("B3").QueryTable.Refresh BackgroundQuery:=False
'istruzioni per portare i dati dalla tabella al Foglio1

Questa presuppone che il pesdb ID sia nella cella "Attiva"

Per la query sull'altro sito il ragionamento e' analogo: ti crei una query in Foglio3, modifichi la Connection con un ragionamento analogo a quello fatto per pesdb.net, porti i dati che ti interessano su Foglio1.

Come aggiornare i tuoi elenchi dipende dal tuo processo; probabilmente vorrai lanciare l'aggiornamento con un pulsante, ma tieni presente che ogni query durera' "alcuni secondi", quindi se devi aggiornare 100 giocatori ti serviranno 100 volte "alcuni secondi".

La macro complessiva e' solo un gioco di tempo e di pazienza.

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

Re: Macro excel per estrazione dati da url

Postdi adry8991666 » 30/09/16 10:13

Ciao Antony47, intanto grazie per la risposta, ora inizio a guardare il tutto facendo ciò che mi hai indicato. Se dovessi avere problemi o dubbi chiederò qui.
Grazie mille
adry8991666
Newbie
 
Post: 4
Iscritto il: 29/09/16 14:32

Re: Macro excel per estrazione dati da url

Postdi adry8991666 » 30/09/16 11:47

Ho riletto le indicazioni di Antony47(chr ringrazio nuovamente), ma non capisco dove inserire il codice del cambio di connessione all'interno della webquery ed inoltre come rendere dinamica l'url da cui prendere i dati web (per colonna)
Codice: Seleziona tutto
..
Next wq
'Crea nuova query:
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://pesdb.net/pes2017/?id=44383", Destination:=Range("$B$2"))
..

NB: mi servono solo le informazioni dal link pesdb in quanto l'altro link non mi fornisce le informazioni necessarie.
Grazie
adry8991666
Newbie
 
Post: 4
Iscritto il: 29/09/16 14:32

Re: Macro excel per estrazione dati da url

Postdi Anthony47 » 02/10/16 18:57

Allora immagino che tu abbia in mente una strategia su quando procedere ad aggiornare le info prelevandole da quei siti...
Supponiamo che tu voglia aggiornare in un unico colpo le info relative a un blocco di giocatori; supponiamo che siano quelli di riga 3:11, quindi (con riferimento al file che avevi pubblicato) quelli cha hanno il PES_ID in G3:G11.
Hai la web query in Foglio2 (quella che estrae da http://pesdb.net).
Allora potrai usare una macro come questa:
Codice: Seleziona tutto
Sub WQUpd()
'vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=107547
Dim daAgg As Range, myId As Range
'
Set daAgg = Sheets("Foglio1").Range("G3:G11")       '<<< L'intervallo degli Id da importare
Application.Goto daAgg.Cells(1, 1)
For Each myId In daAgg
    myId.Select
    If myId.Value <> "" Then
        'codice per modificare la Connection:
        ccon = Sheets("Foglio2").Range("B3").QueryTable.Connection
        cid = Mid(ccon, InStr(1, ccon, "=", vbTextCompare) + 1)
        Sheets("Foglio2").Range("B3").QueryTable.Connection = Replace(ccon, cid, Selection.Value, , , vbTextCompare)
        Sheets("Foglio2").Range("B3").QueryTable.Refresh BackgroundQuery:=False
        'istruzioni per portare i dati dalla tabella al Foglio1:
        myId.Offset(0, -3) = Sheets("Foglio2").Range("C10")     'Eta'
        myId.Offset(0, -1) = Sheets("Foglio2").Range("C3")      'Squad number
        myId.Offset(0, -2) = Sheets("Foglio2").Range("G15")     'Overall rating
    End If
Next myId
MsgBox ("Completato...")
End Sub
Come vedi essa fa un ciclo selezionando tutte le celle che gli hai dichiarato ... e se non sono vuote ... usa il codice che ti avevo dato per aggiornare la connection della Query ... e trasferisce alcune informazioni da Foglio2 a Foglio1. Queste ultime istruzioni le dovrai adattare a che cosa vuoi importare e dove sulla riga vuoi metterlo.

Spero che trovi qualche utile spunto.

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

Re: Macro excel per estrazione dati da url

Postdi adry8991666 » 03/10/16 17:14

ciao, grazie mille ancora, sono riuscito ad utilizzare ciò che mi hai inviato e adattato alle informazioni che mi servivano, spostandole da un foglio all'altro.
Un ultimo step è quello di far girare il tutto su tutti i fogli (tranne quello apposito della macro di creazione web query), ma credo di riuscirci con la stessa idea di farlo girare su tutte le righe.
Se dovessi aver problemi so a chi rivolgermi :D
Grazie ancora
adry8991666
Newbie
 
Post: 4
Iscritto il: 29/09/16 14:32


Torna a Applicazioni Office Windows


Topic correlati a "Macro excel per estrazione dati da url":


Chi c’è in linea

Visitano il forum: Gianca532011 e 81 ospiti

cron