Modulo Fattura Dinamico – Parte 2. No Code

Come già accennato, in questa lezione popoleremo le righe relative agli articoli sfruttando le funzioni di ricerca 👉 [vedi tutorial precedente]. Effettueremo la ricerca sia per codice che per descrizione, recupereremo prezzo, IVA, inseriremo manualmente eventuale sconto, e costruiremo tutte le formule necessarie per calcolare importi, sconti e totale IVA.

Inoltre utilizzeremo alcune funzioni condizionali, fondamentali per gestire correttamente i casi particolari e rendere il modulo più intelligente e flessibile.

Per chi desidera approfondire nel dettaglio:

  • le logiche di calcolo

  • la logica condizionale

  • l’uso combinato di funzioni come IF, IFS, IFERROR, SUMIF, COUNTIF, ecc.

ho preparato due tutorial dedicati, disponibili ai seguenti link:

👉 [Link 1 – Logiche di calcolo] 👉 [Link 2 – Funzioni condizionali]

Come già fatto nella lezione precedente, rendiamo dinamico e fluido l’inserimento del codice articolo utilizzando la Convalida dati.

Posizioniamoci nella cella B15 e impostiamo una casella a discesa che mostri tutti i codici disponibili.

📘 Percorso dei menu

🇺🇸 Excel EN‑US

Data → Data Tools → Data Validation

IT - Excel Italiano

Dati → Strumenti dati → Convalida dati

 

🔄 Terminologia EN‑US ↔ ITA

Data Validation → Convalida dati Validation Criteria → Criteri di convalida List → Elenco Source → Origine

🔧 Impostazione della convalida dati

Una volta aperta la finestra di convalida:

Punto 1. Criteri di convalida / Validation Criteria

  • selezioniamo Elenco / List

 

Origine / Source

inseriamo:

=Prodotti!$C$2:$C$12

Questa è la colonna dei codici articolo.

💡 TIP

Nel mio esempio didattico mi sono fermato alla riga 12, ma voi potete estendere l’intervallo quanto volete, ad esempio:

=Prodotti!$C$2:$C$12000

o anche oltre, se avete molti articoli.

🎯 Risultato

Ora, cliccando sulla cella B15, comparirà una casella a discesa con tutti i codici articolo. Una volta selezionato un codice, nelle celle successive potremo recuperare automaticamente:

  • descrizione

  • prezzo

  • IVA

  • eventuale sconto

…esattamente come abbiamo fatto per i dati del cliente.

Posizioniamoci ora nella cella D15 e inseriamo la seguente formula:

=XLOOKUP(B15; tblArticoli[Codice]; tblArticoli[Nome prodotto]; "Articolo non trovato"; 0)

Questa formula cerca il codice articolo selezionato in B15 all’interno della colonna Codice della tabella tblArticoli, e restituisce il relativo Nome prodotto. Se il codice non viene trovato, verrà visualizzato il messaggio "Articolo non trovato".

🔄 EN‑US ↔ ITA

Nelle versioni italiane di Excel, XLOOKUP corrisponde a CERCA.X.

Esempio italiano:

=CERCA.X(B15; tblArticoli[Codice]; tblArticoli[Nome prodotto]; "Articolo non trovato"; 0)

📘 Approfondimento consigliato

Per chi desidera consultare tutte le corrispondenze tra funzioni inglesi e italiane, rimando al download della tabella comparativa delle funzioni Excel EN‑US vs ITA

 

Ora la traduciamo per chi utilizza Excel 2016 o versioni precedenti, dove XLOOKUP non esiste.Versione INDEX + MATCH equivalente

=INDEX(tblArticoli[Nome prodotto]; MATCH(B15; tblArticoli[Codice]; 0))

🧠 Spiegazione didattica

  • MATCH(B15; tblArticoli[Codice]; 0) Cerca il codice inserito in B15 nella colonna Codice della tabella articoli e restituisce il numero di riga corrispondente.

  • INDEX(tblArticoli[Nome prodotto]; … ) Usa quel numero di riga per estrarre il Nome prodotto dalla colonna dedicata.

⚠️ Nota importante

INDEX + MATCH non permette di inserire un messaggio personalizzato come "Articolo non trovato" direttamente nella formula. Se vuoi replicare lo stesso comportamento, puoi aggiungere IFERROR / SE.ERRORE:

EN‑US

=IFERROR(INDEX(tblArticoli[Nome prodotto]; MATCH(B15; tblArticoli[Codice]; 0)); "Articolo non trovato")

ITA

=SE.ERRORE(INDICE(tblArticoli[Nome prodotto]; CONFRONTA(B15; tblArticoli[Codice]; 0)); "

 

Prezzo unitario – cella O15

Formula moderna (XLOOKUP):

=IF(B15="";""; XLOOKUP(B15; tblArticoli[Nome prodotto];tblArticoli[Prezzo unitario]; 0))

In italiano:

=SE(D15="";"";CERCA.X(B15; tblArticoli[Codice]; tblArticoli[Prezzo unitario]; 0))

IVA – cella Q15

Formula moderna (XLOOKUP):

=XLOOKUP(B15; tblArticoli[Codice]; tblArticoli[IVA]; 0)

In italiano:

=CERCA.X(B15; tblArticoli[Codice]; tblArticoli[IVA]; 0)

Qui potete aggiungere la condizione SE o IF come la formula sopra se volete che la cella rimanga vuota in mancanza di altri valori.

🔄 Versioni equivalenti con INDEX + MATCH (per Excel 2016 e precedenti)

Prezzo unitario – O15

=INDEX(tblArticoli[Prezzo unitario]; MATCH(B15; tblArticoli[Codice]; 0))

IVA – Q15

  =INDEX(tblArticoli[IVA]; MATCH(B15; tblArticoli[Codice]; 0))

🧠 Nota didattica 

  • MATCH(B15; … ; 0) cerca il codice articolo nella colonna Codice

  • INDEX(… ; MATCH) restituisce il valore corrispondente nella colonna desiderata

  • Come detto prima INDEX + MATCH non permette un messaggio personalizzato come “Articolo non trovato” → per replicarlo, puoi usare SE.ERRORE / IFERROR

Esempio:

=SE.ERRORE(INDICE(tblArticoli[IVA]; CONFRONTA(B15; tblArticoli[Codice]; 0))

 

 

Adesso, selezionando il codice prodotto tramite la casella a discesa, verranno compilati automaticamente i campi relativi all’articolo: in O15 apparirà il Prezzo unitario, mentre in Q15 verrà mostrata l’aliquota IVA corrispondente (vedi figura). Abbiate cura di formattare in Currency (Formato valuta) l’intervallo di celle relativo al Prezzo, e in Percentuale (%) l’intervallo relativo all’aliquota IVA, così da garantire una visualizzazione corretta e professionale dei valori.

Avrei potuto bypassare il problema correggendo direttamente un dettaglio che Excel fa sembrare quasi uno scherzo… ma preferisco soffermarmi un momento, perché molti non lo sanno e vale davvero la pena chiarirlo.

Avrete sicuramente notato che in Q15 compare un valore anomalo, ad esempio 2200%. Questo accade perché nella colonna IVA del foglio Prodotti le aliquote sono state inserite come:

  • 4,00

  • 10,00

  • 22,00

Excel interpreta questi valori come 4, 10, 22 (cioè 400%, 1000%, 2200%).

Per ottenere un risultato corretto, è sufficiente modificare i valori della colonna IVA inserendoli nel formato decimale, cioè:

  • 0,04

  • 0,10

  • 0,22

(vedi figura)

In questo modo Excel potrà calcolare correttamente l’aliquota percentuale e visualizzarla come 4%, 10%, 22%.

Obiettivo del calcolo in R15

La cella R15 deve restituire:

Quantità (C15) × Prezzo unitario (O15)

  • IVA (Q15)Eventuale sconto (P15)

In pratica:

Totale riga = (Quantità × Prezzo) + IVA − Sconto

🔧 Formula consigliata (chiara e robusta)

La formula più pulita e comprensibile è:

=C15*O15 + (C15*O15*Q15) - P15

Questa è la versione più didattica, perché mostra chiaramente:

  • C15 × O15 → imponibile

  • C15 × O15 × Q15 → IVA

  • − P15 → eventuale sconto inserito manualmente.

Versione con SE (IF) per gestire lo sconto opzionale

Se vuoi evitare errori quando P15 è vuota:

=C15*O15 + (C15*O15*Q15) - SE(P15=""; 0; P15)

Versione con SE.ERRORE (IFERROR) per massima sicurezza

=IF(C15="";""; IFERROR(C15*O15 + (C15*O15*Q15) - P15; 0))
Questa struttura fa sì che la cella R15 rimanga completamente vuota quando mancano i valori necessari al calcolo, evitando la comparsa di fastidiosi zeri, errori o risultati non desiderati. Solo quando in C15 (Quantità) è presente un valore, Excel esegue il calcolo completo della riga.

 

A questo punto potete selezionare l’intervallo di celle B16:B46 e ripetere gli stessi passaggi descritti nel Punto 1 – Criteri di convalida / Validation Criteria, così da creare la casella a discesa anche per tutte le righe successive.

Allo stesso modo, selezionate l’intervallo D16:D46 e impostate la convalida dati per la colonna relativa alla Descrizione prodotto, avendo cura di inserire in Origine dati la formula corretta, come mostrato nella figura:

=Prodotti!$B$2:$B$12Naturalmente, potete estendere l’intervallo in base alle vostre necessità, ad esempio:

=Prodotti!$B$2:$B$12000

 

Quindi, per permetterci di effettuare la ricerca anche tramite Nome prodotto, posizioniamoci questa volta nella cella B15 e inseriamo la seguente formula:

=IF(D15="";""; XLOOKUP(D15; tblArticoli[Nome prodotto];tblArticoli[Codice]; "Non trovato"; 0)

La suddetta formula:

(oppure, in italiano)

=SE(D15="";""; CERCA.X(D15; tblArticoli[Nome prodotto]; tblArticoli[Codice]; "Non trovato"; 0))

funziona in questo modo:

👉 La condizione IF / SE controlla prima se la cella D15 è vuota.

  • Se D15 è vuota → restituisce una cella vuota, evitando che Excel mostri il fastidioso “Non trovato”.

  • Se D15 contiene un valore → esegue la ricerca XLOOKUP e restituisce il codice prodotto corretto.

In altre parole, la funzione SE è fondamentale per impedire che Excel mostri “Non trovato” quando non c’è ancora nulla da cercare. È un piccolo accorgimento, ma rende il foglio molto più pulito e professionale.

Questa formula cerca il Nome prodotto inserito in D15 all’interno della colonna Nome prodotto della tabella articoli e restituisce il Codice articolo corrispondente. Nelle versioni italiane di Excel, XLOOKUP corrisponde a CERCA.X.

Per chi utilizza versioni meno recenti di Excel (2016 o precedenti), la formula equivalente con INDICE + CONFRONTA è:

=SE(D15="";""; INDICE(tblArticoli[Codice]; CONFRONTA(D15; tblArticoli[Nome prodotto]; 0)))

La logica è corretta ma c'è un "però". La formula  scritta funziona perfettamente solo se il dato in D15 esiste sicuramente nella tabella.

Se il valore in D15 non viene trovato (magari per un errore di battitura o perché il prodotto è stato eliminato), la formula restituirà l'errore #N/D (o #N/A). Poiché hai chiesto esplicitamente di lasciare la riga vuota anche in caso di problemi e di non usare SE.ERRORE, il CONTA.SE (o COUNTIF) è l'unico modo per "proteggere" la cella. Per questo motivo è meglio allungare un po la formula con 

EN-US 

=IF(D15=""; ""; IF(COUNTIF(tblArticoli[Nome prodotto]; D15)>0; INDEX(tblArticoli[Codice]; MATCH(D15; tblArticoli[Nome prodotto]; 0)); ""))

sostitundo SE all'IF, CONTA.SE al COUNTIF, INDICE ad INDEX e infini CONFRONTA al MATCH ne lle versioni Italiane.

Se desiderate gestire anche il caso in cui il prodotto non venga trovato, potete utilizzare la versione con gestione dell’errore:

=SE.ERRORE(INDICE(tblArticoli[Codice]; CONFRONTA(D15; tblArticoli[Nome prodotto]; 0)

⚠️ Nota importante.. Attenzione: in alcuni casi Excel potrebbe sovrascrivere o cancellare la formula presente in D15, soprattutto quando si combinano convalida dati e ricerche incrociate tra colonne che dipendono l’una dall’altra. Per questo motivo, potete scegliere di effettuare la ricerca:

  • solo tramite Codice, oppure

  • solo tramite Nome prodotto (scelta spesso più intuitiva a livello mnemonico)

L’importante è mantenere coerenza nella modalità di ricerca, evitando che le due colonne si influenzino a vicenda.

 

Come potete notare e verificare direttamente, adesso selezionando il Nome prodotto dalla casella a discesa nella colonna D, varierà automaticamente anche il codice prodotto corrispondente nella colonna B. E, come per magia, grazie alle formule che avevamo già inserito in precedenza: le celle O15 e Q15 varieranno rispettivamente col relativo prezzo e aliquota.

A questo punto non ci resta che replicare la struttura su tutte le righe successive: se avete optato per la ricerca tramite Nome Prodotto, selezioniamo la cella B15, facciamo Copia, poi trasciniamo fino a B46, quindi tasto destro → Incolla speciale → Solo formule. Stessa cosa per l'intervallo - O15:O46(Prezzo) -> Q15:Q46(IVA) ->R15:R46(Formula per imponibile)

 

Nell’immagine precedente avrete sicuramente notato che il Modulo Fattura è dotato di un’area dedicata al Riepilogo dati IVA e Imponibili. Questa sezione ha il compito di calcolare e mostrare i totali suddivisi per ciascuna aliquota IVA, offrendo un resoconto chiaro e immediato dell’imponibile e dell’imposta applicata.

Il foglio è stato progettato per gestire più aliquote IVA, poiché molte attività commerciali utilizzano percentuali diverse a seconda della tipologia di prodotto o servizio. Naturalmente, tutti i valori vengono poi raggruppati e unificati nel totale finale della fattura, così da avere un quadro completo e professionale dell’intero documento.

Questi, insieme a un accenno all’importazione dei dati, saranno gli argomenti che affronteremo nel terzo e ultimo tutorial, dedicato alla “Parte No Code”. Troverete inoltre una spiegazione passo‑passo di come funziona il riepilogo IVA, oltre alla logica delle formule da utilizzare per sommare imponibili e IVA per singola aliquota.

Crea il tuo sito web con Webador