Registrare dei dati in un archivio dati.

In questa esercitazione ci riallacciamo a quanto contenuto nel paragrafo precedente dove si cercano dei totali tra due date, in un archivio dati. Questa volta ci occupiamo di come trasferire i dati provenienti da una zona di registrazione, nell'archivio. In questo esempio, simuliamo di avere un range di celle dove a fine giornata inseriremo il totale incassato, diviso per prodotto. Che il totale si inserisca manualmente oppure sia il risultato di una somma, non cambia niente: ci troveremo sempre con una riga di celle dove avremo dei dati, divisi per colonna, ed è questa riga con i totali giornalieri divisi per prodotto che noi vorremo registrare in un archivio (una tabella) che contenga i totali per data, in  modo da poter successivamente consultare questo archivio, per indagini sul totale incassi relativi a periodi di date. Il funzionamento delle procedure è semplice: è un Copia/Incolla con ricerca della destinazione basata su una chiave di ricerca: la data del giorno. Useremo una cella dove inseriremo la funzione =OGGI() per aggiornare automaticamente la data del giorno all'apertura del foglio di lavoro (nell'esempio la D1). Disporremo la zona di raccolta dei dati da registrare (nell'esempio le celle che vanno da B3 a F3 comprese), alla quale assegneremo un Nome (dal menu Inserisci/Nome/definisci) (in questo esempio : Importo) così nelle istruzioni useremo il nome anzichè la definizione del range interessato. Disporremo sullo stesso foglio (ma potremo farlo anche su un'altro foglio) una tabella che sarà l'archivio in cui registrare i totali giornalieri. In questa tabella useremo la prima colonna a sinistra (nell'esempio la colonna A) per predisporre le date di registrazione. Lo potremo fare agevolmente, basterà scrivere le prime due date con cui inizia il nostro archivio, selezionarle entrambi e, usando il "trascinamento", scorrere verso il basso: Excel, capendo che intendiamo ottenere una "serie", provvederà a inserire tutte le date in progressione, fino a quando decidiamo di fermarci. Sotto vediamo l'effetto "trascinamento" dove veniamo avvisati del valore (data) raggiunto alla fine della selezione (NB: il formato celle dovrà essere impostato a Data, con lo stesso formato usato per la cella D1):

Per le istruzioni useremo una Funzione Utente per la ricerca della riga corrispondente alla data odierna (nella colonna A dell'archivio) ed una procedura che, una volta trovata la riga, selezioni la cella immediatamente a destra della cella con la data trovata, e provveda a Copiare (prelevare è più giusto) i dati dalla zona che abbiamo chiamata Importo (Range B3:F3) e la Incolli (inserisca è più giusto) nella cella in quel momento attiva. Assegneremo ad un pulsante la macro creata, ed il gioco è fatto: a fine giornata premeremo il pulsante e i dati verranno archiviati alla data corrispondente. Sotto un'immagine dell'esempio preparato:

E queste le istruzioni, per prima la funzione per la ricerca:

Function cercadata(Intervallo, valore)
For Each c In Intervallo
If c.Value = valore Then
Y = c.Row
Exit For
End If
Next c
cercadata = Y
End Function

e quindi la procedura (nell'esempio mi sono fermato alla riga 134) assegnata al pulsante "Registra Incasso"

Sub registra()
Dim oggi As Date
'dichiarazione del "tipo" di dati della cella D1 assegnato a "oggi"
oggi = Range("D1").Value 
'la variabile "oggi" è uguale alla data in D1
Set rango = Range("A8:A134")
'si assegna a "rango" la zona in cui avviene la ricerca
cerca = cercadata(rango, oggi) 
'"cerca" è il risultato della Funzione "cercadata", che 'cerca in "rango" il valore "oggi" e restituisce il numero di riga nell'archivio, corrispondente 'alla data odierna (rango e oggi sono i due argomenti della funzione cercadata)
Set Zona = Range("Importo") 
 'assegniamo a Zona il Range B3:F3
Rows(cerca).Cells(1, 2).Select
'selezioniamo la seconda cella della riga (cerca)
Zona.Copy ActiveCell
'copiamo il contenuto di Zona nella cella attiva
End Sub

Ricordo che che quando si vuole incollare il contenuto di più celle (anche non contigue, MA presenti sulla stessa riga) è sufficiente selezionare per la destinazione una SOLA cella iniziale, sarà Excel a provvedere che l'incollaggio avvenga in tante celle CONTIGUE per quante sono le celle di provenienza.


Buon lavoro.
prelevato sul sito http://ennius.interfree.it