Excel Forum Per condividere esperienze su Microsoft Excel

VBA - Creare Fogli in Cartella di Lavoro con numerazione progressiva

  • Messaggi
  • OFFLINE
    raven286k1
    Post: 1
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 11/12/2018 11:43
    Buongiorno a tutti!
    Ho da poco scoperto questo bellissimo Forum e spero possiate essermi d'aiuto per quello che devo fare:

    Avrei necessità di inserire una macro che attivandola mi crei in automatico ad ogni esecuzione (pensavo di inserire un pulsante) un nuovo foglio (all'interno della mia cartella di lavoro) numerato progressivamente (che tiene conto dell'ultimo numero raggiunto)
    Il foglio nuovo creato non dovrebbe essere un semplice foglio vuoto ma bensì essere una copia del foglio che prendo a modello, che ha nome "Schedanuova".

    Ho trovato nel forum varie istruzioni che mi permettono di creare appunto nuovi fogli numerati progressivamente:


    Dim Nsh As Long
    Nsh = Worksheets.Count
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Nsh + 1).Name = Nsh + 1
    End Sub

    Sub SelezionaUltima()
    Sheets(Worksheets.Count).Select
    End Sub

    Perfetto... ad ogni esecuzione mi crea un nuovo foglio con numero progressivo.. 1,2,3.
    Il nuovo foglio però è il classico vuoto...
    Quello che mi servirebbe sarebbe integrare il codice perchè mi crei fogli nuovi numerati progressivamente ma sulla base di un foglio-modello già esistente in cartella con nome "SChedanuova".

    Grazie a tutti per l'eventuale aiuto!!
  • OFFLINE
    dodo47
    Post: 2.072
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 11/12/2018 13:43
    ciao
    perchè non usi il registratore di macro e poi adatti il codice alle tue necessità ?

    saluti



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    raven286k1
    Post: 1
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 11/12/2018 15:29
    dodo47, 11/12/2018 13.43:

    ciao
    perchè non usi il registratore di macro e poi adatti il codice alle tue necessità ?

    saluti




    Vorrei ma sono poco pratico purtroppo con tutto quello che riguarda la scheda Sviluppo e le Macro..
  • OFFLINE
    alfrimpa
    Post: 4.025
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 11/12/2018 15:39
    Re:
    raven286k1, 11/12/2018 15.29:

    Vorrei ma sono poco pratico purtroppo con tutto quello che riguarda la scheda Sviluppo e le Macro..



    E' molto semplice.

    Vai sulla scheda Sviluppo
    In alto a sinistra trovi Registra macro
    Fai le operazioni manualmente
    Al termine clicca su Interrompi registrazione e nell'editor di VBA (per visualizzarlo premi Alt+F11) ti ritroverai il codice.

    Alfredo
  • OFFLINE
    raven286k1
    Post: 2
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 11/12/2018 16:40
    Re: Re:
    alfrimpa, 11/12/2018 15.39:



    E' molto semplice.

    Vai sulla scheda Sviluppo
    In alto a sinistra trovi Registra macro
    Fai le operazioni manualmente
    Al termine clicca su Interrompi registrazione e nell'editor di VBA (per visualizzarlo premi Alt+F11) ti ritroverai il codice.

    Grazie a tutti per le risposte. Avevo già provato prima di rivolgermi a voi ed effettivamente lui mi registra le varie azioni per la creazione di un nuovo foglio di lavoro ma non riesco a fargli fare una cosa automatica in modo che mi crei un nuovo foglio già con il numero progressivo corretto partendo dall’ultimo creato e utilizzando il foglio “Scheda” come modello per i nuovi..
  • OFFLINE
    alfrimpa
    Post: 4.026
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 11/12/2018 18:34
    Visto che sinora non lo hai fatto sarebbe il caso che allegassi un file di esempio e su questo spiegassi quello che vuoi fare.

    Alfredo
  • OFFLINE
    raven286k1
    Post: 3
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 11/12/2018 21:27
    Re:
    alfrimpa, 11/12/2018 18.34:

    Visto che sinora non lo hai fatto sarebbe il caso che allegassi un file di esempio e su questo spiegassi quello che vuoi fare.



    Certamente...
    Eccolo....

    Premendo il Pulsante nel Foglio RIEPILOGO vorrei che si creasse un nuovo foglio che riprenda la numerazione dall'ultimo creato (nel caso dell'esempio dal 2).
    Il nuovo foglio dovrebbe essere una copia del foglio SCHEDANUOVA.

    Il Top (ma non chiedo tanto ci ragionerò poi in un secondo momento) sarebbe che una volta creato il foglio es. 3 nella scheda RIEPILOGO si andassero a completare i riferimenti di Cella corrispondenti...
  • OFFLINE
    alfrimpa
    Post: 4.027
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 12/12/2018 12:35
    Ciao Raven

    Ti riallego il tuo file dove ho inserito la macro che vedi qui e che è associata al pulsante "Crea Nuova Scheda" sul foglio "Riepilogo"

    vb
    Sub DuplicaFogli()
        Dim i As Integer
        Dim ur As Long
        Application.ScreenUpdating = False
        Sheets("Schedanuova").Range("ba:ba").ClearContents
        For i = 3 To Sheets.Count
            ur = Sheets("Schedanuova").Cells(Rows.Count, "BA").End(xlUp).Row
            Sheets("Schedanuova").Cells(ur + 1, "BA").Value = CInt(Sheets(i).Name)
        Next i
        Sheets("Schedanuova").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = WorksheetFunction.Max(Sheets("Schedanuova").Range("BA:BA")) + 1
        ActiveSheet.Range("BA:BA").ClearContents
        Application.ScreenUpdating = True
        ActiveSheet.Range("A1").Select
    End Sub
    


    Sul foglio "Schedanuova" c'è una colonna nascosta (la BA) che occorre per la determinazione del numero del nuovo foglio.

    Per quanto riguarda l'ultima domanda la questione è, almeno per me un po' più complessa.

    Se tu sul foglio "Riepilogo" hai delle formule che puntano ai fogli come fai ad inserirne altre quando i fogli non esistono ancora?

    Secondo me va trovato un diverso approccio.

    Ovviamente se la cartella dovesse contenere pi di 46 fogli le formule dovranno essere ricopiate dalla riga 50 in poi; in questo caso, però, più formule metti più il file si rallenta.

    Fai sapere.
    [Modificato da alfrimpa 12/12/2018 15:41]

    Alfredo
  • OFFLINE
    alfrimpa
    Post: 4.028
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 12/12/2018 15:34
    Ciao Raven

    Forse ho risolto anche il problema dell'aggiornamento del foglio Riepilogo.

    Ti riallego il tuo file dove sul foglio Riepilogo

    da B4 a B50 ho inserito questa formula

    vb
    =SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$a$1");"")


    da C4 a C50

    vb
    =SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$B$1");"")


    da D4 a D50

    vb
    =SE.ERRORE(SE(INDIRETTO("'"&RIF.RIGA(A2)&"'!$v$25")="x";0;INDIRETTO("'"&RIF.RIGA(A2)&"'!$v$22"));"")


    da E4 a E50

    vb
    =SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$v$26");"")


    da G4 a G50

    vb
    =SE.ERRORE(INDIRETTO("'"&RIF.RIGA(C1)&"'!$b$3");"")


    Ora dopo aver aggiunto i nuovi fogli andando a compilarli il foglio Riepilogo dovrebbe aggiornarsi automaticamente.


    Alfredo
  • OFFLINE
    raven286k1
    Post: 4
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 12/12/2018 15:55
    Re:
    alfrimpa, 12/12/2018 12.35:

    Ciao Raven

    Ti riallego il tuo file dove ho inserito la macro che vedi qui e che è associata al pulsante "Crea Nuova Scheda" sul foglio "Riepilogo"

    vb
    Sub DuplicaFogli()
        Dim i As Integer
        Dim ur As Long
        Application.ScreenUpdating = False
        Sheets("Schedanuova").Range("ba:ba").ClearContents
        For i = 3 To Sheets.Count
            ur = Sheets("Schedanuova").Cells(Rows.Count, "BA").End(xlUp).Row
            Sheets("Schedanuova").Cells(ur + 1, "BA").Value = CInt(Sheets(i).Name)
        Next i
        Sheets("Schedanuova").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = WorksheetFunction.Max(Sheets("Schedanuova").Range("BA:BA")) + 1
        ActiveSheet.Range("BA:BA").ClearContents
        Application.ScreenUpdating = True
        ActiveSheet.Range("A1").Select
    End Sub
    


    Sul foglio "Schedanuova" c'è una colonna nascosta (la BA) che occorre per la determinazione del numero del nuovo foglio.

    Per quanto riguarda l'ultima domanda la questione è, almeno per me un po' più complessa.

    Se tu sul foglio "Riepilogo" hai delle formule che puntano ai fogli come fai ad inserirne altre quando i fogli non esistono ancora?

    Secondo me va trovato un diverso approccio.

    Ovviamente se la cartella dovesse contenere pi di 46 fogli le formule dovranno essere ricopiate dalla riga 50 in poi; in questo caso, però, più formule metti più il file si rallenta.

    Fai sapere.



    Alfredo!!!
    Non immagini che favore mi hai fatto!
    E' semplicemente P E R F E T T O !!! [SM=x423028]
    Esattamente quello che cercavo!
    Davvero grazie tanto per il tuo aiuto.
    Spero a buon rendere ma dubito visto il tuo livello di competenze!!
    Grazie ancora!!!
  • OFFLINE
    alfrimpa
    Post: 4.029
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 12/12/2018 16:00
    Grazie a te del riscontro.

    Dimenticavo di dire due cose:

    1) i fogli "Riepilogo" e Schedanuova" devono essere i primi due della cartella; non vanno mai spostati.

    2) Forse è meglio che tu protegga il foglio "Riepilogo" per prevenire una cancellazione accidentale delle formule.

    Devo anche rendere omaggio all'amico Canapone (anch'egli frequentatore di questo forum) per il risolutivo aiuto sulle formule con le quali io zoppico parecchio.
    [Modificato da alfrimpa 12/12/2018 16:04]

    Alfredo
  • OFFLINE
    raven286k1
    Post: 5
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 12/12/2018 16:13
    Re:
    alfrimpa, 12/12/2018 16.00:

    Grazie a te del riscontro.

    Dimenticavo di dire due cose:

    1) i fogli "Riepilogo" e Schedanuova" devono essere i primi due della cartella; non vanno mai spostati.

    2) Forse è meglio che tu protegga il foglio "Riepilogo" per prevenire una cancellazione accidentale delle formule.

    Devo anche rendere omaggio all'amico Canapone (anch'egli frequentatore di questo forum) per il risolutivo aiuto sulle formule con le quali io zoppico parecchio.




    Perfetto! Chiarissimo!
    Ringrazio quindi anche Canapone per il prezioso aiuto!

    Provando il file (che ripeto è perfetto), qualora un domani volessi aggiungere al foglio RIEPILOGO la colonna H con i riferimenti alle celle V25 di ogni nuovo foglio (cella che dovrebbe contenere il valore di Vendita del pezzo) che formula dovrei inserire?

    =SE.ERRORE(INDIRETTO("'"&RIF.RIGA(A1)&"'!$v$25");"")

    Grazie ancora per la preziosa disponibilità....
  • OFFLINE
    alfrimpa
    Post: 4.030
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 12/12/2018 16:19
    Credo di si ma ripeto io con le formule faccio a cazzotti.

    Alfredo
  • OFFLINE
    raven286k1
    Post: 6
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 12/12/2018 16:21
    Re:
    alfrimpa, 12/12/2018 16.19:

    Credo di si ma ripeto io con le formule faccio a cazzotti.




    Provato e confermo che funziona con quella formula!!! Che Spettacolo!!!! [SM=x423038]

  • OFFLINE
    alfrimpa
    Post: 4.031
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 12/12/2018 16:32
    Re: Re:
    raven286k1, 12/12/2018 16.21:




    Provato e confermo che funziona con quella formula!!! Che Spettacolo!!!! [SM=x423038]




    Per me gli spettacoli sono altri [SM=g27828] [SM=g27828]


    Alfredo
  • OFFLINE
    raven286k1
    Post: 7
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 12/12/2018 16:33
    Re: Re: Re:
    alfrimpa, 12/12/2018 16.32:



    Per me gli spettacoli sono altri [SM=g27828] [SM=g27828]




    [SM=x423030]

  • OFFLINE
    raven286k1
    Post: 8
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 13/12/2018 10:42
    Dopo vari test sul file posso dire che è perfetto!

    Ho fatto qualche piccola modifica e per completarlo e renderlo funzionale al 100%, vorrei poter fare in modo che nella colonna A del foglio riepilogo ad ogni riga ci fosse il collegamento ipertestuale al relativo foglio.
    Ho inserito manualmente questa formula nelle prime celle:

    =COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]1!$A$1";B4)
    =COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]2!$A$1";B5)
    =COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]3!$A$1";B6)
    e così via... e funziona! Ma devo copiarla su 1000 righe e se copio la formula nelle celle sottostanti EXCEL non mi aggiorna il riferimento al foglio, che rimane sempre [TRATTORIOK.xlsm]1!...
    mentre vorrei che a seconda della riga puntasse a [TRATTORIOK.xlsm]2!, [TRATTORIOK.xlsm]3!, [TRATTORIOK.xlsm]4! etc.. in automatico.

    Esiste un modo?

    Se non fosse possibile lo farò manualmente perchè già così sono pienamente soddisfatto!!

    Grazie a tutti!
  • OFFLINE
    dodo47
    Post: 2.075
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 13/12/2018 11:46
    Ciao
    puoi provare in A4:

    =COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]" & RIF.RIGA()-1 &"!$A$1";B4)

    trascinando in basso finchè serve.

    Nel momento che inserisci in col. B il numero del foglio, in A vedrai il numero con il collegamento.

    saluti



    [Modificato da dodo47 13/12/2018 11:46]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    raven286k1
    Post: 9
    Registrato il: 11/12/2018
    Città: RAVENNA
    Età: 51
    Utente Junior
    Excel 2016
    00 13/12/2018 16:57
    Re:
    dodo47, 13/12/2018 11.46:

    Ciao
    puoi provare in A4:

    =COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]" & RIF.RIGA()-1 &"!$A$1";B4)

    trascinando in basso finchè serve.

    Nel momento che inserisci in col. B il numero del foglio, in A vedrai il numero con il collegamento.

    saluti







    Grazie dodo47 per la stringa!
    L' ho dovuta leggermente modificare perché inserita nella cella A4 mi crea sì un collegamento ipertestuale ma al foglio 3 e non al foglio 1...
    Se copio la formula nelle celle sottostanti stesso problema... puntano a +2 fogli oltre quello indicato nella colonna B

    Ho modificato così:

    =COLLEG.IPERTESTUALE("[TRATTORIOK.xlsm]" & RIF.RIGA()-3 &"!$A$1";B4)

    In questo modo funziona! Collegamenti ai fogli corretti!!

    Grazie ancora!!!