Vota | Stampa | Notifica email    
Autore

messaggio di errore con due celle piene

Ultimo Aggiornamento: 21/06/2020 09:46
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. [SM=x423037]
[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 [SM=g27811]

______________________________________________________________
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

Re:
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
Vota:
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 08:51. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com