Ho guardato il codice della tua Sub INSERIMENTO_DATI (perche' e' quando attivi questa macro che va lento, vero?).
La macro e' palesemente un collage di macro registrate, che hanno il difetto di non essere compilate pensando alla velocita' di esecuzione.
Ad esempio, le righe
- Codice: Seleziona tutto
Range("Riga_dati").Select
Selection.Copy
ActiveSheet.Range("A1").Select
ActiveCell.Range("ASTERISCO").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Debug.Print "A_" & Format(Timer - myTim, "0.000")
'ActiveSheet.Paste
'Application.CutCopyMode = False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Range("Riga_dati").Copy
Cells(Rows.Count, Range("asterisco").Column).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
potrebbero essere condensate (mantenendo la stessa flessibilita') in
- Codice: Seleziona tutto
Range("Riga_dati").Copy
Cells(Rows.Count, Range("asterisco").Column).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Non si tratta di un miglioramento estetico ma prestazionale, avendo eliminato tutte le operazioni di spostamento e di selezione delle celle.
Ma non e' questo il collo di bottiglia, che invece e' rappresentato dalle 6300 righe di formule su foglio DescrizioneArticoli, colonne K:O
Se riesci a mettere le formule solo sulle righe che contengono in colonna B una "descrizione" secondo me il problema dovrebbe essere risolto
Credo che il contenuto di foglio DescrizioneArticoli sia abbastanza statico, nel qual caso potresti pensare di popolare le sue formule (di colonne K:O) all'apertura del file, modificando come segue il codice della Sub Workbook_Open (gia' presente nel modulo vba ThisWorkbook /QuestaCartellaDiLavoro):
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Sheets("Dati").Range("A1") = Int(Now)
With Sheets("Descrizione articoli")
.Range("K13:O10000").ClearContents
.Range("K12:O12").Copy .Range("K13").Resize(.Cells(.Rows.Count, "B").End(xlUp).Row +100, 1)
End With
End Sub
In questo modo, tutte le volte che apri il file inserirai formule per tutte le righe con Descrizione non vuota + 100 righe di riserva; ovviamente questo non sarebbe adeguato se nel corso di una sessione di lavoro il contenuto di foglio DescrizioneArticoli venisse ampliato per oltre 100 righe (mancherebbe il contenuto di colonna K:O sulle voci aggiunte oltre le 100, fino alla prossima apertura file)
Prova questa modifica (la modifica della Sub Workbook_Open); salva il file, chiudi e riaprilo.
Controlla cosi' la velocita' di lavoro e ragiona se le formule cosi' inserite (sulle righe popolate piu' 100 righe per ampliamento) possano essere un problema.
Ciao