Controllo dei costi delle chiamate telefoniche.

In pratica: trattasi di ricerca di un dato in una colonna dati, con restituzione in altra zona, del dato trovato e dati a questo correlati. La ricerca avviene con inserimento parziale del valore da cercare. Nella zona destinazione cerchiamo la prima cella libera nella colonna per accodare i dati trovati; un'altro esercizio sul copia/incolla.

In seguito ad una richiesta ho realizzato una semplice esercitazione che propongo ad altri "pellegrini". Premetto che si tratta ancora di rintracciare un dato in un elenco di dati e una volta trovato, di copiare i dati correlati in modo da formare un riepilogo che consenta di registrare i relativi costi.

Il problema: come identificare dal riepilogo che la Telecom invia con la bolletta, i numeri di telefono che sono stati chiamati dal telefono di casa, visto che nel succitato riepilogo i numeri, in ottemperanza alla legge sulla Privacy, vengono riportati con il numero incompleto seguito da cancelletti (###) per esempio: 33879854###.

Ovviamente questo programma proposto, non è un mago, e quindi non potrà mai risalire a rintracciare i numeri mancanti indicati con ###, ma può rintracciare, dato solo il numero senza cancelletti (33879854) quale sia il numero completo presente in un elenco o database che dir si voglia, dove avremo preventivamente inserito tutti i numeri che formano la nostra agenda telefonica. Avremo cura di associare al numero reale anche un Nominativo in modo che, una volta trovato il numero, sia possibile copiare in una tabella all'uopo destinata, i dati relativi al numero (il nome), inserendo a mano il numero degli scatti e relativo costo, per ottenere sia il totale di quanto è costata quella telefonata, sia un totale generale.

Le procedure vba seguite, sono state già presentate in questa sezione in diversi articoli, quindi per le spiegazioni provate a consultare i vari copia/incolla e i Database in particolare il "database con spiegazioni", dal quale ho ripetuto il ciclo di ricerca, che trova un dato anche se si fornisce solo una parte di esso.

In pratica succede questo: attraverso una InputBox, viene richiesto di inserire il numero da trovare, SENZA cancelletti, vedi foto sotto (le colonne in giallo sono quelle del database, in verde e arancio a zona dove verranno incollati i dati)

Una volta inserito il numero senza cancelletti e premuto Ok, se la ricerca trova un numero in cui figura la sequenza di numeri inserita, avvisa con una domanda se vogliamo registrare i dati relativi al numero esatto e al nome associato. Abbiamo inserito il numero 34897 e infatti viene trovato il 348974562, vedi foto sotto:

Confermando con Si, avremo la copia dei dati Numero/Nome nella zona di destinazione, con ricerca della prima riga libera, ed evidenzazione della cella dove dovremo inserire il numero degli scatti e il costo scatto, vedi foto sotto

Precisazioni: le colonne A, B, D, E sono formattate a "Testo" per consentire l'uso di numeri con lo zero iniziale. Nella colonna H in H3 una semplice moltiplicazione F3*G3 per avere il totale spesa (a seguire nelle celle sottostanti). Sarà possibile poi possibile applicare un filtro ai nomi dei chiamati per avere un parziale dei costi relativi al nome scelto, o ancora "Estrarre" da questo secondo elenco tutti i dati corrispondenti ad un certo nome e formarsi altre tabelle, ecc. ecc. Questa la procedura associata al pulsante "Cerca Numero":

Sub cercaNumero()
With Worksheets(1).Range("A2:A150")

Dim X, messaggio, titolo
titolo = "Ricerca Numero Telefonico"
messaggio = "Inserisci il Numero che vuoi cercare"
X = InputBox(messaggio, titolo)
If X = "" Then Exit Sub
'se non scrivo niente nella finestra esco dalla routine
Set C = .Find(X, LookIn:=xlValues) ', LookAt:=xlWhole
If Not C Is Nothing Then
firstAddress = C.Address
Do
C.Cells.Select

Y = C.Value
 'prendo il numero di telefono
Z = C.Offset(0, 1).Value 
'prendo il nome a lato

'compongo il messaggio di avviso e conferma si/no
irisposta = MsgBox("Trovato " & Y & " a nome " & Z & ". Vuoi registrare ?", vbYesNo)
If irisposta = vbYes Then
'se rispondo si allora
GoTo 10
'esco dal ciclo e registro
End If
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstAddress

Else
MsgBox "Numero non Trovato"
End If
10:
'ho trovato il numero e identifico con "zona" le due celle che voglio copiare
Set zona = Range(ActiveCell, ActiveCell.Offset(0, 1))
zona.Copy
Range("D1").End(xlDown).Select
'cerco l'ultima cella occupata partendo da D1
ActiveCell.Offset(1, 0).Select 
'seleziono la riga libera sotto l'ultima occupata
ActiveSheet.Paste Destination:=ActiveCell 
'Incollo i dati copiati con zona.Copy
ActiveCell.Offset(0, 2).Select
'seleziono la cella corrispondente al N° scatti e scriverò il 'numero degli scatti letti sulla bolletta.
End With

Application.CutCopyMode = False
End Sub

 

File Scaricabile e consultabile :     CostiTelefono2000.zip    14 Kb

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