Ciao Mauro,
non posso pubblicare l'excel per problemi di policy aziendale (lavoro in banca e sono dati sensibili). Posto qui sotto la macro che tra l'altro mi avevi suggerito tu e che ho leggermente modificato per ulteriori esigenze.
Ho notato che il messaggio non compare sempre, dipende da quanti record ho estratto da SQL.
Nel caso che sto vedendo adesso, l'excel ha 5600 record per 25 colonne e premendo il tasto che attiva la macro, crea 75 nuovi excel.
Grazie
S.
Private Sub CommandButton1_Click()
Dim wsWorkSheet As Worksheet
Dim wkNew As Workbook
Dim colCollection As Collection
Dim lRiga As Long
Dim lnContatore As Long
Dim varNomeFoglio As Variant
Set colCollection = New Collection
Set wsWorkSheet = ThisWorkbook.Worksheets("Riassegnazioni")
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
With wsWorkSheet
.Range("A9").AutoFilter Field:=15, Criteria1:="=Con valorizzazione", Operator:=xlOr, Criteria2:="=Con valorizzazione x cessazione"
'Si salva il numero di righe
lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
'Salva in collection partendo dalla riga in cui ci sono effettivamente i valori
For lnContatore = 10 To lRiga
On Error Resume Next
'Se con valorizzazione, salvo in una collection
If .Cells(lnContatore, 15).Value = "Con valorizzazione" Or .Cells(lnContatore, 15).Value = "Con valorizzazione x cessazione" Then
colCollection.Add CStr(Trim(.Cells(lnContatore, 16).Value) & "_" & Trim(.Cells(lnContatore, 21).Value)), CStr(Trim(.Cells(lnContatore, 16).Value) & "_" & Trim(.Cells(lnContatore, 21).Value))
End If
Next
For Each varNomeFoglio In colCollection
'Applica il filtro all'excel principale con il campop interessato uguale al contenuto della collection
.Range("A9").AutoFilter Field:=16, Criteria1:=CStr(Left(Trim(varNomeFoglio), 7))
.Range("A9").AutoFilter Field:=21, Criteria1:=CStr(Right(Trim(varNomeFoglio), 7))
' Copia
.Range("A9").SpecialCells(xlCellTypeVisible).Copy
'Incolla nel nuovo file
Set wkNew = Workbooks.Add
wkNew.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
wkNew.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'La riga qui sotto cancella le colonne che non si vogliono nel nuovo excel
wkNew.Worksheets(1).Range("L:Y").Delete
wkNew.Worksheets(1).Range("A:A").Delete
wkNew.Worksheets(1).Range("A10").Select
wkNew.SaveAs Filename:="C:\Prova" & Format(Date, "yyyymmdd") & "_" & CStr(varNomeFoglio) & ".xls"
wkNew.Close
Set wkNew = Nothing
Next
.Range("A1").AutoFilter
End With
With Application
.CutCopyMode = False
.ScreenUpdating = True
.DisplayAlerts = True
End With
Set colCollection = Nothing
Set wsWorkSheet = Nothing
End Sub