Condivido l'idea di W&G di abolire le formattazioni condizionali nell'area E8:IM32 e sostituirle con una macro di WorksheetChange, che scatta tutte le volte che scrivi qualcosa in quell'area (non mi pare ci siano formule).
Ad esempio, questa macro applica le formattazioni che sono visibili nell'area E2:V2 piu' quella dei festivi:
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myC As Range, ckArea As String, scanAr As Range
Dim myMatch, myCData
'=NON(VAL.NON.DISP(CERCA.VERT(E$4;FESTE;1;0)))
ckArea = "E8:IM32" '<<< L'area da controllare
Set scanAr = Application.Intersect(Target, Range(ckArea))
If Not scanAr Is Nothing Then
Application.ScreenUpdating = False
For Each myC In scanAr
myCData = CLng(Cells(4, myC.Column))
If Application.VLookup(myCData, Sheets("Festività").Range("FESTE"), 1) = myCData Then
myC.Interior.ColorIndex = 49
Else
myMatch = Application.Match(myC.Value, Range("E2:V2"), False)
If IsError(myMatch) Then
myC.Interior.ColorIndex = xlNone
Else
myC.Interior.ColorIndex = Range("E2").Cells(1, myMatch).Interior.ColorIndex
End If
End If
Next myC
Application.ScreenUpdating = False
End If
End Sub
Va messa nel "modulo vba del foglio su cui lavori" (ad esempio: gen-ago). Per questo:
-tasto dx sul tab col nome del foglio; scegli Visualizza codice
-copia il codice e incollalo nel modulo vba che così e' stato aperto
Se ci sono piu' fogli di lavoro il codice va messo in tutti i moduli vba di questi fogli
Attenzione: 1) e'
opportuno ridefinire il "Nome" FESTE non come
=Festività!$A$2:$A$1048576 ma come
=Festività!$A$2:$A$10000 (10mila righe per le festivita' basteranno certamente)
2) e'
necessario che la prima cella di questo "Nome" sia posta a -1
3) e'
necessario che le date inserite siano in ordine crescente (come sono gia' adesso)
Poi torna su Excel e prova a inserire dati e vedi se l'effetto e' quello desiderato
INFINE, avendo tolto le formattazioni condizionali, ora tutte le celle saranno Neutre anche se gia' popolate con valori che non vorresti perdere o dover riscrivere.
Per recuperarle aggiungi questa macro in un "Modulo Standard" del vba:
- Codice: Seleziona tutto
Sub FormattAll()
Range("E8:IM32").Copy
Range("E8").PasteSpecial xlPasteValues
Application.CutCopyMode = False
Range("E8").Select
End Sub
Avvia la Sub FormattAll e dovrebbe formattare l'intero tabellone.
Ragionevolmente questa Sub andra' eseguita una sola volta per ognuno dei fogli di lavoro che hanno bisogno di quella formattazione, per recuperare il pregresso; ma non e' vietato rieseguirla, ad esempio perche' vuoi modificare i colori corrispondenti al range E2:V2
Fai sapere...