
Option Explicit
Sub Importa()
Dim i As Integer, FileGest As Worksheet, EFile As Worksheet, EFileFR As Integer, FileGestFR As Integer
Set FileGest = Workbooks("file da gestionale.xls").Worksheets(1)
Set EFile = Worksheets(ActiveSheet.Name)
' La prima cosa che faccio è svuotare la tabella da eventuali valori precedenti. Nel caso potrebbero inficiare i risultati
EFileFR = EFile.Range("a" & Rows.Count).End(xlUp).Row
EFile.Range("a12:s" & EFileFR).Clear
' Adesso gli appiccico i dati della tabella proveniente dal gestionale
FileGest.Range("a1").CurrentRegion.Offset(1).Copy EFile.Range("a12")
'Ricalcolo EFileFR che mi serve per il ciclo successivo
EFileFR = EFile.Range("a" & Rows.Count).End(xlUp).Row
' inizio con l'elaborazione dei punti
EFile.[c8] = Now() ' questo scrive la data
EFile.[c9] = "NomeFile" 'non ho capito da dove dovrei prendere il nome del file
' inizio con aggiungere le righe laddove necessarie
For i = EFileFR To 13 Step -1
If EFile.Range("a" & i) <> EFile.Range("a" & i - 1) Or EFile.Range("b" & i) <> EFile.Range("b" & i - 1) Then
EFile.Range("a" & i).EntireRow.Insert
End If
Next
' Adesso EFileFR sarà ancora diverso. Lo ricalcolo perchè mi serve per il ciclo successivo
EFileFR = EFile.Range("a" & Rows.Count).End(xlUp).Row
' adesso posso fare le somme laddove servono
Dim MyRange As Range, MyCell As Range, PrevCell As Integer
Set MyRange = EFile.Range("a12:a" & EFileFR + 1)
PrevCell = 12 ' Inizzializzo la variabile
Do
Set MyCell = MyRange.Find(what:="", LookIn:=xlValues)
With MyCell
.Value = "Totale"
.Font.Bold = True
End With
EFile.Range("o" & MyCell.Row).Value = WorksheetFunction.Sum(EFile.Range("n" & MyCell.Row - 1 & ":n" & PrevCell))
EFile.Range("q" & MyCell.Row).Value = WorksheetFunction.Sum(EFile.Range("p" & MyCell.Row - 1 & ":p" & PrevCell))
PrevCell = MyCell.Row + 1
Loop Until MyCell.Row = EFileFR + 1
' Adesso ho ultimato le somme e devo solo inserire i totali alla fine della tabella e applico un minimo di formattazione alla tabella
With EFile.Range("a12").End(xlDown).Offset(2)
.Value = "Totale Generale"
.Font.Bold = True
.Offset(, 14).Value = WorksheetFunction.Sum(EFile.Range("o12:o" & EFileFR + 1))
.Offset(, 16).Value = WorksheetFunction.Sum(EFile.Range("q12:q" & EFileFR + 1))
End With
EFile.Range("a12").CurrentRegion.Offset(1).Font.Size = 8
Union(EFile.Range("o12:o" & EFileFR + 3), EFile.Range("q12.q" & EFileFR + 3)).NumberFormat = "#,#.00"
End Sub
|
Option Explicit
Sub import_data()
Dim f As Variant, wbk_gest As Workbook, wbk As Workbook, j As Integer
Dim last_row As Long, i As Integer, partial_sum_total_per_style As Single, partial_sum_total_per_style_dispatched As Single
f = Application.GetOpenFilename("Excel files (*.xls),*.xls,Tutti i files (*.*),*.*", , "Scegli il file da gestionale", MultiSelect:=False)
If f = False Then Exit Sub
Application.ScreenUpdating = False
Range("A12", "S" & Columns(1).Cells.Count).ClearContents
Set wbk = ThisWorkbook
Set wbk_gest = Workbooks.Open(f)
wbk_gest.Sheets(1).[a1].CurrentRegion.Offset(1).Copy wbk.Sheets(1).[a12]
wbk_gest.Close
'1) nella cella C8: devo mettere la data di oggi (ma quando riapro il file deve rimanere la data messa la prima volta)
[C8] = Format(Now(), "dd/mm/yyyy")
'2) nella cella C9: devo inserire il nome del file
[C9] = ActiveWorkbook.Name
'3) devo inserire una riga vuota ogni volta che la cella A e la cella B sono diverse dalla cella A o B della riga sopra
last_row = [a12].CurrentRegion.Rows.Count
For i = 10 + last_row To 13 Step -1
If Cells(i, 1) & Cells(i, 2) <> Cells(i - 1, 1) & Cells(i - 1, 2) Then
Cells(i, 1).EntireRow.Insert
'4) nelle celle di colonna O deve riportare la somma delle celle corrispondenti in colonna N
j = Cells(i + 1, "O").CurrentRegion.Rows.Count
Cells(i + 1, "O").Offset(j) = partial_sum_total_per_style + Cells(i + 1, "N")
'4b) nelle celle di colonna Q deve riportare la somma di tutte le celle soprastanti in colonna P
Cells(i + 1, "Q").Offset(j) = partial_sum_total_per_style_dispatched + Cells(i + 1, "P")
partial_sum_total_per_style = 0
partial_sum_total_per_style_dispatched = 0
Else
partial_sum_total_per_style = partial_sum_total_per_style + Cells(i, "N")
partial_sum_total_per_style_dispatched = partial_sum_total_per_style_dispatched + Cells(i, "P")
End If
Next
'5) in fondo alle colonne O e Q, saltare una riga e fare la somma totale di tutte somme parziali nelle righe soprastanti.
Cells(Columns(1).Cells.Count, 1).End(xlUp).Offset(3, 14) = [SUM(O:O)]
Cells(Columns(1).Cells.Count, 1).End(xlUp).Offset(3, 16) = [SUM(Q:Q)]
Application.ScreenUpdating = True
MsgBox "Ho finito."
End Sub
|
