patel devo ringraziarti per aver insistito a non darmi il file servito su un piatto d'argento, perchè stamattina mi sono rimesso ad aggeggiare con i tre codici proposti e con il terzo sono riuscito a farlo funzionare.
allego il codice completo
Option Explicit
Private Sub Worksheet_Calculate()
Call minuti
End Sub
Private Sub Worksheet_Change(ByVal Target As Range) 'questo codice ti segnala con un messaggio se per sbaglio scrivi riposo nella colonna "I" con il codice 2-3-4
Dim R As Long
R = Target.Row
If Not Intersect(Target, [i14:i60]) Is Nothing Then
If Target = 2 Or Target = 3 Or Target = 4 Then
Target = ""
MsgBox "qui va messo solo codice presenza"
End If
End If
If Intersect(Target, Uni0n(Range("C14:C60"), Range("J14:J60"))) Is Nothing Then Exit Sub ' questo codice di da un messaggio di errore se per sbaglio metti riposo lo stesso giorno che hai lavorato
Select Case Target.Column
Case 3
If WorksheetFunction.CountA(Range("J14:J60")) > 0 Then
MsgBox "Non puoi scrivere in questa cella se colonna J non è vuota"
Exit Sub
End If
Case 10
If WorksheetFunction.CountA(Range("C14:C60")) > 0 Then
MsgBox "Non puoi scrivere in questa cella se colonna C non è vuota"
Exit Sub
End If
End Select
End Sub
l'unica cosa non sono riuscito a mettere
Target = ""
nel secondo codice così come nel primo
ho provato a metterlo in vari punti del codice ma mi da sempre errore nel modulo2 alla riga
Set AG = ThisWorkbook.ActiveSheet.Range("AG31")
allego il file con il codice nel foglio "sett"