Calendario Perpetuo



  • Calendario Perpetuo
    di Pischello (utente non iscritto) data: 22/10/2013 15:28:11

    Buondi

    ho questo problema:

    ho un foglio excel, in D3 inserisco un mese, in E3 un anno.
    Da qui avrei bisogno che si compilasse un calendario con il giorno in colonna C5:C35 in formato numero da 1 a 31.
    In D5:d35 il relativo giorno in formato testo (Lunedi-martedi-mecroledi etc) ed ad ogni cambio di mese o anno si aggiornasse il tutto.
    Se possibile formattare le domeniche in rosso e i sabati in giallo_

    Tutto questo con il codice vba
    Grazie per eventuali aiutini!



  • di Vecchio Frac data: 22/10/2013 15:29:56

    E' un compito per scuola?





  • di Pischello (utente non iscritto) data: 22/10/2013 15:30:33

    No è per lavoro! U_U



  • di mb data: 22/10/2013 15:37:25

    Ciao
    non è proprio perfetto come lo vuoi tu ma potrebbe essere un buon inizio
    io lo uso per i turni di lavoro
    ogni mese sostituisco la colonna a e il resto è come vuoi tu
    ciao



  • di Pischello (utente non iscritto) data: 22/10/2013 15:39:01

    Grazie mb ma mi serve in VBA



  • di Vecchio Frac data: 22/10/2013 15:56:37

    @mb
    Perchè "in colonna b inserire la formula giorni settimana" e poi formattare B2 col formato personalizzato "ggg" ? non serve... direttamente in A2 puoi assegnare il formato personalizzato gg/mm/aaaa ggg (a meno che tu non voglia il giorno in cella separata).





  • di mb data: 22/10/2013 16:07:14

    @v.f
    che dire mi dai un'istruzione utile ed interessante ogni giorno
    Grazie....



  • di Pischello (utente non iscritto) data: 22/10/2013 16:09:16

    È per me nulla?



  • di Vecchio Frac data: 22/10/2013 16:23:13

    cit. "È per me nulla?"
    ---> Sì, appena farai lo sforzo di scrivere un paio di righe di codice da correggerti/integrarti/migliorarti/distruggerti... insomma comincia ad aiutarti ^_^
    Siccome è un compitino (relativamente) facile facile, che come vedi si risolve senza neanche scomodare VBA, pensavo che servisse come test per un compito di scuola.
    Se sei completamente a zero di VBA, considera il fatto che devi poter essere in grado, in un prossimo futuro, di manutenere/adattare/modificare quel codice per esigenze e sviluppi ulteriori; e se non ne sei in grado, è meglio che cominci con cose più alla portata: lo schema del progetto proposto da mb per esempio è secondo me perfetto.





  • di mb data: 22/10/2013 17:38:30

    buona sera v.f
    stabilito di modificare il formato celle di colonna A come suggerito, la formattazione condizionale devo modificarla ma non riesco a trovare il modo perche non posso scrivere la formula se trova sabato evidenzia in giallo o se trovi domenica evidenzia in rosso perchè naturalmente è il formato cella e non è all'interno della cella che viene scritto il giorno

    26/10/2013 sab


    Grazie



  • di pischello (utente non iscritto) data: 22/10/2013 18:08:38




  • di mb data: 22/10/2013 18:55:22

    ciao volevo allegare il file aggiornato con i sufgerimenti di v.f, ma ho problemi con internet

    questa regola x il sabato =GIORNO.SETTIMANA(A2)=7 e poi sfondo giallo
    questa regola x la domenica =GIORNO.SETTIMANA(A2)=1 e poi lo sfondo rosso

    buona serata se ci sono altri consigli sempre ben accetti

    buona serata






  • di Mister_x (utente non iscritto) data: 22/10/2013 20:38:12

    ciao Piscello

    vista la tua prima richiesta e in base ai tuoi dati esposti ti posto una Sub() per fare questo lavoro

    ciao da Mister_x
     
    Sub CalendarioPer()
    Dim Mese As Long, Anno As Long
    Dim Giorno As Date
    Dim i As Integer
    Mese = Cells(3, 4)
    Anno = Cells(3, 5)
    Giorno = CDate("1" & "/" & Mese & "/" & Anno)
    Range("C5:D35") = ""
    Range("C5:D35").Interior.ColorIndex = xlNone
    Cells(4, 4) = UCase(Format(Giorno, "mmmm"))
     For i = 5 To 35
      If Month(Giorno) <> Mese Then Exit For
        Cells(i, 3) = Day(Giorno)
        Cells(i, 4) = Application.Proper(Format(Giorno, "dddd"))
         If Weekday(Giorno) = 7 Then Cells(i, 4).Interior.ColorIndex = 6
         If Weekday(Giorno) = 1 Then Cells(i, 4).Interior.ColorIndex = 3
      Giorno = Giorno + 1
     Next i
    End Sub






  • di Pischello (utente non iscritto) data: 23/10/2013 08:00:34

    Grazide Mister x ma mi restituisce errore run time 13 sulla riga
    Mese = Cells(3, 4)
    (io in questa cella ho una convalida dati con elenco dei mesi)




  • di mb data: 23/10/2013 09:35:10

    buongiorno a tutti
    sono riuscito ad allegare il file con le modifiche suggerite ieri, ho lasciato comunque le due versioni per poter vedere le differenti impostazioni nella formattazione condizionale
    c'è qualcuno che mi sa suggerire la corrrezioen a questa impostazione che ho applicato alla formattazione
    =$A$2:$A$31
    in questo caso la formattazione si applica alle celle indicate
    =$A:$A
    in questo caso a tutta la colonna anche dove non ci sono dati
    come faccio a spiegare al mio sistema che la regoal va applicata solo alle celle che contengono dati
    spero di essere stato chiaro

    Grazie



  • di MIster_x (utente non iscritto) data: 23/10/2013 10:01:30

    ciao pischello

    con la convalida dati in cella D3 tu inserisci il numero del mese o il nome del mese??
    perche' se inserisci il numero la variabile e' giusta se inserisci il nome bisogna apportare una piccola modifica
    comunque posta il tuo file cosi da poter capire cosa bisogna fare

    ciao Mister_x
    ti allego il mio file in versione 2003 dato che non specifichi la versione che utilizzi





  • di Pischello (utente non iscritto) data: 23/10/2013 11:22:21

    In D3 c'è il nome del mese (ho allegato il file), ho utilizzato excel 2003
    grazie matrix



  • di Mister_x (utente non iscritto) data: 23/10/2013 13:49:51

    ciao pischello

    visto il tuo file, quando si usano le macro per prima cosa bisogna togliere la protezione del foglio e poi rimetterla altrimenti se scrivi con VBA su celle protette questi ti danno l'errore
    comunque ho dovuto aggiungere una funzione di conversione da parole a numeri per i mesi
    vedi il tuo file allegato con modifica

    ciao da MIster_x
     
    ''  codice utilizzato in foglio 1
    
    Sub CalendarioPer()
    Dim Mese As String, MeseNum As Integer, Anno As String
    Dim Giorno As Date
    Dim i As Integer
    Mese = Cells(3, 4)
    Anno = Cells(3, 5)
    Application.EnableEvents = False
    ActiveSheet.Unprotect
    Giorno = CDate("1" & "/" & Converte(Mese) & "/" & Anno)
    Range("C5:D35") = ""
    Range("C5:D35").Interior.ColorIndex = xlNone
    Range("C5:D35").Font.ColorIndex = xlAutomatic
    MeseNum = Converte(Mese)
     For i = 5 To 35
      If Month(Giorno) <> MeseNum Then Exit For
        Cells(i, 3) = Day(Giorno)
        Cells(i, 4) = Application.Proper(Format(Giorno, "dddd"))
         If Weekday(Giorno) = 7 Then Cells(i, 4).Interior.ColorIndex = 6
         If Weekday(Giorno) = 1 Then Cells(i, 4).Interior.ColorIndex = 3
      Giorno = Giorno + 1
     Next i
    ActiveSheet.Protect
    Application.EnableEvents = True
    End Sub
    
    
    
    Function Converte(Stringa As String)
    Dim Val_mese As Integer
     Select Case UCase(Stringa)
     Case "GENNAIO"
        Val_mese = 1
     Case "FEBBRAIO"
        Val_mese = 2
     Case "MARZO"
        Val_mese = 3
     Case "APRILE"
        Val_mese = 4
     Case "MAGGIO"
        Val_mese = 5
     Case "GIUGNO"
        Val_mese = 6
     Case "LUGLIO"
        Val_mese = 7
     Case "AGOSTO"
        Val_mese = 8
     Case "SETTEMBRE"
        Val_mese = 9
     Case "OTTOBRE"
        Val_mese = 10
     Case "NOVEMBRE"
        Val_mese = 11
     Case "DICEMBRE"
        Val_mese = 12
     Case Else
     Val_mese = 1
     End Select
     Converte = Val_mese
    End Function
    
    






  • di Pischello (utente non iscritto) data: 23/10/2013 13:56:52

    grazie mister x

    funziona a dovere!!!



  • di totygno71 data: 23/10/2013 14:03:52

    Posto la mia soluzione anche se in netto ritardo rispetto a MisterX
    Ma oramai l'avevo fatto...
    Ciauz!!!



  • di Mister_x (utente non iscritto) data: 23/10/2013 14:38:19

    riciao

    non avevo letto help riguardante la funzione CDate() quindi la funzione che ho creato non serve in quanto CDate accetta anche una stringa del tipo "1 Gennaio 2013" e non solo "1/1/2013"

    quindi ti ripoasso la funzione giusta

    ciao da Mister_x
     
    Sub CalendarioPer()
    Dim Mese As String, MeseNum As Integer, Anno As String
    Dim Giorno As Date
    Dim i As Integer
    Mese = Cells(3, 4)
    Anno = Cells(3, 5)
    Application.EnableEvents = False
    ActiveSheet.Unprotect
    Giorno = CDate(1 & " " & Mese & " " & Anno)
    Range("C5:D35") = ""
    Range("C5:D35").Interior.ColorIndex = xlNone
    Range("C5:D35").Font.ColorIndex = xlAutomatic
    MeseNum = Month(Giorno)
     For i = 5 To 35
      If Month(Giorno) <> MeseNum Then Exit For
        Cells(i, 3) = Day(Giorno)
        Cells(i, 4) = Application.Proper(Format(Giorno, "dddd"))
         If Weekday(Giorno) = 7 Then Cells(i, 4).Interior.ColorIndex = 6
         If Weekday(Giorno) = 1 Then Cells(i, 4).Interior.ColorIndex = 3
      Giorno = Giorno + 1
     Next i
    ActiveSheet.Protect
    Application.EnableEvents = True
    End Sub






  • di Mister_x data: 23/10/2013 18:39:29

    ciao Pischello

    oggi qui' e' una giornata di M.... quindi non avendo niente da fare ti ho ampliato la tua sub() con le festivita' nell'anno, quste si intende che ci sono tutte anche quelle pagate ma non vengono evidenziate
    tipo Ascensione o Corpus Domini
    ti allego il tuo file con le modifiche

    ciao da Mister_x



  • di Pischello (utente non iscritto) data: 23/10/2013 19:04:29

    Grazie1000