Moderatori: Anthony47, Flash30005
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myC As Range, I As Long, WDCnt As Long, J As Long, rDate As Long
Dim pTitle, iCol As Long, eCol As Long, tCol As Long, K As Long, rCnt As Long
'
pPausa = Array("R") '<<< Le sigle che interrompono la sequenza lavorativa
pTitle = Array("C.T.", "Sorv.", "VVF", "CTvvf", "R.T.", "f.f.") '<<< Le sigle dei lavoratori
tCol = 2 '<<< La colonna con le sigle, B=12
rDate = 14 '<<< La riga con le date
iCol = 4 '<<< La colonna di inizio, B=12
eCol = 10 '<<< La colonna di fine, CR=96
'
For Each myC In Target
'Sigla valida in AN, colonna tra Min e Max, riga oltre riga data?
If Not IsError(Application.Match(Cells(myC.Row, tCol).Value, pTitle, False)) And _
myC.Column >= iCol And myC.Column <= 10 And myC.Row > rDate Then
I = myC.Row 'Riga di lavoro
Cells(I, iCol - 1).Interior.Color = xlNone 'Scolora area nominativo
Range(Cells(I, iCol), Cells(I, eCol)).Interior.Color = xlNone 'Scolora area dei turni
Range(Cells(I, iCol), Cells(I, eCol)).Font.Color = RGB(0, 0, 0) 'Scolora Font turni
WDCnt = 0 'Azzera contatore gg lavorati
For J = iCol To eCol
If Cells(I, J) <> "" And IsDate(Cells(rDate, J).Value) Then 'Data + Turno presente
mymatch = Application.Match(Cells(I, J), pPausa, False)
If IsError(Application.Match(Cells(I, J), pPausa, False)) Then
Cells(I, J).Interior.Color = xlNone 'Se giorni lavorativi
WDCnt = WDCnt + 1
If WDCnt >= 6 Then 'Se >= 6 gg lavorativi:
RepCnt = RepCnt + 1
Cells(I, tCol).Offset(0, 1).Interior.Color = RGB(255, 0, 0) 'Colora Nominativo
rCnt = 0
For K = 0 To 100 'colora all'indietro
'Considera solo le celle "Con data" e "Con turno":
If IsDate(Cells(rDate, J - K)) And Cells(I, J - K) <> "" Then
Cells(I, J).Offset(0, -K).Font.Color = RGB(255, 0, 0)
rCnt = rCnt + 1
If rCnt >= WDCnt Then Exit For 'Fine dopo N celle
End If
Next K
End If
Else 'Se giorni di riposo
Cells(I, J).Interior.Color = RGB(255, 255, 150) '*** Evidenzia in giallino
WDCnt = 0 'Azzera contatore
End If
End If
Next J
End If
Next myC
End Sub
Sub ccc()
aa = IsDate(Selection.Value)
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myC As Range, I As Long, WDCnt As Long, J As Long
'
''pPausa = Array("R", "F", "P", "A") '<<< Le sigle che interrompono la sequenza lavorativa
'
For Each myC In Target
If myC.Column < 32 And myC.Column > 1 Then
I = myC.Row
' Cells(I, 1).Interior.Color = xlNone
' Cells(I, 1).Resize(1, 32).Font.Color = RGB(0, 0, 0)
If Cells(I, 1) <> "" Then
lwbound = Evaluate("Max(if(" & Range("A2").Resize(1, myC.Column).Address & "=""L"", Column(" & Range("A2").Resize(1, myC.Column).Address & "),""""))")
rwbound = Evaluate("Min(if(" & Cells(2, myC.Column).Resize(1, 7).Address & "=""D"", Column(" & Cells(2, myC.Column).Resize(1, 7).Address & "),""""))")
If lwbound = 0 Then lwbound = 2
If rwbound = 0 Then rwbound = 32
If Application.WorksheetFunction.CountIf(Range(Cells(myC.Row, lwbound), Cells(myC.Row, rwbound)), "R") > 1 Then
Range(Cells(myC.Row, lwbound), Cells(myC.Row, rwbound)).Interior.Color = RGB(255, 0, 0)
Else
Range(Cells(myC.Row, lwbound), Cells(myC.Row, rwbound)).Interior.Color = xlNone
End If
End If
End If
Next myC
End Sub
=DATA(AN7;1;-2)-GIORNO.SETTIMANA(DATA(AN7;1;3))+AO7*7
=CERCA.ORIZZ(AO$5;$D$1:$AH$40;RIF.RIGA(A1)+3;0)
Sub Settimana()
Dim Anno As String, Sett As String, WeSt As Date
Dim hMatch, vMatch, I As Longg, J As Long
'
Anno = "AN7" '<<< La cella che contiene l' ANNO
Sett = "AO7" '<<< La cella che contiene il num SETTIMANA
'
WeSt = DateSerial(Range(Anno).Value, 1, 1) + Range(Sett).Value * 7 - 7
WeSt = WeSt - Weekday(WeSt, vbMonday) + 1
For I = 9 To Cells(Rows.Count, "AN").End(xlUp).Row
For J = 0 To 6
Cells(5, "AO").Offset(0, J).Value = WeSt + J
hMatch = Application.Match(CLng(WeSt) + J, Range("A1:AI1"), False)
vMatch = Application.Match(Cells(I, "AN").Value, Range("C1:C100"), False)
If Not IsError(hMatch) And Not IsError(vMatch) Then
Cells(I, "AO").Offset(0, J).Value = Cells(vMatch, hMatch)
Else
Cells(I, "AO").Offset(0, J).ClearContents
End If
Next J
Next I
End Sub
Somo1 ha scritto:Nn funziona ..... AN7 e AO7 In realtà sul foglio non corrispondono a nulla solo a celle vuote... In pratica cosa dice la macro?
Anthony qualche messaggio fa ha scritto:Pero' non ho capito come fai a mettere in un settimanale un mensile che di settimane ne ha piu' di una...
Supponiamo che la scelta si faccia indicando l'anno e il numero di settimana da prelevare; supponiamo che vengano scritti rispettivamente in AN7 (anno) e AO7 (n° settimana)
Allora metti questa formula in AO5, che ti dara' etc etc etc
Torna a Applicazioni Office Windows
worksheet change con comportamento curioso Autore: wallace&gromit |
Forum: Applicazioni Office Windows Risposte: 8 |
Adattare un grafico per interpretazione corretta Autore: raimea |
Forum: Applicazioni Office Windows Risposte: 6 |
attivare worksheet tramite variabile Autore: mirmidone21 |
Forum: Applicazioni Office Windows Risposte: 7 |
Visitano il forum: Gianca532011 e 9 ospiti