Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Copia dati 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

Copia dati da web

Postdi Statix » 08/06/17 22:08

Ciao a tutti,
volevo chiedere se era possibile con una macro ,inserire la data in automatico nel riquadro seleziona giorno vai
ed estrarre dati , manualmente si riesce, seleziono data da calendario vai e copio i dati,poi ripeto la stessa procedura per almeno una ventina di estrazioni

https://www.lottomaticaitalia.it/it/pro ... a=20170606


Immagine
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Sponsor
 

Re: Copia dati da web

Postdi Anthony47 » 10/06/17 01:11

Il link pubblicato restituisce "La pagina che cercavi non è stata trovata"; comunque prova col file disponibile qui:
https://www.dropbox.com/s/ebp9gz7av0a6m ... .xlsm?dl=0

In Foglio1 imposta da M2 verso il basso l'elenco delle date (max 49 date)
Immagine

Poi lancia la Sub TabImport

Le estrazioni dovrebbero essere importate una dopo l'altra sullo stesso Foglio1, che SARA' AZZERATO SENZA PREAVVISO a inizio macro.

Il codice usato:
Codice: Seleziona tutto
Dim IE As Object        '<<< Rigorosamente in testa al Modulo
Sub TabImport()
Dim I As Long, J As Long, dArr(1 To 50)
'
Cells(50, "M").ClearContents
For I = 2 To 32
    If Cells(I, "M") <> "" Then
        dArr(I) = Format(Cells(I, "M"), "dd/mm/yyyy")
    Else
        Exit For
    End If
Next I
'
Sheets("Foglio1").Activate
Range("A:J").ClearContents          '<<< Azzera tutti i risultati
Range("A:J").NumberFormat = "@"
For J = 2 To I - 1
    If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .navigate "https://www.lottomaticaitalia.it/it/prodotti/lotto/estrazioni"
        .Visible = True
        Do While .Busy: DoEvents: Loop    'Attesa not busy
        Do While .ReadyState <> 4: DoEvents: Loop 'Attesa documento
    End With
'Compila date:
    Set mycoll = IE.document.getelementsbytagname("input")
    mycoll(13).Value = dArr(J)
    Application.Wait (Now + TimeValue("0:00:02"))
    mycoll(14).Click
    Application.Wait (Now + TimeValue("0:00:02"))
    Cells(Rows.Count, 1).End(xlUp).Offset(2, 1).Value = dArr(J)
    Call GetWTableCommon(1)
Next J
'Chiusura:
IE.Quit
Set IE = Nothing
MsgBox ("Completato...")
End Sub


Sub GetWTableCommon(ByVal Dummy)
Dim myI As Long, myItm As Object, aAa, bBb, myJ As Long, TdTd, tRtR
'
'Scaricare le tabelle:
Set mycoll = IE.document.getelementsbytagname("TABLE")
'
myI = Cells.Item(Rows.Count, "A").End(xlUp).Row + 2     '
For Each myItm In mycoll
    For Each tRtR In myItm.getelementsbytagname("tr")
        For Each TdTd In tRtR.getelementsbytagname("td")
            Cells(myI + 1, myJ + 1) = TdTd.innerText
            myJ = myJ + 1
        Next TdTd
        myI = myI + 1: myJ = 0
    Next tRtR
    myI = myI + 1
    Exit For
Next myItm
'
Range("A:H").WrapText = False   ' Adattare il range se >A:H
'< Fine importazione tabelle
'
'Stop
End Sub


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

Re: Copia dati da web

Postdi Statix » 10/06/17 14:00

Ciao Anthony47,
sei veramente fenomenale ,
funziona alla grande,
l'unico inconveniente e che bisogna mettere prima le date,
c'è un rimedio per evitarle ? ho visto che se metto un mese intero(30-31 giorni) quando non trova la data mi restituisce l'ultima estrazione,si puo fare il confronto delle date? cioè quella che inserisco e quella evidenziata nell'estrazione se è diversa salta,
un altra opzione che vorrei fare, invece di mettere l'estrazioni una sotto l'altra,
con un ciclo ,cerca la prima estrazione e mettere in una sola riga la data e tutti gli estratti in R2:BU2,
dopo cerca la seconda e mettere i dati in R3:BU3
e così via fino alla fine del ciclo (10-20 estrazioni ,anche meno)
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Anthony47 » 13/06/17 00:20

Beh, speravo che sapessi bene quali sono le date delle estrazioni...

Ho modificato il file gia' pubblicato; ora contiene un secondo Modulo con una Sub TabImport2 e una Sub GetWTableCommon2(ByVal Dummy) che lavorano utilizzando Foglio2 secondo il concetto di data iniziale /data finale; date che vanno inserite in B1 e B2 di Foglio2.
Non vengono fatte verifiche di consistenza o correttezza sulle date; la maco prova e se quella data viene visualizzata in IE allora i dati vengono scaricati in riga.
La colonna Q contiene la data dell'estrazione, accanto i valori dell'estrazione.

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

Re: Copia dati da web

Postdi Statix » 13/06/17 12:54

Ciao Anthony47,
tutto ok ,solo un piccolo particolare,
se è possibile nella riga delle estrazioni, non memorizzare i nomi delle ruote,
ma solo la data e i 55 estratti,
grazie tantissimo.
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Anthony47 » 13/06/17 21:32

Ma lavorare un po' anche tu, no??
Ad esempio avresti potuto registrare una tua macro che elimina le colonne con le "ruote", ottenendo un codice del tipo
Codice: Seleziona tutto
    Range("R:R,X:X,AD:AD, etc etc").Select
    Selection.Delete Shift:=xlToLeft
(da aggiungere in coda a quanto ti ho proposto).

Comunque se vogliamo farla difficile, modifica il codice della Sub GetWTableCommon2 come segue:
Codice: Seleziona tutto
Sub GetWTableCommon2(ByVal Dummy)
Dim myI As Long, myItm As Object, aAa, bBb, myJ As Long, TdTd, tRtR
'
'Scaricare le tabelle:
Set mycoll = IE.document.getelementsbytagname("tbody")
'
myJ = 17                    '17=R-1
myI = Cells.Item(Rows.Count, myJ).End(xlUp).Row      '
mylbody = IE.document.getelementsbytagname("body")(0).innerText
If InStr(1, mylbody, Format(Dummy, "d mmmm yyyy"), vbTextCompare) > 0 Then
    For Each myItm In mycoll
        For Each tRtR In myItm.getelementsbytagname("tr")
            For Each TdTd In tRtR.getelementsbytagname("td")
                If TdTd.classname <> "ng-binding" Then              'If AGGIUNTO
                    Cells(myI + 1, myJ + 1) = TdTd.innerText
                    myJ = myJ + 1
                End If
            Next TdTd
'            myI = myI + 1: myJ = 0
        Next tRtR
'        myI = myI + 1
        Exit For
    Next myItm
    myOk = True
End If
'
Range("R:BU").WrapText = False   ' Adattare il range se <>R:BU
'< Fine importazione tabelle
'
'Stop
End Sub


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

Re: Copia dati da web

Postdi Statix » 13/06/17 21:49

Ciao Anthony47,
ho aggiunto la riga If
ma non va, mi da errore,
se tolgo l'aggiunta funziona come prima

Immagine
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Anthony47 » 13/06/17 21:58

Copia tutto il codice aggiornato che ti ho passato
Avatar utente
Anthony47
Moderatore
 
Post: 17658
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copia dati da web

Postdi Statix » 13/06/17 22:07

ok funziona,
il motivo è che quando copio la macro eventualmente copia anche degli spazi,
quando poi incollo alcune righe della macro sono in rosso
e mi tocca cancellare man mano gli spazi,
è una cosa che prima non capitava con il copia incolla,
grazie Anthony47.
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Flash30005 » 14/06/17 00:46

Toh chi si rivede!?
Statix??

ne è passato di tempo,
Bentornato :)
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8502
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copia dati da web

Postdi Statix » 14/06/17 16:04

Ciao Flash30005,
ti ricordo che seguo da sempre il forum anche se non presente,
sia Anthony47 e che te, siete bravissimi.
tutto quello che ho imparato fino adesso lo devo esclusivamente a voi,
vi ringrazio moltissimo.
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Statix » 15/06/17 23:08

Ciao Anthony47,
è sorto un piccolo problema ,
mese di giugno mi da una data che non cè la 05/06/2017 che in realtà corrisponde all'ultima estrazione 15/06/2017
non ho fatto nessuna modifica ,per essere sicuro ho scaricato il file messo da te a disposizione, l'errore si ripete.
altri mesi non ho provato ancora.
01/06/2017
03/06/2017
05/06/2017
06/06/2017
08/06/2017
10/06/2017
13/06/2017
15/06/2017
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Anthony47 » 16/06/17 18:58

Eh gia'...

Modifica questa riga
If InStr(1, mylbody, " " & Format(Dummy, "d mmmm yyyy"), vbTextCompare) > 0 Then
(in rosso la parte modificata)

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

Re: Copia dati da web

Postdi Statix » 16/06/17 20:03

Ciao Anthony47,
tutto ok,
ti volevo chiedere nella macro, il mycoll(13).click andrebbe messo prima
della riga mycoll(13).value=Format(J,"dd/mm/yyyy") o va bene così,
inoltre ho modificato CDate(J) in = Format(J, "dd/mm/yyyy")
perché mi serviva la data in testo
e poi ho modificato l'inizio e fine della data di ricerca in automatico
inizio preso l'ultima data disponibile +1
mentre la fine ho messo=oggi()+1
così non c è' bisogno di impostare ogni volta le date di ricerca.





Codice: Seleziona tutto
'Compila date:
   Set mycoll = IE.document.getelementsbytagname("input")
    mycoll(13).Value = Format(J, "dd/mm/yyyy")
    mycoll(13).Click
[/color]    Application.Wait (Now + TimeValue("0:00:01"))
    mycoll(14).Click
    Application.Wait (Now + TimeValue("0:00:02"))
'    Cells(Rows.Count, "R").End(xlUp).Offset(2, 1).Value = dArr(J)
    myOk = False
    Call GetWTableCommon2(J)
    If myOk Then Cells.Item(Rows.Count, 18).End(xlUp).Offset(0, -1) =CDate(J)
[/color]   
Next J
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Anthony47 » 19/06/17 00:45

Anthony ha scritto:
Codice: Seleziona tutto
'Compila date:
    Set mycoll = IE.document.getelementsbytagname("input")
    mycoll(13).Value = dArr(J)
    Application.Wait (Now + TimeValue("0:00:02"))
    mycoll(14).Click

Non c'e' bisogno del mycoll(13).Click, visto che clicchiamo sul VAI (che corrisponde a mycoll(14))

Piuttosto vorrei mettere in evidenza che passando a Sub GetWTableCommon2 (post del 13-giu sera) e' necessario che le dichiarazioni iniziali includano anche la variabile myOk; cosa fatta nel file di esempio disponibile all'indirizzo dropbox ma non descritta anche nel testo:
Codice: Seleziona tutto
Dim IE As Object, myOk As Boolean        '<<< Rigorosamente in testa al Modulo


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

Re: Copia dati da web

Postdi Flash30005 » 25/06/17 01:08

Statix ha scritto:Ciao Flash30005,
ti ricordo che seguo da sempre il forum anche se non presente,
sia Anthony47 e che te, siete bravissimi.
tutto quello che ho imparato fino adesso lo devo esclusivamente a voi,
vi ringrazio moltissimo.


Grazie per il complimento che per quanto mi riguarda immeritato
(ho cercato solo di impegnarmi per le mie conoscenze e se sono state utili sono contento)
Da qualche mese ho dovuto dedicare il tempo (cosa preziosissima di ogni essere vivente) ad altre realtà ma è mia intenzione rendermi più attivo anche se ho sempre controllato, comunque, che il Forum funzionava regolarmente (questa la funzione di un moderatore).
Un a presto!

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8502
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copia dati da web

Postdi Statix » 26/08/19 21:19

Ciao Anthony47,
la Lottomatica in questi giorni ha fatto qualche piccola modifica,
al foglio delle estrazioni, la macro funziona ma adesso mi copia anche i nomi delle ruote,
esempio

Immagine
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Anthony47 » 27/08/19 23:52

Da quel che vedo bisogna sostituire una istruzione all'interno della Sub GetWTableCommon2:
Codice: Seleziona tutto
'                If TdTd.classname <> "ng-binding" Then                 'ELiminare
                If TdTd.classname = "center ng-binding ng-scope" Then   'INSERIRE


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

Re: Copia dati da web

Postdi Statix » 28/08/19 20:24

Ciao Anthony47,
c'è ancora qualcosa che non va , copia solo le prime dieci ruote,
mancano gli estratti della Nazionale

Immagine
Statix
Windows 10,
Office 2013,
Statix
Utente Senior
 
Post: 1270
Iscritto il: 12/05/06 21:55
Località: Provincia di Caserta

Re: Copia dati da web

Postdi Anthony47 » 28/08/19 21:53

E' che ci sono delle giornate in cui la "classname" delle estrazioni Nazionali diventa "center ng-binding ng-scope blu", mentre piu' spesso e' semplicemente "center ng-binding ng-scope". Questo succede soprattutto dopo il 1° Luglio 2019

Modifica l'istruzione che ti ho fatto inserire (in sostituzione di altra cancellata) in:
Codice: Seleziona tutto
                If TdTd.classname = "center ng-binding ng-scope" Or TdTd.classname = "center ng-binding ng-scope blu" Then   'INSERIRE

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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Copia dati da web":

Dati da web
Autore: Statix
Forum: Applicazioni Office Windows
Risposte: 6

Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti