Autocompilazione fattura



  • Autocompilazione fattura
    di Andry72 (utente non iscritto) data: 24/02/2013 15:17:35

    Salve a tutti.
    Avrei il seguente problema. Ho un foglio ordini in Excel, dove inserisco gli ordini mensili di vari clienti, con le seguenti colonne: nome cliente, descrizione, quantità, prezzo unitario, importo, cod. serv.
    In un altro foglio Excel ho il modello fattura. Il modello fattura ha una casella di ricerca che va a riportare tutti i dati del cliente, cercando da un foglio di anagrafica.
    Oltre a questi campi, sono presenti le varie colonne con lo stesso nome di quelle del foglio ordini mensili e che vorrei autocompilare con i vari ordini ricevuti (una o più righe quindi) in base al cliente selezionato nella casella di ricerca (Dati >Convalida >Elenco)
    Come posso fare?



  • di HarryBosch data: 25/02/2013 00:59:11

    Ciao Andry
    credo che la funzione =Cerca.verticale sia quella che fa al caso tuo.
    Puoi capirne il reale utilizzo direttamente a questo link:
    h t t p://office.microsoft.com/it-it/excel-help/cerca-vert-HP005209335.aspx

    Ovviamente il tuo file sarà più complesso e magari da sistemare con qualche altra formula; eventualmente servirà un esempio pratico per capire esattamente cosa inserire.

    Con il vba certamente si riuscirebbe a fare, hai qualche esperienza di utilizzo macro?



  • di Andry72 (utente non iscritto) data: 25/02/2013 09:18:53

    Ciao HarryBosch, grazie mille per la risposta. Ho provato con un Cerca.Vert, ma a me servono che tutte le righe corrispondenti al valorse selezionato vengano riportate automaticamente in fattura. Non so come fare se ci sono più righe (record) per lo stesso cliente.
    Nel foglio del "Modulo ordini" che compilo cronologicamente ho una visualizzazione di questo tipo (Es.):

    | Data | Cliente | Descrizione | Quantità | Pr. unit. | Totale | Cod. serv. |
    | 12/02/2013 | AAA | Prova 1 | 100 | 5 | 500 | 1 |
    | 13/02/2013 | AAA | Prova 2 | 200 | 5 | 1000 | 2 |
    | 14/02/2013 | BBB | Prova 3 | 80 | 5 | 400 | 2 |
    | 14/02/2013 | AAA | Prova 4 | 50 | 6 | 300 | 1 |
    | 15/02/2013 | CCC | Prova 5 | 100 | 5 | 500 | 1 |

    Nel foglio "Fattura" di excel, cercando il nome del cliente dalla casella a discesa, utilizzo la funzione cerca.vert in un altro foglio di "Anagrafica clienti" (per l'intestazione della fattura).
    In pratica sto cercando di utilizzare la stessa casella di ricerca per inserire in "Fattura" tutte le righe (record) presenti nel "Modulo ordini" sopra indicato, corrispondenti al cliente selezionato.
    Ad esempio, se nella casella di ricerca del foglio "Fattura" cerco il cliente AAA, in fattura verranno inserite automaticamente tutte le righe (record) presenti per il cliente AAA (in questo caso, 3 righe, con i relativi dati)
    Per quanto riguarda le macro, so crearne solo molto semplici, con la funzione Registra macro, ma qui credo che la cosa sia più complicata.
    Scusami per la lunghezza, ma per inquadrare bene il problema avevo bisogno di descriverlo con maggior chiarezza.




  • di Textomb data: 25/02/2013 17:42:04

    Ho paura che, per come si è espresso Andry, il cerca.vert non è sufficiente...
    Avrai bisogno di ricorrere alle macro.
    Ti consiglio, se possibile, di allegare un file di esempio specifico per le tue esigenze e da quello si potrà sviluppare qualche riga di codice molto più efficace.




  • di Raffaele_53 (utente non iscritto) data: 25/02/2013 19:46:03

    Si potrebbe fare anche con formule (abbastanza laborioso, mà non troppo)
    Prendiamo come esempio la cella D5 in Fattura dove c'è scritto AAA
    e mettiamo che le intestazioni siano in riga 9, pertanto il primo dato da scrivere sarà in A10
    Data Descrizione Quantità Pr. unit. Totale Cod. serv.

    Adesso usiamo la colonna K come appoggio
    In K1 =CONTA.VALORI('Modulo Ordini'!A:A)
    In K10 =CONFRONTA($D$5;INDIRETTO("'Modulo Ordini'!B1:B" & K1);0)
    Ora in A10 =SE(K10="";"";INDIRETTO("'Modulo Ordini'!A" & K10))
    In B10 SE(K10="";"";INDIRETTO("'Modulo Ordini'!C" & K10))
    In C10 SE(K10="";"";INDIRETTO("'Modulo Ordini'!D" & K10))
    come vedi cambio solo la colonna dove prendere il dato. ecc ecc
    Queste formule le puoi trascinare giù.

    Adesso ritorniamo nella cella K11, la formula non è la stessa di K10 mà va modificata.
    CONFRONTA($D$5;INDIRETTO("'Modulo Ordini'!B"&K10+1&":B"&K$1);0)+K10

    Il problema che se non trova nulla va in errore, allora meglio mettere

    =SE(VAL.ERRORE(CONFRONTA($D$5;INDIRETTO("'Modulo Ordini'!B"&K10+1&":B"&6);0)+K10);"";CONFRONTA($D$5;INDIRETTO("'Modulo Ordini'!B"&K10+1&":B"&6);0)+K10)

    Molto meglio una macro



  • di Raffaele_53 (utente non iscritto) data: 25/02/2013 19:53:15

    =SE(VAL.ERRORE(CONFRONTA($D$5;INDIRETTO("'Modulo Ordini'!B"&K10+1&":B"&K$1);0)+K10);"";CONFRONTA($D$5;INDIRETTO("'Modulo Ordini'!B"&K10+1&":B"& K$1);0)+K10)



  • di andry72 (utente non iscritto) data: 26/02/2013 17:34:09

    Grazie