Perdona lo sfogo, ma quando vedo queste situazioni io dico che la soluzione e' un blocco notes, il lapis, una calcolatrice con le 4 operazioni e continuare a fare tutto a mano; perche' Excel e' stato usato con la finalita' di emulare un modulo cartaceo, organizzando i dati secondo il principio di indeterminazione di Heisenberg.
Bisognerebbe (modesta opinione) capovolgere l'approccio: non partire dal modulo Import cosi' compilato ma da un analitico giornaliero compilato. Dall'analitico giornaliero si compila poi il modulo Import e si popola lo storico (la somma di tutti gli analitici giornalieri)
Con queste considerazioni, ti propongo un modo per popolare un foglio Storico con le informazioni che si trovano sul tuo Import, riportandovi in ordine:
-la data (prelavata da G10)
-il contenuto dell'intestazione (in grigio)
-il contenuto delle N celle sotto l'intestazione in grigio, se hanno una qualche valorizzazione nelle colonne E-J
-i valori di colonna E-J, se la riga e' valorizzata
Per questo si potra' utilizzare la seguente macro, che e' basata sulla struttura pubblicata del foglio Import.
- Codice: Seleziona tutto
Sub Import2Storico()
Dim iDate As Date, cAge As String, sNext As Long, rCnt As Long
Dim I As Long, LastC As Long, dSh As Worksheet
'
Set dSh = Sheets("Storico")
'
Sheets("Import").Select
LastC = Cells(Rows.Count, "C").End(xlUp).Row
iDate = Int(Range("G10").Value)
For I = 16 To LastC
Debug.Print I, Cells(I, 3)
If UCase(Cells(I, "C")) <> "TOTALI" And UCase(Cells(I, "C")) <> "ACCETTAZIONE" Then
If Cells(I, "C").Interior.Color = Range("C16").Interior.Color Then
cAge = Cells(I, "C")
Else
If Application.WorksheetFunction.Count(Cells(I, "E").Resize(1, 6)) > 0 Then
sNext = dSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
dSh.Cells(sNext, 1) = iDate
dSh.Cells(sNext, 2) = cAge
dSh.Cells(sNext, 3) = Cells(I, "C")
dSh.Cells(sNext, 4).Resize(1, 6).Value = Cells(I, "E").Resize(1, 6).Value
rCnt = rCnt + 1
End If
End If
End If
Next I
MsgBox ("Completato" & vbCrLf & "Righe storicizzate: " & rCnt)
End Sub
Va messa in un Modulo Standard del vba (es Modulo1); poi quando vuoi "storicizzare" il contenuto di un foglio Import devi lanciare la Sub Import2Storico; per questo, partendo da Excel:
-premi Alt-F8, scegli Import2Storico dall'elenco di macro disponibili, premi Esegui.
Oppure associ la macro a un pulsante da inserire sul foglio Import, o altra icona da inserire nella "Barra di accesso rapido" di Excel, o altra automazione.
Il foglio Storico deve gia' esistere al momento dell'avvio della macro.
Ogni volta che si esegue la macro Import2Storico il contenuto del foglio Import viene copiato nel foglio Storico, accodandolo a quanto e' gia' presente.
Il file andra' poi salvato con estensione .xlsm (macro enabled)
Spero che quanto proposto sia di qualche utilita'.
Ciao