Condividi:        

Macro per copiare righe

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

Re: Macro per copiare righe

Postdi Anthony47 » 22/03/14 00:58

Il file che hai pubblicato non ha nessuna macro allegata, e anche dopo proceduto con l' imposizione delle mani sullo schermo non sono riuscito a capire dove sta' il problema (ci fossi riuscito, aggiungo, mi sarei inquietato). Noto solo che il foglio con la lettera non si chiama "Lettera" (cosa che peraltro non e' obbligatoria, basta che nella macro la variabile DestSh sia impostata di conseguenza.

Tuttavia ti confermo che applicata pari pari la macro gia' suggerita, e facendo le impostazioni di conseguenza (nominato "Lettera" il foglio su cui c' e' il testo della lettera; inserito A30 come posizione in cui accodare l' elenco) il comportamento e' quello che mi aspettavo: vengono preparate e presentate in PrintPreview 4 lettere (perche' 4 sono le PartiteIva presenti in Foglio1) con gli elenchi filtrati.
Quindi riprova facendo quello che ho fatto io, e se non funziona devi allegare il file con le prove fatte.
Unico suggerimento aggiuntivo, la colonna in cui creeremo l' elenco delle partite Iva formattala come Testo prima di avviare la macro, e a fine macro controlla che quello che leggi in colonna Z e' pari ai valori che leggi in colonna A.

Visto che l' elenco non sta' su un foglio A4 in verticale ti suggerisco di rivedere la lettera affinche' sia stampata su foglio orizzontale.
Ci sono inoltre degli importi residui "negativi" di cui dovresti chiarirti il significato.

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

Sponsor
 

lettera tipo xls con macro

Postdi samfla » 23/04/14 21:46

Buonasera
[riprendo una discussione in cui mi ero intromessa in un altro topic viewtopic.php?f=26&t=101543 e] vi chiedo di nuovo aiuto:

vorrei riuscire a stampare senza impazzire una lettera di sollecito di pagamento in calce alla quale riportare l'estratto conto con il suo totale

https://www.mediafire.com/?l4glhxh396ztgkw


come mi aveva scritto Anthony47, ho cercato di salvare nel modulo la macro da lui creata
La macro che si potrebbe usare e' questa:

Codice: Seleziona tutto
Sub mytest()
Dim ListC As String, myFilt As String
'
ListC = "Z" '<<<1 Una colonna LIBERA in cui sara' creato l' elenco dei nominativi
'
Sheets("Foglio1").Select
ActiveSheet.Range("$A:$A").AutoFilter Field:=1 ', Criteria1:="*"
'
'Scegli stampante:
SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If SelPrint = False Then
MsgBox "Stampa Cancellata"
Exit Sub
End If
'
'Crea elenco partite Iva
Range(ListC & ":" & ListC).ClearContents
Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range(ListC & "1") _
, Unique:=True
'Crea elenco per ogni partita Iva
For I = 2 To Cells(Rows.Count, ListC).End(xlUp).Row
If Cells(I, ListC) <> "" Then
myFilt = Cells(I, ListC).Text
ActiveSheet.Range("$A:$A").AutoFilter Field:=1, Criteria1:=myFilt
Range("A1").Select
xxx = RangePublish33("A:J", myFilt)
End If
Next I
ActiveSheet.Range("$A:$A").AutoFilter Field:=1 ', Criteria1:="*"
End Sub


Function RangePublish33(ByVal PRan As String, ByVal PIva As String) As Variant
'
Dim DestSh As String, myCoda As String, myPIva As String
'
DestSh = "Lettera" '<<< Il nome del foglio in cui c' e' il testo della lettera
myCoda = "A30" '<<< La cella in foglio Lettera in cui si comincera' ad accodare
myPIva = "A1" '<<< La cella in foglio Lettera in cui si scrivera' la Partita Iva corrente
'
'Accoda righe e stampa
Sheets(DestSh).Range(myCoda).Resize(200, 20).Clear
Sheets(DestSh).Range(myPIva).Value = "'" & PIva
Application.Intersect(Columns(PRan), ActiveSheet.UsedRange).Copy _
Destination:=Sheets(DestSh).Range(myCoda)
'
Sheets(DestSh).PrintPreview '**1
'Sheets(DestSh).PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False '**2
'
Stop '!!! Vedi Testo
'
End Function

(scusate ma non so come si fa a inserire i moduli)
ma quando la lancio non mi si creano le lettere

a sbagliare sono io di sicuro ma non capisco dove, per favore mi aiutate??

Samfla


Ps. avevo in sbaglio inserito il topic in Sistemi Operativi Windows se qualcuno dei moderatori lo puo' cancellare...grazie e scusate

ps. quando salvo il file in ".xlsm" e poi lo provo a riaprire mi dice che
dati.xlms contiene contenuto illegibile. recuperare il contenuto della cartella di lavoro? se la cartella di lavoro proviene da fonte attendibile scegliere si.... quando do ok mi dice che ha dovuto ripristinare delle righe

Parte ripristinata: Parte /xl/worksheets/sheet1.xml con errore XML. Errore di caricamento. Riga 2, colonna 160278.
Parte ripristinata: Parte /xl/worksheets/sheet3.xml con errore XML. Errore di caricamento. Riga 2, colonna 3763.

grazie per l'aiuto a tutti
samfla
Newbie
 
Post: 6
Iscritto il: 18/03/14 22:06

Re: Macro per copiare righe

Postdi Anthony47 » 24/04/14 01:04

Ho riportato il nuovo messaggio in coda alla discussione precedente.

Partendo dal file che hai allegato:
-la macro ti inserira' in A1 del foglio "Lettera" la partita Iva del cliente a cui va la lettera; devi usare questa informazione per inserire nel testo della lettere un vero nominativo e un vero indirizzo. Per questo devi usare formule con Cerca.Vert. Ad esempio, se in G1 di Lettera vuoi inserire la Denominazione del destinatario userai la formula
Codice: Seleziona tutto
=CERCA.VERT(A1;Foglio2!A:D;3;0)

(ho immaginato che questa informazione sia reperibile in colonna C di Foglio2, che contiene l' anagrafica dei clienti; se non e' in colonna C adatta la formula rispettando la sintassi del Cerca.Vert)
Con altre formule analoghe calcolerai gli altri campi variabili della lettera, es Indirizzo, Cap, Citta' e quant'altro vorrai stampare.

La macro inoltre creera' l' elenco delle posizioni arretrate da A30 in avanti; poiche' l' importo residuo e' in colonna J, da qualche parte della lettera dovrai calcolare la somma di queste pendenze (penso che anche tu vuoi sapere se mandi un sollecito per 87 Euro piuttosto che per 12000 Euro). Quindi da qualche parte inserirai la formula
Codice: Seleziona tutto
=Somma(J30:J1000)


Completata la predisposizione del file dovrai inserire la macro: per questo, partendo da Excel
-premi Alt-F11; ti si aprira' l' editor delle macro
-Menu /Inserisci /Modulo
-copia il codice della macro e incollalo nel frame di destra
Va bene il codice che hai pubblicato (e' quello che ti avevo suggerito con la specializzazione di alcune variabili) con una unica variazione:
-le tue partite iva sono memorizzate come numeri, la macro originale si aspettava fossero Testi; modifica quindi la riga Sheets(DestSh).Range(myPIva).Value = "'" & PIva in
Codice: Seleziona tutto
Sheets(DestSh).Range(myPIva).Value = PIva

Ci sono delle cose ulteriori che devi ancora fare sul tuo foglio Lettera.
Ad esempio devi controllare la larghezza delle colonne in cui incolli i dati relativi all' arretrato, che siano di larghezza e formattazione (grandezza caratteri, allineamento, etc) che rendano leggibile quanto si invia. Poi difficilmente tutte le colonne staranno in un foglio A4-Verticale, probabilmente ti converra' impostare un formato A4-Orizzontale (copia a mano le intestazioni di Foglio1 e un tot di righe in A30 di Lettera per avere un esempio di dati).
Questo potrebbe avere un impatto anche sul testo standard e la sua posizione.

Quando e' tutto pronto, vai su Foglio1 e avvia la macro mytest: Alt-F8, seleziona mytest dall' elenco che ti propone, premi Esegui.
Altre istruzioni erano gia' contenute nei miei due messaggi precedenti.

Quanto alla copia in formato xlsm questo e' obbligatorio se vuoi inserire delle macro; il formato xlsx non supporta le macro. La corruzione file non so a cosa possa essere dovuto, ma mi sento di escludere che dipende dal salvataggio in formato xlsm.

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

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Macro per copiare righe":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti