Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[excel] macro per creare ricevute

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

[excel] macro per creare ricevute

Postdi rosy2 » 18/11/13 17:37

Ciao a tutti,

per la onlus con la quale collaboro vorrei preparare una macro che, a partire da un foglio (ELENCO.xls) con N righe di dati(nome, cognome, cod, fisc., indirizzo, importo etc), crei per ogni riga di ELENCO.xls, in un'altro workbook(RICEVUTE.xls), un foglio che e' praticamente una ricevuta fiscale numerata.
Oltre ai dati variabili devo inserire in ogni ricevuta anche dei dati fissi (data, luogo etc...) presenti in un foglio a parte di ELENCO.xls.
Poi per ognuno di questi fogli "ricevuta" dovrei creare una pagina pdf e poi un file pdf unico che le comprenda tutte, da mandare in stampa (che serve anche per l'archiviazione)...
Secondo voi e' possibile fare tutto questo con una macro? Come si puo' fare?

Grazie mille a tutti per l'aiuto!!! :)

qui ho messo un esempio dei fogli, con dati fittizi. Grazie ancora :)

http://rapidshare.com/share/2FFA917AA6F ... 904F49073C
Io uso...: Win7 + Office 2010 - in Italiano
rosy2
Utente Junior
 
Post: 28
Iscritto il: 17/04/13 11:02

Sponsor
 

Re: [excel] macro per creare ricevute

Postdi Anthony47 » 19/11/13 23:56

Io ragionerei in modo diverso...
Il foglio attuale (supponiamo sia Foglio1) e' gia' un elenco di ricevute, basta che oltre alle colonne gia' presenti fai confluire su questo stesso foglio, in altre colonne, i dati ora presenti sul secondo foglio.
Sempre sullo stesso file inserisci un foglio che rappresenti la ricevuta stampata; per questo mapperai sul foglio un tot di scritte fisse e un tot di info che arrivano dalla riga attiva del primo foglio.
Per facilitare questa operazione, in una cella libera di Foglio1 (es Z1) scriverai il numero di riga al momento selezionato; per questo userai una macro di "SelectionChange". Poi sul foglio Ricevuta userai formule del tipo
Codice: Seleziona tutto
=INDIRETTO("Foglio1!B"&Foglio1!$Z$1)
Questa preleva il contenuto di Foglio1-Bxx, dove xx e' la riga al momento attiva.
Per stampare la singola ricevuta ti bastera' selezionare la ricevuta su foglio1 e poi mandare in stampa il foglio Ricevuta.

Per stampare l' intero elenco farai un ciclo For /Next per selezionare uno dopo l' altro le righe di Foglio1 e mandare in stampa foglio Ricevuta.
Non ho capito pero' se le stampe singole e complessiva devono essere su carta o su file pdf.

Se questo approccio puo' funzionare possiamo approfondire, in funzione delle tue abilita' sul tema vba.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro per creare ricevute

Postdi rosy2 » 20/11/13 13:31

Grazie mille Anthony per la tua risposta! :)

l'idea che proponi e' molto bella e senz'altro avere un unico foglio sarebbe il massimo, ma io non saprei come fare alcune cose:

2) le ricevute devono essere consegnate, in momenti diversi,a chi ha pagato, e mi servirebbe quindi una "print selected" di un subset di ricevute (righe)selezionate dopo sort(ad es. tutte quelle con una certa causale, o tutte quelle di un determinato periodo, o tutte quelle di uno specifico utente...) E' possibile, con il metodo che suggerisci?
Sinora si stampavano tutte le ricevute e poi si ricercavano a mano per selezionarle, con spreco di tempo e carta (non tutti ritiravano le ricevute).
Creando un foglio per ogni ricevuta(con per nome il progressivo della ricevuta) avrei potuto approfittare della "stampa fogli attivi", selezionando a mano le ricevute identificate dal numero progressivo nell'elenco principale.

3) Il foglio delle ricevute viene spesso sortato (per analisi dati, e suddivisione per causale, etc.) Questo e' compatibile con l'utilizzo di celle di appoggio (ad es. la Z1 di cui mi dici) utilizzate per mettere il numero della riga selezionata ? Non si sposterebbero le celle di appoggio, con i sort?

4) le ricevute dovrebbero essere stampate sia con la stampante locale che come pdf, con la stampante se sono poche (capita quando un contributore desidera ricevere quelle a lui intestate o una copia), sia mediante pdf da portare in copisteria se sono molte (ad esempio tutte quelle relative ad una causale) e il costo risulta inferiore rispetto alla stampa in locale.
Poi per motivi di archiviazione poi serve un pdf unico per mese o anno.

La mia conoscenza VBA tende allo zero, :oops: purtroppo, pero' posso imparare.... :) Grazie ancora per il tuo aiuto.
Io uso...: Win7 + Office 2010 - in Italiano
rosy2
Utente Junior
 
Post: 28
Iscritto il: 17/04/13 11:02

Re: [excel] macro per creare ricevute

Postdi Anthony47 » 21/11/13 02:10

Direi che si possono fare moltissime cose, ma spero che "molte" le possa fare tu, con qualche utile suggerimento.

Comincia a fare in modo che sul foglio Ricevuta si crei una ricevuta attingendo alla riga "selezionata" di Foglio1.
La preoccupazione che la cella di appoggio possa essere rimescolata con ordinando il foglio la possiamo superare... ad esempio basta scegliere una cella in una colonna fuori dall' intervallo delle colonne che vanno ordinate ("tutte" quelle che contengono dati); oppure scegliendo una cella sul foglio Ricevuta, fuori dall' area di stampa che imposterai. Optiamo per questa seconda soluzione (quindi uso di cella su foglio Ricevuta) e immaginiamo di usare Z1 (assumendo quindi che sul foglio Ricevuta impostera l' area di stampa che non arriva a colonna Z); metterai sul Foglio1 una macro di SelectionChange di questo tipo:
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count > 1 Then Exit Sub
CheckArea = "A:A"
If Application.Intersect(Target, Range(CheckArea)) Is Nothing Then Exit Sub
Sheets("Ricevuta").Range("Z1").Value = Target.Row
End Sub
Procedura: tasto dx sul tab col nome Foglio1, scegli Visualizza codice, copia il codice e incollalo nel frame di destra dell' editor delle macro.
Torna su Excel, seleziona una cella di Foglio1 - colonna A e controlla in Ricevuta-Z1; se funziona, usa Z1 nelle formule (che devi inventare seguendo il suggerimento del messaggio precedente) che puntano ai dati di Foglio1-riga indicata da Z1 per comporre la ricevuta.
Controlla che cambiando la selezione in col A di Foglio1 cambi il contenuto su Ricevuta.

Per mandare in stampa singole ricevute credo che non avrai difficolta': seleziona la ricevuta in Foglio1-colonna A, vai su Ricevuta, Stampa.

Per stampare piu' ricevute appartenenti a righe adiacenti potrai usare una macro come questa:
Codice: Seleziona tutto
Sub MultiPrint()
Dim Wks As Worksheet, PrintAra As String, Ricev As Range
Set Wks = ThisWorkbook.Worksheets("Ricevuta")
'
If Application.Intersect(Selection, Range("A:A")) Is Nothing Then
    MsgBox ("Selezionare un' area in colonna A" & vbCrLf & "Processo abortito")
    Exit Sub
End If
Printar = Application.Intersect(Selection, Range("A:A")).Address

aaa = Selection.Address
SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If SelPrint = False Then
    MsgBox "Stampa Cancellata"
    Exit Sub
End If

For Each Ricev In Range(Printar)
    Ricev.Select: DoEvents: DoEvents
    Beep
    Wks.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
Next Ricev
'
End Sub

Da excel, Alt-F11 per aprire l' editor delle macro; MEnu /Inserisci /Modulo; copia il codice e incollalo nel frame vuoto di dx.
Funzionamento:
-ordina il tuo elenco come preferisci
-seleziona in colonna A un tot di righe adiacenti (es A20:A30)
-manda in esecuzione la macro
Ti chiedera' su quale stampante stampare e successivamente verranno eseguite le stampe delle ricevute corrispondenti alle righe selezionate.
Se vuoi stampare su file pdf il mio suggerimento e' che installi una stampante virtuale tipo PDFCreator; puoi scaricare il programma qui: http://sourceforge.net/projects/pdfcreator/
Dopo l' installazione, una stampante "PDFCreator" sara' visibile a tutte le applicazioni Windows, il suo uso comporta la creazione e salvataggio di un file pdf.
Con questa stampante potrai anche creare file contenente ricevute multiple:
-selezioni le righe da stampare e avvii la macro
-sulla prima stampa invece di dargli il nome file scegli "Waiting" (Metti In Coda)
-tutte le altre stampe saranno accodate automaticamente
-quando hai finito seleziona i documenti presenti in PdfCreator e fai Document /Combine (Documento /Unisci) e poi Document /Print del doc unificato.

Non conosco il limite di quanti documenti possono essere accodati e poi uniti con PdfCreator, e' una prova che dovrai fare tu

Spero che siano spunti utili.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro per creare ricevute

Postdi rosy2 » 21/11/13 22:05

Ciao Anthony! :) :) :) :)

Innanzi tutto grazie grazie grazie, funziona tutto come un gioiello!

Ho fatto tutto come mi hai scritto :idea: ed e' tutto + che ok!!
Non solo: ho verificato che la stampa delle ricevute funziona benissimo anche con selezione di celle(ma anche righe) non adiacenti (pero' non ho mica capito il perche'.... :oops: ) e che PdfCreator riesce a gestire fino a 2000 files di ricevute (oltre non sono andata perche' i tempi di elaborazione sono un po' lunghi con cosi' tanti files...)

Il file ok e' qui sotto... :D

Mi e' venuta in mente una domanda, adesso che mi hai spiegato che excel puo' "reagire" alla selezione delle celle....: e' possibile fare una somma in una casella specifica a seconda delle celle che vengono selezionate?

Ancora grazie mille, davvero! :)




http://rapidshare.com/share/E2A9B481075B37E838A2D6B921C0F4F5
Io uso...: Win7 + Office 2010 - in Italiano
rosy2
Utente Junior
 
Post: 28
Iscritto il: 17/04/13 11:02

Re: [excel] macro per creare ricevute

Postdi Anthony47 » 22/11/13 00:54

Come vedi le cose che non si sanno fare sembrano insuperabili, fino a quando non le superi...
Ti segnalo anche la disponibilita' di una funzione "SpellIt", qui: viewtopic.php?p=552275#p552935

Quanto alla domanda sulla "somma in una casella specifica a seconda delle celle che vengono selezionate" la risposta e' Si; se vuoi un aiutino "ulteriore" dovrai pero' dire quali sono le celle da sommare, in quale situazione va fatta la somma e dove va messo il risultato.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro per creare ricevute

Postdi rosy2 » 22/11/13 12:04

Grazie Anthony!! :)

Bella la funzione "Spellit"! l'ho inserita subito e funziona alla grande. Comoda!! :lol: Non riesco a inserire /00 ma solo /0 sui decimali, ma sto cercando di capire perche' ....

Adesso che ho scoperto l'esistenza di "SelectionChange", mi sarebbe piaciuto inserire il totale degli importi delle sole ricevute selezionate anche solo come nota per semplificare i conteggi contabili (e magari in riga 1 di ELENCO cosi' da non disturbare i sort). Avevo pensato che fosse possibile inserire una colonna nascosta "importo2" dove riportare gli importi della colonna "importo" solo se selezionati, (come fatto per la cella Z1) e poi fare una somma della colonna "importo 2".... facendo un test cosi' pero' mi sembra che non funzioni, perche' annullando la selezione le celle di "importo 2" non tornano a zero :oops: .... Dove sbaglio?

Grazie ancora tantissimo!!
Io uso...: Win7 + Office 2010 - in Italiano
rosy2
Utente Junior
 
Post: 28
Iscritto il: 17/04/13 11:02

Re: [excel] macro per creare ricevute

Postdi wallace&gromit » 22/11/13 14:50

Anthony47 ha scritto: le cose che non si sanno fare sembrano insuperabili, fino a quando non le superi...


It always seems unpossible until it's done - Nelson Mandela

Plagiato da Anthony :lol:
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: [excel] macro per creare ricevute

Postdi rosy2 » 26/02/14 16:13

Ciao a tutti e a Anthony!! :)

riprendo questo post perche' avrei bisogno di una cosa che vi potra' sembrare davvero strana :D vorrei provare a rallentare l'elaborazione della macro.... lo so che di solito si cerca di fare esattamente il contrario, ma...mi spiego meglio. :eeh:

La macro che Anthony mi ha dato e' fantastica e finalmente ho potuto creare il mio primo pdf di circa 250 ricevute, utilizzando anche Pdf Creator. Osservando pero' il contenuto del pdf prodotto, mi sono accorta che le ricevute (che sono correttamente ordinate per numero ricevuta nel foglio di partenza) nel pdf creato invece non sono in realta' nell'ordine "normale" (1,2,3,4,5,6...)ma ogni tanto una risulta invertita con la ricevuta successiva (tipo 1,2,3,5,4,6....). :eeh:
Pdf Creator crea un file per ogni riga del foglio ricevute, e lo spedisce in coda di stampa ed e' li' che le trovo nell'ordine errato.
Ho pensato che data la velocita' dell'elaborazione, le varie ricevute possano essere accodate non correttamente e quindi vorrei provare a "rallentare" l'elaborazione, per capire se e' questo che genera il disallineamento. Certo non e' un problema grave, posso sempre riordinare le ricevute quando stampate, pero' ... vorrei capire!

Qualcuno di voi per favore conosce un modo per rallentare per prova questa macro?

Grazie mille a tutti
Io uso...: Win7 + Office 2010 - in Italiano
rosy2
Utente Junior
 
Post: 28
Iscritto il: 17/04/13 11:02

Re: [excel] macro per creare ricevute

Postdi Anthony47 » 26/02/14 17:43

Dove vuoi rallentare, ad esempio prima di Next Ricev nella Sub MultiPrint, puoi inserire queste istruzioni:
Codice: Seleziona tutto
Do
    DoEvents
    If Timer > myStart + 2 Or Timer < myStart Then Exit Do
Loop
Questa "frena" per 2 secondi, consentendo l' evoluzione dei processi di sistema.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] macro per creare ricevute

Postdi rosy2 » 27/02/14 19:03

Anthony grazie, sei un grandissimo! :)

Adesso con questa tua modifica le mie ricevute escono tutte ordinatissime e precise, cosi' quando le stampo sono gia' tutte a postissimo... una meraviglia!

grazie grazie grazie :) :) :) :) :)
Io uso...: Win7 + Office 2010 - in Italiano
rosy2
Utente Junior
 
Post: 28
Iscritto il: 17/04/13 11:02


Torna a Applicazioni Office Windows


Topic correlati a "[excel] macro per creare ricevute":


Chi c’è in linea

Visitano il forum: Anthony47 e 6 ospiti