Propongo comunque una versione basata su macro, che lavora sfruttando la colonna G del foglio LISTA.
Il codice della macro:
- Codice: Seleziona tutto
Sub WDPlann()
Dim lSh As Worksheet, wPL As Worksheet, wArr, KInd As Long, K As Long
Dim cPlDt As Date, I As Long, J As Long, lList As Long, UBWA As Long
Dim fIt As Boolean, tLen, cCol As String, flDay As Long
'
Set lSh = Sheets("LISTA") '<<< Il foglio con la lista
'
If ActiveSheet.Name = "DAY" Then
Set wPL = Sheets("DAY") '<<< Il foglio Giornaliero
flDay = 1
Else
Set wPL = Sheets("PLANNER_WEEK") '<<< Il foglio Settimanale
End If
'
lList = lSh.Cells(Rows.Count, 1).End(xlUp).Row 'Lunghezza lista?
wArr = lSh.Range("A2").Resize(lList, 7).Value 'Copia Lista
UBWA = UBound(wArr, 1)
lList = wPL.Cells(Rows.Count, 1).End(xlUp).Row 'Lunghezza foglio pianificazione
For J = 0 To 60 Step 3 'Data in orizzontale
If Not IsDate(wPL.Cells(1, 2 + J).Value) Then Exit For 'Se manca data, End
KInd = 1
'Cancella elenchi e colori:
wPL.Range("B1").Offset(2, J).Resize(lList - 2, 3).Interior.Color = xlNone
wPL.Range("B1").Offset(2, J).Resize(lList - 2, 3).ClearContents
'Scansione Lista orari su Pianificazione:
For I = 3 To lList
cPlDt = wPL.Cells(I, 1).Value + wPL.Cells(1, 2 + J).Value 'Data /Ora di piano
fIt = False
For K = KInd To UBWA 'Scan della lista
If wArr(K, 1) + wArr(K, 2) = cPlDt Then 'Trovata Data /Ora
' KInd = K
fIt = True
Exit For
End If
Next K
'Se Trovato:
If fIt Then
wPL.Cells(I, 2 + J) = wArr(K, 5)
wPL.Cells(I, 3 + J) = wArr(K, 4)
If flDay > 0 Then wPL.Cells(I, 4 + J) = wArr(K, 6)
tLen = Round(wArr(K, 7) / 15, 0): If tLen > 7 Then tLen = 7
cCol = Application.WorksheetFunction.Dec2Bin(tLen, 3) & "000"
wPL.Cells(I, 2 + J).Resize(tLen, 2 + flDay).Interior.Color = RGB(155 + 100 * CInt(Mid(cCol, 3, 1)), 155 + 100 * CInt(Mid(cCol, 2, 1)), 155 + 100 * CInt(Mid(cCol, 1, 1)))
End If
Next I
'Prossima colonna Data
Next J
End Sub
La macro agisce o sul foglio DAY oppure su PLANNER_WEEK, a seconda di quale foglio sia selezionato.
Va inserito in un Modulo standard del vba; le istruzioni marcate <<< vanno personalizzate come da commento
Poi va avviata la Sub WDPlann, che aggiornera' il planning secondo il contenuto del foglio LISTA e le date/ore contenute sul foglio di pianificazione.
Per avviare automaticamente la Sub WDPlann, e' conveniente aggiungere l'istruzione Call WDPlann in coda alle attuali Sub datameno7, Sub data7, Sub data1 e Sub datameno1 (aggiungere Call WDPlann subito prima di End Sub)
Inoltre si potrebbe eseguire automaticamente all'attivazione dei foglio DAY o PLANNER_WEEK; per questo, partendo da Excel:
-tasto dx sul tab col nome del foglio; scegliere Visualizza codice; inserire questo codice nella finestra vuota del vba che viene cosi' aperta:
- Codice: Seleziona tutto
Private Sub Worksheet_Activate()
Call WDPlann
End Sub
La colorazione sara'
-verso il Rosso, per durata 15 min
-verso il Verde, per durata 30 min
-verso il Giallo, per durate ipotetiche di 45 min
-verso il Blu, per durate 60 min
-verso il Viola, per durate ipotetiche di 75 min
-verso il Celeste, per durate ipotetiche di 90 min
Oltre 90 min la colorazione viene disabilitata
Ciao