Condividi:        

[Excel] Schede riepilogative

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] Schede riepilogative

Postdi sax » 03/08/06 08:42

Ho un file importato su exel in cui vi è una lista di clienti con le varie fatture emesse e i pagamenti, solo che non li mette in ordine di data vorrei inserire un codice in vba che ordini all'interno della scheda cliente le righe per data ed inoltre nella colonna E come ho scritto nel commento il saldo parziale e totale del cliente ed il saldo totale di tutti i clienti scritto in basso nell'ultima cella
ho cercato di utilizzare l'istruzione ultima cella vuota ma va a posizionarsi in F801
Grazie per auito

http://freefilehosting.net/?id=rdn2kqjb/A==
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Sponsor
 

Postdi Anthony47 » 05/08/06 19:54

Ciao Sax,
ho guardato (con calma) il problema segnalato, e ti ho caricato su freefilehosting un file con una proposta di soluzione.
Vedi http://freefilehosting.net/?id=rdn2lq3e8w==
Il mio codice e’ sul Modulo4, non ho fatto nessuna verifica/modifica sulle tue macro.
Il cuore della mia proposta e’ la macro ByCliente(), che azzera il foglio di destinazione, poi scorre il foglio di origine, determina se e’ una riga di un nuovo Cliente (C00 in colonna A), o se e’ una riga fattura (colonna A contiene una data); copia su foglio Saldo le fatture che appartengono a quel Cliente senza nessuna ulteriore operazione o verifica; in caso di cambio Cliente (cioe’ una riga con un codice Cliente) 1)ordina per data fattura l’ area compilata, 2)mette i subtotali di Dare, Avere e Saldo e infine 3)inizializza una nuova area per il nuovo Cliente. A fine scan, vengono messi i totali di tutti i Clienti.

Tra i parametri che potrai settare (prime righe della macro) c’ e’ il “marker” del codice cliente (ora settato su C00; tutto quello che comincia con il valore settato viene interpretato come codice Cliente), la posizione dell’ header (ora settato su A4:E4), il nome del foglio con i dati di Origine (ora su Origine) e destinazione (ora Saldo).

Scarica il file e vedi se quanto proposto ti aiuta.

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

Postdi sax » 07/08/06 09:28

il codice funziona
però ho cambiato "Origine" con "Foglio1" e "Saldo" con "Foglio2"
l'unico problema che si pone è che non copia la vera intestazione del cliente ma la parola "Intestazione Cliente C00000"
vi è un problema nei totali "dare e avere" che non sono formattati in euro e nei totali parziali della colonna "E" che non eseguono la somma e la sottrazione a secondo in nuovo l'ordine ma rispettando quello vecchio
Grazie di tutto
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Anthony47 » 07/08/06 22:59

Ok per Foglio1 e Foglio2: le variabili DestSHEET e SorgSHEET sono state previste proprio per questo. Tuttavia io sono contrario all’ uso dei fogli anonimi: se per esempio lanci (ovviamente per errore) la macro quando sei su un altro workbook, il Foglio2 (DestSHEET) viene cancellato (senza possibilita’ di “Annulla”).

Per avere “la vera intestazione del cliente”, sostituisci in blocco le istruzioni che ho commentato con le nuove che seguono:

Codice: Seleziona tutto
'SE INVECE NumCLI = 0 Then

‘LE PROSSIME  6 RIGHE VANNO ELIMINATE E SOSTITUITE COL NUOVO CODICE
'NomeCLI = CVAL
'Sheets(DestSHEET).Select
'Range("A65536").End(xlUp).Offset(2, 0).Select
'     Selection.Value = NomeCLI
'     Selection.Offset(0, 1).Value = TitCLI & NomeCLI
'FattCORN = Selection.Offset(1, 0).Address

NomeCLI = CVAL
Sheets(SorgSHEET).Select
Selection.Range("A1:B1").Copy
Sheets(DestSHEET).Select
Range("A65536").End(xlUp).Offset(2, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
FattCORN = Selection.Offset(1, 0).Range("A1").Address


Per formattare come da tuo campione le celle dei subtotali, aggiungi nella macro SUBT la seguente istruzione di formattazione subito dopo ognuna delle le 3 istruzioni ActiveCell.Formula

Codice: Seleziona tutto
    Selection.NumberFormat = _
        "_-""€"" * #,##0.00_-;-""€"" * #,##0.00_-;_-""€"" * ""-""??_-;_-@_-"


Per i totali parziali in colonna E, io li prendo dal foglio sorgente e li copio nel foglio destinazione, poi ordino le colonne dalla A alla E (secondo il numero di colonne specificate in HeadADR); se sono sbagliati (e nell’ esempio che hai pubblicato "sono" sbagliati) e’ perche’ li calcola errati il programma che ti esporta i dati.

Ti torna?
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Anthony47 » 08/08/06 01:15

I caratteri illegibili sono il simbolo dell' euro, ci riprovo:
Codice: Seleziona tutto
    Selection.NumberFormat = _
        "_-""€"" * #,##0.00_-;-""€"" * #,##0.00_-;_-""€"" * ""-""??_-;_-@_-"


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

Postdi Anthony47 » 08/08/06 01:17

Niente da fare; quando lo digito vedo correttamente il simbolo dell' Euro, quando rileggo il post sul forum e' diventato un carattere illegibile.

Ma spero si capisca cosa vada scritto.

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

Postdi Anthony47 » 08/08/06 01:23

Grrrr…
Mi sono accorto che il ciclo For e’ piu’ corto di quanto dovrebbe per un errore nel calcolo della prima riga: sostituisci nella macro l’ istruzione commentata con la seguente:

'PriRow = Range(HeadADR).End(xlDown).Row 'ERRATA
PriRow = Range(HeadADR).Row 'CORREZIONE

Adesso mi scollego cosi’ non vedo piu’ niente…
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sax » 08/08/06 11:06

Ok Grazie di tutto adesso funziona
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi sax » 08/08/06 18:12

Vorrei Sapere come posso inserire la formula seguente in un range da E3:E1000 in codice VB


Codice: Seleziona tutto
=SE(A4="";"";SE(SINISTRA(A4;3)="c00";"";SE(SINISTRA(A4;3)="rie";+C4-D4;SE(E3="";C4-D4;+E3+C4-D4))))
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Anthony47 » 09/08/06 00:02

Ciao Sax,
Te la cavi con
Codice: Seleziona tutto
With Range("E3:E1000")
.Formula = "=IF(A4="""","""",IF(LEFT(A4,3)=""c00"","""",IF(LEFT(A4,3)=""rie"",C4-D4,IF(E3="""",C4-D4,E3+C4-D4))))"
End With


Ho un paio di dubbi:
Ma la formula va sulla riga 3 o non sulla riga 4? E poi, che significato ha mettere in E3 una formula che al suo interno contiene un test sulla stessa E3? (IF(E3="""",C4-D4,E3+C4-D4)).
Stai cercando di calcolare la sommatoria dei saldi? Perche’ se cosi’ allora la formula dovrebbe essere =SE(SINISTRA(A3;3)="c00";0;SE(A3="";"";SE(SINISTRA(A3;3)="Rie";C3-D3;C3-D3+E2)))
che in vba oramai sai come codificare: IF/SE, LEFT/SINISTRA, doppio apice invece del singolo apice, ad eccezione del primo e dell’ ultimo, che sono i delimitatori di testo.

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

Postdi sax » 09/08/06 07:45

Perfetto Grazie
avevi visto bene era da inserire da E4 :)
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Schede riepilogative":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti