Ciao
se copi un range di più colonne, nel tuo caso excel va in errore perchè non può calcolare il valore del range essendo lo stesso composto da più colonne.
Pertanto si rende necessario leggere il target colonna per colonna e, una volta individuata la colonna interessata (la 9 nel tuo caso) fare sul valore di quella colonna i controlli
Probabilmente ci sarà un sistema diverso da quello che ti sottopongo.
Note:
- quando utilizzi gli "eventi" devi prudentemente disabilitare gli eventi e ripristinarli alla fine.
- naturalmente la copia deve interessare un rigo per volta, altrimenti bisognerebbe controllare tutti i valori per ciascun rigo copiato.
- Nella tua Sub minuti() gli eventi non vengono ripristinati!!!
saluti e testa bene il codice
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long, i As Integer
Application.EnableEvents = False
On Error GoTo errore:
r = Target.Row
If Target.Rows.Count > 1 Then
MsgBox "non puoi copiare più di 1 rigo alla volta"
GoTo xit
End If
If Not Intersect(Target, [i14:i60]) Is Nothing Then
For i = 1 To Target.Columns.Count
If Target.Columns(i).Column = 9 Then
If Target.Columns(i).Value = 2 Or _
Target.Columns(i).Value = 3 Or _
Target.Columns(i).Value = 4 Then
Target.Columns(i).Value = ""
MsgBox "qui va messo solo codice presenza"
End If
End If
Next i
End If
xit:
Application.EnableEvents = True
Exit Sub
errore:
MsgBox Err.Number & " - " & Err.Description
Resume xit
End Sub
[Modificato da dodo47 06/11/2017 17:48]
Domenico
Win 10 - Excel 2016