Macro eseguite con eccessiva lentezza dopo gli ultimi aggiornamenti

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Melissa2018
00lunedì 2 ottobre 2023 19:37
Salve a tutto il forum, non so se sia una coincidenza ma dopo gli ultimi aggiornamenti Excel le esecuzioni di alcune macro sono lentissime. Avete notato anche voi qualcosa di analogo?
All'inizio pensavo che il foglio di lavoro si fosse appesantito, ho quindi creato un file nuovo con pochissimi dati ma il problema persiste.
Ho provato anche a disinstallare ed installare Microsoft 365 ma niente di buono 😒

Microsoft 365 MSO (Versione 2309 Build 16.0.16827.20130) a 64 bit
Marius44
10lunedì 2 ottobre 2023 21:58
Ciao
Cosa intendi per "aggiornamenti Excel"?
Ti capita con tutti i file ovvero solo con qualcuno?
Potresti allegare un file che ti dà problemi o, almeno, il codice relativo?

Ciao,
Mario
Melissa2018
00lunedì 2 ottobre 2023 22:40
Ciao Marius44, innanzitutto, grazie per il tuo interesse.
Allego un file con una semplice macro che, data una colonna A, seguendo un criterio, riporta solo alcune sue righe nella colonna B (quella dei risultati).
Ciò che mi succede, e che non riesco a spiegarmi, è che le prime righe selezionate me le copia ed incolla nella colonna B lentamente ma, ad un certo punto, a partire da una certa data, l'esecuzione si velocizza così come dovrebbe essere e come è sempre stato.
Insomma, una velocità di esecuzione decisamente non uniforme non giustificata assolutamente dai dati nella colonna A.
Ciò che è cambiato su questo file e sul mio pc è l'installazione degli aggiornamenti Excel.
Marius44
10martedì 3 ottobre 2023 07:25
Ciao
Prova mettendo Application.ScreenUpdating = False dopo la pulizia delle colonne E:G e poi
Application.ScreenUpdating = True prima dell'ultima riga della macro.

Fai sapere. Ciao,
Mario
by sal
10martedì 3 ottobre 2023 08:10
Ciao Melissa, è molto valido il suggerimento di Mario che saluto e toglierei anche

Application.CutCopyMode = False

negli "If" mettendolo fuori dal ciclo Next cosi si elimina solo alla fine del ciclo.

ma una cosa non mi è chiaro, quali sono i parametri di selezione per la copia, perche ho fatto un semplice filtro sulla prima tabella in base alla data e non tutti i dati vengono riportati, come puoi vedere



forse ho capito volevi 1 solo elemento per data con l'importo minore.

Ciao By Sal (8-D


Melissa2018
00martedì 3 ottobre 2023 19:35
Buonasera a tutti, ho seguito i vostri consigli modificando opportunamente il codice come mi avete suggerito ma l'esecuzione continua ad essere molto lenta, non come prima. Davvero non capisco cosa sia improvvisamente successo.

By Sal, mi sono accorta soltanto adesso che nel preparare il file esempio non ho adattato bene il codice, ora ho corretto.
Nella colonna A ogni riga rappresenta un evento verificatosi ad una certa data, ad un definito orario e con un determinato importo.
Partendo dalla prima riga in colonna A, si copieranno ed incolleranno nella colonna B, procedendo cronologicamente, tutti gli eventi per cui la distanza temporale dal precedente disti almeno 2 ore.

Ora, nell'esempio allegato, possibile che un codice così semplice, per analizzare 21 eventi, copiarne ed incollarne 18, mi ci metta adesso 31 secondi?
Io analizzo un numero di eventi pari a 3-4000, prima il mio codice impiegava qualche minuto al massimo, adesso la perdita di tempo è insostenibile.😔
P.S. Grazie Marius44 e By Sal per avermi dedicato il vostro tempo
L2018
10martedì 3 ottobre 2023 19:55
ciao, cortesemente proveresti a controllare se il file che allego è più veloce ?

Leo
Marius44
10mercoledì 4 ottobre 2023 09:26
Ciao

@L2018
Mi sembra abbastanza veloce.

@Melissa2018
Prova a modificare la tua macro così
Sub INCOLONNAMENTO()
Sheets("INCOLONNAMENTO CON MACRO").Select
Dim I As Long'Integer
Range("E3:G10000").ClearContents
Application.ScreenUpdating = False
Range(Cells(3, 1), Cells(3, 3)).Copy
Range("E3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Application.CutCopyMode = False
For I = 4 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(I, 1) > Cells(Range("E" & Rows.Count).End(xlUp).Row, 5) Then
   Range(Cells(I, 1), Cells(I, 3)).Copy
   Cells(Range("E" & Rows.Count).End(xlUp).Row + 1, 5).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
   :=False, Transpose:=False
   'Application.CutCopyMode = False
End If
If Cells(I, 2) - Cells(Range("E" & Rows.Count).End(xlUp).Row, 6) >= Cells(1, 7) Then
   Range(Cells(I, 1), Cells(I, 4)).Copy
   Cells(Range("E" & Rows.Count).End(xlUp).Row + 1, 5).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
   :=False, Transpose:=False
   'Application.CutCopyMode = False
End If
Next I
Application.CutCopyMode = False
Application.ScreenUpdating = True
Cells(1, 5).Select
End Sub


Fai sapere. Ciao,
Mario
by sal
10mercoledì 4 ottobre 2023 10:00
Ciao a me il file è velocissimo, e non credo sia la macro,
però io credo che sia il suo PC che ha problemi forse disco pieno, oppure Excel si sia corrotto e deve essere reinstallato, oppure in ultimo, lavora in Cloud e la velocità di internet non sia ottimale oppure ancora il cloud è pieno e trova difficoltà a lavorare.

Ciao By Sal (8-D
L2018
10mercoledì 4 ottobre 2023 10:04
buongiorno
per Marius e Melissa
non ho potuto seguire bene la problematica
ho scaricato l'ultimo file e restituito, ma da 89000 bytes è diventato 16000
perchè ?
ho semplicemente eliminato le righe dopo la 21, che di solito si chiamano formattazione ridondante
se sia giusto non so, certo a volte si vedono grossi file con poche righe utili e migliaia di righe predisposte ma non utilizzate

Leo
Melissa2018
00mercoledì 4 ottobre 2023 10:51
Buongiorno e grazie per i vostri interventi!
Mario, ho utilizzato il codice da te suggerito ma purtroppo i tempi d'esecuzione continuano ad essere identici, ben 31 secondi.
Leo, purtroppo anche eseguendo il codice sul file da te allegato il problema persiste.
Salvatore, il mio laptop ha 61 GB liberi su 466 GB, fino ad un paio di giorni fa andava tutto benissimo. Sul mio portatile non è cambiato praticamente nulla se non aver scaricato ed installato gli aggiornamenti Excel e aver scaricato qualche file da internet (di piccole dimensioni e che non credo abbiano malware o virus).
Ho disinstallato Microsoft365 e reinstallato ma non ho risolto.
Ho un abbonamento Microsoft365 family con cui ho riscaricato ed installato l'applicazione ufficiale
(Versione 2309 Build 16.0.16827.20130) a 64 bit
L2018
10mercoledì 4 ottobre 2023 10:57
Re:
Melissa2018, 04/10/2023 10:51:


Leo, purtroppo anche eseguendo il codice sul file da te allegato il problema persiste.



per essere preciso, sempre meglio, ho eliminato tutte righe dopo la 21
ho messo un contatempo nella prima riga e cliccato su ESEGUI
Tempo=0


Leo
dodo47
10mercoledì 4 ottobre 2023 11:31
ciao a tutti

Melissa
siamo sicuri che il tuo file è quello che hai allegato?
Non è che ci sono formule ed altri fogli, magari con eventi e quant'altro??

saluti



Melissa2018
00mercoledì 4 ottobre 2023 17:36
Buon pomeriggio caro Domenico, che bello rileggerti! 🤗
Il file allegato all'inizio della discussione era stato da me riproposto spoglio di tutti i dati sensibili, fogli, formule etc. affinché fosse più leggero dell'originale, ho dunque aggiunto solo quelle righe di dati per poter avviare l'esecuzione del codice.
Nel mio codice, prima del ciclo i c'è l'istruzione che copia la prima riga di dati della colonna A e la incolla nella prima riga vuota della colonna B (in E3), dopo inizierà la comparazione, mi sembra tutto corretto, sbaglio qualcosa? 🤔

Leo ho acquisito il video dallo schermo del mio portatile, messo in allegato, per mostrarvi la lentezza dell'esecuzione

dodo47
10mercoledì 4 ottobre 2023 18:31
ciao Melissa

quindi a quanto pare il tuo file contiene diversi fogli - formule e (forse) anche eventi del foglio interessato.

Fai questa prova sfruttando gli array e vedi che succede.

Fai sapere....un caro saluto

Sub INCOLONNAMENTO()
Dim mArrF() As Variant, mArrTo() As Variant, lr As Long, k As Long, indx As Long, c As Byte
Dim I As Long, s As Boolean
On Error GoTo merr
Sheets("INCOLONNAMENTO CON MACRO").Select

With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With

lr = Range("A" & Rows.Count).End(xlUp).Row
mArrF = Range("A3:C23")
k = 2
ReDim mArrTo(1 To lr, 1 To 3)
For c = 1 To 3
    mArrTo(1, c) = mArrF(1, c)
Next c

Range("E3:G10000").ClearContents
indx = 2
For I = 4 To lr
    If mArrF(indx, 1) > mArrTo(k - 1, 1) Then
        For c = 1 To 3
            mArrTo(k, c) = mArrF(indx, c)
            mArrTo(k, c) = mArrF(indx, c)
        Next c
        s = True
    End If
    
    If mArrF(indx, 2) - mArrF(k - 1, 2) >= Cells(1, 7) Then
        For c = 1 To 3
            mArrTo(k, c) = mArrF(indx, c)
            mArrTo(k, c) = mArrF(indx, c)
        Next c
        s = True
    End If
    indx = indx + 1
    If s Then
        k = k + 1
        s = False
    End If
Next I

Range("E3").Resize(lr, 3) = mArrTo

xit:
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.EnableEvents = True
End With
Exit Sub
merr:
MsgBox Err.Number & " _ " & Err.Description
Resume xit
End Sub
dodo47
10giovedì 5 ottobre 2023 10:02
ciao
solo un refuso di prove:

sostituisci:
mArrF = Range("A3:C23")

con
mArrF = Range("A3:C" & lr)

saluti




Melissa2018
00giovedì 5 ottobre 2023 22:00
Caro Domenico, sul mio laptop il tuo codice viene eseguito praticamente all'istante! 😮
Quali parole potrei mai usare, che già non ti abbia scritto in passato, per ringraziarti ancora ed ancora per il tuo aiuto?🎁🙏
Spero di riuscire a capire il motivo per cui con gli array il problema non si presenta.
Un indizio che pensi dovrei seguire per comprendere il fenomeno?
Ero sfiduciata, confesso che ero pronta addirittura a formattare il laptop pensando ad un qualche malware.
P.S. Ringrazio anche Mario, Salvatore e Leo per le attenzioni che hanno avuto per me ed il mio problema
dodo47
10venerdì 6 ottobre 2023 09:56
ciao Melissa...ti pare, è sempre un piacere.

Gli array lavorano in memoria, mentre i codici normalmente lavorano sulle celle dei fogli e, se ci sono formule ed eventi, ad ogni scrittura determinano il ricalcolo dell'intero file, a meno che non vengano disattivate alcune funzionalità.

Per farla breve il mio codice scrive 1 sola volta sul file (Range("E3").Resize(lr, 3) = mArrTo), mentre il tuo scrive tante volte quante sono le righe che troverai nel gruppo COLONNA B

Se ti va fai questa prova:
- nel codice di Mario (salutoni) oppure al tuo metti all'inizio:
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With

ed alla fine
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.EnableEvents = True
End With

vedi che succede

carissimi slauti



Melissa2018
00venerdì 6 ottobre 2023 22:40
Caro Domenico, mi sono presa tempo prima di risponderti per fare varie prove, questo tuo ultimo suggerimento purtroppo non migliora il tempo d'esecuzione del codice, che rimane sui 30 secondi come per il mio codice iniziale.
Solo il tuo prezioso codice con gli array, che ho adattato per lavorare sui miei dati reali, mi ha salvata. 🙏
Ma credo sia successo qualcosa di strano sul mio laptop anche perché, durante gli ultimi test che ho fatto, mentre riportavo
i dati sensibili che mi servono mi è uscito questo messaggio che, cercando sul web non sembra niente di buono.
Per adesso mi limiterò a superare questi problemi con il tuo codice, quando avrò più tempo formatterò tutto.
Grazie ancora 🎁






L2018
10venerdì 6 ottobre 2023 23:43
Re:
Melissa2018, 06/10/2023 22:40:


...... mi è uscito questo messaggio che, cercando sul web non sembra niente di buono.


Ciao
il messaggio di errore che riporti non necessariamente riconduce a malware, anzi, se devo rifarmi alla mia esperienza direi che si tratta di cose più semplici.
(Ma l'hai fatta una scansione antivirus ? Hai per caso attivi i punti di ripristino ? in Office esiste un'opzione Ripara/Ripristina)
La risposta certa sul problema te la potrebbe dare il TaskManager di Windows attivato nel preciso istante della comparsa dell'avviso di errore, e dopo aver evidenziato il Tab Processi, e messo i processi in ordine alfabetico di nome.eseguibile cliccando su "nome immagine".
la finestra così ottenuta, se non sai interpretarla potresti fotografarla e postarla qui per intero, nella speranza che io riesca a interpretarla destreggiandomi tra chissà quanti nomi (ecco perchè l'ordine alfabetico).
E quindi non escludo di riuscire ad indicarti il colpevole.
Oltretutto potrebbe essere l'occasione per snellire il tuo sistema, ma a mio avviso giammai formattare per un simile motivo.

Leo

Taskmanager = taskmgr.exe
o
CTRL-ALT-CANC
by sal
10sabato 7 ottobre 2023 08:06
Ciao Melissa, è una prova visto che hai dati sensibili, fai una cosa, vai nel tuo foglio Originale, poi nel menu File->Opzioni- e metti una spunta alla riga evidenziata, nelle celle verranno mostrate le formule applicate, vorrei vedere quali sono le formule, questo il percorso



fai un immagine di poche righe, nel caso che il dato sensibile sia ancora visibile nell'immagine cerca di cancellarlo, interessa vedere nelle celle, quale potrebbe essere la formula che impiega molte risorse per rallentarti l'esecuzione.

anche perche quel messaggio può stare ad indicare che prende dati da un file condiviso oppure che sul PC hai aperto anche altri file, e la formula lo aspetta chiuso.

perche mi sembra strano che la macro di Domenico che saluto poi ti faccia quello scherzo, visto che blocca tutti i calcoli e gli eventi, forse avrebbe dovuto bloccare anche gli alert?

prova prima di tutto ad inserire ad inizio e fine della macro, cosi non dovrebbe uscire quel messaggio

Application.DisplayAlerts = False

Application.DisplayAlerts = True


Ciao By Sal
dodo47
10sabato 7 ottobre 2023 09:59
Ciao Melissa

se hai la possibilità, fai un test del tuo file su un altro computer e vedi che succede.

Tra l'altro, il mio codice non copia nulla e gli appunti, di conseguenza, restano vuoti.


saluti

ps: possibile che non riesci a sottoporre il tuo file senza dati sensibili??



L2018
10sabato 7 ottobre 2023 17:25
salve
aggiornamento un po' tardivo
quando si vuole vedere l'elenco dei processi attivi si usa il taskmanager ma questa è una finestra difficile da mettere tutta in uno screenshot
per ottenere la lista completa è più comodo dal prompt dos digitare TASKLIST e per ottenere la lista ordinata TASKLIST | sort > task.txt
dopo di che si puo' pubblicare il file come normale file di testo

tanto dovevo

Leo
Melissa2018
00sabato 7 ottobre 2023 21:51
Buonasera a tutti!

Leo, quel messaggio ha iniziato ad apparire negli ultimi giorni, mai prima, e noto che non mi si presente sempre. Adesso, non appena mi si paleserà nuovamente farò come mi hai suggerito e allegherò il file .txt, grazie!
(Dopo aver letto il tuo intervento avevo cercato sul web, avrei eseguito il prompt da amministratore per poi tasklist >C:\servicelist.txt)


Salvatore, ho fatto come mi hai suggerito circa la spunta per la visualizzazione delle formule e, come puoi vedere, il file "leggero" (lo stesso che ho allegato nei precedenti messaggi), che presenta il medesimo problema di lentezza nell'esecuzione dei codici del file originale (tranne per il codice di Domenico che va come una scheggia), non ha alcuna formula ma solo quei codici e quelle poche righe di dati.
Grazie per le righe di codice.


Domenico, però il file "leggero" che ho postato qui è spoglio della mole di dati e delle formule che solitamente utilizzo, ho riempito le righe a mano e riproposto i codici ma presenta il medesimo problema di lentezza. Ho già iniziato ad adattare quel tuo codice con gli array su tantissimi altri file 🤗
Domani, come mi hai consigliato, eseguirò il codice sul medesimo file "leggero" sul desktop di mia madre
Melissa2018
00mercoledì 11 ottobre 2023 18:58
Buonasera a tutti, volevo solo chiudere questa discussione informandovi che tutti i miei file Excel funzionano senza problemi su ogni altro desktop provato in questi ultimi due giorni. Il problema è il mio laptop probabilmente. Poiché avevo l'idea di prenderne uno nuovo (questo attuale è del 2019), ma tergiversavo da tempo, ho provveduto all'ordine oggi. Questo con problemi verrà dunque formattato.
Grazie davvero a tutti voi che siete intervenuti 🤗
L2018
10mercoledì 11 ottobre 2023 19:30
benissimo
cmq per me un pc del '19 è un neonato
formattandolo, se possibile,
evita i programmi ad esecuzione automatica e in background
evita i punti di ripristino
evita telemetrie varie e invadenza della privacy
svuota sempre le cache
non ammucchiare gli antivirus, basta uno

Ciao

Leo
Melissa2018
00giovedì 12 ottobre 2023 10:43
Grazie Leo, seguirò i tuoi preziosi consigli.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 23:34.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com