Ciao a tutti, ecco il problema.
in un foglio di lavoro ci sono tante colonne quanti sono i giorni del mese;
nella prima cella in alto di ogni colonna è presente il giorno, es. dom,
lun, ecc., che vengono inserite in automatico inserendo una sola data nella
prima cella in alto a sinistra.
Vorrei che che ogni colonna , composta da 21 celle verticali, diventi di un
colore predefinito in relazione al contenuto della prima cella, non
solamente per quanto riguarda i giorni dom, lun, ecc, ma anche prefissando i
giorni festivi dell'anno, quali pasqua, 1° novembre e tutte le altre
festività annuali.
Avete del codice da adattare o un altro consiglio che non sia macchinoso.
Grazie, Bruno
"Bruno - S95" ha scritto:
Potresti utizzare la formattazione condizionale per le domeniche Selezioni
il range A1:AE21 menù Formato/Formattazione condizionale/La formula è e
metti =GIORNO.SETTIMANA(A1)=1 e scegli un colore mentre per le festività
infrasettimanali creati un elenco ad hoc con tutte le feste dell'anno
selezioni intero range e assegni un nome menù Inserisci/Nome/Definisci e dai
un nome ad esempio "FESTIVI" poi riselezioni il range A1:AE21 menù
Formato/Formattazione condizionale La formula è e metti =A1=FESTIVI e scegli
il colore che vuoi
Ciao
Antonio
Ciao Bruno
2 possibilità:
1) dipendere da un elenco festività fatto a parte, denominato ( per es
SerieFestivi ); formattazione condizionale dipendente da *una sola
formula ordinaria*, eventualmente con una riga di appoggio .
2)Formattazione condizionale dipendente da Funzione Definita
dall'Utente ( UDF ) che ovviamente necessita di codice VBA; te ne
posso proporre una completamente indipendente dalla serie di festivi
inserita nel foglio di lavoro;
la serie festivi viene generata automaticamente dalla funzione alla
quale viene passato l'anno; la serie comprende anche il lunedì di
Pasqua. Si crea una sorta di festivi perpetui.
Cosa ti interessa ?
Ciao Elio
========================================
Ciao Elio, innanzitutto grazie per la tua disponibilità e buona domenica.
Probabilmente la possibilità n. 1 è quella che più si adatta alle mie
esigenze, infatti posso creare le festività anche in un foglio nascosto al
quale appoggiarmi. Non ho ben capito la riga d'appoggio della quale hai
fatto cenno. Con la prima opzione posso fare l'elenco festività aggiungendo
anche il patrono della località, cosa che probabilmente non posso fare con
l'altra opzione.
Comunque, ti chiedo la cortesia di postarmi per entrambi le possibilità in
modo da poter scegliere quella più idonea anche in caso di mio ripensamento.
Lo schema sotto raffigurato, se arriva, è parte dello specchio da me
utilizzato, dove nel primo giorno (giov 01) inserisco la data per intero che
poi mi da tutti i restanti giorni e il mese e anno a in alto a sx.
Per la formattazione colore delle sigle ho già risolto, ma resta macchinoso
selezionare tutte le colonne festive (es. A1:A21) e dargli lo sfondo
colorato; talvolta si può sbagliare.
Tieni conto che, se possibile, dovrò dare sfondo colorato anche alle celle
delle note, quelle in basso. Sarebbe bello poter fare l'elenco festività
valido per tutti gli anni facendo colorare le colonne con riferimento al
giorno, mese, esempio: 1° Novembre, resterebbe comunque il problema della
pasqua che non ricade sempre lo stesso giorno, quindi mi sa che ho detto una
stupidata.
Ancora mille grazie, Bruno
novembre 2007 gio ven sab dom lun mar mer gio ven sab dom lun mar mer
01 02 03 04 05 06 07 08 09 10 11 12 13 14
NOME 1 RF LS LS RS Pa Ma Ma
Nome 2 RF Ma Ma RS Pa A Ma P Ma Ma RS Ma P Ma
RF Pa Pa RS M M M M P Pa RS RM RM RM
RF Pa Pa RS Pa P Pa LS Ma Ma RS Pa Ma Pa
RF Ma Ma RS M Ma Pa Ma P Pa RS Pa Ma Pa
gio 01 gio 08
ven 02 ven 09
sab 03 sab 10
dom 04 dom 11
lun 05 lun 12
mar 06 mar 13
mer 07 mer 14
Ciao Bruno
Per la soluzione 1 ti propongo un lay-out di foglio già presente in un
mio file. Adatta eventualmente con gli indirizzi di celle del tuo
file. Ti anticipo che la soluzione 2 risolve anche il problema della
festa patronale
Soluzione1:
1)In E4 una data con il primo di un mese; scritta manualmente o
restituita da una funzione DATA, nel formato che vuoi
2)Dove vuoi 12 celle contigue ( nel mio file in verticale ): nelle
prime 10 le feste fisse; nell'undicesima la festa patronale; nella
dodicesima lunedì di pasqua; denomina l'intervallo Serie Festivi.
Piuttosto che scrivere le date con un valore fisso, ti consiglio di
ottenerne il valore con la funzione data che ricava l'argomento anno
dalla cella E4, per le feste diverse dal lunedì di pasqua. Per il
lunedì di pasqua puoi utilizzare formule reperibili sul WEB oppure
utilizzare una funzione definita dall'utente ( vedi oltre la funzione
EASTER ): in entrambi i casi l'anno passato alla funzione è ricavato
sempre dalla cella E4.
3)In E7 = E4. In F7 = E7 + 1 da trascinare fino ad AF7
3a) In AG7: =SE(MESE($E$7)<MESE($E$7+28);"";$E$7 + 28)
3b) In AH7: =SE(MESE($E$7)<MESE($E$7+29);"";$E$7 + 29)
3c) In AI7: =SE(MESE($E$7)<MESE($E$7+30);"";$E$7 + 30)
Formattare a giorno mese E7:AI7
4) In E8 = E7 ; Trascinare da E8 a AI8 e formattare a giorno settimana
5) In E6:
=SE(E(GIORNO.SETTIMANA(E7;2)<7;VAL.NON.DISP(CONFRONTA(E7;SerieFestivi;
0)));0;1)
Da trascinare fino a AF6
5a) In AG6:
=SE(VAL.ERR(E(GIORNO.SETTIMANA(AG7;2)<7;VAL.NON.DISP(CONFRONTA(AG7;SerieFestivi;
0))))=VERO;-1;SE(E(GIORNO.SETTIMANA(AG7;2)<7;VAL.NON.DISP(CONFRONTA(AG7;SerieFestivi;
0)));0;1))
Da trascinare fino ad AI6
6)formattazione condizionale dell'area E6:AI24 ( da cambiare in
relazione al numero righe del tuo planner ); FORMULA = E$6=1
Formato motivo cella quello che vuoi
La riga di appoggio ( eventualmente da nascondere ) è la sesta. Questa
non serve solo per la formattazione condizionale, ma permette di
distinguere ( valore = -1 ) tra giorni mese corrente da quelli del
mese successivo quando il mese corrente ha meno di 31 giorni. Questo
può tornare utile in formule che vogliono per esempio calcolare le
ferie escludendo quelle che ricorrono in giorni festivi o che sono a
carico del mese successivo ).
Soluzione2:
In un Modulo standard incolla:
Option Explicit
'Creata da Elio Buonocore elib...@tin.it il 9 feb 2005
Function GiornoNonLavorativo(dtmMiaData As Date, _
Optional SabatoNonLav As Boolean = False, _
Optional dtmPatrono As Date = "1-gen") As Boolean
GiornoNonLavorativo = False
Select Case Format(dtmMiaData, "d-mmm")
Case Is = "1-gen", "6-gen", "25-apr", "1-mag", "2-giu", "15-ago",
_
"1-nov", "8-dic", "25-dic", "26-dic", Format(dtmPatrono,
"d-mmm")
GiornoNonLavorativo = True
Exit Function
End Select
Select Case WorksheetFunction.Weekday(dtmMiaData, 2)
Case Is = 7
GiornoNonLavorativo = True
Exit Function
Case Is = 6
If SabatoNonLav = True Then
GiornoNonLavorativo = True
Exit Function
End If
End Select
If WorksheetFunction.Weekday(dtmMiaData, 2) = 1 Then
If Month(dtmMiaData) = 3 Or Month(dtmMiaData) = 4 Then
If dtmMiaData = EASTER(Year(dtmMiaData)) + 1 Then
GiornoNonLavorativo = True
Exit Function
End If
End If
End If
End Function
Function EASTER(Yr As Integer) As Long
' Dal sito: http://longre.free.fr/pages/form/dateheure.htm#Jours_fériés.
Dim Century As Integer
Dim Sunday As Integer
Dim Epact As Integer
Dim Golden As Integer
Dim LeapDayCorrection As Integer
Dim SynchWithMoon As Integer
Dim N As Integer
Golden = (Yr Mod 19) + 1
Century = Yr \ 100 + 1
LeapDayCorrection = 3 * Century \ 4 - 12
SynchWithMoon = (8 * Century + 5) \ 25 - 5
Sunday = 5 * Yr \ 4 - LeapDayCorrection - 10
Epact = (11 * Golden + 20 + SynchWithMoon - LeapDayCorrection) Mod
30
If Epact < 0 Then Epact = Epact + 30
If (Epact = 25 And Golden > 11) Or Epact = 24 Then Epact = Epact + 1
N = 44 - Epact
If N < 21 Then N = N + 30
N = N + 7 - ((Sunday + N) Mod 7)
EASTER = DateSerial(Yr, 3, N)
End Function
Individua eventuali righe spezzate dal copia incolla generate dal mio
post ( Debug >>Compila VBAProject ) e fai le opportune correzioni.
Chiudi il VBA e torna ad Excel
Testa la funzione GiornoNonLavorativo che restituisce valore VERO se
il giorno è un festivo. Questa ha 3 argomenti:
1) la data (argomento obbligatorio, passata con riferimento di cella o
con valore in qualsiasi formato valido) per es
=GiornoNonLavorativo("01/11/2007")
2) SabatoNonLav ( argomento facoltativo di tipo booleano; se omesso
viene considerato FALSO: cioè il sabato è considerato lavorativo )
3) Data patrono ( argomento facoltativo di tipo data; se omesso
equiparato a 1 gennaio che è già festa. NB è indipendente dall'anno,
nel senso che puoi mettere un anno anche diverso dalla data del primo
argomento )
Fai un planner sul tipo del precedente ma senza la sesta riga e senza
l'elenco Serie Festivi.
Decidi eventualmente se passare alla funzione GiornoNonLavorativo la
data patronale per valore o riferimento di cella; se opti per il
riferimento di cella allora dovrai conservare il dato nella cella che
vuoi; in alternativa puoi memorizzare il dato come costante in
Definisci Nomi . Per es se la festa patronale è il 29/06, in finestra
Definisci Nomi:
Nome: Patrono
Formula = 38532
38532 è il numero seriale del 29/06/2005 e funziona anche se viene
passato come primo argomento il 29/06/2007 nella formula
GiornoNonLavorativo("29/06/2007";FALSO;Patrono)
Seleziona l'area E7:E24 (da cambiare per il numero di righe) e
impostare la formattazione condizionale a la formula è
=GiornoNonLavorativo(E$7;FALSO;Patrono)
Ti segnalo, comunque, che anche nel caso opti per la soluzione 1, non
è obbligatorio memorizzare la serie festivi sul foglio di lavoro;
questa può essere memorizzata con una formula denominata in Definisci
Nomi del tipo Nome: FesteItaliane
Formula:=FestiviItaliani(<argomenti>) dove FestiviItaliani è una
funzione matriciale definita dall'Utente. Vedi un mio contributo in:
http://groups.google.it/group/microsoft.public.it.office.excel/browse_thread/thread/41b67b15fb5696f5/2b53ad54db780df9?lnk=st&q=#2b53ad54db780df9.
oppure passare a FesteItaliane una matrice di costanti corrispondente
ai numeri seriali dei festivi dell'anno di interesse.
Ciao Elio
Ciao Bruno
Soluzione1:
Soluzione2:
End Function
_______________________
Ciao Elio, domani se a lavoro trovo un minuto ci provo e ti faccio sapere.
Sarebbe una grande cosa riuscire arisolvere il problema.
Se dovessi avere difficoltà nel procedere, posso inviarti il mio file per
poi postarmelo nuovamente ?
Ancora mille grazie per l'aiuto, Bruno
Ciao Bruno
OK per il file, se hai difficoltà
Ciao Elio
____________
Ciao Elio, solo per conferma, è arrivato il file. Scusami ma, anche a passo
a passo, non ho capito bene il procedimento.
Grazie, Bruno
Ciao Bruno
Hai incollato il codice nel modulo del foglio e non hai impostato la
formattazione condizionale ( che comunque non funziona se il codice
non è in un modulo standard ). Non hai impostato la formula degli
ultimi 3 giorni del mese come ti avevo indicato.
Ti rimando il file ( ho impostato la formula di formattazione
condizionale con una data patrono del 29-giu ). Verifica che aprile
2007 intercetta lunedì di Pasqua.
Non è chiaro se ti interessa anche la soluzione 1.
Ciao Elio
_________
Ciao Elio, grazie infinite per la pazienza che hai avuto. Pasqua e lunedì di
Pasqua le intercetta, il patrono l'ho cambiato. La soluzione 1 al momento
non mi interessa più visto il risultato del codice della soluzione 2; è
veramente potente, infatti ci sarà meno lavoro da fare e meno errori in
quanto non sfuggiranno le festività tipo il patrono. Per l'impostazione
della formula non avevo mica capito come fare, poi vedendo come l'hai
inserita mi è stato tutto più chiaro, anche se non sono necessarie in quanto
preferisco avere la continuazione dei giorni del mese successivo anche se
potrei usare la combinazione delle formule negli ultimi 3 giorni.
Per cortesia confermami che oltre a incollare il codice nel modulo standard
e mettere le formule negli ultimi 3 giorni non è necessario effettuare altri
passaggi. Inoltre vorrei chiederti come mai le prime celle in alto non sono
con il riempimento dato alle colonne riportanti le festività, forse perchè
il colore parte dalla cella con il formato data ? (scusami per la domanda,
attualmente di codice non ci capisco nulla).
Inoltre, visto che i giorni posti sotto dove sono le note non vengono
evidenziati, come posso fare per dare lo stesso formato (data e colore)
delle colonne che segnalano i festivi?
Spero di essere stato sufficientemente chiaro e non confusionario.
Mille grazie, Bruno
_____________________
Ciao Elio, ho frugato un pocchino e finalmente ho capito come funziona; sono
riuscito ad evidenziare anche le date delle note riportate sotto.
Ancora mille grazie, alla prossima, Bruno
Ciao Elio, scusa se ti disturbo; ho riscontrato un problema che non riesco a
risolvere, in particolar modo perchè di codice non ci capisco nulla.
Prima di inserire la formattazione condizionale per rilevare le festività,
il codice per la formattazione del colore dei caratteri funzionava bene,
mentre dopo aver inserito la formattazione per i festivi non funzionava più.
Ho cercato di capirci qualcosa, ma è un problema non risolvibile per uno
inesperto come me. Puoi aiutarmi dando un'occhiatina per vedere qual è il
problema ?
Mille grazie, Bruno