
INTERCOMPANY = Array("company 1", "soc x", "soc c", "soc q", "soc...", "soc z")
Range("W2:W" & LAST_ROW).FormulaR1C1 = "=IF(VLOOKUP(RC[-8],INTERCOMPANY,1,FALSE) ,""intercompany"",""Terzi"")" |
INTERCOMPANY = Array("company 1", "soc x", "soc c", "soc q", "soc...", "soc z")
'la colonna è la W. Notare il metodo simpatico per scovare un elemento all'interno di un Array
Range(Cells(i, 23), Cells(LAST_ROW, 23)) = IIf( instr(1, vbnullchar & join(INTERCOMPANY, vbnullchar) & vbnullchar, vbnullchar & Cells(i, 15) & vbnullchar)>0, "intercompany", "Terzi" )
|
Sub IMPORT_SCADENZARI()
'
' IMPORT SCADENZARI Macro
' Creata da Roberto Placanica 15/10/2012
' con fondamentali contributi di Vecchio Frac di excelvba.altervista'
'
Dim varFileName
Dim LAST_ROW As Integer
Dim LAST_ROW2 As Integer
Dim COMP As String
Dim UltimaRigaFiltro As Integer
Dim DATESCAD As Variant
Dim INTERCOMPANY As Variant
Dim i As Integer
Dim Path As String
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Path = "H:"
COMP = Application.InputBox("Società", "inserire nome società", "SIFAVITOR")
If COMP = CStr(False) Then
Exit Sub
End If
DATESCAD = Application.InputBox("Considero scadute le fatture anteriori al", "Inserire data scadenza", "31/12", , , , , 6)
If DATESCAD = CStr(False) Then
Exit Sub
End If
DATESCAD = CDate(DATESCAD)
Workbooks.Add
varFileName = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If TypeName(varFileName) = "String" Then
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & varFileName, Destination:=Range("A1"))
.Name = "Import da AS400"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 61
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(11, 11, 7, 7, 7, 7, 16, 15, 17, 2, 4, 11, 17)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Sheets.Add After:=Sheets(Sheets.Count)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & varFileName, Destination:=Range("A1"))
.Name = "Import da AS400"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 60
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileFixedColumnWidths = Array(132)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
'dal foglio2 ricavo i nomi dei clienti, poi elimino il folgio
Sheets("Foglio2").Select
Columns("A:A").Select
Selection.Copy
Sheets("Foglio1").Select
Columns("N:N").Select
ActiveSheet.Paste
Sheets("Foglio2").Select
ActiveWindow.SelectedSheets.Delete
'trovo l 'ultima cella attiva e memorizzo la riga
LAST_ROW = ActiveCell.SpecialCells(xlLastCell).Row
' inserisco la colonna con il mome della società
Columns("A:A").Insert Shift:=xlToRight
Range("A1") = "Società"
Range("a2:A" & LAST_ROW).Value = COMP
'inserisco le intestazioni dei campi - versione di Vecchio Frac
For i = 2 To 23
Cells(1, i) = Choose(i, "Società", "Codice Cliente", "Fattura", "Data Ft", "Doc N.", "Reg. N.", _
"TP", "Contanti", "Effetti", "Altro", "P", "Div", "Cambio", "Importo in Val", "Cliente", _
"Scadenza", "Anno", "Mese", "Data_doc", "Estrazione", "Settimana", "Scaduto", "INTERCOMPANY")
Next
' inserisco le intestazioni e le formule dei campi - mia versione
With Range("P2:P" & LAST_ROW)
.FormulaR1C1 = "=IF(LEFT(RC[-14],8)=""Scadenza"",RC[-13],R[-1]C[])"
.NumberFormat = "dd/mm/yy"
End With
Range("Q2:q" & LAST_ROW) = "=IFERROR(YEAR(RC[-1]),"""")"
Range("R2:r" & LAST_ROW) = "=IFERROR(MONTH(RC[-2]),"""")"
With Range("S2:s" & LAST_ROW)
.FormulaR1C1 = "=+IF(RC[-15]<>0,RC[-15],"""")"
.NumberFormat = "dd/mm/yy"
End With
Range("T2:t" & LAST_ROW) = "=TEXT(IFERROR(AND(VALUE(RC[-14]),VALUE(RC[-18])),""FALSO""),0)"
Range("U2:u" & LAST_ROW) = "=WEEKNUM(RC[-5],1)"
Range("v2:v" & LAST_ROW).FormulaR1C1 = "=+IF(RC[-6]<=" & CLng(DATESCAD) & ",""scaduto"",""a scadere"")"
INTERCOMPANY = Array("DERIVADOS QUIMICOS S.A.U.", "INFA GmbH", "INFA S.A.", "INFA SA", "INFA GROUP S.P.A.", "SIFAVITOR SRL", "LABORATORIO CHIMICO INTERNAZIONALE")
'di Vecchio Frac: la colonna è la W. Notare il metodo simpatico per scovare un elemento all'interno di un Array
For i = 2 To LAST_ROW
Range(Cells(i, 23), Cells(LAST_ROW, 23)) = IIf(InStr(1, vbNullChar & Join(INTERCOMPANY, vbNullChar) & vbNullChar, vbNullChar & Cells(i, 15) _
& vbNullChar) > 0, "intercompany", "Terzi")
Next
'copia e incolla i valori
Range("P2:w" & LAST_ROW).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
' elimino le celle inutili
Cells.Select
Selection.AutoFilter
ActiveSheet.Range("A1:t" & LAST_ROW).AutoFilter Field:=20, Criteria1:="FALSO"
UltimaRigaFiltro = Range("A1").End(xlDown).Row
Rows("2:" & UltimaRigaFiltro).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
LAST_ROW2 = [COUNTA(A:A)] 'idea del grande Vecchio Frac
Range("l2:l" & LAST_ROW2).Replace What:="", Replacement:="EURO"
'Creo Le pivot
pivot
Application.ScreenUpdating = True
'per salvataggio automatico togliere apice
'ActiveWorkbook.SaveAs Filename:=Path & COMP & " PARTITE SCADUTE", FileFormat:=xlOpenXMLWorkbook
End Sub
Sub pivot()
Dim UltimaRiga As Long
Dim UltimaColonna As Long
Dim DataMax As Long
Dim DataMin As Long
Dim groupRange As Range
Dim wbOut As Excel.Workbook
Dim wshOutData As Excel.Worksheet
Dim wshOutPivot As Excel.Worksheet
Dim objPCch As Excel.PivotCache
Dim objPTbl As Excel.PivotTable
MsgBox ("creo la prima pivot")
Application.ScreenUpdating = False
Set wbOut = Application.ActiveWorkbook
Set wshOutData = Application.ActiveSheet
Set wshOutPivot = wbOut.Worksheets.Add 'aggiunge un nuovo foglio per la pivot
UltimaRiga = wshOutData.Range("A1").End(xlDown).Row
UltimaColonna = wshOutData.Range("A1").End(xlToRight).Column
' cerco la data massima della scadenza
DataMax = Application.WorksheetFunction.Max(wshOutData.Range("p:p"))
' cerco la data minima della scadenza
DataMin = Application.WorksheetFunction.Min(wshOutData.Range("P:p"))
Set objPCch = wbOut.PivotCaches. _
Add(xlDatabase, SourceData:=wshOutData.Range(wshOutData.Cells(1, 1), wshOutData.Cells(UltimaRiga, UltimaColonna)))
Set objPTbl = objPCch.CreatePivotTable _
(wshOutPivot.Range("A1"), TableName:="CLIENTE_SCADENZE", DefaultVersion:=xlPivotTableVersion10)
' aggiungo i campi relativi ai dati
With objPTbl.PivotFields("Importo in Val")
.Orientation = xlDataField
.Caption = "Tot. in Val"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
With objPTbl.PivotFields("Contanti")
.Orientation = xlDataField
.Caption = "Contanti €"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
With objPTbl.PivotFields("Altro")
.Orientation = xlDataField
.Caption = "Altro €"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
objPTbl.DataPivotField.Orientation = xlColumnField
'formatta il campo data nel foglio 1
wshOutData.Columns("p:p").NumberFormat = _
"dd/mm/yy;@"
objPTbl.PivotCache.Refresh
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
.Caption = "Scad"
End With
'raggruppa per Trimestre e Mese il campo Data
Set groupRange = objPTbl.PivotFields("SCAD") _
.DataRange
groupRange.Cells(1).Group _
Start:=DataMin, End:=DataMax, _
Periods:=Array(False, False, False, _
True, True, False, True)
' inserisco i campi riga
objPTbl.AddFields RowFields:= _
Array("Cliente", "Società", "Div", "scad")
'inserisco i campi pagina
With objPTbl.PivotFields("Anni")
.Orientation = xlPageField
.Caption = "Anni"
End With
With objPTbl.PivotFields("INTERCOMPANY")
.Orientation = xlPageField
.Caption = "CONSO"
.CurrentPage = "TERZI"
End With
' evidenzio i totali
ActiveSheet.PivotTables("CLIENTE_SCADENZE").PivotSelect _
"Cliente[All;Total] Terzi", xlDataAndLabel, True
With Selection
.Font.Bold = True
.Font.Size = 10
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
'nascondiamo i dettagli della pivot
objPTbl.PivotSelect "'Cliente'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotSelect "'Società'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotCache.Refresh
' wshOutData.Visible = True
Cells.EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
ActiveSheet.DisplayAutomaticPageBreaks = False
'=====================================
'
' INSERISCO LA SECONDA PIVOT
'
'=====================================
MsgBox ("creo la seconda pivot")
Set wshOutPivot = wbOut.Worksheets.Add 'aggiunge un nuovo foglio per la pivot
Set objPTbl = objPCch.CreatePivotTable _
(wshOutPivot.Range("A1"), TableName:="SCADENZE_CLIENTE", DefaultVersion:=xlPivotTableVersion10)
' aggiungo i campi relativi ai dati
With objPTbl.PivotFields("Importo in Val")
.Orientation = xlDataField
.Caption = "Tot Valuta"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
With objPTbl.PivotFields("Contanti")
.Orientation = xlDataField
.Caption = "Contanti €"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
objPTbl.DataPivotField.Orientation = xlColumnField
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
End With
'raggruppa per Trimestre - Mese - Giorno il campo Data
Set groupRange = objPTbl.PivotFields("SCADENZA") _
.DataRange
groupRange.Cells(1).Group _
Start:=DataMin, End:=DataMax, _
Periods:=Array(False, False, False, _
True, True, False, True)
' inserisco i campi riga
With objPTbl
.AddFields RowFields:=Array("Mesi", "Cliente", "Fattura", "Data Ft", "scadenza")
End With
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
.Caption = "Data Scadenza"
.NumberFormat = "gg/mm/aa"
End With
'inserisco i campi colonna
With objPTbl.PivotFields("Div")
.Orientation = xlColumnField
.Caption = "Valuta"
.Position = 1
End With
'inserisco i campi pagina
With objPTbl.PivotFields("Anni")
.Orientation = xlPageField
.Caption = "Anni"
End With
With objPTbl.PivotFields("INTERCOMPANY")
.Orientation = xlPageField
.Caption = "CONSO"
.CurrentPage = "TERZI"
End With
With objPTbl.PivotFields("SCADUTO")
.Orientation = xlPageField
.CurrentPage = "scaduto"
End With
' questa parte mi sembra un pochino ridondante, come potrei sistemarla?
objPTbl.PivotFields("Data Scadenza"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
objPTbl.PivotFields("Data Ft").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Fattura").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Cliente").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Mesi").Subtotals = _
Array(True, False, False, False, False, False, False, False, False, False, False, False)
' evidenzio i totali
ActiveSheet.PivotTables("SCADENZE_CLIENTE").PivotSelect "Mesi[All;Total] Terzi" _
, xlDataAndLabel, True
With Selection
.Font.Bold = True
.Font.Size = 10
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
'nascondiamo i dettagli della pivot
objPTbl.PivotSelect "'mesi'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotSelect "'Cliente'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotCache.Refresh
wshOutData.Visible = True
Cells.EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
ActiveSheet.DisplayAutomaticPageBreaks = False
Application.ScreenUpdating = True
MsgBox ("Estrazione terminata")
End Sub |
Option Explicit
Sub Import()
Dim COMP As String
While Trim(COMP) = ""
COMP = Application.InputBox("Società", "inserire nome società", "SIFAVITOR")
If Trim(COMP) = (False) Then MsgBox "Fine procedura": Exit Sub
Wend
Workbooks.Add
Call IMPORT_SCADENZARI(COMP)
End Sub |
Sub Import()
'
'
Dim comp As String
Dim varFileName
Dim R As Integer
Dim risp As Variant
Dim Path As String
Dim LAST_ROW As Integer
Dim LAST_ROWC As Integer 'riga del foglio clienti
Dim LAST_ROW2 As Integer
Dim UltimaRigaFiltro As Integer
Dim DATESCAD As Variant
Dim INTERCOMPANY As Variant
Dim i As Integer
Dim importaz As Range
'
'
'
'
Path = "H:"
'
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Application.SheetsInNewWorkbook = 1 'quando creo una nuova cartella questa contine solo un foglio
Workbooks.Add
Do
comp = Application.InputBox("Società", "inserire nome società", "SIFAVITOR")
R = ActiveCell.SpecialCells(xlLastCell).Row
If R = 1 Then
R = 1
Else: R = R + 1
End If
varFileName = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If TypeName(varFileName) = "String" Then
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & varFileName, Destination:=Range("A" & R))
.Name = "Import da AS400"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 61
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileFixedColumnWidths = Array(11, 11, 7, 7, 7, 7, 16, 15, 17, 2, 4, 11, 17)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
' inserisco la colonna con il mome della società nella colonna N
Range("n1") = "Società"
LAST_ROW = ActiveCell.SpecialCells(xlLastCell).Row 'trovo l 'ultima cella attiva e memorizzo la riga
Range(Cells(R, 14), Cells(LAST_ROW, 14)).Value = comp 'compilo in modo variabile a seconda dell'import
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Foglio2"
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & varFileName, Destination:=Range("A1"))
.Name = "Importaz"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 60
.TextFileParseType = xlFixedWidth
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileFixedColumnWidths = Array(132)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
'dal foglio2 ricavo i nomi dei clienti, poi elimino il foglio
Sheets("Foglio2").Select
Range("importaz").Select
LAST_ROWC = Range("a1").SpecialCells(xlLastCell).Row
Range(Cells(1, 1), Cells(LAST_ROWC, 1)).Select
Selection.Copy
Sheets("Foglio1").Select
Range(Cells(R, 15), Cells(LAST_ROW, 15)).PasteSpecial
Sheets("Foglio2").Delete
' Sheets("Foglio2").Select
' ActiveWindow.SelectedSheets.Delete
risp = MsgBox("Devo importare ancora?", vbYesNo)
Loop While risp = vbYes
' imposto la data dalla quale considerare scadute le fatture
DATESCAD = Application.InputBox("Considero scadute le fatture anteriori al", "Inserire data scadenza", "31/12", , , , , 6)
If DATESCAD = CStr(False) Then
Exit Sub
End If
DATESCAD = CDate(DATESCAD)
'inserisco le intestazioni dei campi - versione di Vecchio Frac
For i = 2 To 23
Cells(1, i) = Choose(i, "Codice Cliente", "Fattura", "Data Ft", "Doc N.", "Reg. N.", _
"TP", "Contanti", "Effetti", "Altro", "P", "Div", "Cambio", "Importo in Val", "Società", "Cliente", _
"Scadenza", "Anno", "Mese", "Data_doc", "Estrazione", "Settimana", "Scaduto", "INTERCOMPANY")
Next
' inserisco le intestazioni e le formule dei campi - mia versione
With Range("P2:P" & LAST_ROW)
.FormulaR1C1 = "=VALUE(IF(LEFT(RC[-15],8)=""Scadenza"",RC[-14],R[-1]C[]))"
.NumberFormat = "dd/mm/yy"
End With
Range("Q2:q" & LAST_ROW) = "=IFERROR(YEAR(RC[-1]),"""")"
Range("R2:r" & LAST_ROW) = "=IFERROR(MONTH(RC[-2]),"""")"
With Range("S2:s" & LAST_ROW)
.FormulaR1C1 = "=+IF(RC[-16]<>0,RC[-16],"""")"
.NumberFormat = "dd/mm/yy"
End With
Range("T2:t" & LAST_ROW) = "=TEXT(IFERROR(AND(VALUE(RC[-13]),VALUE(RC[-17])),""FALSO""),0)"
Range("U2:u" & LAST_ROW) = "=WEEKNUM(RC[-5],1)"
Range("v2:v" & LAST_ROW).FormulaR1C1 = "=+IF(RC[-6]<=" & CLng(DATESCAD) & ",""scaduto"",""a scadere"")"
INTERCOMPANY = Array("DERIVADOS QUIMICOS S.A.U.", "INFA GmbH", "INFA S.A.", "INFA SA", "INFA GROUP S.P.A.", "SIFAVITOR SRL", "LABORATORIO CHIMICO INTERNAZIONALE")
'di Vecchio Frac: la colonna è la W. Notare il metodo simpatico per scovare un elemento all'interno di un Array
'di rplacanica: ho trovato l'errore!!! anzichè Range(Cells(i, 23), Cells(i, 23)) c'era scritto Range(Cells(i, 23), Cells(LAST_CELL, 23)) e quindi compilava
'tutto insieme !!!
For i = 2 To LAST_ROW
Range(Cells(i, 23), Cells(i, 23)) = IIf(InStr(1, vbNullChar & Join(INTERCOMPANY, vbNullChar) & vbNullChar, vbNullChar & Cells(i, 15) _
& vbNullChar) > 0, "intercompany", "Terzi")
Next
'copia e incolla i valori
Range("n2:w" & LAST_ROW).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
' elimino le celle inutili
Cells.Select
Selection.AutoFilter
ActiveSheet.Range("A1:w" & LAST_ROW).AutoFilter Field:=20, Criteria1:="FALSO"
UltimaRigaFiltro = Range("t1").End(xlDown).Row
Rows("2:" & UltimaRigaFiltro).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
LAST_ROW2 = [COUNTA(A:A)]
Range("k2:k" & LAST_ROW2).Replace What:="", Replacement:="EURO"
'Creo Le pivot
PIVOT
Application.ScreenUpdating = True
'per salvataggio automatico togliere '
'ActiveWorkbook.SaveAs Filename:=Path & COMP & " PARTITE SCADUTE", FileFormat:=xlOpenXMLWorkbook
End Sub
Sub PIVOT()
Dim UltimaRiga As Long
Dim UltimaColonna As Long
Dim DataMax As Long
Dim DataMin As Long
Dim groupRange As Range
Dim wbOut As Excel.Workbook
Dim wshOutData As Excel.Worksheet
Dim wshOutPivot As Excel.Worksheet
Dim objPCch As Excel.PivotCache
Dim objPTbl As Excel.PivotTable
MsgBox ("creo la prima pivot")
Application.ScreenUpdating = False
Set wbOut = Application.ActiveWorkbook
Set wshOutData = Application.ActiveSheet
Set wshOutPivot = wbOut.Worksheets.Add 'aggiunge un nuovo foglio per la pivot
UltimaRiga = wshOutData.Range("A1").End(xlDown).Row
UltimaColonna = wshOutData.Range("A1").End(xlToRight).Column
' cerco la data massima della scadenza
DataMax = Application.WorksheetFunction.Max(wshOutData.Range("p:p"))
' cerco la data minima della scadenza
DataMin = Application.WorksheetFunction.Min(wshOutData.Range("P:p"))
Set objPCch = wbOut.PivotCaches. _
Add(xlDatabase, SourceData:=wshOutData.Range(wshOutData.Cells(1, 1), wshOutData.Cells(UltimaRiga, UltimaColonna)))
Set objPTbl = objPCch.CreatePivotTable _
(wshOutPivot.Range("A1"), TableName:="CLIENTE_SCADENZE", DefaultVersion:=xlPivotTableVersion10)
' aggiungo i campi relativi ai dati
With objPTbl.PivotFields("Importo in Val")
.Orientation = xlDataField
.Caption = "Tot. in Val"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
With objPTbl.PivotFields("Contanti")
.Orientation = xlDataField
.Caption = "Contanti €"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
With objPTbl.PivotFields("Altro")
.Orientation = xlDataField
.Caption = "Altro €"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
objPTbl.DataPivotField.Orientation = xlColumnField
'formatta il campo data nel foglio 1
wshOutData.Columns("p:p").NumberFormat = _
"dd/mm/yy;@"
objPTbl.PivotCache.Refresh
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
.Caption = "Scad"
End With
'raggruppa per Trimestre e Mese il campo Data
Set groupRange = objPTbl.PivotFields("SCAD") _
.DataRange
groupRange.Cells(1).Group _
Start:=DataMin, End:=DataMax, _
Periods:=Array(False, False, False, _
True, True, False, True)
' inserisco i campi riga
objPTbl.AddFields RowFields:= _
Array("Cliente", "Società", "Div", "scad")
'inserisco i campi pagina
With objPTbl.PivotFields("Anni")
.Orientation = xlPageField
.Caption = "Anni"
End With
With objPTbl.PivotFields("INTERCOMPANY")
.Orientation = xlPageField
.Caption = "CONSO"
.CurrentPage = "TERZI"
End With
' evidenzio i totali
ActiveSheet.PivotTables("CLIENTE_SCADENZE").PivotSelect _
"Cliente[All;Total] Terzi", xlDataAndLabel, True
With Selection
.Font.Bold = True
.Font.Size = 10
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
'nascondiamo i dettagli della pivot
objPTbl.PivotSelect "'Cliente'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotSelect "'Società'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotCache.Refresh
' wshOutData.Visible = True
Cells.EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
ActiveSheet.DisplayAutomaticPageBreaks = False
'=====================================
'
' INSERISCO LA SECONDA PIVOT
'
'=====================================
MsgBox ("creo la seconda pivot")
Set wshOutPivot = wbOut.Worksheets.Add 'aggiunge un nuovo foglio per la pivot
Set objPTbl = objPCch.CreatePivotTable _
(wshOutPivot.Range("A1"), TableName:="SCADENZE_CLIENTE", DefaultVersion:=xlPivotTableVersion10)
' aggiungo i campi relativi ai dati
With objPTbl.PivotFields("Importo in Val")
.Orientation = xlDataField
.Caption = "Tot Valuta"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
With objPTbl.PivotFields("Contanti")
.Orientation = xlDataField
.Caption = "Contanti €"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
objPTbl.DataPivotField.Orientation = xlColumnField
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
End With
'raggruppa per Trimestre - Mese - Giorno il campo Data
Set groupRange = objPTbl.PivotFields("SCADENZA") _
.DataRange
groupRange.Cells(1).Group _
Start:=DataMin, End:=DataMax, _
Periods:=Array(False, False, False, _
True, True, False, True)
' inserisco i campi riga
With objPTbl
.AddFields RowFields:=Array("Mesi", "Cliente", "Fattura", "Data Ft", "scadenza")
End With
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
.Caption = "Data Scadenza"
.NumberFormat = "gg/mm/aa"
End With
'inserisco i campi colonna
With objPTbl.PivotFields("Div")
.Orientation = xlColumnField
.Caption = "Valuta"
.Position = 1
End With
'inserisco i campi pagina
With objPTbl.PivotFields("Anni")
.Orientation = xlPageField
.Caption = "Anni"
End With
With objPTbl.PivotFields("INTERCOMPANY")
.Orientation = xlPageField
.Caption = "CONSO"
.CurrentPage = "TERZI"
End With
With objPTbl.PivotFields("SCADUTO")
.Orientation = xlPageField
.CurrentPage = "scaduto"
End With
objPTbl.PivotFields("Data Scadenza"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
objPTbl.PivotFields("Data Ft").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Fattura").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Cliente").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Mesi").Subtotals = _
Array(True, False, False, False, False, False, False, False, False, False, False, False)
' evidenzio i totali
ActiveSheet.PivotTables("SCADENZE_CLIENTE").PivotSelect "Mesi[All;Total] Terzi" _
, xlDataAndLabel, True
With Selection
.Font.Bold = True
.Font.Size = 10
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
'nascondiamo i dettagli della pivot
objPTbl.PivotSelect "'mesi'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotSelect "'Cliente'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotCache.Refresh
wshOutData.Visible = True
Cells.EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
ActiveSheet.DisplayAutomaticPageBreaks = False
Application.ScreenUpdating = True
'=====================================
'
' INSERISCO LA TERZA PIVOT
'
'=====================================
MsgBox ("creo la terza pivot")
Set wshOutPivot = wbOut.Worksheets.Add 'aggiunge un nuovo foglio per la pivot
Set objPTbl = objPCch.CreatePivotTable _
(wshOutPivot.Range("A1"), TableName:="SOCIETA_SCADENZE_CLIENTE", DefaultVersion:=xlPivotTableVersion10)
' aggiungo i campi relativi ai dati
With objPTbl.PivotFields("Importo in Val")
.Orientation = xlDataField
.Caption = "Tot Valuta"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
With objPTbl.PivotFields("Contanti")
.Orientation = xlDataField
.Caption = "Contanti €"
.Function = xlSum
.NumberFormat = "#,##0;[Red](#,##0)"
End With
objPTbl.DataPivotField.Orientation = xlColumnField
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
End With
'raggruppa per Trimestre - Mese - Giorno il campo Data
Set groupRange = objPTbl.PivotFields("SCADENZA") _
.DataRange
groupRange.Cells(1).Group _
Start:=DataMin, End:=DataMax, _
Periods:=Array(False, False, False, _
True, True, False, True)
' inserisco i campi riga
With objPTbl
.AddFields RowFields:=Array("Mesi", "Cliente", "Fattura", "Data Ft", "scadenza")
End With
With objPTbl.PivotFields("Scadenza")
.Orientation = xlRowField
.Caption = "Data Scadenza"
.NumberFormat = "gg/mm/aa"
End With
'inserisco i campi colonna
With objPTbl.PivotFields("Div")
.Orientation = xlColumnField
.Caption = "Valuta"
.Position = 1
End With
'inserisco i campi pagina
With objPTbl.PivotFields("Anni")
.Orientation = xlPageField
.Caption = "Anni"
End With
With objPTbl.PivotFields("INTERCOMPANY")
.Orientation = xlPageField
.Caption = "CONSO"
.CurrentPage = "TERZI"
End With
With objPTbl.PivotFields("SCADUTO")
.Orientation = xlPageField
.CurrentPage = "scaduto"
End With
With objPTbl.PivotFields("Società")
.Orientation = xlPageField
End With
objPTbl.PivotFields("Data Scadenza"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
objPTbl.PivotFields("Data Ft").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Fattura").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Cliente").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
objPTbl.PivotFields("Mesi").Subtotals = _
Array(True, False, False, False, False, False, False, False, False, False, False, False)
' evidenzio i totali
ActiveSheet.PivotTables("SOCIETA_SCADENZE_CLIENTE").PivotSelect "Mesi[All;Total] Terzi" _
, xlDataAndLabel, True
With Selection
.Font.Bold = True
.Font.Size = 10
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
'nascondiamo i dettagli della pivot
objPTbl.PivotSelect "'mesi'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotSelect "'Cliente'[All]", xlLabelOnly, True
Selection.ShowDetail = True
objPTbl.PivotCache.Refresh
wshOutData.Visible = True
Cells.EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
ActiveSheet.DisplayAutomaticPageBreaks = False
Application.ScreenUpdating = True
MsgBox ("Creo tabella singola società")
ActiveSheet.PivotTables("SOCIETA_SCADENZE_CLIENTE").ShowPages PageField:="Società"
Sheets.Select
Cells.Select
Cells.EntireColumn.AutoFit
Cells.EntireColumn.AutoFit
MsgBox ("Estrazione terminata")
End Sub |
