Caricare un elenco (lista) con dati da selezionare. (05/07/03) Tra le tante necessità quotidiane, ci troviamo spesso a dover aggiungere dei dati in un elenco. Un operazione che possiamo prendere ad esempio e che si presta per spiegare i concetti, riguarda l'inserimento degli articoli venduti, in una fattura. Infatti nella emissione di una fattura, useremo dati che verranno scritti (nelle celle appositamente designate) una sola volta, come il nome del Cliente, indirizzo, pagamento, p.iva, ecc. ecc., mentre avremo dati che dovremo o potremo scrivere più volte, come i prodotti da fatturare, con la loro descrizione, il codice articolo, unità di misura, quantità, prezzo unitario, ecc. ecc. In questi casi normalmente viene destinata una zona dove poter aggiungere, riga dopo riga, i vari prodotti e loro caratteristiche. Le procedure che presento riguardano appunto:
Premetto che questo articolo è molto dettagliato e un pò lunghetto, consiglio a chi ne sia interessato di stamparsi le pagine (verranno stampate anche le immagini) e leggerselo TUTTO con calma a casa. Come esercizio userò un file che un caro amico, Domenico Svolacchia, mi ha gentilmente messo a disposizione, e su cui ho sviluppato le procedure relative all'"inserimento articoli". Vediamo intanto la "struttura" di impostazione della fattura relativa alla zona inserimento articoli: Come vediamo, a partire dalla riga 18, potremo inserire gli articoli, che andranno nel campo "descrizione", e dovremo inserire nei campi tutti i dati riguardanti l'articolo scelto. Gli articoli che inseriremo sono in una tabella del foglio "Magazzino", che avremo cura di strutturare sulla falsariga dell'ordine campi riportati in fattura, in modo da "allineare" i campi in entrambi i fogli. Logicamente sul foglio "Magazzino" non saranno presenti i campi che riguardano i conteggi (totale, sconti, imponibile) inutili in questo foglio. Vediamo il foglio Magazzino con l'impostazione della tabella articoli: All'area del foglio Magazzino predisposta a contenere dati, assegniamo un nome : "maga" che corrisponde a =Magazzino!$A$2:$B$1000, per facilitare il riferimento alla zona quando lo useremo nel codice vba per assegnare il RowSource alla combobox posta sulla userform. Bene, abbiamo visto la zona di destinazione, e la zona di origine dei dati, ora vediamo come reperirli (primo punto nelle descrizione delle procedure: la prima procedura, è chiamare la userform dal foglio di emissione fattura, che useremo come "maschera" per la selezione dell'articolo, e lo faremo tramite il commandbutton "Inserisci Articolo", nel cui evento Click, inseriamo questa istruzione:
Private Sub CommandButton3_Click()
'pulsante "Inserisci Articolo" e questo sarà l'aspetto della userform:, in cui vediamo una combobox che ci servirà per selezionare un'articolo tra quelli presenti sul foglio "Magazzino", una textbox per inserire la quantità da fatturare, e due textbox per inserire eventuali sconti concessi sull'articolo. Completa l'userform il commandbutton "In Fattura" , che nell'evento Click, ha inserito tutte le istruzioni (che vedremo) per l'inserimento dell'articolo e dei dati correlati nell'area della fattura predisposta: Sfrutteremo quindi l'apertura della userform per assegnare l'area dati del foglio magazzino al RowSource della combobox, con questa istruzione:
Private Sub UserForm_Activate() Come abbiamo notato dalle spiegazioni sopra, stiamo "caricando" nella combobox due colonne di dati : la colonna A con il codice articolo e la colonna B con la descrizione dell'articolo (A2:B1000). Un piccolo accorgimento che ci permetterà di identificare meglio l'articolo da fatturare, vedremo infatti sia il codice sia la descrizione (è possibile infatti che esistano più articoli con la stessa descrizione, e sarà quindi possibile identificare quello giusto tramite il codice articolo che dovrà necessariamente essere univoco). Vediamo un immagine della combobox col menù aperto: Come facciamo ad avere visibili due colonne nella combobox ? Utilizzando alcune proprietà che troveremo nella "Finestra delle proprietà" della combobox, nell'editor del visual basic :
Vediamo poi come gestire via codice, altre due proprietà della combobox che determinano il modo di assegnazione del valore di ogni campo (ne abbiamo 2 nella combobox) a due celle distinte del foglio di lavoro
Ci siamo fino a questo punto? Bene, ora proseguiamo con l'esame della routine che dovrà provvedere a trovare, nel foglio fattura, la prima riga libera dove inserire i dati selezionati nella combobox. Ci affidiamo per questo ad un ciclo While...Wend, ciclo che controlla una condizione, e continua fintantochè si verifica la condizione richiesta. Poichè vorremo controllare, posta una riga di partenza (la riga 18. inizio inserimento articoli nella fattura) se una riga è vuota, abbiamo bisogno di un "contatore" che incrementi di uno il controllo per garantire l'avanzamento verso il basso di una riga, e queste sono le istruzioni del ciclo:
Dim iRow As Integer va da se che se la prima riga è vuota (la 18) si esce dal ciclo e si eseguiranno le istruzioni che seguiranno, altrimenti verrà controllata la condizione richiesta per la riga 19, poi la 20, ecc. ecc. Ricordo che quando si usa la proprietà Cells (dell'Insieme Range) il primo numero indica la riga, il secondo dopo la virgola indica la colonna. Questo ci dice due cose :
Fatte tutte queste premesse, passiamo ora ad esaminare la routine inserita nell'evento Click del CommandButton "In Fattura". Ultime considerazioni: per automatizzare al massimo il lavoro, è stato previsto che l'inserimento della Quantità da fatturare avvenga dalla userform, attraverso l'immissione di un valore, che potrà essere anche decimale, nella casella di testo oppurtuna. Sempre dall'userform si disporrà per un eventuale sconto semplice o doppio, visto che si presume che gli sconti non sempre siano concessi, e comunque potranno variare in funzione del cliente e/o delle quantità. Predisporre dei campi sconti preimpostati nel foglio magazzino non lo ritengo utile ma limitante. Saranno commentate in verde le istruzioni non ancora viste.
Abbiamo scritto un bel pò di codice, ma i risultati sono eccellenti : ci troveremo già con tutti i calcoli fatti, ed in più se non avremo assegnato sconti, i relativi campi in fattura non porteranno neanche lo zero, cosa che se ci fosse comunque un valore in fattura, potrebbe far pensare al cliente che gli sconti sono previsti e quindi gestibili, mentre così si potrà dire che le colonne sconti le ha inserite il compilatore del modulo fattura ma che in realtà non esiste sconto (infatti i campi sono vuoti). L'ultima colonna, quella dell'aliquota iva, servirà perche i conteggi dei totali useranno la funzione SOMMA.SE reperendo il totale dei parziali collegati alle varie aliquote, ed applicando quindi l'iva di pertinenza sul relativo imponibile. Un immagine della zona totali: Ho indicato la Formula per la somma degli importi relativi all'aliquota iva 4%, nelle celle sottostanti ci saranno le formule per iva 10% e iva 20%. Gli importi iva si ottengono con una semplice moltiplicazione, e i totli portaranno la somma degli imponibili, la somma degli importi iva e quindi il totale fattura. Allego il file per consultazione premettendo che le procedure andranno ultimate a cura dei "pellegrini" che vorranno scaricarsi il file: manca la registrazione dei dati fattura, il salvataggio del solo foglio fattura come copia, ed altre amenità lasciate ai bisogni di ogni singolo utente. Mi interessava illustrare le procedure per l'inserimento dei dati, e questo credo di averlo espletato.
File consultabile e scaricabile : Fattura2000.zip 38 Kb
Buon lavoro.
|