Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Snellire una macro registrata

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

Snellire una macro registrata

Postdi tac15 » 26/02/18 11:15

Ciao a tutti e grazie per l'immenso aiuto che ci date grazie ai vostri consigli.
Il mio problema è il seguente: ho registrato una macro che mi copia alcuni dati dal foglio attivo in un foglio riepilogo
Quando do l'invio comincia a passare da un foglio all'altro a copiare questi dati uno alla volta (preferirei copiasse quaesti dati senza formattazione direttamente). Inoltre per copiarli sempre su una riga nuova ho utilizzato questo stratagemma: inserisco alcune righe vuote dove la mia macro va ad inserire questi dati e poi li metto in ordine cronologico (anche questo mi sembra macchinoso :-? ...)
Vi allego il codice e ringrazio da subito chi vorrà darmi una mano.

Sub Riepilogo()
Dim s As String
s = ActiveSheet.Name
Sheets("Riepilogo").Select
Rows("4:4").Select
Selection.Insert Shift:=xlDown
Rows("4:4").Select
Selection.Insert Shift:=xlDown
Sheets(s).Select
Range("D17:K17").Select
Selection.Copy
Sheets("Riepilogo").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets(s).Select
Range("L5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Riepilogo").Select
Range("B4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets(s).Select
Range("L7").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Riepilogo").Select
Range("C4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets(s).Select
ActiveWindow.SmallScroll Down:=33
Range("L54").Select
Application.CutCopyMode = False
Selection.Copy
Range("L5").Select
Sheets("Riepilogo").Select
Range("D4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B2").Select
Range("A3:G300").Sort Key1:=Range("c3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05

Sponsor
 

Re: Snellire una macro registrata

Postdi Anthony47 » 26/02/18 19:38

Nella macro registrata ci sono alcune cose che non capisco. Ad esempio:
-in Riepilogo!A4 ci copi Range("D17:K17"); questo ti compilera' le celle A4:H4
-subito dopo in Riepilogo!B4, Riepilogo!C4 etc vai a incollare altri valori provenienti da Range("L5"), Range("L7") etc; in questo modo ricopri quanto scritto appena qualche istruzione prima.

In ogni caso e' sempre difficile capire l'azione che si vuole fare dal codice di una macro che quella cosa la fa ma non benissimo.
Quindi la cosa migliore e' che tu spieghi come sono organizzati i tuoi dati e che cosa vuoi fare e noi ti proporremo una macro "simile" alla tua ma "piu' migliore". Meglio se alleghi anche un file dimostrativo.
Per le istruzioni su come allegare un file:
viewtopic.php?f=26&t=103893&p=605487#p605487

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Snellire una macro registrata

Postdi tac15 » 26/02/18 21:27

Ciao Anthony,

Grazie per la risposta domani in serata ti allego il file.

Il file mi riporta sul riepilogo i dati di una fattura e più precisamente nome cliente, numero, data e importo della fattura appeena creata.

Volevo solo precisare che copiando D17..K17 senza formattazione il valore (che sarebbe il npme del cliente) viene riportato unicamente nella cella A4 e pertanto le celle successive B4, C4 ecc rimagono vuote.

La macro così come è funziona, è un po' macchinosa ma fa il suo dovere.

Ti ringrazio ancora per l'aiuto e a domani con il file.

Nando
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05

Re: Snellire una macro registrata

Postdi patel » 27/02/18 08:51

una prima sgrossata, si tratta di eliminare tutti i select, puoi continuare da te

Codice: Seleziona tutto
Sub Riepilogo()
    Dim s As String
    s = ActiveSheet.Name
    Sheets("Riepilogo").Rows("4:5").Insert Shift:=xlDown
    Sheets(s).Range("D17:K17").Copy 
    Sheets("Riepilogo").Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets(s).Range("L5").Copy
    Sheets("Riepilogo").Range("B4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: Snellire una macro registrata

Postdi tac15 » 27/02/18 10:53

Ciao Anthony,
sono riuscito ad anticipare i tempi

Ho effettuato le modifiche ma ho riscontrato le seguenti problematiche:
1) la formattazione delle celle copiate rimane
2) Non mi consente più di riordinare l'elenco in modo crescente (errore di run-time 1004)
3) il continuo cambio tra una pagina e l'altra continua a farlo

Ti allego il link per scaricare il file excel:
https://wetransfer.com/downloads/c43b50 ... 756/1d6048

Grazie per la disponibilità e a dopo
Nando
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05

Re: Snellire una macro registrata

Postdi Anthony47 » 27/02/18 18:35

Ti propongo una semplificazione:
Cerca un'area libera sul foglio Fattura, fuori dall'area di Stampa, dove puoi creare una unica sequenza di valori da esportare. Ad esempio da R1 verso destra ho usato rispettivamente queste formule:
Codice: Seleziona tutto
=L5

=L7

=D17

=D18

e cosi' analogamente fino a Z1
In questo modo ho creato la stringa di informazioni che voglio riportare su Riepilogo

Ti bastera' ora una macro come questa:
Codice: Seleziona tutto
Sub Riepiloga()
'Calcola la prima riga libera su foglio Riepilogo:
myNext = Sheets("Riepilogo").Cells(Rows.Count, 1).End(xlUp).Row + 1
'Copia l'Intervallo
Range("R1:Z1").Copy
'Esegue IncollaSpeciale Valori & Formati
Sheets("Riepilogo").Cells(Rows.Count, 1).PasteSpecial xlPasteValuesAndNumberFormats
'Annnulla la  modalità Taglia o Copia:
Application.CutCopyMode = False
'
End Sub

Nota che non e' mia intenzione sminuire il valore delle macro autoregistrate (ancora oggi molte istruzioni delle mie macro nascono con, o derivano da, una macro registrata), ma semmai indicare come talvolta piccoli accorgimenti possono portare a grandi semplificazioni.


Per creare una nuova fattura partendo da una gia' compilata:
-tasto dx sul tab di una fattura compilata; scegli Sposta o copia, spunta Crea una copia, Ok
-poi pulisci tutti i campi compilati lasciando le formule
Questa fase la puoi automatizzare tramite un "Registra nuova macro", come hai gia' imparato a fare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Snellire una macro registrata

Postdi tac15 » 28/02/18 10:31

Ciao Anthony

ho effettuatio le modifiche proposte ed in effetti mi sembra un buon compromesso il tuo,
ho solo un ultimo problema: al posto di scrivermi i dati nella prima riga disponibile del foglio
me li va a scrivere nell'ultima riga del foglio e più precisamente la numero 1048576

Ho eliminato tutte le riche del foglio ma il risultato finale è sempre lo stesso
Boh???
Aspetto tue notizie
Nando
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05

Re: Snellire una macro registrata

Postdi Anthony47 » 28/02/18 16:03

In effetti ti questa istruzione va modificata cosi':
Codice: Seleziona tutto
'Esegue IncollaSpeciale Valori & Formati
Sheets("Riepilogo").Cells(myNext, 1).PasteSpecial xlPasteValuesAndNumberFormats
(vedi uso di myNext invece che Rows.count)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Snellire una macro registrata

Postdi tac15 » 01/03/18 09:41

Così è perfetta!!!
Grazie ancora per il tempo che mi hai dedicato e per l'aiuto che dai a tutti noi.

Ciao
Nando
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05

Re: Snellire una macro registrata

Postdi tac15 » 01/03/18 11:51

Un ultimo aiuto .................
Nella macro (registrata) che mi crea una copia per fare una nuova fattura la copia me la posiziona sempre nello stesso punto (per esempio dopo il settimo foglio),
esiste un comando che le copie me le posiziona sempre alla fine di tutti i fogli?
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05

Re: Snellire una macro registrata

Postdi Anthony47 » 01/03/18 15:02

Per modificare la tua macro serve saperne il codice; altrimenti dovrai accontentarti del suggerimento di principio:
aggiungi al posto giusto After:=Sheets(Sheets.Count)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Snellire una macro registrata

Postdi tac15 » 01/03/18 15:50

Ciao
il codice è questo:

Sub Copia_fatt()
'
' Copia_fatt Macro
'
' Scelta rapida da tastiera: CTRL+n
'
Sheets("mod").Select
Sheets("mod").Copy After:=Sheets(17)
End Sub

praticamente io vorrei che lo posizionasse sempre in fondo a tutti i fogli già presenti (ma il mio ultimo foglio cambia sempre perché l'ultimo sarà l'ultima fattura che ho fatto quel tal giorno)
Spero sia fattibile altrimenti mi inventerò un foglio che rimane sempre ultimo fisso
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05

Re: Snellire una macro registrata

Postdi tac15 » 01/03/18 16:34

Scusami..scusami..scusami!!! sei un genio e anche super preparato!
quel count mi aveva tratto in inganno (pensavo di dover modificare con qualche valore tipo +1 o altro)
Le tue istruzioni sono state perfette come sempre per risolvere il mio problema.. TUTTO OK
Ancora grazie
tac15
Utente Junior
 
Post: 10
Iscritto il: 05/12/07 16:05


Torna a Applicazioni Office Windows


Topic correlati a "Snellire una macro registrata":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti

cron