| | Post: 4.003 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
14/11/2017 10:36 | |
io credo che tu debba fare più attenzione a quello che fai, i computer non perdonano e tu mi sembri un casinista incallito. [Modificato da patel45 14/11/2017 10:37]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
|
| | Post: 167 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
14/11/2017 10:39 | |
si forse sono un po casinista excel 2003 |
| | Post: 168 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
14/11/2017 12:43 | |
ma come faccio a risolvere? excel 2003 |
| | Post: 593 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
14/11/2017 15:21 | |
In realtà la necessità del controllo sull'intera colonna l'avevi specificato nel post #1, tant'è, riscrivi la macro così: 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
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
' questo codice ti da un messaggio di errore se per sbaglio metti riposo lo stesso giorno che hai lavorato
If Intersect(Target, Uni0n(Range("C14:C60"), Range("J14:J60"))) Is Nothing Then Exit Sub
Select Case Target.Column
Case 3
If Target.Offset(0, 7) <> "" Then 'controlla la cella in colonna J
MsgBox "Non puoi scrivere in questa cella se colonna J non è vuota"
Exit Sub
End If
Case 10
If Target.Offset(0, -7) <> "" Then 'controlla la cella in colonna C
MsgBox "Non puoi scrivere in questa cella se colonna C non è vuota"
Exit Sub
End If
End Select
End Sub Come sempre "Union" si scrive con la "o" e non con lo "zero". [Modificato da rollis13 14/11/2017 18:45]
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 169 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
15/11/2017 12:16 | |
sembra andare bene grazie excel 2003 |
| | Post: 170 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
16/11/2017 05:57 | |
Se adesso potete aiutarmi qui
http://www.freeforumzone.com/mobile/discussione.aspx?idd=11456363&p=9999999#idm135119184 excel 2003 |
| | Post: 599 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
16/11/2017 22:28 | |
Grazie del riscontro positivo
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 171 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
17/11/2017 19:44 | |
è sorto un problema..siccome spesso i servizi sono uguali se faccio copia incolla es: se al foglio "set" si copia b25:i25 e si incolla in b36 mi da errore a questa riga. stesso errore mi fa se cancello una riga che magari o fbafliato a scrivere es: seleziona b25:i25 e cancella.
If Target = 2 Or Target = 3 Or Target = 4 Then
riallego il file excel 2003 |
| | Post: 600 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
17/11/2017 22:10 | |
Prima della riga :
If Not Intersect(Target, [I14:I60]) Is Nothing Then
mettici anche questa:
If Target.Count > 1 Then Exit Sub
in modo che se stai gestendo contemporaneamente più di una cella con Incolla, Cancella, ecc. verrà interrotta la macro. Chiaramente non verranno attivati gli altri controlli previsti dalla macro con tale manovra. Questi avranno effetto solo quando gestisci una sola cella alla volta.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 172 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
19/11/2017 14:49 | |
sembra andare bene..un ultima cosa, si puo fare come nel primo codice anche nel secondo che quando scrivo che mi compare il messaggio box cancelli automaticamente quello che ho scritto? excel 2003 |
| | Post: 601 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
19/11/2017 16:22 | |
Subito dopo entrambe le righe dei MsgBox metti queste ulteriori tre che provvedono a pulire il contenuto (ClearContents) della cella interessata:
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 173 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
19/11/2017 17:01 | |
ok sembra andare bene se si ripresenta qualche altro problema ti scrivo in questi giorni.
intanto potresti aiutarmi anche qui
http://www.freeforumzone.com/mobile/discussione.aspx?idd=11456363&p=9999999#idm135119184
grazie excel 2003 |
| | Post: 183 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
10/12/2017 15:07 | |
si è riscontrato un altro problema...in pratica se copio un intero rigo esempio B14:I14 e lo incollo in B15:I15 e J15 non è vuoto non mi da errore, cosa invece che succede, e va bene, se incollo una sola cella esempio in C15 excel 2003 |
| | Post: 609 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
10/12/2017 16:16 | |
Probabilmente non hai recepito quanto già suggerito nel post #39.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 184 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
15/12/2017 13:07 | |
dove lo trovo il post #39?
non so ricercarlo excel 2003 |
| | Post: 614 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
15/12/2017 18:20 | |
Questo è il post #46, va in su di 7 post e lo trovi.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 185 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
16/12/2017 09:31 | |
rollis se li rileggi con attenzione noterai che non sono uguali i problemi excel 2003 |
| | Post: 186 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
16/12/2017 10:17 | |
te li raggruppo entrambi
se al foglio "set" si copia b25:i25 e si incolla in b36 mi da errore cosa che non succede se incollo una sola cella indipendentemente se J è vuoto o no (problema risolto)
se copio un intero rigo esempio B14:I14 e lo incollo in B15:I15 e J15 non è vuoto non mi da errore, cosa invece che succede, e va bene, se incollo una sola cella (problema da risolvere)
[Modificato da trittico69 16/12/2017 14:29] excel 2003 |
| | Post: 615 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
16/12/2017 15:01 | |
rollis13, 17/11/2017 22.10:
mettici anche questa: If Target.Count > 1 Then Exit Sub in modo che se stai gestendo contemporaneamente più di una cella con Incolla, Cancella, ecc. verrà interrotta la macro. Chiaramente non verranno attivati gli altri controlli previsti dalla macro con tale manovra. Questi avranno effetto solo quando gestisci una sola cella alla volta.
Mi riferivo a questa parte del post. La riga va inserita all'inizio prima della riga che intercetta le celle vuote nelle colonne C e J.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 187 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
18/12/2017 08:16 | |
rollis questo è il codice completo
dove va inserita la riga che mi hai suggerito?
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 Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [I14:I60]) Is Nothing Then
If Target = 2 Or Target = 3 Or Target = 4 Then
MsgBox "qui va messo solo codice presenza"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If
End If
' questo codice ti da un messaggio di errore se per sbaglio metti riposo lo stesso giorno che hai lavorato
If Intersect(Target, Uni0n(Range("C14:C60"), Range("J14:J60"))) Is Nothing Then Exit Sub
Select Case Target.Column
Case 3
If Target.Offset(0, 7) <> "" Then 'controlla la cella in colonna J
MsgBox "Non puoi scrivere in questa cella se colonna J non è vuota"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
Case 10
If Target.Offset(0, -7) <> "" Then 'controlla la cella in colonna C
MsgBox "Non puoi scrivere in questa cella se colonna C non è vuota"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
End Select
End Sub excel 2003 |
| | Post: 188 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
18/12/2017 08:17 | |
trittico69, 12/18/2017 8:16 AM:
rollis questo è il codice completo
dove va inserita la riga che mi hai suggerito?
e poi mi spighi cosa intendi per "Chiaramente non verranno attivati gli altri controlli previsti dalla macro con tale manovra. Questi avranno effetto solo quando gestisci una sola cella alla volta."
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 Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [I14:I60]) Is Nothing Then
If Target = 2 Or Target = 3 Or Target = 4 Then
MsgBox "qui va messo solo codice presenza"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If
End If
' questo codice ti da un messaggio di errore se per sbaglio metti riposo lo stesso giorno che hai lavorato
If Intersect(Target, Uni0n(Range("C14:C60"), Range("J14:J60"))) Is Nothing Then Exit Sub
Select Case Target.Column
Case 3
If Target.Offset(0, 7) <> "" Then 'controlla la cella in colonna J
MsgBox "Non puoi scrivere in questa cella se colonna J non è vuota"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
Case 10
If Target.Offset(0, -7) <> "" Then 'controlla la cella in colonna C
MsgBox "Non puoi scrivere in questa cella se colonna C non è vuota"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
End Select
End Sub
excel 2003 |
| | Post: 617 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
18/12/2017 22:37 | |
Non mi è stato possibile replicare il problema segnalato; infatti, il blocco della macro l'hai già inserito, pertanto, ogni qualvolta che fai un Copia/Incolla o Elimina di più celle in contemporanea interviene il codice: If Target.Count > 1 Then Exit Sub
e dato che in questi casi la conta delle celle selezionate è > 1 la macro viene interrotta e, giustamente, nessuna messaggio d'errore compare.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 189 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
19/12/2017 08:51 | |
quindi non si puo fare nulla? excel 2003 |
| | Post: 618 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
19/12/2017 19:09 | |
Non è che non si può nulla, vista la macro il problema proprio non sussiste. Evidentemente il tuo file in uso è pieno di celle "sporche", oppure, sono io che non riesco a "capire" il problema che stai segnalando.
Ho preso l'ultimo file che hai allegato al post #38, ho inserito l'ultima versione della macro che hai appena allegato nel post #50 nel foglio "set", poi, ho copiato più celle contemporaneamente B14:I14 in B15 (con e senza J15 compilata), copiato B25:I25 in B36 e non è successo niente così come previsto dalla macro visto viene eseguita in modo "mirato" e solo se si gestisce una cella alla volta.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 190 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
22/12/2017 09:50 | |
Ti riallego il file …prova a copiare C47:D48 e incollalo in C50 siccome J50 non è vuoto mi dovrebbe dare errore, nello stesso modo in cui copio solo C47 e lo incollo in C50... che se provi da messaggio box ed e quello che deve fare. excel 2003 |
| | Post: 619 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
22/12/2017 19:49 | |
Dato che vuoi poter gestire più celle contemporaneamente togli di mezzo questa riga:
'If Target.Count > 1 Then Exit Sub
e sostituisci queste altre due con quella sottostante:
'If Target.Offset(0, 7) <> "" Then 'controlla la cella in colonna J
If Range("J" & R) <> "" Then 'controlla la cella in colonna J
'If Target.Offset(0, -7) <> "" Then 'controlla la cella in colonna C
If Range("C" & R) <> "" Then 'controlla la cella in colonna C
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 191 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
23/12/2017 09:56 | |
fatto, mi da errore in questa riga
If Target = 2 Or Target = 3 Or Target = 4 Then
ti riallego il codice corretto magari controlla se ho capito male il tuo suggerimento e quindi ho sbagliato a modificare il codice
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
MsgBox "qui va messo solo codice presenza"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
End If
End If
' questo codice ti da un messaggio di errore se per sbaglio metti riposo lo stesso giorno che hai lavorato
If Intersect(Target, Uni0n(Range("C14:C60"), Range("J14:J60"))) Is Nothing Then Exit Sub
Select Case Target.Column
Case 3
If Range("J" & R) <> "" Then
MsgBox "Non puoi scrivere in questa cella se colonna J non è vuota"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
Case 10
If Range("C" & R) <> "" Then
MsgBox "Non puoi scrivere in questa cella se colonna C non è vuota"
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
Exit Sub
End If
End Select
End Sub
excel 2003 |
| | Post: 620 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Senior | Excel 2016-32bit Win11 | | OFFLINE |
|
23/12/2017 11:46 | |
Per lo stesso motivo e con la stessa logica sostituisci anche la seguente riga con:
'If Target = 2 Or Target = 3 Or Target = 4 Then
If Range("I" & R) = 2 Or Range("I" & R) = 3 Or Range("I" & R) = 4 Then
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 1.724 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
23/12/2017 11:49 | |
@Rollis...Santo Subito!!
Ma tu nel foglio DIC (come in tutti gli altri fogli) ci hai copiato la macro corretta ??
Perchè funziona come da te richiesto e non mi da nessun errore, o meglio segnala che la copia non si può fare se copi 2 celle su una riga in cui J non è vuoto
saluti
EDIT: tra l'altro perchè usi la Private Sub Worksheet_Change in tutti i fogli?? In questo modo se devi variare una cosa, la devi modificare su tutti e 12 i fogli.
Usa in Questa Cartella di Lavoro:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name <> "RIEP" And ActiveSheet.Name <> "codici servizi" Then
'---------------TUO CODICE----:
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
MsgBox "qui va messo solo codice presenza"
Application.EnableEvents = False
'....
'....
End If
End Sub
Eliminando il codice da tutti i 12 fogli.
[Modificato da dodo47 23/12/2017 12:02] Domenico
Win 10 - Excel 2016 |
| | Post: 192 | Registrato il: 02/04/2010
| Città: MILANO | Età: 54 | Utente Junior | 2002 | | OFFLINE | |
|
23/12/2017 13:01 | |
rollis ho fatto ma in questo modo ritorana come prima e cioè mi da messaggio box se incollo una sola cella, se incollo piu di una cella non mi da il messaggio box excel 2003 |
|
|