Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Codice VBA eseguito molto lentamente

  • Messaggi
  • OFFLINE
    eltorpe
    Post: 36
    Registrato il: 09/09/2017
    Città: SASSARI
    Età: 64
    Utente Junior
    2007
    00 21/08/2019 18:18
    Buonasera.
    Volevo automatizzare gli aggiornamenti di una database di oltre 15.000 riche e 96 colonne.
    Dopo aver importato i dati dal file di aggiornamento, mi occorre aggiornare le FORMULE delle prime 4 colonne.
    Sono rimasto sorpeso dalla esasperante lentezza (ci metterebbe oltre un'ora) per eseguire questo codice:

    Range("A2").Copy
    For x = 3 to UltimaRiga (appositamente calcolata precedentemente)
    Cells(x, 1).PasteSpecial xlPasteFormulas
    Next x

    La banale formula che deve ricopiare in Ax è:
    =DATA.VALORE(Lx) - dove la data in Lx è espressa come data/ora (21/08/2019 18.05.

    Se eseguo manualmente l'operazione da interfaccia utente (doppio clic su angolo basso a destra di A2) ci mette pochi secondi a ricopiare in basso la formula fino alla cella 15.000

    Nella colonna B ho invece la formula semplice: In cella By =My
    Qui il codice sottostante scorre agevolmente

    Range("B2").Copy
    For y = 3 to UltimaRiga (appositamente calcolata precedentemente)
    Cells(y, 2).PasteSpecial xlPasteFormulas
    Next y

    Suggerimenti?
  • OFFLINE
    dodo47
    Post: 2.344
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 21/08/2019 18:43
    prova a mettere il calcolo manuale per poi ripristinarlo alla fine:

    Application.Calculation = xlCalculationManual
    For x = 3 to UltimaRiga (appositamente calcolata precedentemente)
    Cells(x, 1).PasteSpecial xlPasteFormulas
    Next x
    Application.Calculation = xlCalculationAutomatic

    saluti



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    eltorpe
    Post: 36
    Registrato il: 09/09/2017
    Città: SASSARI
    Età: 64
    Utente Junior
    2007
    00 21/08/2019 20:30
    Funziona.
    Grazie mille
  • OFFLINE
    ges64
    Post: 34
    Registrato il: 13/08/2015
    Città: COMO
    Età: 60
    Utente Junior
    excel 2016
    00 23/08/2019 23:26
    Re:
    eltorpe, 21/08/2019 18.18:

    ... mi occorre aggiornare le FORMULE delle prime 4 colonne.
    ....
    Suggerimenti?



    Ciao, le formule mi pare di aver capito che sono in A2:D2, allora prova così:
    Sub CopiaFormule()
        Range("A2:D2").Copy
        Range("A3:A15000").PasteSpecial Paste:=xlPasteFormulas
        Application.CutCopyMode = False
    End Sub
    

  • OFFLINE
    by sal
    Post: 5.742
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 24/08/2019 07:12
    Lentezza esecuzione macro
    Ciao a tutti, per la verità io sono contrario alle formule sul foglio, proprio per il rallentamento che avviene quando il foglio è imbottito di formule.

    tranne se non devo vedere immediatamente il risultato del cambiamento di una cella relativa a molti calcoli, ed anche li ho le mie perplessità.

    Sono più propenso a inserire direttamente nella cella il calcolo fatto dal VBA.

    anche perche a volte per avere un risultato con le formule si creano diverse colonne di appoggio aumentando a dismisura le formule presenti nel foglio.

    Logico che lo dico da parte di chi usa il VBA, chi non lo usa deve necessariamente e forzatamente usare le formule.


    Ciao By Sal [SM=x423051]





    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    eltorpe
    Post: 37
    Registrato il: 09/09/2017
    Città: SASSARI
    Età: 64
    Utente Junior
    2007
    00 24/08/2019 09:21
    Buongiorno.
    Ringrazio tutti per i suggerimenti.
    Ho premesso che lavoro per automatizzare gli aggiornamenti.
    Il foglio non è pieno di formule.
    La banale =DATA.VALORE che esite da quando utilizzo "manualmente" il foglio, rallentava a dismisura in fase di formattazione della data.
    Con application.calculatione = xlManual restituisce il numero intero che sta alla base della data e funziona fluidamente.
    Pure io sto dalla parte del codice, ma molti non vedono affatto male l'utilizzo misto di formule e codice.
    Saluti.
  • OFFLINE
    by sal
    Post: 5.744
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 26/08/2019 07:51
    Lentezza macro
    Ciao ma anche io non sono contrario alle formule, anche se non so usarle molto bene.

    Ma sono contrario al fatto che sapendo di usare 15000 righe io spalmo di formule a priori il foglio di 15000 righe mentre al momento ne uso solo 1000.

    mentre con una macro quando aggiungo una riga nuova faccio inserire le formule che servono sia con copia incolla che farle scrivere dalla macro.

    Ciao By Sal [SM=x423051]

    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui