Ciao David,
Anzitutto grazie per i consigli nella tua risposta, provvedero a metterli in atto.
Per il resto, questa macro è una piccola parte di una piu complessa che sto traducendo dalle vecchie macro 4.0 in VBA, la macro ha il compito si stampare, salvare e archiviare le schede di lavoro che compiliamo giornalmente
Questa è un faximile di scheda

Quando lancio la macro 4.0 esegue le seguenti operazioni:
- verifica la correttezza degli orari,
- archivia in un file SCH.xlsm tutte le schede in una sezione che corrisponde al giorno (lunedi, martedi, ecc)
in modo che quando farò i programmi di lavoro i giorni successivi mi propone quelli corrispondenti allo stesso giorno della settimana precedente (sono sempre simili al 90% e risparmio molto tempo)
- smista le schede a seconda che debbano essere stampate e archiviate, solo stampate, solo archiviate, per fare questo metto in una cella della scgeda una lettera S, N, A.
- esegue la stampa,
- a questo punto entra in funzione la tua macro che mi apre il file del mese e anno che prende dalla data sulle schede che devo archiviare, per farlo trasformo la data delle schede in MMAAAA che viene scritto nella cella A1 dalla quale apro il file se è
presente, altrimenti mi crea un file nuovo (questo succede ogni mese).
Il vecchio codice 4.0 è il seguente:
Stampa Programmi SCHEDE MULTIPLE
=SCHERMO()
=DIRECTORY("C:\AB")
' COPIA LE ORE IN P0 PER SMISTARLE
=CARTELLA.DI.LAVORO.SELEZIONA("P1")
=SELEZIONA("R11C3:R167C10")
=MODIFICA.COPIA()
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C18")
=MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)
=CARTELLA.DI.LAVORO.SELEZIONA("P1")
=SELEZIONA("R11C13:R167C20")
=MODIFICA.COPIA()
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R169C18")
=MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)
=COPIA.ANNULLA()
' CANC CELLE DOVE CI SONO FOTMULE CHE MI RESTITUISCONO VALORE 0
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=OPZIONI.VISUAL(;;;;;;;;;;;VERO;;;)
=SELEZIONA("R9C18:R340C25")
=ERRORE(FALSO)
=SE(FORMULA.TROVA("0";2;1;2;1;VERO)=VERO)
=SELEZIONA("RC")
=MODIFICA.CANCELLA()
=MACRO.ESEGUI(N28)
=FINE.SE()
=OPZIONI.VISUAL(;;;;;;;;;;;FALSO;;;)
' SALVA I PROGRAMMI CHE RIPROPONE GIORNALMENTE
=DIRECTORY("D:\AB")
=FILE.APRI("SCH.xlsm";1)
=ATTIVA.FINESTRA("SCH.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("SCH")
=SELEZIONA("R10")
=ERRORE(FALSO)
=SE(FORMULA.TROVA(PaP0U8)=VERO)
' ENTRA SE C'E' IL PROGRAMMA con la stessa data E LO AGGIORNO
=SELEZIONA("RC")
=SELEZIONA("R[-1]C")
=ATTIVA.FINESTRA("PA.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R7C21:R400C24")
=MODIFICA.COPIA()
=ATTIVA.FINESTRA("SCH.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("SCH")
=SELEZIONA("RC")
=MODIFICA.INCOLLA()
=MACRO.ESEGUI(N71)
=FINE.SE()
' ESCE SE NON C'E' IL PROGRAMMA con la stessa data E LO INSERISCO NUOVO
=ATTIVA.FINESTRA("PA.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R3C21:R400C25")
=MODIFICA.COPIA()
=ATTIVA.FINESTRA("SCH.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("SCH")
=SELEZIONA("R5C6")
=INSERISCI(1)
=SELEZIONA("R3:R4;R27:R30;R47:R50;R67:R70;R87:R90;R107:R110;R127:R130;R147:R150;R167:R170;R187:R190;R207:R210;R227:R230;R247:R250;R267:R270;R287:R290;R307:R310;R327:R330;R347:R350;R367:R370")
=MODIFICA.CANCELLA()
=SELEZIONA("R1C1")
=DIRECTORY("D:\AB")
=FILE.SALVA()
=FILE.CHIUDI()
=DIRECTORY("C:\AB")
' SMISTAMENTO SCHEDE S - N - A - VUOTA
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
contaSch=0
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SE(contaSch > 16)
' CONTA IL NR DI SCHEDE NELLA FORMULA
' FINE CICLO CONTROLLO 16 SCHEDE
' CONTROLLA LA STAMPA
=MACRO.ESEGUI(N160)
=FINE.SE()
' CONTROLLA PRESENZA ORE
=SELEZIONA("R10C25")
=FORMULA.DEFINISCI.NOME("PaORE")
=SE(PaORE ="")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C18:R28C25")
=MODIFICA.ELIMINA(2)
contaSch=contaSch+1
=MACRO.ESEGUI(N86)
=FINE.SE()
' CONTROLLA PRESENZA NOME DIPENDENTE
=SELEZIONA("R9C21")
=FORMULA.DEFINISCI.NOME("PaDIP")
=SE(PaDIP ="")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C18:R28C25")
=MODIFICA.ELIMINA(2)
contaSch=contaSch+1
=MACRO.ESEGUI(N86)
=FINE.SE()
' CONTROLLA S - S - VUOTO
=SELEZIONA("R9C25")
=FORMULA.DEFINISCI.NOME("PaSNA")
=SE(PaSNA ="A")
' ELIMINA PERCHE' NON STAMPA NON ARCHIVIA
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C18:R28C25")
=MODIFICA.ELIMINA(2)
contaSch=contaSch+1
=MACRO.ESEGUI(N86)
=FINE.SE()
=SE(PaSNA ="")
' STAMPA E ARCHIVIA
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R11C18:R24C24")
=MODIFICA.COPIA()
=SELEZIONA("R11C37")
=INSERISCI(2)
=MODIFICA.COPIA()
=SELEZIONA("R11C27")
=INSERISCI(2)
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C18:R28C25")
=MODIFICA.ELIMINA(2)
contaSch=contaSch+1
=MACRO.ESEGUI(N86)
=FINE.SE()
=SE(PaSNA ="S")
' STAMPA E NON ARCHIVIA
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C25")
=SELEZIONA("R[2]C[-7]:R[15]C[-1]")
=MODIFICA.COPIA()
=SELEZIONA("R11C37")
=INSERISCI(2)
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C18:R28C25")
=MODIFICA.ELIMINA(2)
contaSch=contaSch+1
=MACRO.ESEGUI(N86)
=FINE.SE()
=FILE.IMPOSTA.STAMPANTE?()
' PREPARAZIONE ALLA STAMPA
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R11C38")
=FORMULA.DEFINISCI.NOME("PaDIP")
=SE(PaDIP ="")
' FINE CICLO STAMPE
=MACRO.ESEGUI(N231)
=FINE.SE()
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R11C38")
=SELEZIONA("RC[-1]:R[13]C[5]")
=FORMULA.DEFINISCI.NOME("PaDIP")
=MODIFICA.COPIA()
=SELEZIONA("R13C3")
' COPIA SCHEDA NR 1
=MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)
=SELEZIONA("PaDIP")
=MODIFICA.ELIMINA(2)
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R11C37:R24C43")
=FORMULA.DEFINISCI.NOME("PaDIP")
=MODIFICA.COPIA()
=SELEZIONA("R33C3")
' COPIA SCHEDA NR 2
=MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)
=SELEZIONA("PaDIP")
=MODIFICA.ELIMINA(2)
' BORDARE CLIENTI AREA DI STAMPA
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
bordo=0
=SELEZIONA("R13C8")
=FORMULA.DEFINISCI.NOME("bordoP0")
=SE(bordo = 34)
=MACRO.ESEGUI(N218)
=FINE.SE()
=SE(bordoP0 = "")
=FORMULA.VAI.A("bordoP0")
=SELEZIONA("RC[-2]:RC[2]")
=FORMATO.BORDO(0;0;0;0;0;;;1;1;1;1)
=SELEZIONA("R[1]C[2]")
=FORMULA.DEFINISCI.NOME("bordoP0")
bordo=bordo+1
=MACRO.ESEGUI(N195)
=FINE.SE()
=FORMULA.VAI.A("bordoP0")
=SELEZIONA("RC[-2]:RC[2]")
=FORMATO.BORDO(0;7;7;7;7;;;1;1;1;1)
=SELEZIONA("R[1]C[2]")
=FORMULA.DEFINISCI.NOME("bordoP0")
bordo=bordo+1
=MACRO.ESEGUI(N195)
=FILE.STAMPA(1;;;1;FALSO;FALSO;1;;;300)
=MACRO.SOSPENDI(ADESSO()+"00.00.05")
' PULISCO AREA STAMPA
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R13C3:R26C9;R33C3:R46C9")
=MODIFICA.CANCELLA()
=MACRO.ESEGUI(N162)
' ENTRA A FINE CICLO STAMPE E INIZIA ARCHIVIAZIONE
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R11C28")
=FORMULA.DEFINISCI.NOME("PaDIP")
=SE(PaDIP ="")
' NON CI SONO SCHEDE DA ARCHIVIARE
=MACRO.ESEGUI(N344)
=FINE.SE()
=FORMULA.SELEZ.FORMATO.SPEC(5)
=SCH.ORDINA(1;"R11C32";1;;;;;0;1;FALSO)
=SELEZIONA("R11C32")
=SELEZIONA.FINE(4)
=SELEZIONA("RC[2]")
=FORMULA.DEFINISCI.NOME("PaDIP")
' COPIA IL FORMATO DATA NELLE SCHEDE DA ARCHIVIARE
=SELEZIONA("RC[-5]")
=FORMULA.DEFINISCI.NOME("PaP0T")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
' SERVE PER APRIRE LA SCHEDA MENSILE DELL'ARCHIVIO
=SELEZIONA("R3C7")
=MODIFICA.COPIA()
=SELEZIONA("PaP0G2")
=MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R3C29")
=MODIFICA.COPIA()
=SELEZIONA("R11C29:PaP0T")
=MODIFICA.INCOLLA.SPECIALE(4;1;FALSO;FALSO)
=COPIA.ANNULLA()
=DIRECTORY("D:\AB\SCHEDE")
=ERRORE(FALSO)
=SE(FILE.APRI(PaP0G2)=FALSO)
=FILE.APRI("2000.xlsm";1)
=FILE.SALVA.CON.NOME(PaP0G2)
=FINE.SE()
=ATTIVA.FINESTRA("PA.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
' COPIARE FORMULA TOT ORE ARCHIVIO SCHEDE
=SELEZIONA("R11C27")
=SELEZIONA("RC[7]")
=FORMULA.DEFINISCI.NOME("PaDIP1")
=SELEZIONA("R3C34")
=MODIFICA.COPIA()
=SELEZIONA("PaDIP1:PaDIP")
=MODIFICA.INCOLLA.SPECIALE(2;1;FALSO;FALSO)
=MODIFICA.COPIA()
=MODIFICA.INCOLLA.SPECIALE(3;1;FALSO;FALSO)
' COPIA FORMATI ARCHIVIO SCHEDE
=SELEZIONA("R3C27:R3C32")
=MODIFICA.COPIA()
=SELEZIONA("R11C27:PaDIP")
=MODIFICA.INCOLLA.SPECIALE(4;1;FALSO;FALSO)
' COPIA SCHEDE ARCHIVIO SCHEDE
=SELEZIONA("R11C27:PaDIP")
=MODIFICA.COPIA()
=ATTIVA.FINESTRA.SUCCESS()
=SELEZIONA("R1C1")
=INSERISCI(2)
=COPIA.ANNULLA()
=FORMATO.BORDO(0;0;0;0;0;;;1;1;1;1)
' ORDINO PER DATA E DIPENDENTE
=SELEZIONA("R1C1")
=FORMULA.SELEZ.FORMATO.SPEC(5)
=SCH.ORDINA(1;"R1C3";2;"R1C2";1;;1;0;1;FALSO)
=SELEZIONA("R1C1")
=DIRECTORY("D:\AB\SCHEDE")
' SALVA I PROGRAMMI NELLA DIRECTORY \SCHEDE\
=FILE.SALVA()
=FILE.CHIUDI()
=DIRECTORY("C:\AB")
' PULISCO P1
' INIZIO ZONA AUMENTO NR SCHEDE DIP
=ATTIVA.FINESTRA("PA.xlsm")
=CARTELLA.DI.LAVORO.SELEZIONA("P1")
' DA 1 A 4 DIP
=SELEZIONA("R11C6;R11C10;R13C6:R26C9;R11C16;R11C20;R13C16:R26C19;R31C6;R31C10;R33C6:R46C9;R31C16;R31C20;R33C16:R46C19")
=MODIFICA.CANCELLA()
' DA 5 A 8 DIP
=SELEZIONA("R51C6;R51C10;R53C6:R66C9;R51C16;R51C20;R53C16:R66C19;R71C6;R71C10;R73C6:R86C9;R71C16;R71C20;R73C16:R86C19")
=MODIFICA.CANCELLA()
' DA 9 A 12 DIP
=SELEZIONA("R91C6;R91C10;R93C6:R106C9;R91C16;R91C20;R93C16:R106C19;R111C6;R111C10;R113C6:R126C9;R111C16;R111C20;R113C16:R126C19")
=MODIFICA.CANCELLA()
' INIZIO BLOCCO DI UNA SCHEDA
' DA 13 A 16 DIP
=SELEZIONA("R131C6;R131C10;R133C6:R146C9;R131C16;R131C20;R133C16:R146C19;R151C6;R151C10;R153C6:R166C9;R151C16;R151C20;R153C16:R166C19")
=MODIFICA.CANCELLA()
=SELEZIONA("R13C6")
' FINE BLOCCO DI UNA SCHEDA
' FINE ZONA AUMENTO NR SCHEDE DIP
=CARTELLA.DI.LAVORO.SELEZIONA("P0")
=SELEZIONA("R9C18:R370C34")
=MODIFICA.CANCELLA()
=SELEZIONA("R1C1")
=CARTELLA.DI.LAVORO.SELEZIONA("AA")
=SCHERMO()
=AVVISO(" FINE STAMPA PROGRAMMI ";3)
=FERMA()
=CARTELLA.DI.LAVORO.SELEZIONA("AA")
=SCHERMO()
=AVVISO(" NON CI SONO PROGRAMMI DA STAMPARE ";3)
=FERMA()
Questo sotto è il riepilogo dell'archivio e ogni mese raggiunge circa 2'000 righe

Come vedi ho tantissimo lavoro da fare, sicuramente per qualche passaggio complesso avro ancora bisogno di aiuto.
Grazie
Roberto