.......sono ancora tutto incimurrito con un orecchio che fischia........
lavora e non cercare scuse .........
allora metto qui il codice vba cosi spiego cosa vorrei fare a livello di principio
potete tranquillamente incollare questo codice in una cartella vuota e far partire la routine Parti().
ancora è molto grezzo da qui valutando le varie ipotesi che usciranno fuori costruiamo un progetto condiviso.
Sub Parti()
' elimina il foglio temporaneo se esiste
Call EliminaFoglio("Listino")
' crea il foglio temporaneo
Call CreaFoglio("Listino")
' attiva il foglio temporaneoo come foglio corrente
Sheets("Listino").Select
' chiama le Query dal sito borsaitaliana
Call QueryWeb
' elimina il foglio Appoggio se esiste
Call EliminaFoglio("Temp")
' crea il foglio Appoggio
Call CreaFoglio("Temp")
' attiva il foglio temporaneo come foglio corrente
Sheets("Temp").Select
'copia i dati dal foglio con i dati di borsaitaliana e li trasferisce su un foglio di appoggio
Call DatiListino("Listino", "Temp")
'aggiunge il foglio TabellaDati se non esiste e scrive le intestazioni di colonna
Call AggiornaFoglioDati("ListaDati", "Temp")
' pulisce il foglio TabellaDati da eventuali righe vuote
'Call EliminaRigheVuote
'elimina i fogli di appoggio
' call Pulisci()
End Sub
Sub QueryWeb()
'-----------------------------------------------------------
' Collegamento al sito Borsaitaliana per estrazione tabella
'
'-----------------------------------------------------------
' With ActiveSheet.QueryTables.Add(Connection:= _
' "URL;http://www.borsaitaliana.it/bitApp/listino?service=Data&lang=it&main_list=3&sub_list=4" _
' , Destination:=Range("A1"))
' .Name = "listino?service=Data&lang=it&main_list=3&sub_list=4"
' .FieldNames = True
' .RowNumbers = False
' .FillAdjacentFormulas = False
' .PreserveFormatting = True
' .RefreshOnFileOpen = False
' .BackgroundQuery = True
' .RefreshStyle = xlInsertDeleteCells
' .SavePassword = False
' .SaveData = True
' .AdjustColumnWidth = False
' .RefreshPeriod = 0
' .WebSelectionType = xlSpecifiedTables
' .WebFormatting = xlWebFormattingNone
' .WebTables = "6,8"
' .WebPreFormattedTextToColumns = True
' .WebConsecutiveDelimitersAsOne = True
' .WebSingleBlockTextImport = False
' .WebDisableDateRecognition = False
' .WebDisableRedirections = False
' .Refresh BackgroundQuery:=False
' End With
'End Sub
Sub EliminaFoglio(NomeFoglio As String)
Dim Attuale
Dim Risposta
Dim FL As Boolean
Dim ws As Worksheet
FL = False
Attuale = ActiveSheet.Name
For Each ws In Worksheets
If LCase(ws.Name) = LCase(NomeFoglio) Then
FL = True
'Risposta = MsgBox("Sicuro di voler eliminare il foglio " & NomeFoglio & "?", vbYesNo, "ATTENZIONE")
'If Risposta = vbNo Then Exit Sub
Application.DisplayAlerts = False
Sheets(NomeFoglio).Delete
Application.DisplayAlerts = True
'MsgBox "il foglio " & NomeFoglio & " è stao eliminato"
End If
Next
If FL = False Then
'MsgBox "il foglio " & NomeFoglio & " non esiste" & vbCr _
& "Impossibile compiere l'operazione"
End If
Sheets(Attuale).Select 'si torna al foglio di partenza
End Sub
Sub CreaFoglio(NomeFoglio As String)
Dim Attuale
Dim ws As Worksheet
Attuale = ActiveSheet.Name
For Each ws In Worksheets
If ws.Name = NomeFoglio Then
' MsgBox "Il foglio " & NomeFoglio & " già esiste"
Exit Sub
End If
Next
Sheets.Add
ActiveSheet.Name = NomeFoglio
Sheets(NomeFoglio).Move After:=Sheets(Worksheets.Count)
Sheets(Attuale).Select 'si torna al foglio di partenza
End Sub
Sub DatiListino(FoglioQuery As String, FoglioAppoggio As String)
'----------------
'codice di kaprot
'----------------
'
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim sCodice As String
Dim dListino As String, eListino As String
ActiveSheet.Name = FoglioAppoggio
' preleva dalla cella A1 della queriWeb e li separa la data del listino e l'etichetta del listino che servirà come intestazione colonna
dListino = Mid(Sheets(FoglioQuery).Cells(1, 1), InStrRev(Sheets(FoglioQuery).Cells(1, 1), " ", -1)) ' data listino
eListino = Left(Sheets(FoglioQuery).Cells(1, 1), InStrRev(Sheets(FoglioQuery).Cells(1, 1), " ", 1)) ' Listino Del
'primo giro: crea le righe e si fa la call
i = 6
j = 1
While Sheets(FoglioQuery).Cells(i, 1) <> ""
sCodice = Sheets(FoglioQuery).Cells(i, 2)
sCodice = Mid(sCodice, 5)
If Len(sCodice) < 8 Then
Cells(j, 1) = dListino
Cells(j, 2) = GetScadenza(Left(sCodice, 2))
Cells(j, 4) = Replace(Sheets(FoglioQuery).Cells(i, 3), " ", "")
Cells(j, 5) = Replace(Sheets(FoglioQuery).Cells(i, 4), " ", "")
Cells(j, 6) = Replace(Sheets(FoglioQuery).Cells(i, 5), " ", "")
Cells(j, 7) = Replace(Sheets(FoglioQuery).Cells(i, 6), " ", "")
Cells(j, 8) = Replace(Sheets(FoglioQuery).Cells(i, 7), " ", "")
Cells(j, 9) = Replace(Sheets(FoglioQuery).Cells(i, 8), " ", "")
Select Case Mid(sCodice, 2, 1)
Case "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"
'sono le call
Cells(j, 3) = "C"
j = j + 1
Case "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X"
'sono le put
Cells(j, 3) = "P"
j = j + 1
Case Else
'sono le put e le settimanali
End Select
End If
i = i + 1
Wend
MsgBox "Elaborazione terminata"
End Sub
'--------------------
'funzione di kaprot
'-------------------
Function GetScadenza(ByVal sScadenza As String) As Date
Dim sMese As String
Dim sAnno As String
sAnno = "201" & Left(sScadenza, 1)
Select Case Right(sScadenza, 1)
Case "A", "M"
sMese = "01"
Case "B", "N"
sMese = "02"
Case "C", "O"
sMese = "03"
Case "D", "P"
sMese = "04"
Case "E", "Q"
sMese = "05"
Case "F", "R"
sMese = "06"
Case "G", "S"
sMese = "07"
Case "H", "T"
sMese = "08"
Case "I", "U"
sMese = "09"
Case "J", "V"
sMese = "10"
Case "K", "W"
sMese = "11"
Case "L", "X"
sMese = "12"
End Select
GetScadenza = DateSerial(CInt(sAnno), CInt(sMese), 22) - Weekday(DateSerial(CInt(sAnno), CInt(sMese), 2))
End Function
Sub AggiornaFoglioDati(BaseDati As String, FoglioQuery As String)
Dim Attuale
Attuale = ActiveSheet.Name
Dim ws As Worksheet
'Dim NomeFoglio
'NomeFoglio = "TabellaDati" 'Nome del foglio dati da aggiornare
For Each ws In Worksheets 'il ciclo For Each scorre tutti i fogli (ws) nella cartella
If ws.Name = BaseDati Then 'se esiste il foglio dei dati delle opzioni
ws.Activate 'si attiva
Dim irow As Integer 'si comincia la ricerca della prima cella libera
irow = 1 'colonna 1 (la A)
While ActiveSheet.Cells(irow, 1) <> ""
irow = irow + 1
Wend
'trovata la cella libera si incolla il contenuto del foglio Temp senza la colonna di intestazione
'
'
'
Exit Sub 'si esce dalla routine impedendo la creazione del foglio dati nelle istruzioni sottostanti
End If
Next ws 'oppure si prosegue il ciclo controllando tutti i nomi dei fogli
'se non avrà trovato un foglio con lo stesso nome della variabile (BaseDati)
'si impostano le istruzioni per aggiungere tramite Add, un nuovo foglio assegnandogli il nome della variabile (BaseDati)
Sheets.Add.Name = BaseDati
Sheets(BaseDati).Move After:=Sheets(Sheets.Count) 'spostiamo il foglio appena creato dopo l'ultimo dei fogli presenti
'questa è da rendere indipendente dai riferimenti assoluti si devono scorrere tutte le colonne della prima riga
' del foglio temporaneo e inserirle nel foglio appena creato
Sheets(FoglioQuery).Range("A1:I1").Copy Sheets(BaseDati).Range("A1")
'
' qui si crea il codice per incollare il contenuto del foglio Temp senza la colonna di intestazione
'
'
Sheets(Attuale).Select 'si torna al foglio di partenza
End Sub