Sviluppare funzionalita su Microsoft Office con VBA Codice VBA inserisci pren. da migliorare. excel 2021

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 37 totali)
  • Autore
    Articoli
  • #42815 Score: 0 | Risposta

    pixel
    Partecipante

      Buongiorno a tutti, 

      ho bisogno del vostro aiuto per migliorare e risolvere alcuni problemi che da solo con la mia poca esperienza proprio non ci riesco.

       

      Il problema che non riesco a risolvere sarebbero un paio:

      1 - Se assegno una camera al cliente "Verde Danilo", il codiceVBA mi colora di Rosso le celle dal giorno 25/03 al 03/03, con al suo interno il CODICE cliente. Fin qui, tutto bene. Ma come si potrà notare mi colora anche nella colonna B, inserendo anche il Codice cliente e sovrascrivendo il mese. Proprio quest'ultima vorrei che non lo facesse.

      Io ho pensato ad una possibile soluzione, però non sono esterrefatta. Sarebbe a dire che una volta pigiato il pulsante Inserisci, per ultimo gli vado a dire che nella cella B5 "scrivi Gennaio" nella cella "B6" scrivi Febbraio e cosi via. Sarebbe interessante e professionale risolverlo diversamente (Qual ora esista una possibilità).

      2 - se si potesse inserire ad esempio alla riga 17  "del foglio Prospetto" il 13° mese. Mi spiego meglio.

      Adesso se vado ad inserire una prenotazione dal 29/12/2023 al 20-01-2024, il codice non restituisce nulla, perchè legge l'anno corrente come impostato sul foglio.

      Ho pensato, provato con risultato 0,  (sempre che si possa fare) che nella riga 17,  di inserire Dicembre 2023 dove il codice vada a colorare di rosso con al suo interno il Codice cliente le celle dei giorni 29,30,31/12, continuando ai giorni di gennaio 2024, che si trova alla riga B5.

      Se provi il cliente "Bianco Vito" vedrai che pigiando il pulsante Inserisci non succede nulla.

      Grazie a tutti

       

      Allegati:
      You must be logged in to view attached files.
      #42817 Score: 0 | Risposta

      Aldo Ercolini
      Partecipante
        19 pts

        Il problema 1 l'ho risolto.

        Mi potresti spiegare come usi il programma, per fare le prove ho dovuto sempre creare un nuovo cliente e non si posso mofificare le date messe durante l'inserimento del cliente stesso. E' corretto?

        Allegati:
        You must be logged in to view attached files.
        #42819 Score: 0 | Risposta

        pixel
        Partecipante

           

          Aldo Ercolini ha scritto:

          Il problema 1 l'ho risolto.

          Ciao Aldo,  grazie per il tuo impegno.

           ma ne è hai creato  un altro.  Se noti dal tuo file allegato, quando inserisci il cliente "Verdi Danilo", potrai notare l'errore, cioè adesso mi segna anche il giorno di partenza. In una prenotazione vanno considerate i pernotti.  Quindi com era '  impostato il CodiceVBA in origine la data di partenza non deve essere contrassegnata con il giorno di partenza.,.

          Aldo Ercolini ha scritto:

          Mi potresti spiegare come usi il programma, per fare le prove ho dovuto sempre creare un nuovo cliente e non si posso mofificare le date messe durante l'inserimento del cliente stesso. E' corretto?

          I clienti sono già registrati. se vuoi modificare le date devi farla dall'anagrafica cliente. ma  questo non è necessario. 

          Per provare ti basta cancellare l'ultima prenotazione, oppure cancellare tutto l'anno e pigiare d nuovamente il pulsante Inserisci. Non devi registrare nessun nuovo cliente.

          Nella fase di assegnazione camera, non puoi modificare nulla.

          Grazie

          #42820 Score: 0 | Risposta

          pixel
          Partecipante

            Ciao Aldo,

            avevo la soluzione sotto gli occhi e non la vedevo.  Bastava cambiare la colonna e il giorno di partenza. Quindi adesso il primo problema è stato risolto, cioè non scrive più nella seconda colonna. Passiamo al secondo.

            `cc = 2 ' Aldo ha sostituito la 3 colonna con 2. Era li e non la vedevo
            ff = txtGiornoPartenza.Value + 2 ' ed io con 1 il giorno
            Range(Cells(rr, cc), Cells(rr, ff)).Interior.ColorIndex = 3  'Colora  celle in Rosso
            Range(Cells(rr, cc), Cells(rr, ff)) = txtCodiceCamera.Value`

            Grazie

            #42822 Score: 0 | Risposta

            pixel
            Partecipante

              P.S. Se ho 2 clienti con le date che si accavalcono nasce un problema.
              Es. 1 cliente pernotta dal 10/03 al 15/03, mentre il 2 cliente pernotta dal 13/03 al 16/03 poichè questi si trovano nella stessa
              riga "Mese" allora il codice mi avvisa che la camera è già occupata. Perfetto!
              Ma se invece il 2° cliente pernotta dal 14/03 al 02/04, (a cavallo di due mesi) qui il codice non mi da l'avviso e sovrascrive senza chiedermelo.

              Quindi anche in questo caso se mi desse l'avviso, sarebbe meglio.
              Grazie per il vostro aiuto

              #42840 Score: 0 | Risposta

              pixel
              Partecipante

                Buongiorno a tutti,

                Il problema che mi interessa maggiormente e non riesco a risolvere da giorni con prove e riprove è:                        Cerco di spiegarmi.

                Inserisco il cliente Rossi Mario. Pigiando il pulsante "INSERSCI" mi scrive il codice cliente (4) e colora di Rosso le celle dal giorno 01 marzo al 09 marzo, il 10 marzo No perchè è partenza. Fin qui, tutto bene. Se si prova ad inserire il cliente "Verde Danilo" codice cliente (10) si noterà un avviso di; camera occupata, se si vuole forzare colora le celle di Blu. Fin qui tutto bene. Il problema nasce quando si accavallano due mesi. Se si prova ad inserire il cliente "Bianco Vito" codice cliente (16) si noterà l'errore. Lui mi assegna la camera dal 09 gennaio al 01 febbraio, quando non doveva farlo in quanto il 9 gennaio è gi assegnato ad altro cliente in questo caso a Rossi Mario. Quindi vorrei risolvere questo problema. Cioè deve avvisarmi con un avviso come l'esempio spiegato di Verde Danilo.

                Qualcuno ha qualche dritta, mi sono perso. 

                Allego il file leggermente ripulito con delle prove.

                P.S. Sto usando il gestionale di Alexps81, davvero ottimo.

                Grazie

                 

                Allegati:
                You must be logged in to view attached files.
                #42865 Score: 0 | Risposta

                Fulvio
                Partecipante

                  questo quesito è interessante, ci metterò la testa in questi giorni

                  #42868 Score: 0 | Risposta

                  pixel
                  Partecipante

                    Ciao Fulvio, 

                    grazie per il tuo impegno.

                    Io ci sto sto provando in tutti i modi possibili, ma la mia poca esperienza mi pone dei limiti. Ma per il momento non mollo.  

                    Leggendo le varie discussione di questo forum ho notato che cè gente che legge e scrive codici come se leggesse o scrivesse un articolo di giornale.

                    Per questo mi rivolgo a degli esperti del campo sicuramente con anni di esperienza.

                    Mi chiedo forse per come è composto il mio "codice" assemblato e adattato, che forse non si può fare. Vediamo che succede.  

                    #42869 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      89 pts

                      Allora , se ho capito. Ho inserito un ciclo if che mi controlla che il giorno di arrivo non sia una camera occupata.

                      ' Funziona per un massimo di due mesi
                      ElseIf txtMesePartenza.Value = Val(txtMeseArrivo) + 1 Then
                      r = txtMeseArrivo.Value + 4 'identifica la riga del mese
                      c = Val(txtGiornoArrivo) + 2 'identifica colonna del giorno di arrivo
                      If Cells(r, c).Interior.Color = RGB(255, 0, 0) Then
                      MsgBox "giorno " & txtGiornoArrivo & " " & txtMeseArrivo.Value & " occupata"

                      ' quello che deve fare se la camera è occupata

                      End If

                      questa condizione verifica che la data, nel nostro caso giorno 9 del mese di gennaio non sia occupata(verifica il colore della cella), se il colore è rosso , visualiazza un messaggio.

                       

                       

                      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                      Sempre il mare, uomo libero, amerai!
                      ( Charles Baudelaire )</div
                      #42870 Score: 0 | Risposta

                      Fulvio
                      Partecipante

                        Albatros54 in questi casi non ci si può limitare a controllare il giorno di arrivo, bisogna controllare ogni singolo giorno della prenotazione, nessuno vieta che il giorno di arrivo la camera sia disponibile e dal secondo giorno in poi invece sia occupata.

                        la soluzione che hai proposto andrebbe modificata a mio avviso tenendo in considerazione

                        - ANNO/MESE/GIORNO di arrivo

                        - ANNO/MESE/GIORNO di partenza - 1

                        e poi fare un ciclo per verificare che tra arrivo e partenza la camera non sia impegnata.

                        in questo modo si potrebbero gestire anche eventuali prenotazioni "LUNGHE" e che si accavallano tra più anni

                        Premetto che bisogna ricordarsi di gestire gli anni bisestili.

                        Ovviamente non ho ancora guardato il codice di pixel e non so quanto debba essere stravolto per fare questo controllo.

                        #42871 Score: 0 | Risposta

                        pixel
                        Partecipante

                          Buongiorno a tutti,

                          Ciao Albatros,  grazie per il tuo  aiuto. Mi hai aperto gli occhi perchè mi ero perso nei meandri del vb. Da solo non ci sarei arrivato, ti lascio immaginare cosa non ho fatto e provato. Mi sono solo avvicinato alla condizione  If, ma facevo tutt'altro di tutto e di più tranne quello giusto. Eppure la soluzione era li e non la vedevo. Questo è dovuto alla mia poca esperienza. Ritengo che oltre a nutrire una  "passione  come è venuta a me" ci vogliono anni e anni di studi per arrivare a certi livelli. Infatti, ho letto molte discussioni con risposte date da te, Vecchio Frac, Marius, Alfrimpa, alexsp81, luca73, scossa  e tanti altri. 

                          Il codice così com è funziona bene.

                          Detto questo ti ringrazio ancora una volta Albatros. Ora posso proseguire il mio progetto.

                          metto il codice con la tua correzione.

                           

                          '=================Parte mancante data da Albatros========================================================
                             
                             ' Funziona per un massimo di due mesi
                          ElseIf txtMesePartenza.Value = Val(txtMeseArrivo) + 1 Then
                          r = txtMeseArrivo.Value + 4 'identifica la riga del mese
                          c = Val(txtGiornoArrivo) + 2 'identifica colonna del giorno di arrivo
                          f = giorni(txtMeseArrivo) + 2 ' aggiunto io
                          ' Quindi gli diciamo che se la cella e rossa allora avvisami ed esci altrimenti scrivi pure
                          If Cells(r, c).Interior.Color = RGB(255, 0, 0) Then
                          ' quello che deve fare se la camera è occupata
                          
                            'Grazie a te ho capito che con questa istruzione diciamo che se trova nella cella anzicchè un colore, un valore, non devi proseguire _
                             funzona in entrambi i casi
                          'If Cells(r, c) <> "" Then
                          
                          MsgBox "Il giorno " & txtGiornoArrivo & " / " & txtMeseArrivo.Value & " la camera è già occupata!", vbCritical, "ATTENZIONE..."
                          
                          Else
                          ' quello che deve fare se la camera è occupata
                          Range(Cells(r, c), Cells(r, f)).Interior.ColorIndex = 3  'Colora di rosso le celle
                          Range(Cells(r, c), Cells(r, f)) = txtCodiceCamera.Value
                          rr = txtMesePartenza.Value + 4
                          cc = 3  ' identifica la colonna
                          ff = txtGiornoPartenza.Value + 1
                          Range(Cells(rr, cc), Cells(rr, ff)).Interior.ColorIndex = 3  'Colora  celle in Rosso
                          Range(Cells(rr, cc), Cells(rr, ff)) = txtCodiceCamera.Value ' codice cliente
                          End If
                          #42872 Score: 0 | Risposta

                          pixel
                          Partecipante

                            Ciao Fulvio,

                             

                            Fulvio ha scritto:

                            non ci si può limitare a controllare il giorno di arrivo, bisogna controllare ogni singolo giorno della prenotazione,

                            nessuno vieta che il giorno di arrivo la camera sia disponibile e dal secondo giorno in poi invece sia occupata.

                            Appena puoi prova il file  vedrai come funziona il codice sempre che tu non l'abbia già visto. Forse non ho capito bene io oppure  cè un pò di confusione. 

                            Se una prenotazione es. dal 10/01 al 15/01 è stata già inserita Ok, arriva una nuova richiesta di prenotazione dal 15/01 al 20/01 dopo aver verificato vedrai che per quella camera non è possibile in quanto già occupata.

                             

                            Fulvio ha scritto:

                            la soluzione che hai proposto andrebbe modificata a mio avviso tenendo in considerazione

                            - ANNO/MESE/GIORNO di arrivo

                            - ANNO/MESE/GIORNO di partenza - 1

                            e poi fare un ciclo per verificare che tra arrivo e partenza la camera non sia impegnata.

                              Su questo hai perfettamente ragione. Per  questo motivo avevo pensato di inserire un mese precedente all'anno in corso. ad esempio Dicembre 2023. Sarebbe davvero una ciliegina sulla torta. Io ho provato facendo solo dei minestroni. Questo è troppo difficile per me, non ci riuscirò mai.

                             

                            Fulvio ha scritto:

                            Premetto che bisogna ricordarsi di gestire gli anni bisestili.

                            Infatti, qui diciamo che nasce un altro piccolo problema. Io ho pensato di mettere una cella lampeggiante quando l'anno è bisestile.

                            Grazie Fulvio per il tuo interesse. Se migliorabile tanto meglio.

                            allego il codice completo.

                             

                            ' Pulsante inserisci prenotazione camera 1
                             Dim r As Integer, c As Integer, f As Variant, rng As Variant, cellerange As String, cl As Variant, t As String
                             Dim risp As String, risposta As String
                             Dim rr As Variant, ff As Variant, cc As Variant
                             
                             Sheets("Prospetto").Select  ' Seleziona il foglio prenotazione camere
                                If txtGiornoArrivo = "" Or txtDataPartenzaCamera = "" Then
                                    Exit Sub
                            Else
                                    txtGiornoArrivo = Day(CDate(txtDataArrivoCamera))    'restituisce il giorno della data di arrivo
                                    txtMeseArrivo = Month(txtDataArrivoCamera)    'e il mese espresso in numero
                                    txtGiornoPartenza = Day(CDate(txtDataPartenzaCamera))    'restituisce il giorno della data di partenza
                                    txtMesePartenza = Month(txtDataPartenzaCamera)    'e il mese espresso in numero
                                    If txtMeseArrivo.Value = txtMesePartenza.Value Then
                                        r = txtMeseArrivo.Value + 4    'seleziona la riga del mese partendo dalla 5°
                                        c = Val(txtGiornoArrivo) + 2
                                        f = Val(txtGiornoPartenza) + 1
                                        Set rng = Range(Cells(r, c), Cells(r, f))
                                        cellerange = Evaluate("=COUNT(" & rng.Address & ")")
                                        If cellerange = 0 Then
                                           Range(Cells(r, c), Cells(r, f)).Interior.ColorIndex = 3  'Colora di rosso
                                           Range(Cells(r, c), Cells(r, f)) = txtCodiceCamera.Value ' Scrivi il codice cliente per distinguere l'uno dall'altro
                                            
                                    txtCameraUltimaInserita = txtCameraUltimaInserita.Value + " Camera 1 " 'Visualizza ultima camera inserita
                                            
                                            Exit Sub
                                        End If
                            For Each cl In rng
                                            t = cl.Column
                                            risp = MsgBox("Nel periodo dal " & CDate(txtDataArrivoCamera) & "  al  " & CDate(txtDataPartenzaCamera) & _
                                             "  non puoi prenotare, camera occupata!" & Chr(10) & " " & Chr(10) & " Vuoi continuare?", vbYesNo + vbCritical + vbDefaultButton2, "ATTENZIONE...")
                                                          
                                         If risp = vbNo Then
                                                Exit Sub
                                            End If
                            Select Case VarType(cl)
                            Case vbDouble
                            risposta = MsgBox("La camera per il  " & t - 2 & "-" & (Cells(r, 1)) & "  è già prenotata!" & Chr(10) & "Vuoi sovrascrivere?" & Chr(10) & "", vbYesNo + vbCritical + vbDefaultButton2, "ATTENZIONE...")
                            txtCameraUltimaInserita = txtCameraUltimaInserita.Value + " Camera 1 "  'Visualizza ultima camera inserita
                            
                            If risposta = vbNo Then
                            Exit For
                            End If
                            rng.Value = txtCodiceCamera.Value
                            Range(Cells(r, c), Cells(r, f)).Interior.ColorIndex = 5 'Se le date dovessero coincidere colora le celle di blu.
                            Exit For
                            End Select
                            
                            While cl.Value = ""
                            cl.Value = txtCodiceCamera.Value
                            Range(Cells(r, c), Cells(r, f)).Interior.ColorIndex = 2 'Se la data della nuova prenotazione è antecedente ad una prenotazione già _
                            assgneta, allora colora le celle prima di bianco e successivamente di blu. Es. prenotazione esistente dal 10/12/2024 al 13/12/2024 _
                            e si inserisce dal 09/12/2024 al 15/12/2024
                            Wend
                            Next
                               
                            '=================Parte mancante data da Albatros========================================================
                               
                               ' Funziona per un massimo di due mesi
                            ElseIf txtMesePartenza.Value = Val(txtMeseArrivo) + 1 Then
                            r = txtMeseArrivo.Value + 4 'identifica la riga del mese
                            c = Val(txtGiornoArrivo) + 2 'identifica colonna del giorno di arrivo
                            f = giorni(txtMeseArrivo) + 2 ' aggiunto io
                            ' Quindi gli diciamo che se la cella e rossa allora avvisami ed esci altrimenti scrivi pure
                            If Cells(r, c).Interior.Color = RGB(255, 0, 0) Then
                            ' quello che deve fare se la camera è occupata
                            
                              'Grazie a te ho capito e con questa istruzione diciamo che se trova nella cella anzicchè un colore, un valore, non devi proseguire _
                               funzona in entrambi i casi
                            'If Cells(r, c) <> "" Then
                            
                            MsgBox "Il giorno " & txtGiornoArrivo & " / " & txtMeseArrivo.Value & " la camera è già occupata!", vbCritical, "ATTENZIONE..."
                            
                            Else
                            ' quello che deve fare se la camera è occupata
                            Range(Cells(r, c), Cells(r, f)).Interior.ColorIndex = 3  'Colora di rosso le celle
                            Range(Cells(r, c), Cells(r, f)) = txtCodiceCamera.Value
                            rr = txtMesePartenza.Value + 4
                            cc = 3  ' identifica la colonna
                            ff = txtGiornoPartenza.Value + 1
                            Range(Cells(rr, cc), Cells(rr, ff)).Interior.ColorIndex = 3  'Colora  celle in Rosso
                            Range(Cells(rr, cc), Cells(rr, ff)) = txtCodiceCamera.Value ' codice cliente
                            End If
                            End If
                            End If
                            End Sub
                            
                            Private Sub txtDataPartenzaCamera_Exit(ByVal Cancel As MSForms.ReturnBoolean)
                             If txtDataArrivoCamera = "" Or txtDataPartenzaCamera = "" Then
                             Exit Sub
                             Else
                             txtGiornoArrivo = Day(CDate(txtDataArrivoCamera))  'restituisce il giorno della data di arrivo
                             txtMeseArrivo = Month(txtDataArrivoCamera) 'mese espresso in numero
                             txtGiornoPartenza = Day(CDate(txtDataPartenzaCamera)) 'restituisce il giorno della data di partenza
                             txtMesePartenza = Month(txtDataPartenzaCamera) 'mese espresso in numero
                             End If
                            #42873 Score: 0 | Risposta

                            Fulvio
                            Partecipante

                              Pixel: ho qualche domanda

                              1) quante camere vanno gestite con questo programma

                              2) hai intenzione di tenere tutte le camere sullo stesso foglio prospetto oppure creare un foglio per ogni singola camera?

                              #42874 Score: 0 | Risposta

                              alexps81
                              Moderatore
                                58 pts

                                Ma sei sicuro che funziona bene??? Secondo me no (sempre se ho inteso ciò che vuoi ottenere).

                                A parte il dimensionamento delle variabili che vanno sistemate, ma poi se un cliente prenota a cavallo tra l'anno attuale e l'anno successivo cosa succede? (Es.: 20/12/2024-10/01/2025). Così com'è il codice non fa nulla.

                                Poi hai fatto delle verifiche su diverse date di prenotazione? Io ho notato che se rimani sullo stesso mese e le prenotazioni si accavallo allora ti consente di sovrascrive il numero cliente e ti colora di blu la/e celle/a. Ma se c'è una prenotazione che comprende 2 mesi allora ti nega la prenotazione a prescindere. Quindi è giusto? Nel primo caso ti fa scegliere se continuare nel secondo no?

                                E la Function Giorni() a che serve? Fatta così non funziona. Quando l'anno è bisestile come calcola i giorni di febbraio?

                                Per calcolare quanti giorni ci sono in un mese basta un rigo di codice:

                                Dim f as Integer '(e non as Variant come hai fatto tu)
                                
                                f = (DateSerial(anno, mese + 1, 1)) - (DateSerial(anno, mese, 1))
                                'dove anno e mese sono quelli che passi in rassegna
                                
                                #42875 Score: 0 | Risposta

                                Fulvio
                                Partecipante

                                  Alexps81 anche io sto notando un po' di vuoti di analisi e per quello sto iniziando a fargli un po' di domande appunto per capire dove si voglia arrivare. 

                                  però da quello che ho capito questo non è il suo lavoro e quindi ci può stare che non pensi a tutti i possibili scenari che gli porranno davanti, spesso non lo fanno nemmeno gli analisti veri.

                                  alla fine quando sapremo/saprà meglio cosa dovrà fare il programma vedrete/mo  che una soluzione la troviamo

                                  #42876 Score: 0 | Risposta

                                  pixel
                                  Partecipante

                                    Rispondo in ordine. Ciao Fulvio,

                                    Fulvio ha scritto:

                                    1) quante camere vanno gestite con questo programma

                                    2) hai intenzione di tenere tutte le camere sullo stesso foglio prospetto oppure creare un foglio per ogni singola camera?

                                    A l momento sono tre camere e le ho inserite sulle stesso foglio. Poi se andrà in porto alcune cose saranno 6/7. Sul file caricato invece ho messo 1 camera per semplificare il più possibile. 

                                     

                                     

                                    #42877 Score: 0 | Risposta

                                    pixel
                                    Partecipante

                                      Caio Alex, un piacere risentirti. Come potrai notare sto usando il tuo gestionale che rispetto al mio non  cè paragone.

                                      Per quanto riguarda la tua osservazione:

                                      alexps81 ha scritto:

                                      Ma sei sicuro che funziona bene??? Secondo me no (sempre se ho inteso ciò che vuoi ottenere).

                                      A parte il dimensionamento delle variabili che vanno sistemate, ma poi se un cliente prenota a cavallo tra l'anno attuale e l'anno successivo cosa succede? (Es.: 20/12/2024-10/01/2025). Così com'è il codice non fa nulla.

                                      Hai ragione, lo sapevo. Infatti, avevo pensato di inserire un 13° mese cioè "Dicembre 2023"  e da li verificare la disponibilità prima di inserire una nuova prenotazione.  Se fosse possibile realizzarlo sarebbe una bela cosa.

                                      Io avevo pensato di fare ogni anno un file a se es. 2023, 2024 e cosi via. Forse male non sarebbe. Vediamo.

                                       

                                       

                                      alexps81 ha scritto:

                                      Poi hai fatto delle verifiche su diverse date di prenotazione? Io ho notato che se rimani sullo stesso mese e le prenotazioni si accavallo allora ti consente di sovrascrive il numero cliente e ti colora di blu la/e celle/a. Ma se c'è una prenotazione che comprende 2 mesi allora ti nega la prenotazione a prescindere. Quindi è giusto? Nel primo caso ti fa scegliere se continuare nel secondo no?

                                      Hai ragione anche qui,  ho notato questa cosa e se si potesse aggiustare sarebbe tanto meglio. Io su aiuto di Albatros, sono riuscito a farlo funzionare quanto meno correttamente. Ti spiego: precedentemente quando una prenotazione era a cavallo di due mesi Es. 30/04/2024 al 05/05/2024, il codice non mi chiedeva e sovrascriveva anche se il giorno precedente la camera era già assegnata. Invece adesso non succede. Però se mi desse anche qui la stessa possibilità non mi dispiacerebbe.

                                       

                                      alexps81 ha scritto:

                                      E la Function Giorni() a che serve? Fatta così non funziona. Quando l'anno è bisestile come calcola i giorni di febbraio?

                                      Il codice è un miscuglio di altri codice trovati in rete più alcune modifiche fatte da me. 

                                      Per quanto riguarda l'anno bisestile, hai ragione anche qui. Ho provato anche a modificare il modulo 3 dove ci sono le istruzioni del mese e giorni, ma non sono riuscito a trovare una possibile soluzione. Infatti, ho pensato di mettere un avviso in una cella (magari lampeggiante) in modo da attirare la mia attenzione nell'inserimento. 

                                       

                                      alexps81 ha scritto:

                                      Dim f as Integer '(e non as Variant come hai fatto tu)

                                      Come vuol dimostrarsi il minestrone è venuto in parte male ( per non dire tutto).  Questo dovuto alla scarsa conoscenza in programmazione. Adesso vado a correggere la variabile da te indicata.

                                      alexps81 ha scritto:

                                      f = (DateSerial(anno, mese + 1, 1)) - (DateSerial(anno, mese, 1))'dove anno e mese sono quelli che passi in rassegna

                                      Quindi devo sostituire questo "f" con quello che cè  ora nel codice?

                                      Grazie

                                      #42879 Score: 0 | Risposta

                                      pixel
                                      Partecipante

                                        Fulvio ha scritto:

                                        Alexps81 anche io sto notando un po' di vuoti di analisi e per quello sto iniziando a fargli un po' di domande appunto per capire dove si voglia arrivare. 

                                        però da quello che ho capito questo non è il suo lavoro e quindi ci può stare che non pensi a tutti i possibili scenari che gli porranno davanti, spesso non lo fanno nemmeno gli analisti veri.

                                        alla fine quando sapremo/saprà meglio cosa dovrà fare il programma vedrete/mo  che una soluzione la troviamo

                                        Ciao Fulvio,

                                        andiamo per step. 

                                        Il programma non deve fare altro che; registrare dei dati, verifica e inserire prenotazioni, creare delle ricevute e stamparle, insomma è un gestionale per strutture ricettive.

                                        2° Step. E' il lavoro di mia moglie, dove anche io do una mano. Non certo perdevo la testa per creare un qualcosa per altra persona quando non ho le minime competenze. Ti pare? 

                                        Detto questo, adesso il modo di lavorare è  su carta. Tempo fa creai dei fogli excel dove si scrive  la prenotazione verificando  l'immediata  disponibilità delle camere.  Anche le ricevute sono fatte a mano. Ora invece vorrei automatizzare la cosa.

                                        Grazie 

                                        #42880 Score: 0 | Risposta

                                        albatros54
                                        Moderatore
                                          89 pts

                                          ho immaginato questo scenario:

                                          su foglio prospetto ho le prenotazioni che vanno dal 01-01-2024 al 09-01-2024, quindi la stanza in questi giorni è occupata, celle colorate di rosso,Bene.

                                          ho inserito una prenotazione che mi va  dal 15-01-2024 al 18-01-2024 , quindi la stanza in questi giorni è occupata,celle colorate di rosso,Bene.

                                          ora voglio inserire una prenotazione  che mi vada dal 10-01-2024 al 24-01-2024, il programma mi deve avvisare se in questo periodo c'è qualche giorno che la tsanza è gia occupata.Nel codice che posto ho inserito una routine che fa questo.

                                          If txtMeseArrivo.Value = txtMesePartenza.Value Then
                                          r = txtMeseArrivo.Value + 4 'seleziona la riga del mese partendo dalla 5°
                                          c = Val(txtGiornoArrivo) + 2
                                          f = Val(txtGiornoPartenza) + 1
                                          Set rng = Range(Cells(r, c), Cells(r, f))
                                          cellerange = Evaluate("=COUNT(" & rng.Address & ")")
                                          If cellerange > 0 Then
                                          For Each cl In rng
                                          If cl.Interior.ColorIndex = 3 Then
                                          MsgBox "stanza occupata"
                                          End If
                                          Next
                                          End If

                                          If cellerange = 0 Then
                                          Range(Cells(r, c), Cells(r, f)).Interior.ColorIndex = 3 'Colora di rosso
                                          Range(Cells(r, c), Cells(r, f)) = txtCodiceCamera.Value ' Scrivi il codice cliente per distinguere l'uno dall'altro

                                           P.S. Questo codice mi sembra di averlo già visto in qualche discussione passata in questo Forum (Scrive e colora se cella vuota
                                          di angy (utente non iscritto) data: 30/04/2016 11:18:30)

                                          Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                          Sempre il mare, uomo libero, amerai!
                                          ( Charles Baudelaire )
                                          #42882 Score: 0 | Risposta

                                          pixel
                                          Partecipante

                                            Ciao Albatros, ho provato il tuo codice ma non va. Sicuramente son io che sbaglio qualcosa. Boo. Riprovo

                                            #42883 Score: 0 | Risposta

                                            albatros54
                                            Moderatore
                                              89 pts

                                              hai creato lo scenario che ti ho prospettato? perchè il codice funziona lo devi inserire nella routine del "CommandButton18_Click"

                                               

                                              Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                              Sempre il mare, uomo libero, amerai!
                                              ( Charles Baudelaire )
                                              #42884 Score: 0 | Risposta

                                              pixel
                                              Partecipante

                                                Si Albatros, sono riuscito, ho notato che mi da degli avvisi  per quanti sono i giorni occupati. Se desse un solo avviso con  il numero dei giorni totali occupati sarebbe ancora meglio.

                                                Grazie

                                                #42885 Score: 0 | Risposta

                                                pixel
                                                Partecipante

                                                  P.S. Albatros,

                                                  Per quanto riguarda la provenienza del codice non saprei indicartelo per quanti ne ho letti, scaricati e modificati.

                                                  #42890 Score: 0 | Risposta

                                                  albatros54
                                                  Moderatore
                                                    89 pts

                                                    pixel ha scritto:

                                                    Se desse un solo avviso con  il numero dei giorni totali occupati sarebbe ancora meglio

                                                    Modifuca il codice cosi

                                                    If cellerange > 0 Then
                                                                For Each cl In rng
                                                                If cl.Interior.ColorIndex = 3 Then
                                                                messaggio = messaggio & "stanza occupata giorno "
                                                                messaggio = Chr(13) & messaggio & Cells(4, cl.Column) & vbLf & vbLf
                                                                End If
                                                                Next
                                                                MsgBox messaggio
                                                                End If
                                                                

                                                     

                                                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                                    Sempre il mare, uomo libero, amerai!
                                                    ( Charles Baudelaire )
                                                    #42891 Score: 0 | Risposta

                                                    alexps81
                                                    Moderatore
                                                      58 pts

                                                      Ma io forse non ho compreso come dovrebbe funzionare l'inserimento delle prenotazioni.

                                                      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?

                                                      Deve impedirti di inserire il cliente nr. 2 nella stanza nr. 1?

                                                      Ti deve chiedere se vuoi accavallare le date e dal 13 al 18 gennaio la assegna al cliente nr. 2? Ma poi se è così è normale che avvenga una cosa del genere? Il cliente nr. 1 che fine fa in quei 2 giorni?

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 37 totali)
                                                    Rispondi a: Codice VBA inserisci pren. da migliorare. excel 2021
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: