› Sviluppare funzionalita su Microsoft Office con VBA › Codice VBA inserisci pren. da migliorare. excel 2021
-
AutoreArticoli
-
Funziona alla grande solo che mancava la variabile ed ho aggiunto Dim messaggio as string, spero di aver fatto correttamente.
Ciao Alex, ora sono fuori per commissioni, se riesco ti rispondo in serata. Grazie
Allora ti allego una mia versione. Ho completamente stravolto il codice. In pratica ho lavorato con oggetti Range e Cicli For Each Next.
Il codice così è anche più snello. Probabilmente si può fare di meglio ma per ora di più non riesco.
Ti spiego come funziona:
Quando "inserisci" una prenotazione, vengono prelevati e messi nelle rispettive variabili il giorno, il mese e l'anno di arrivo e il giorno, il mese e l'anno di partenza.
Attraverso la funzione DateSerial vengono prelevate il numero di giorni relativo al mese di arrivo e il numero di giorni relativo al mese di partenza. Poi sempre con DateSerial e queste variabili, vengono ricavati il numero di giorni di pernotto.
Se il numero di giorni di pernotto + il numero della data di arrivo è maggiore del numero di giorni del mese di arrivo (Esempio pratico...arrivo il 29/01/2024 partenza il 02/02/2024. I giorni di pernotto sono 5 quindi faccio 29+5= 36. Questo numero è maggiore del numero di giorni del mese di gennaio).
Quindi dato che 36>31 allora imposto un Range di celle che comprende dalla cella relativa al giorno di arrivo fino alla cella relativa al giorno di partenza -1
Una volta impostato il Range (Set rng = Range(........)) praticamente ci faccio quello che voglio (coloro celle, cambio valore alle celle, ecc...)
Se invece la somma tra pernotti e giorno di arrivo è inferiore o uguale al numero dei giorni del mese di arrivo allora imposto un altro Range, con lo stesso sistema di prima, ma che rimane solo sul mese interessato.
Ho trovato solo una difficoltà quando si sovrappongono le date di prenotazione. Ma poi ho pensato che alla fine dovrebbe essere proprio così come funziona ora il programma. Nel senso che ad ogni giorno che si sovrappongono le date allora ti compare il messaggio che si sovrappongono e ti chiede se vuoi proseguire. Secondo me va bene che sia così. Perché magari tu vuoi far sovrapporre le date ma non tutte. Così puoi scegliere.
Poi ti ho aggiunto il tredicesimo mese...riferito a Gennaio dell'anno successivo. In questo modo anche se ci sono prenotazioni che iniziano a dicembre ma finiscono a Gennaio così puoi segnarle.
Un'ultima cosa...la cella "X2" dov'è scritto l'anno...a parte che era sbagliato così come l'hai ricavato tu (al massimo dovevi scrivere =ANNO(OGGI()) e il formato cella deve essere GENERALE...cmq io ti consiglio di scriverlo a mano l'anno e non farlo calcolare dal sistema. Se stai compilando le prenotazioni del 2024 e siamo al 31/12/2024...domani la cella "X2" diventa 2025
Ahh...poi, se ricordo bene, in questo tuo gestionale, quando inserisci i clienti, mi sa che aggiungevi anche il loro Codice Fiscale. Se può interessarti, proprio ieri ho terminato un programmino che calcola il C.F.
Se per caso lo vuoi inglobare nel tuo gestionale...
Allegati:
You must be logged in to view attached files.Ciao Alex , allora;
Ipotizziamo che la camera nr. 1 è già impegnata dal 10/01/2024 al 15/01/2024 dal cliente nr. 1
Poi arriva il cliente nr. 2 e ha una prenotazione dal 13/01/2024 al 18/01/2024 e vuoi inserirlo sempre nella camera nr. 1
siccome si accavallano per 2 giorni dal 13 al 15 gennaio...cosa dovrebbe accadere in questo caso?
Assolutamente No. Non è possibile una cosa del genere. Si andrebbe in overbooking.
Siccome si accavallano per 2 giorni on deve accadere nulla. Infatti, il codice ti chiede se vuoi sovrascrivere. Ma questo è relativo perchè al momento della richiesta di una prenotazione non puoi e non devi accettarla senza che prima abbia verificato la disponibilità della camera per quelle date. Ovvio.
Deve impedirti di inserire il cliente nr. 2 nella stanza nr. 1?
Il fatto che il codice mi chieda cosa voglia fare è giusto ti spiego più avanti.
Ti deve chiedere se vuoi accavallare le date e dal 13 al 18 gennaio la assegna al cliente nr. 2?
Se voglio accavallare una data se lo chiede è molto meglio.
Ma poi se è così è normale che avvenga una cosa del genere? Il cliente nr. 1 che fine fa in quei 2 giorni?
Non deve accadere nulla di tutto ciò e il cliente non fa nessuna fine. Sarebbe a dir poco ridicolo ma soprattutto non fattibile una cosa del genere nella sua fattispecie.
Detto questo, ora ti spiego il per perchè della sovrascrittura.
Specifichiamo in primis che quando arriva una richiesta di prenotazione, non si da CONFERMA se prima non si è verificato la disponibilità della camera.
Solo dopo la verifica si procede con la conferma al cliente e all'inserimento dei dati che si ha in quel momento.
Arriviamo al fatto della sovrascrittura.
Ipotizziamo un prenotazione del "Cliente 1" dal 10/01/2024 al 20/01/2024. Durante il soggiorno il cliente 1 per motivi X mi comunica giorno 17/01 di andar via il 18/01 anziché il 20/01.
Se nel arco di tempo, necessario ad apportare le modifiche al cliente nel gestionale e conseguentemente alla camera assegnata, arrivasse una nuova prenotazione dal 18/01 al 25/01, ecco qui la sovrascrittura. Quindi nell'inserire la nuova prenotazione assegno la camera sovrascrivendo con il nuovo Codice Cliente dal 18/01 al 25/01 al cliente 2. Ho messo il colore blu per indicare che cè stata una partenza anticipata.
Naturalmente è una cosa in più ma non estremamente importante. Il motivo di non essere rilevante, sarebbe di fatto quanto spiegato su, cioè si verifica la disponibilità prima di tutto. A noi non è mai successo una partenza anticipata, anzi.
Tengo a precisare Alex, nonostante le prenotazioni non arrivano solo dirette ma arrivano anche da siti agenzie viaggi ad esempio Booking.com, Fin'ora che viene fatto su carta, non è mai successo un overbooking.
Spero di essere spiegato. Sovrascrittura non rilevante.
Ok, adesso è più chiaro lo schema della sovrapposizione delle prenotazioni. Cmq hai notato la mia versione che ti ho allegato ieri sera? Fammi sapere com'è...
Ciao Alex grazie mille,
mi sono accorto solo adesso del tuo messaggio con l'allegato. Appena lo provo ti faccio sapere.
Grazie
Ciao Alex, Ho provato il tuo file ed il fatto di avere creato il 13 mese lo ritengo ottimo. Come il problema dell'anno bisestile che sembra risolto.
Però per il resto non va bene cosi, ti spiego cosa ho riscontrato.Del tuo file, dopo aver inserito il cliente "10" Verde Danilo dal 25-02-2024 al 03-03-2024, se inserisci il cliente "15" Rossetti Fabio dal 27-02-2024 al 05-03-2024, cè un problema.
Appare un avviso dove se li dico alla sovrascrittura di No, lo ripete per ogni giorno che si accavalla, alla fine il codice mi assegna lo stesso la camera solo per il giorno 3 e 4 marzo. Questo non va bene. I giorni dal 27-02 al 02-03 dove dorme Rossetti Fabio?
Non so se sono stato chiaro.
Quindi deve avvisarmi che la camera è occupata anche per un solo giorno, dandomi un solo avviso e non per quanti sono i giorni che si accavallano. poi a me la decisione di sovrascrivere oppure No. Però se dico No , il codice non deve fare nulla se non uscire dalla rountine.
Invece la modifica del mio codice fatta da Albatros, mi avvisa con un solo Messaggio i giorni occupati. Dopo di chè se pigio No esce dalla rountine, se premo Si mi effettua la sovrascrittura.
Allego la foto del risultato della modifica di AlbatrosAllego il file con la modifica di Albatros,
Allegati:
You must be logged in to view attached files.Prova a vedere se così funziona
Allegati:
You must be logged in to view attached files.Ciao Alex, ma come caspita fai, dirti bravo mi sembra di offenderti. E' perfetto!
In uno dei tanti post precedenti ho scritto " Cè gente che legge e scrive il codice VBA come se fosse un articolo di giornale" ne sei la prova insieme ad altri.Grazie a te Alex e a tutti quelli che si sono affacciati nel darmi una mano nel provare a sistemare al meglio il disastro da me combinato.
Ora Continuo con il progetto.
Ahh...poi, se ricordo bene, in questo tuo gestionale, quando inserisci i clienti, mi sa che aggiungevi anche il loro Codice Fiscale. Se può interessarti, proprio ieri ho terminato un programmino che calcola il C.F.
Se per caso lo vuoi inglobare nel tuo gestionale...
Perchè no. Non immagino neanche cosa sei capace di creare. Sicuramente oltre ad una smisurata passione ci sono anni e anni di studi, non potrebbe essere altrimenti. Nella programmazione ( affacciato da poco) ho notato che basta una doppia virgoletta, un apostrofo non messo, oppure, messo male che nulla funziona. Vabbè la vedo dura per me.
Però non mollo
Grazie ancora.
Metto risolto!
Innanzitutto ti ringrazio. Diciamo che sono ancora agli inizi e sto cercando di imparare sempre più cose possibili ma la strada è lunga. Devo ringraziare ogni giorno @Vecchio_Frac che da anni mi segue tra Access e Excel dandomi suggerimenti di volta in volta.
Per il programmino del Codice Fiscale ci sono solo 2 problemi. Il primo è che ad oggi la lista dei Codici Catastali di tutti i comuni di Italia è aggiornata ma nel tempo può cambiare. Quindi bisogna aggiornarla manualmente. Nel senso che se in un prossimo futuro nasce un nuovo comune o si accorpano comuni attuali, succede che ci sarà un nuovo Codice Catastale. Siccome per il calcolo del C.F. c'è bisogno del Codice Catastale (12, 13, 14 e 15esima cifra del C.F.) allora è necessario che in tabella siano presenti. Cmq sono casi rarissimi che accada una cosa del genere e cmq fai sempre in tempo a trascriverlo a mano se non trova il Codice Catastale. Ma ad ogni modo aggiornare la lista dei Codici Catastali ci metti 2 minuti. Basta scaricarli dal web sul sito Agenzia delle Entrate.
Il secondo problema è che l'ultima lettera del C.F. è frutto di un calcolo delle 15 cifre precedenti. Il mio programma effettua correttamente il calcolo ma ho saputo che se esistono persone nate nello stesso giorno, mese e anno e hanno stesso Cognome e Nome allora per non creare omocodia allora interviene l'Agenzia delle Entrate e modifica il C.F. manualmente....quindi in quel caso il mio programma non può nulla.
Diciamo che il calcolo lo puoi fare ma poi dovresti sempre controllare l'esattezza.
-
AutoreArticoli
