Option Explicit
Sub Estrai_Reparto()
' Routine necessaria per estrapolare i dati del Reparto in base al filtro generato dalle righe
' che contengono una "x" nelle colonne da G4 a J4
Dim col_da_Eliminare_Rep1 As String
Dim col_da_Eliminare_Rep2 As String
Dim col_da_Eliminare_Rep3 As String
Dim col_da_Eliminare_Rep4 As String
Dim col_da_Eliminare_RepTelai As String
Dim Risp As Byte, Rep As Integer, Reparto As String, TotRows As Integer, TotCol As Integer, FormulaR As Range
' Queste le colonne da eliminare rispetto al foglio Matrice per la rappresentazione dei vari reparti
col_da_Eliminare_Rep1 = "$F$5:$W$5,$AF$5:$AM$5,$AV$5:$BS$5" 'VIBRATURA
col_da_Eliminare_Rep2 = "$F$5:$AE$5,$AN$5:$BS$5" 'PULITURA
col_da_Eliminare_Rep3 = "$F$5:$AU$5,$BK$5:$BS$5" 'GALVANICA
col_da_Eliminare_Rep4 = "$F$5:$BJ$5" 'VERNICIATURA
col_da_Eliminare_RepTelai = "$F$5:$AU$5,$AY$5,$BC$5:$BG$5,$BK$5:$BS$5" 'CALCOLO TELAI
' Assegno il numero associato al Reparto da estrapolare ed anche il nome del Reparto
Select Case ActiveCell.Address
Case Is = "$G$4"
Rep = 1
Reparto = "VIBRATURA"
Case Is = "$H$4"
Rep = 2
Reparto = "PULITURA"
Case Is = "$I$4"
Rep = 3
Reparto = "GALVANICA"
Case Is = "$J$4"
Rep = 4
Reparto = "VERNICIATURA"
End Select
Risp = MsgBox("Vuoi estrapolare il Reparto " & Reparto & " ?", vbExclamation + vbOKCancel, Title:="Estrapola Reparto")
If Risp = vbOK Then
'Se non c'è il filtro sul foglio lo inserisco.
If Not ActiveSheet.AutoFilterMode Then ActiveSheet.Range("A4:BT4").AutoFilter
' Spendo lo schermo
Application.ScreenUpdating = False
'Raggrupppo le colonne da eliminare e le colonne che devono essere filtrate in una matrice Vr()
' Questo passaggio è indispensabile per passare le variabili alla procedura in funzione del reparto selezionato
Dim Vr(1 To 4, 1 To 2) As String
Vr(1, 1) = col_da_Eliminare_Rep1: Vr(1, 2) = 7 ' dati x la colonna G VIBRATURA
Vr(2, 1) = col_da_Eliminare_Rep2: Vr(2, 2) = 8 ' dati x la colonna H PULITURA
Vr(3, 1) = col_da_Eliminare_Rep3: Vr(3, 2) = 9 ' dati x la colonna I GALVANICA
Vr(4, 1) = col_da_Eliminare_Rep4: Vr(4, 2) = 10 ' dati x la colonna J VERNICIATURA
'Elimino i dati preesistenti nel foglio di Reparto
Worksheets(Reparto).Range("a1").CurrentRegion.Resize(Worksheets(Reparto).Range("I" & Rows.Count).End(xlUp).Row).Clear
' Estraggo con il filtro i dati riferiti al reparto selezionato
ActiveCell.AutoFilter field:=Vr(Rep, 2), Criteria1:="x"
ActiveCell.CurrentRegion.Copy
' Memorizzo il numero di righe TotRows del filtro attivo
TotRows = ActiveCell.CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible).Count
' Riporto i valori nel foglio del relativo Reparto
With Worksheets(Reparto)
.Range("a1").PasteSpecial xlPasteValues
.Range("a1").PasteSpecial xlPasteFormats
.Range(Vr(Rep, 1)).EntireColumn.Delete
.Range("4:4").Columns.AutoFit
' Riporto le formule inserite in fondo alla tabella
TotCol = .Range("a4").CurrentRegion.Rows(4).Columns.Count - 1
Set FormulaR = .Range(Cells(TotRows, "f").Address, Cells(TotRows, TotCol).Address)
.Range(FormulaR.Address).FormulaR1C1 = "=SUM(R5C:R[-1]C)"
Range(Reparto).Resize(3, 5).Copy .Cells(TotRows + 3, "I")
End With
' Se il Reparto selezionato è il N.3 (GALVANICA) si deve generare anche il foglio Calcolo Telai
' Questo foglio ha un'altra struttura e quindi dovrò fare:
If Rep = 3 Then
' Ripulisco i dati preesistenti nel foglio di Reparto
Worksheets(Foglio7.Name).Range("a1").CurrentRegion.Clear
ActiveCell.CurrentRegion.Copy
' Memorizzo il numero di righe TotRows del filtro attivo
TotRows = ActiveCell.CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible).Count
With Worksheets(Foglio7.Name)
.Range("a1").PasteSpecial xlPasteValues
.Range("a1").PasteSpecial xlPasteFormats
.Range(col_da_Eliminare_RepTelai).EntireColumn.Delete
' Inserisco le tre colonne L:M:N che contengono formule
.Range("L4:N4").EntireColumn.Insert xlShiftToRight
.Range("L4:N" & TotRows).Interior.Color = 12056726 'codice del colore verdino
.Range("L4").Value = "TELAI NECESSARI PZ. RIT." ' Inserisco le intestazioni di colonna
.Range("M4").Value = "TELAI NECESSARI WK " & Foglio2.[b26] 'completo i dati dal foglio Regole cella b26
.Range("N4").Value = "TELAI NECESSARI WK " & Foglio2.[b27] 'completo i dati dal foglio Regole cella b27
.Range("4:4").Columns.AutoFit
.Range("a1").Value = "PIANO DI PRODUZIONE : reparto CALCOLO TELAI"
' Inserisco le formule nelle tre colonne L:M:N
.Range("L5:N" & TotRows).FormulaR1C1 = _
"=IF(OR(COUNT(RC[-3]),COUNT(RC[-6])),ROUNDUP((RC[-3]+RC[-6])/RC17,0),"""")"
' Riporto le formule inserite in fondo alla tabella
TotCol = .Range("a4").CurrentRegion.Rows(4).Columns.Count - 1
Set FormulaR = .Range(Cells(TotRows, "f").Address, Cells(TotRows, TotCol).Address)
.Range(FormulaR.Address).FormulaR1C1 = "=SUM(R5C:R[-1]C)"
End With
End If
' Disattivo il filtro nel foglio Matrici
ActiveCell.AutoFilter field:=Vr(Rep, 2)
Worksheets(Reparto).Select
Range("b1").Select
Selection = "PIANO DI PRODUZIONE : reparto " & Reparto
MsgBox "Estrapolazione eseguita!", vbInformation
' Riaccendo lo schermo
Application.ScreenUpdating = True
Else
MsgBox "Hai annullato l'operazione", vbInformation
End If
End Sub
|