Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro 2003---->2007 e diventa lenta??!!

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Macro 2003---->2007 e diventa lenta??!!

Postdi papiriof » 02/11/14 12:49

Ho questa macro NATIVA 2003 adattata e trasportata in un file 2007 e diventa lentissima , inoltre se ho in linea il file 2007 e quello 2003 anche quest'ultimo (che da solo è veloce) diventa lentissimo :?: :?: perché??
Sub CercaScarto()
Dim NumUsc(31) 'N° di uscite nell'intervallo
Dim Ultimo(31) 'Ultima uscita di ciascun numero SCARTO
For nu = 1 To 30 'per 30 numeri
NumUsc(nu) = 0 '
Ultimo(nu) = 100 'per 100 RIGHE
For tiri = 4 To 103 'per 100 tiri che cominciano dalla riga 4 e finiscono alla riga103
For col = 3 To 7 'le 5 colonne cominciano dalla 3 e finiscono alla 7 comprese
If Cells(tiri, col) = nu Then
NumUsc(nu) = NumUsc(nu) + 1
Ultimo(nu) = 103 - tiri
End If
If NumUsc(nu) = 4 Then Ultimo(nu) = 103
Next
Cells(nu + 4, 14) = Ultimo(nu)
Cells(nu + 4, 13) = NumUsc(nu)
Next
Next
End Sub
Win 7+Office 2007... ma preferisco convertire in Office 2003
papiriof
Utente Senior
 
Post: 152
Iscritto il: 16/02/10 13:23

Sponsor
 

Re: Macro 2003---->2007 e diventa lenta??!!

Postdi papiriof » 02/11/14 16:58

Se può servire ad altri ho risolto mettendo all'inizio della macro:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
e alla fine:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Win 7+Office 2007... ma preferisco convertire in Office 2003
papiriof
Utente Senior
 
Post: 152
Iscritto il: 16/02/10 13:23

Re: Macro 2003---->2007 e diventa lenta??!!

Postdi ricky53 » 02/11/14 23:48

Ciao,
quando si elaborano dati in celle è OBBLIGATORIO utilizzare "ScreenUpdating=False"
Se nel foglio ci sono tante celle con delle funzioni e formule varie allora è NECESSARIO impostare "Application.Calculation" in "Manuale"


Adesso che tempi di elaborazione hai?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro 2003---->2007 e diventa lenta??!!

Postdi papiriof » 05/11/14 14:28

ricky53 ha scritto:Ciao,
quando si elaborano dati in celle è OBBLIGATORIO utilizzare "ScreenUpdating=False"
Se nel foglio ci sono tante celle con delle funzioni e formule varie allora è NECESSARIO impostare "Application.Calculation" in "Manuale"


Adesso che tempi di elaborazione hai?

Scusa ricky , prima non ho potuto, adesso i tempi sono minimi ,in buona sostanza adesso i minuti di prima (4/5) sono diventati secondi (4/5) !!
Win 7+Office 2007... ma preferisco convertire in Office 2003
papiriof
Utente Senior
 
Post: 152
Iscritto il: 16/02/10 13:23

Re: Macro 2003---->2007 e diventa lenta??!!

Postdi ricky53 » 05/11/14 14:48

Ciao,
probabilmente si potrebbe "limare" ancora qualcosa ma ... vale la pena?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro 2003---->2007 e diventa lenta??!!

Postdi ricky53 » 05/11/14 15:45

Ciao,
per i confronti e le scritture ho utilizzato una "matrice" al posto delle celle e ...
PROVA il codice e fatti sentire sui tempi che ottieni

Codice: Seleziona tutto
Option Explicit
Option Base 1

Sub CercaScarto_NEW()
    Dim Matrice()
    Dim NumUsc(30, 2) 'N° di uscite nell'intervallo  e Ultima uscita di ciascun numero SCARTO
    Dim Inizio As Double, nu As Integer, col As Integer, tiri As Integer
   
    Application.ScreenUpdating = False
    ReDim Matrice(100, 5)
    Inizio = Timer
    Matrice = Range("C4:G103")
    For nu = 1 To 30 'per 30 numeri
        NumUsc(nu, 1) = 0 '
        NumUsc(nu, 2) = 100 'per 100 RIGHE
       
        For tiri = 4 To 103 'per 100 tiri che cominciano dalla riga 4 e finiscono alla riga103
            For col = 3 To 7 'le 5 colonne cominciano dalla 3 e finiscono alla 7 comprese
                If Matrice(tiri - 3, col - 2) = nu Then
                    NumUsc(nu, 1) = NumUsc(nu, 1) + 1
                    NumUsc(nu, 2) = 103 - tiri
                End If
                If NumUsc(nu, 1) = 4 Then
                    NumUsc(nu, 2) = 103
                End If
            Next
        Next
    Next
    Range("M5:N34") = NumUsc
   
    Application.ScreenUpdating = True
    MsgBox Format(Timer - Inizio, "0.000") & "  sec."
End Sub



Modifica il tuo codice come di seguito e prova anche con il tuo codice i tempi
Codice: Seleziona tutto
Sub CercaScarto()
...
    Inizio = Timer ' <<===== Aggiunta
    For nu = 1 To 30 'per 30 numeri
...
...
...
    Next
    MsgBox Format(Timer - Inizio, "0.000") & "  sec." ' <<===== Aggiunta
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro 2003---->2007 e diventa lenta??!!

Postdi papiriof » 07/11/14 16:35

Impressionante Ricky :eeh: :eeh: la tua macro è scesa a 0,215 s. , praticamente niente!!!!!
Naturalmente l'ho sostituita :) :)
Anche se aspettare 4.5 sec non mi dava fastidio sono contento di aver appreso in modo pratico l'utilizzo di una matrice, penso sia per questo che è così veloce Grazie Ricky!!
Win 7+Office 2007... ma preferisco convertire in Office 2003
papiriof
Utente Senior
 
Post: 152
Iscritto il: 16/02/10 13:23

Re: Macro 2003---->2007 e diventa lenta??!!

Postdi ricky53 » 08/11/14 00:34

Ciao,
a me era ancora più veloce 0,03-0,04 s.
Ovviamente dipende dal processore e dalla RAM

Le matrici sono un ottimo mezzo per elaborazioni di grandi intervalli di dati.
Adesso sai come utilizzarli e ... fanne un uso frequente.

A presto.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia


Torna a Applicazioni Office Windows


Topic correlati a "Macro 2003---->2007 e diventa lenta??!!":


Chi c’è in linea

Visitano il forum: alfrimpa e 5 ospiti