Saltare un pezzo di macro
Hai un problema con Excel? 
Saltare un pezzo di macro
di PaoloR2000 data: 03/07/2016 18:48:17
Buonasera,
ho realizzato un foglio per ogni aliquota iva (5 possibili) da copiare su un unico foglio riepilogativo.
ciò che ho, funziona alla grande, se ci sono tutte le aliquote, ma se ne manca una non so come saltare quel foglio (tramite macro) con i valori a zero (che devo evitare) nel riepilogo.
Ho un contatore che definisce la condizione: cella del foglio a1=0, salta e vai al prossimo foglio, ma non so farlo.
Grazie per il contributo
di Cucù data: 03/07/2016 18:57:00
Potresti, e dico solo, potresti utilizzare il comando GoTo per saltare un pezzo di codice, ma non sarebbe una grande idea...^_^
Cucù
di PaoloR2000 data: 03/07/2016 18:59:50
Ciao, grazie per la risposta
se funziona è una grande soluzione, ma come si scrive?
di PaoloR2000 data: 03/07/2016 19:09:13
In pratica dovrei scrivere in testa ad ogni foglio nella macro, se cella a1 di foglio 2=0, vai a foglio 3, altrimenti esegui foglio 2
(Esempio se il foglio 2 non contiene la sua aliquota iva)
E come si scrive?
Grazie
di Vecchio Frac data: 03/07/2016 19:14:25
cit. "potresti utilizzare il comando GoTo"
---> Pessimo consiglio
cit. "ma non sarebbe una grande idea"
---> Visto che lo sai? :)
Alla fine è meglio un Select Case o alla meno peggio una serie di If.
Vediamo un esempio del foglio o dobbiamo costruirci lo scenario?
di PaoloR2000 data: 03/07/2016 19:48:34
Ciao amico,
no il VBA non è il mio must, attivo l'eco per fare delle macro molto semplici...
trovo spesso nel web ciò che cerco, ma è da un po' che questa non la trovo
ti ho copiato invece quella che hai proposto ad un altro: nascondi il foglio se la cella a1=0, ma qui non è adattabile (sic!)
ti propongo un pezzo della macro qui sotto
grazie
'----------------------------------------------------- Elab32
'se cella a1=0 vai a Elab33, altrimenti a Elab32 (questo)
Sheets("Elab32").Select
Rows("4:4").Select
Selection.AutoFilter
ActiveSheet.Range("$A$4:$P$500").AutoFilter Field:=1, Criteria1:="<>"
Range("b5:P500").Select
Selection.Copy
Sheets("Riepilogo").Select
Range("A" & Contatore).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
'----------------------------------------------------- Elab33
'uguale a sopra, cambia il nome del foglio |
di patel data: 04/07/2016 09:11:20
paolo, se vuoi aiuto devi farci capire, quindi allega un file di esempio e spiega cosa vuoi ottenere indipendentemente dal codice che hai già scritto.
di Cucù data: 04/07/2016 09:29:30
Prova cosi
----------------------------------------------------- Elab32
'se cella a1=0 vai a Elab33, altrimenti a Elab32 (questo)
If cells(1,1)<>0 then
Sheets("Elab32").Select
Rows("4:4").Select
Selection.AutoFilter
ActiveSheet.Range("$A$4:$P$500").AutoFilter Field:=1, Criteria1:="<>"
Range("b5:P500").Select
Selection.Copy
Sheets("Riepilogo").Select
Range("A" & Contatore).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Else
'----------------------------------------------------- Elab33
'uguale a sopra, cambia il nome del foglio
End If |
di PaoloR2000 data: 04/07/2016 09:39:08
Grazie amico,
faccio una prova e ti rispondo
di PaoloR2000 data: 04/07/2016 09:58:32
No non funzia,
nel foglio di riepilogo mette le righe che dovrebbe saltare con valore 0
mi spiace...
di Cucù data: 04/07/2016 11:44:30
mi sa che non ci si capisce... è sempre difficile senza un file di esempio
di PaoloR2000 data: 04/07/2016 12:38:15
@patel
@cucù
non è semplice allegare un file di esempio per i dati sensibili che contiene, vediamo se riesco a spiegami:
il modello si compone di diversi fogli:
in particolare tanti quante sono le aliquote iva possibili (10%, 22%, non soggetto,non imponibile, esente etc), tutti previsti nel progetto.
qual'è il mio problema? se in un foglio (Elab32 nell'esempio) manca un'aliquota iva (22%) devo escludere dall'attività di copia e riepiloga in un foglio "riepilogativo", appunto Elab32.
Credevo, sbagliando, che il filtro, non potesse copiare le celle con valore zero, invece non lo esegue proprio e me le copia. Da qui la ricerca di far saltare un foglio con una cella indicatore a 0.
Chiedi pure ciò che non è chiaro
di PaoloR2000 data: 04/07/2016 14:30:51
Ok ecco qua un modello modificato per l'occasione...
contiene la macro completa del riepilogo, (ciò che mi interessa)
chiedere ciò che non è chiaro
grazie
di PaoloR2000 data: 04/07/2016 14:32:45
allegato in testa al thread
di PaoloR2000 data: 05/07/2016 07:39:14
Buongiorno,
soluzioni? visto l'allegato? chiaro adesso?
grazie
di Cucù data: 05/07/2016 08:46:42
Ho solo modifica il tuo codice per farlo funzionare come da te richiesto...
Io personalmente avrei usato tutt'altro approccio, ma non voglio complicarti la vita, almeno su questo saprai dove mettere le mani. Ciao
Cucù
di PaoloR2000 data: 05/07/2016 09:01:13
Ciao e grazie per il tuo contributo.
di PaoloR2000 data: 05/07/2016 10:57:38
@Cucù
ho provato le tue modifiche nel mio foglio originale, ma mi hai SCONVOLTO la macro, non era ciò che volevo.
Avevo chiesto che con il valore di cella a1=0 di ogni foglio (da Elab31 a Elab39), quella parte di macro Elab31 o Elab32 etc, venisse disattivata, (me lo hai suggerito proprio tu).
quella che ti ho trasferito, l'ho attivata con l'eco di excel per cui so come modificarla, la tua come la modifico? dipenderei da te, non mi pare il caso...
Copiandola uguale uguale, inoltre ho un errore debug sulla riga
"Contatore = Contatore + sh.Range("A1").Value"
ancora: hai messo per errore il numero 3 su Elab31 su riga senza valore e la macro la riporta su riepilogo, sbagliando, mentre togliendo il numero funziona.
hai dimenticato di cancellare riepilogo prima di copiare, per cui se le righe precedenti sono più numerose delle attuali, restano nel riepilogo. Puoi provare lasciando il numero 3 e poi togliendolo e vedi.
Se puoi farmi la modifica richiesta ti sarei veramente grato, per quanto puerile possa essere, la capisco...
Grazie
PS non volermene, capisco che la tua macro è a prova di errore, ma la mia funziona altrettanto bene.
di Cucù data: 05/07/2016 11:12:53
Allora Paolo
il mio codice dovrebbe fare tutto quello che faceva il tuo codice solo che invece di elencare foglio per foglio ho inserito un ciclo che scorre tutti i fogli presenti nel file e se il valore della cella A1 è maggiore di zero allora prosegue con le istruzioni che tu stesso hai inserito (con il registratore di macro).
Cmq se proprio vuoi tenere originalmente il tuo non ti resta che prima di fare il filtro per ogni foglio e poi il copia incolla mettere una condizione che verifichi il valore della cella A1 e quindi:
If Cells(1,1) > 0 then 'Cioè se la cella A1 è maggiore di Zero procedi col tuo codice altrimenti esci
.... tuo codice
end if
Resta il fatto che secondo me è completamente sbagliato anche il codice registrato e il Contatore che hai inserito... però se a te va bene cosi...
Cucù
di PaoloR2000 data: 05/07/2016 11:42:40
Caro amico Cucù,
ti ringrazio ancora per la tua disponibilità e gentilezza, e condivido anche ciò che scrivi, ma consentimi:
io non sono un programmatore di visuale, sono un modestissimo utente di excel, che per adesso mi ha sempre risolto, utilizzando ciò che permette, per esempio l'attivazione dell'eco.
Prima di cercare la soluzione con la macro, mi sono sconvolto il sonno un paio di giorni almeno, per non capire perchè l'eco scrive le celle che non esistono, il filtro le elimina, ma non c'è verso, l'eco le riproduce...
Da qui la ricerca su internet, e siccome in questo sito ho visto realizzare delle cose straordinarie, mi sono iscritto per cercare aiuto.
Vado a provare la tua soluzione e ti faccio sapere...
di PaoloR2000 data: 05/07/2016 12:04:59
@Cucù
devi aver pazienza, ma non funziona la correzione, dimmi dove sbaglio
te la scrivo qui sotto
'----------------------------------------------------- Elab32
If Cells(1, 1) > 0 Then
Sheets("Elab32").Select
Rows("4:4").Select
Selection.AutoFilter
ActiveSheet.Range("$A$4:$P$500").AutoFilter Field:=1, Criteria1:="<>"
Range("b5:P500").Select
Selection.Copy
Sheets("Riepilogo").Select
Range("A" & Contatore).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Elab32").Select
Selection.AutoFilter
Range("A1").Select
Contatore = Contatore + Sheets("Elab32").Range("A2").Value
End If
'----------------------------------------------------- Elab33 |
di Cucù data: 05/07/2016 12:15:21
Cosa non funziona?
di PaoloR2000 data: 05/07/2016 12:23:59
La correzione che mi hai scritto, come riportata nella macro, continua a darmi nel riepilogo le righe a zero, tutte quelle che trova...
L'originale è sempre in testa a questo thread...
di Cucù data: 05/07/2016 13:06:20
Non è la correzione che non funziona ma il tuo codice come già ti ho detto prima.
"Resta il fatto che secondo me è completamente sbagliato anche il codice registrato e il Contatore che hai inserito... però se a te va bene cosi... "
di PaoloR2000 data: 05/07/2016 13:19:20
Bene,
sono alla canna del gas, questo foglio mi serve...
mi correggi la TUA macro?
Grazie
di Cucù data: 05/07/2016 14:35:51
Se ho ben capito il tuo problema (ma a questo punto ne dubito fortemente) ... prova il file allegato, ti metto sotto il codice da lanciare con foglio "Riepilogo" selezionato_
Cucù
Option Explicit
Sub Riepilogo()
Dim ws As Worksheet, c As Range, Ir As Long, Icol As Long
Dim Lrow As Long, Ic As Long, r As Long
Dim MColl As New Collection
Application.ScreenUpdating = False
Cells.ClearContents
r = 1
Ir = 0
Icol = 1
For Each ws In Worksheets
Lrow = ws.Range("A" & Rows.Count).End(xlUp).Row
If ws.Name <> "Riepilogo" And Lrow > 3 Then
For Each c In ws.Range("A4:A" & Lrow)
If c.Value <> "" Then
Ir = Ir + 1
For Ic = 1 To 9
MColl.Add c.Offset(, Ic).Value
Next Ic
End If
Next c
End If
Next
For r = 1 To Ir
For Ic = 1 To 9
Cells(r, Ic) = MColl(Icol)
Icol = Icol + 1
Next Ic
Ic = 1
Next r
Set MColl = Nothing
Application.ScreenUpdating = True
End Sub |
di PaoloR2000 data: 05/07/2016 14:58:24
Mi spiace stressarti perchè sono convinto ti rompi anche tu per me...
Dalle mie parti si dice che ho pestato una m... con i sandali!!!
Lascia perdere la macro ultima, non riesco nemmeno ad aprire il foglio dopo il suo lancio, resta inchiodato macro e foglio.
Ti invio un file che sembra funzioni con la tua macro precedente, ma ha questi inconvenienti:
- ti ripeto cancella il foglio riepilogo prima di scriverci la nuova estrazione
- nel riepilogo Elab6 dev'esser copiato solo una volta, a fine riepilogo, esattamente come si trova nel foglio
nell'esempio non ce l'avevi e lo hai dimenticato
- fra una serie di dati e l'altra, ci sono righe vuote (hai capito perchè viene usato il contatore? per sapere dove scrivere ogni foglio)
Dammi un po' di tempo e te lo preparo senza i soliti dati sensibili
di PaoloR2000 data: 05/07/2016 15:21:07
ho fatto ulteriori prove con la tua macro, con cui sto facendo confidenza.
forse ho capito perchè lascia righe vuote, solo se ci sono fogli variabili, cioè con diversa quantità di righe, ma questo non può succedere, io importo sempre e scrivo tutte le righe di ogni documento.
unica concessione è l'ultimo foglio che copia solo le ultime 3 colonne e nn anche le prime due, che contengono numero e data per tenerlo in ordine e metterlo ovviamente come ultimo rigo.
se fai queste correzioni mi pare funzioni alla grandissima. stop
soprattutto porta pazienza
PS hai capito che si tratta di trasferimenti EDI?
di Cucù data: 06/07/2016 08:03:47
cit"
PS hai capito che si tratta di trasferimenti EDI?"
No non l'ho capito e a questo punto non capisco proprio quale sia il risultato che vuoi ottenere nel foglio riepilogo... mi dispiace a volte capita!
Cucù
di PaoloR2000 data: 06/07/2016 08:34:14
Ciao,
sì capita, da parte mia per mancanza culturale su excel, inoltre la necessità di evitare dati o riferimenti di altri, sensibili, come si suol dire, complica le spiegazioni.
non ti preoccupare comunque, anzi ti sono sempre grato per la tua DISPONIBILITà.
Ti ho inviato un file esattamente con ciò che devo realizzare, lo hai scaricato? (la prima versione della macro da te inviata, riscritto sopra), la seconda invece è proprio sbagliata concettualmente.
1. non posso lanciare la macro dal foglio riepilogo, ma c'è un menù che prevede le varie opzioni (questo foglio è un terzo del lavoro finale. devo prima importare, poi elaborare, poi riscrivere)
2. non tutti i fogli devono essere trasferiti su riepilogo (solo gli Elab), il particolare è il record di fine file (Elab6) e dev'essere scritto da a5 a e5, come ti avevo già avvisato in precedenza, e l'ordinamento lo inserirebbe in fondo, il field 99 verrebbe sempre per ultimo.
3. l'ultima macro è talmente complicata, che non mi permetterebbe integrazioni. la precedente invece funziona benissimo, infatti con i record aggiunti puoi eseguire la macro e vedere...
4. mi devi perdonare, ma se fai cose non richieste, diventa complicato seguire il mio lavoro, e devo rincorrerti per nuovi errori
5. se rileggi ciò che ti ho scritto, penso per te sia poca cosa la correzione richiesta
grazie ancora
di Cucù data: 06/07/2016 09:41:53
1. Scrivendo male la lingua italiana è molto complicato capirti!
2. non tutti i fogli devono essere trasferiti su riepilogo (solo gli Elab) ---> Questa informazione fondamentale non l'hai mai esplicitata prima!
3. il particolare è il record di fine file (Elab6) e dev'essere scritto da a5 a e5 --->Guarda caso questo foglio sul tuo file NON ESISTE!
4. l'ultima macro è talmente complicata, che non mi permetterebbe integrazioni. la precedente invece funziona benissimo --> Ottimo usa la precedente e il problema è risolto
5. "mi devi perdonare, ma se fai cose non richieste, diventa complicato seguire il mio lavoro e devo rincorrerti per nuovi errori " --> Tranquillo non farò più cose non richieste, non voglio farti perdere tempo prezioso.
6. Dulcis in fundo... Come dice il grande Cannavacciolu alla fine di ogni puntata di Cucine da Incubo ADDIOS
di PaoloR2000 data: 06/07/2016 10:00:01
@Cucù,
non voglio polemizzare con te, sei stato gentile e disponibile, resta così...
nel primo foglio che ti ho inviato, le richieste erano semplici: SALTARE UN PEZZO DI MACRO, ma hai fatto cose diverse e mi hanno complicato la vita. ho dovuto inseguirti, e adesso mi dici:
mi spiego male...
ragazzo stai bravo, sono più vecchio di te, più vissuto, posso lasciar perdere, come te...
ho già risolto, senza macro, ho sconvolto il modello, ma funziona!
buona vita
Paolo
PS mi cancellerò da questo sito, un po' mi dispiace, avevo trovato cose interessanti...
di Vecchio Frac data: 06/07/2016 10:52:31
Bè non serve a niente e a nessuno la tua cancellazione (anzi è un danno alla collettività) e in ogni caso puoi continuare a trovare cose interessanti ugualmente :)
Prego tutti: fermiamo qui i commenti sulle persone e limitiamoci a discutere di codice.
di PaoloR2000 data: 06/07/2016 11:03:29
@Vecchio Frac
ti ringrazio per ciò che hai scritto, ma sono un vuoto a perdere, dammi retta...
comunque, un cordiale saluto a te e di nuovo al Cucù
Paolo
di Vecchio Frac data: 06/07/2016 11:13:36
Anche il vuoto a perdere ha un suo valore perchè dal vetro riciclato per esempio si potrebbero fare degli specchi, che comunque aiutano le persone a "riflettere".
^_^
di PaoloR2000 data: 06/07/2016 11:48:30
E già,
ma potresti avere anche lo specchio di Narciso, se trasmetti e non ricevi, la tua immagine sarebbe sempre falsa...
Sarai mica toscano Vecchio Frac?
di Vecchio Frac data: 06/07/2016 12:00:59
Però sai la soddisfazione di vedere qualcosa di bello? ^_^
No non sono toscano ma trentino. Comunque non ne farei questione di razza :P
di PaoloR2000 data: 06/07/2016 12:13:52
Vecchio Frac,
bella la tua regione, buon cibo e buon vino, conosco un pochino Trento...
No certo che no, la razza non c'entra mai, ma quella battuta mi sembra averla già sentita dalle mie parti...
Vuoi Approfondire?