› Sviluppare funzionalita su Microsoft Office con VBA › Automatizzare inserimento spese ricorrenti in bilancio familiare
-
AutoreArticoli
-
Buongiorno a tutti e buon nuovo anno.
Io ho un foglio excel per gestire il bilancio familiare. E' un foglio semplice, proprio una tabella, nella quale avrei bisogno di inserire automaticamente delle spese ricorrenti (tipo abbonamenti, utenze) quando la data del giorno è corrispondente alla data di pagamento di dette spese.
Come potrei risolvere?
Allega un file di esempio con il risultato che vorresti ottenere scritto a mano
Ciao alexps81, ti allego un esempio del file a titolo esemplificativo.
Ti ringrazio per la tua attenzione.
Ciao
Allegati:
You must be logged in to view attached files.Ciao, credo che devi essere molto più esplicito...non è per nulla chiaro cosa vorresti ottenere.
Io vedo 2 fogli: "CATEGORIE" e "2025". In foglio "CATEGORIE" vedo in colonna A degli elementi che poi vengono riportati in colonna B del foglio "2025" tramite convalida dati. Perché? A cosa serve la presenza di quell'elenco in colonna A quando riporti gli stessi elementi da D1 a S1?
Comunque...io non capisco che tipo di automatismo di aspetti. Quali azioni vorresti compiere affinché avvenga ciò che hai scritto nell'esempio del foglio 2025 nel riquadro blu? Ma poi questo automatismo come deve avvenire? Con la pressione di un pulsante? All'apertura del file? All'attivazione del foglio?
Prova a dare una spiegazione dettagliata, partendo da zero e spiega tutti i passaggi che servono a raggiungere il risultato finale.
Ok ci provo. Partendo dall’inizio
- nel foglio 2025 ho il vero e proprio bilancio nel quale andranno tutte le spese
- nel foglio Categorie sono riportate le categorie di spesa che prelevo dal foglio 2025 tramite convalida dati
- nella colonna C del foglio 2025, tramite la funzione indiretto() prelevo (sempre dal foglio categorie e dalle colonne D:S) le sottocategorie si spesa.
Quello che vorrei ottenere è l’inserimento in automatico (o al limite il promemoria) delle spese ricorrenti, tipo le fatture per internet, le bollette luce, gas ecc…
- pensavo ad un elenco a parte contenente le date e le rispettive spese.
- all’apertura del file dovrebbe partire una macro che, vista la data “adesso()” mi dovrebbe inserire in coda alle spese, quella la cui data corrisponde ad “adesso()”. Al limite può essere una macro che avvio io, oppure un avviso che mi ricordano che ci sono spese in scadenza, o altra idea.
Spero di essermi spiegato a sufficienza.
Grazie ancora.
nel foglio Categorie sono riportate le categorie di spesa che prelevo dal foglio 2025 tramite convalida dati
Se non sbaglio è il contrario. Dal foglio "Categorie" prelevi i dati e li inserisci nel foglio "2025".
Comunque la data "odierna" come farebbe a capire quali sono le spese da accodare? Cioè queste date che sono inserite in colonna A del foglio "2025" come saltano fuori? Le inserisci tu di volta in volta oppure sarebbe quello il risultato che vorresti ottenere? Diciamo che vorresti questo come risultato...come fa la macro a capire che "TASSE Bollo C/C" scade il 02/01/2025?
Da quel poco che ho capito è che sei tu che inserisci da A a D i vari dati (data, categoria, tipo e importo), poi lanci la macro e magari in una ListBox o MsgBox compare una lista di scadenze in base alla data attuale.
Quindi mettiamo il caso che oggi 13/01/2025 scade l'ABBONAMENTO NOW e tu, oggi, lanci la macro, a quel punto comparirà un messaggio che tale abbonamento è caduto.
Diciamo che è così...ma deve comparire solo ciò che è scaduto oggi o fino ad oggi? Cioè tutto ciò che viene prima del 14/01/2025? Ovviamente se così fosse capisci che più aumentano i mesi, più sarà grande l'elenco, dato che riporta tutto da gennaio. A meno ché non creiamo una discriminante sulla scadenza pregressa o la elimini del tutto. Ma questo è un processo che avviene in seguito. Ora tocca capire qual è l'approccio iniziale...ma sei tu a fornire i dettagli.
nel foglio Categorie sono riportate le categorie di spesa che prelevo dal foglio 2025 tramite convalida dati
Si. E' vero. Infatti sto pensando di rivedere il tutto per organizzare meglio il flusso del codice. Appena mi chiarisco le idee ti riscrivo.
Grazie ancora
Ciao Alex. Rieccomi. Ti allego nuovamente il file di esempio.
Vorrei che le spese ricorrenti vengano inserite automaticamente quando la data "adesso()" equivale a quella del pagamento.
Magari prendendole dal foglio "Spese Ricorrenti" che predispongo annualmente, prelevando tutte quelle non contrassegnate come "Registrata". Sarebbe utile anche come promemoria.
Giustamente, come da te suggerito, queste potrebbero essere contenute in una listbox.
Spero di non arrecarti troppo disturbo.
Grazie
Allegati:
You must be logged in to view attached files.Ma la richiesta e' tutto senza codice? Solo formule?
ciao
non ho capito bene cosa vuoi fare
comunque non puoi usare ADESSO() ma =OGGI()
Adesso cambia ad ogni ricalcolo e ha l'orario
che versione hai di excel
Ciao @semiuccio
dunque io purtroppo sto facendo un po' fatica a capire ciò che ti serve. Quello che ho capito è che tu hai:
1 foglio "CATEGORIE" dove elenchi tutte le categorie delle varie spese che sostieni
1 foglio relativo all'anno dove elenchi le spese sostenute
1 foglio "Spese Ricorrenti" dove elenchi tutte quelle che sono le spese cicliche (quelle che sei certo di dover pagare), comprese di date e somme.
Ora, da quel poco che ho inteso, tu vorresti elencare nel foglio "2025" tutte le spese, ma quelle così dette "Ricorrenti", vorresti che ti comparissero in automatico quando la data attuale è relativa alla data di scadenza della Spesa Ricorrente.
Quindi, per ipotesi, nel foglio 2025, nella prima cella utile in colonna A scrivi una data, ad esempio quella di oggi (19/01/2025), poi compili da colonna B a colonna D i vari dati (categoria, tipo e importo). Poi attraverso un pulsante, importi tutte quelle spese ricorrenti relative alla data attuale. Dopodiché aggiungere una "x" di fianco alla spesa ricorrente presa in considerazione. Cosicché, al prossimo lancio della macro, quella spesa non viene più presa in considerazione.
Provo a girarti un mio esempio. Vedi se ho capito.
Tieni presente che ho eliminato il rigo 2 (che risultava nascosto) nel foglio "2025" perché credo che non abbia alcuna utilità.
In oltre per far sì che tutto funzioni, devi riportare esattamente le stesse parole nei fogli "CATEGORIE" e "Spese Ricorrenti". Cioè la scritta "Internet casa" deve essere uguale in entrambi i fogli...e non che in uno c'è scritto "Internet casa" e nell'altro "Internet"
Allegati:
You must be logged in to view attached files.Meraviglioso Alex !!!!! Mi hai compreso alla perfezione !!!! E' proprio quello che mi serviva. Grazie ancora.
Ho cercato di capire il tuo codice (per me è opera d'arte visto il mio livello) e mi è tutto chiaro. Una sola cosa non ho capito bene, anche se ho capito cosa fa, ma mi riprometto di approfondire tutto il codice.
Grazie tante ancora.
Bene, sono contento che abbiamo risolto.
mi riprometto di approfondire tutto il codice
Per facilitare la comprensione ti ho messo un commento per ogni azione:
Option Explicit Sub speseRicorrenti() Dim c As Range, f As Range Dim ur As Long, newRow As Long Dim categoria As String '--qui si capisce...giusto? If MsgBox("Sei sicuro di voler aggiornare i dati con le ""Spese Ricorrenti""?", vbQuestion + vbYesNo, "Spese ricorrenti") = vbNo Then Exit Sub '--rileva il numero della riga compilata nel foglio "Spese Ricorrenti" ur = Sheets("Spese Ricorrenti").Cells(Rows.Count, "A").End(xlUp).Row '--esegue un ciclo su ogni cella del foglio "Spese Ricorrenti" che va dalla cella A2 all'ultima riga compilata (ur) For Each c In Sheets("Spese Ricorrenti").Range("A2:A" & ur) '--se la data presente nella cella iterata è inferiore o uguale alla data attuale e _ nella colonna "D" (Registrata) non è presente la "x" allora... If CLng(c) <= CLng(Date) And c.Offset(, 3) <> "x" Then '--ricava il primo rigo disponibile nel foglio "2025" (quindi ultimo rigo compilato + 1) newRow = Sheets("2025").Cells(Rows.Count, "A").End(xlUp).Row + 1 '--formatta in data la cella in colonna "A" Sheets("2025").Range("A" & newRow).NumberFormat = "m/d/yyyy" '--formatta in valuta la cella in colonna "D" Sheets("2025").Range("D" & newRow).NumberFormat = "#,##0.00 $" '--cerca la "spesa" nel foglio "Categorie" Set f = Sheets("CATEGORIE").Cells.Find(What:=c.Offset(, 1), LookIn:=xlValues, LookAt:=xlWhole) '--se non è nulla...ovvero se l'ha trovata... If Not f Is Nothing Then '--assegna alla variabile 'categoria' il TIPO di categoria definito nel rigo 1 del foglio "Categorie". _ Preleva quindi prendendo come coordinare rigo 1 e colonna trovata (f.Column) categoria = Sheets("CATEGORIE").Cells(1, f.Column).Value End If Sheets("2025").Range("A" & newRow).Value = c.Value '--assegna alla cella A e nuovo rigo la data ciclata Sheets("2025").Range("B" & newRow).Value = categoria '--assegna alla cella B e nuovo rigo la 'categoria' Sheets("2025").Range("C" & newRow).Value = c.Offset(, 1).Value '--assegna alla cella B e nuovo rigo la spesa ciclata Sheets("2025").Range("D" & newRow).Value = c.Offset(, 2).Value '--assegna alla cella C e nuovo rigo l'importo ciclato c.Offset(, 3).Value = "x" '--segna una 'x' nella cella D ciclata End If Next c MsgBox "Fatto!" End SubBene, sono contento che abbiamo risolto.
Grazie mille per l'aiuto e per il codice commentato.
-
AutoreArticoli
