Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Correzione macro in VBA

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

Correzione macro in VBA

Postdi camillobenzo » 20/11/11 17:03

Vorrei un supporto su questa macro:

Codice: Seleziona tutto
Sub Importa3()
Perc = ThisWorkbook.Path & "\"
Application.ScreenUpdating = False
Application.Calculation = xlManual
For RR1 = 12 To 15
Worksheets("Analisi DUVRI").Select
Nomefile = Range("N" & RR1).Text & ".xls"
Select Case RR1
Case Is = 12
ColI = "A"
ColF = "AC"
NomeFoglio = "Stato PdL"
Case Is = 13
ColI = "A"
ColF = "AI"
NomeFoglio = "Attivazioni"
Case Is = 14
ColI = "A"
ColF = "K"
NomeFoglio = "Duvri ieri"
Case Is = 15
ColI = "A"
ColF = "K"
NomeFoglio = "Duvri 2gg fa"
End Select
Workbooks.Open Filename:=Perc & Nomefile
    Columns(ColI & ":" & ColF).Copy Destination:=Workbooks("Duvri Master.xls").Worksheets(NomeFoglio).Columns(2)
    Application.DisplayAlerts = False
    Workbooks(Nomefile).Close SaveChanges:=False
    Application.DisplayAlerts = True
Next RR1  '<<< esistente

'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Dim pt As pivotTable
For Each pt In ActiveSheet.PivotTables
pt.RefreshTable
Next pt

'aggiunte queste righe di codice per l'ultimo quesito
Worksheets("KPI report").Select
Cells.Copy
Workbooks.Open Filename:=Perc & "KPI Master.xls"
Worksheets("KPI report").Select
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
     Workbooks("KPI Master.xls").Close SaveChanges:=True
'fine modifica copia valori

Worksheets("Analisi DUVRI").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub





Avrei urgente bisogno che:
- fosse molto più veloce (ora impiega quasi 5 min per completare!)
- prima di copiare la pagina Kpi report (vedi in macro), aggiorni tutte le pivot nel file (ora c'è il comando ma non funziona)
- che invece di copiare l'intero foglio kpi report, ne copi solo le prime 62 righe)


Grazie mille in anticipo

Fabio
-
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Sponsor
 

Re: Correzione macro in VBA

Postdi Flash30005 » 20/11/11 18:37

Per la copia parz<iale di 63 righe puoi sostituire queste due righe sulla tua macro
Codice: Seleziona tutto
Worksheets("KPI report").Select
Cells.Copy

con queste
Codice: Seleziona tutto
    Sheets("KPI report").Select
    Rows("1:63").Copy


Per velocizzare ulteriormente il processo non saprei come fare

Per le Pivot devo studiarci su ma fin dall'inizio dissi che non mi sembrava una cosa semplice

ciao


EDIT ore 19:20 - Chiaramente quando apri il file KPI master e selezioni il Foglio "KPI report" non devi più selezionare tutte le celle ma solo
Codice: Seleziona tutto
Range("A1").select

e poi incolli con l'apposito codice
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi Flash30005 » 20/11/11 20:17

Da ricerche sembrerebbe che questo codice aggiorni le tabelle pivot e se funziona credo che il tuo codice non funziona perché non menzioni il foglio che contiene le tabelle Pivot quindi
Codice: Seleziona tutto
Dim SH As Worksheet
Dim PIV As PivotTable

Set SH = Me.Sheets("Foglio1") '<<<< cambiare con nome tuo foglio
For Each PIV In SH.PivotTables
PIV.PivotCache.Refresh
Next PIV


Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi Anthony47 » 20/11/11 22:55

Non perdere i messaggi di Flash prima di questo.

Per quanto riguarda la velocita' di esecuzione, a spanne la macro apre 4 file, di ognuno copia un tot di colonne nel file Duvri master.xls, poi aggiorna le pivot del foglio, infine copia tutto il contenuto del foglio KPI report sul file KPI master.xls.
Nulla che giustifichi i 5 minuti di cui parli.
Qualche domanda:
-quanto dura, eseguito a mano, il ciclo di apertura e di chiusura di ognuno dei file in gioco?
-guardando con Task manager, quanta e' la memoria occupata, quanta e' quella disponibile, quanta e' l' occupazione delle cpu durante l' esecuzione macro?
-quale versione di excel usi?
-quante tabelle pivot sono oggetto di aggiornamento? Quanto dura l' aggiornamento se lo fai da comando?

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Correzione macro in VBA

Postdi camillobenzo » 21/11/11 12:49

L'update delle pivot non va purtroppo..
Codice: Seleziona tutto
Next RR
Dim SH As Worksheet
Dim PIV As pivotTable

Set SH = Sheets("Kpi report")
For Each PIV In SH.PivotTables
PIV.PivotCache.Refresh
Next PIV
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi camillobenzo » 21/11/11 15:00

Per far andare l'update delle pivot, ho diviso la macro in 2:
Codice: Seleziona tutto
Sub Importa3()
Perc = ThisWorkbook.Path & "\"
Application.ScreenUpdating = False
Application.Calculation = xlManual
For RR1 = 12 To 15
Worksheets("Analisi DUVRI").Select
Nomefile = Range("N" & RR1).Text & ".xls"
Select Case RR1
Case Is = 12
ColI = "A"
ColF = "AC"
Nomefoglio = "Stato PdL"
Case Is = 13
ColI = "A"
ColF = "AI"
Nomefoglio = "Attivazioni"
Case Is = 14
ColI = "A"
ColF = "K"
Nomefoglio = "Duvri ieri"
Case Is = 15
ColI = "A"
ColF = "K"
Nomefoglio = "Duvri 2gg fa"
End Select
Workbooks.Open Filename:=Perc & Nomefile
    Columns(ColI & ":" & ColF).Copy Destination:=Workbooks("Duvri Master.xls").Worksheets(Nomefoglio).Columns(2)
    Application.DisplayAlerts = False
    Workbooks(Nomefile).Close SaveChanges:=False
    Application.DisplayAlerts = True

Worksheets("Analisi DUVRI").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub


Codice: Seleziona tutto
Sub Aggiornaecopia()
Dim SH As Worksheet
Dim PIV As pivotTable

Set SH = Sheets("Pivot attivazioni")
Set SH = Sheets("Report anomalie")
Set SH = Sheets("Kpi report")
For Each PIV In SH.PivotTables
PIV.PivotCache.Refresh
Next PIV

'aggiunte queste righe di codice per l'ultimo quesito
Perc = ThisWorkbook.Path & "\"
Sheets("KPI report").Select
    Rows("1:63").Copy
Workbooks.Open Filename:=Perc & "KPI Master.xls"
Worksheets("KPI report").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
     Workbooks("KPI Master.xls").Close SaveChanges:=True
'fine modifica copia valori
End Sub


Nella prima riga dei fogli "Tipi di manutenzione" e "AP", del file "Kpi Master.xls" ci sono delle date ed in colonna sotto alla data una serie di formule. Io vorrei che la seconda macro, in base a questa funzione che individua il numero di colonna da copiare
Codice: Seleziona tutto
=COLUMN(INDIRECT(CELL("address";INDEX('[KPI Master.xls]AP'!$1:$1;MATCH(A1;'[KPI Master.xls]AP'!$1:$1;0)))))
, copiasse ed incollasse su se stessa la colonna nei due fogli "Tipi di manutenzione" e "AP".
Es. -la funzione (appena scritta) dà come risultato 23
-La macro copia la colonna 23 (colonna W) del foglio "Tipi di manutenzione" e incolla valori nello stesso range (colonna W)
-La macro fa la stessa cosa con la colonna 23 del foglio "AP", sempre presente nel file "Kpi master".
-La macro salvi tutto e chiuda il file, come fa già


Non dovrebbe essere complicato, avendo già la formula di riferimento della colonna, giusto?

Grazie mille in anticipo!
I appreciate,

Fabio
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi Flash30005 » 21/11/11 22:40

Non ho capito molto cosa hai fatto e se così ti funziona ma
questi tre Set non servono a nulla
Codice: Seleziona tutto
Set SH = Sheets("Pivot attivazioni")
Set SH = Sheets("Report anomalie")
Set SH = Sheets("Kpi report")

In quanto verrà preso solo l'ultimo
Codice: Seleziona tutto
Set SH = Sheets("Kpi report")

Perché sotituisce tutti i precedenti
se devi elaborare gli altri fogli due devi assegnare variabili (SH) diverse

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi camillobenzo » 21/11/11 23:57

Come faccio ad assegnare diverse variabili?
E come si fa ad implementare quella copia automatica suddetta?

Non ho altre risorse se non scrivere su forum US, immagino anche voi abbiate avuto casini appena cominciato!

Grazie in anticipo
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi Flash30005 » 22/11/11 08:28

Per aggiornare le pivot di ogni foglio puoi utilizzare una macro di questo tipo

Codice: Seleziona tutto
Sub SelF()
Dim Ws(3) As String
Ws(1) = "Pivot attivazioni"
Ws(2) = "Report anomalie"
Ws(3) = "Kpi report"
For FF = 1 To 3
For Each PIV In Worksheets(Ws(FF)).PivotTables
PIV.PivotCache.Refresh
Next PIV
Next FF
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi camillobenzo » 22/11/11 08:38

Grazie Flash!
Per la copia condizionale come si fa? Alla fine è solo un comando che ti dice: copia e incolla valori della colonna X in quei due fogli. La colonna X dipende dalla funzione scritta sopra..
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi Flash30005 » 22/11/11 09:05

All'inizio avevo le idee più chiare
sembrava tutto a posto
poi hai cominciato a modificare la macro dividendola in più parti e sinceramente, come già detto nel post precedente, non so a che punto sei e cosa devi fare
parli di due fogli, quando nell'ultima macro ne stiamo trattando tre
Quali fogli?
e quale colonna X devi copiare?

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi camillobenzo » 22/11/11 09:17

I files ed i fogli non sono cambiati. Ho solo diviso in due la macro e assegnata a due tasti diversi e consecutivi perchè solo così riesco ad aggiornare le pivot..
Nel file dove la macro copia le prime 63 righe del foglio Kpi report, ci sono altri due fogli: "AP" e "Tipi di manutenzione".
Tutti e due questi fogli hanno come prima riga una serie di date, a ciascuna delle quali naturalmente corrisponderà una colonna (Es. in D1 c'è 29/11/2011. La colonna è la n.3)

Fatta questa premessa, arrivo al dunque: la macro (aggiornaecopia) dovrebbe, prima di salvare e chiudere il file Kpi master.xls, nei fogli "AP" e "Tipi di manutenzione" dello stesso foglio Kpi Master, copiare ed incollare valori della colonna n nella stessa colonna n. Dove la colonna n è individuata dalla funzione:
Codice: Seleziona tutto
=COLUMN(INDIRECT(CELL("address";INDEX('[KPI Master.xls]AP'!$1:$1;MATCH(A1;'[KPI Master.xls]AP'!$1:$1;0)))))
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi camillobenzo » 22/11/11 09:19

Ora le due macro che abbiamo sono:

Codice: Seleziona tutto
Sub Importa3()
Perc = ThisWorkbook.Path & "\"
Application.ScreenUpdating = False
Application.Calculation = xlManual
For RR1 = 12 To 15
Worksheets("Analisi DUVRI").Select
Nomefile = Range("N" & RR1).Text & ".xls"
Select Case RR1
Case Is = 12
ColI = "A"
ColF = "AC"
Nomefoglio = "Stato PdL"
Case Is = 13
ColI = "A"
ColF = "AI"
Nomefoglio = "Attivazioni"
Case Is = 14
ColI = "A"
ColF = "K"
Nomefoglio = "Duvri ieri"
Case Is = 15
ColI = "A"
ColF = "K"
Nomefoglio = "Duvri 2gg fa"
End Select
Workbooks.Open Filename:=Perc & Nomefile
    Columns(ColI & ":" & ColF).Copy Destination:=Workbooks("Duvri Master.xls").Worksheets(Nomefoglio).Columns(2)
    Application.DisplayAlerts = False
    Workbooks(Nomefile).Close SaveChanges:=False
    Application.DisplayAlerts = True
   
Worksheets("Analisi DUVRI").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub


E:
Codice: Seleziona tutto
Sub Aggiornaecopia()
Dim Ws(3) As String
Ws(1) = "Pivot attivazioni"
Ws(2) = "Report anomalie"
Ws(3) = "Kpi report"
For FF = 1 To 3
For Each PIV In Worksheets(Ws(FF)).PivotTables
PIV.PivotCache.Refresh
Next PIV
Next FF

'aggiunte queste righe di codice per l'ultimo quesito
Perc = ThisWorkbook.Path & "\"
Sheets("KPI report").Select
    Rows("1:63").Copy
Workbooks.Open Filename:=Perc & "KPI Master.xls"
Worksheets("KPI report").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
     Workbooks("KPI Master.xls").Close SaveChanges:=True
'fine modifica copia valori
End Sub
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi Flash30005 » 22/11/11 09:43

Ti conviene inviare di nuovo i file occorrenti
anche perché non hai specificato in quale file/foglio si trova la formula che definisce la colonna da copiare
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi camillobenzo » 22/11/11 10:21

Come da principio, la macro è nel file Duvri master. Le colonne da copiare sono nei fogli "AP" e "Tipi di Manutenzione" del file KPI Master, lo stesso in cui la macro copia il foglio Kpi report.
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi Flash30005 » 22/11/11 13:30

Perdona ma se non sei chiaro non intendo perdere ulteriore tempo
I fogli disponibili che ho nei file in mio possesso sono questi:

Immagine

Uploaded with ImageShack.us
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi camillobenzo » 22/11/11 13:58

Scusa Flash,
immaginavo non fosse necessario il file ma capirne il relativo contenuto.
Ti ho inviato in privato il file KPI Master in questione.
camillobenzo
Utente Junior
 
Post: 29
Iscritto il: 24/10/11 13:40

Re: Correzione macro in VBA

Postdi Flash30005 » 22/11/11 22:39

camillobenzo ha scritto:immaginavo non fosse necessario il file ma capirne il relativo contenuto.


E io pensavo che riuscissi a risolverlo da solo avendo tutti i dati e riferimenti in tuo possesso e dei quali non vuoi mettere a disposizione coloro che vorrebbero aiutarti
in questo modo non fai altro che far rinunciare gli utenti (me in primis) a darti una mano

camillobenzo ha scritto:Ti ho inviato in privato il file KPI Master in questione.


Con il file da te inviato, nel quale non ci sono formule di riferimento al tuo quesito stai soltanto confondendo le idee a chi vorrebbe rendersi disponibile a risolvere.

Non dico altro!
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Correzione macro in VBA

Postdi Anthony47 » 22/11/11 23:38

Se avete la pazienza di spiegare di quale problema si parla posso provare a cogitare anche io (all' ultimo mio intervento si parlava di tempi di esecuzione sproporzionati, tema poi scomparso).

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Correzione macro in VBA

Postdi Flash30005 » 23/11/11 10:24

Ti invio in MP il file KPI master oggetto dei post con le "specifiche" a me giunte sempre in MP
ma per me ancora insufficienti per risolvere la richiesta
Speriamo che tu ci riesca
ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "Correzione macro in VBA":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti