Sheet change con codifica



  • Sheet change con codifica
    di Sbizzy data: 24/06/2015 16:35:28

    Ciao a tutti,

    ho uno sheet change che in base all'inserimento fatto in una cella, colora le 4 celle sopra. Il file viene aperto solo su un terminale ma ci lavorano 3 persone (per semplicità le chiamo A, B e C). Gli inserimenti possibili sono visibili nel file d'esempio da A5 a Q5. Siccome non ci sono vincoli per gli operatori stessi, può essere che l'operatore C scriva (volutamente o meno) "1A" facendo cosi ricadere la responsabilità sull'operatore A. Per evitare ciò, volevo fare in modo che ogni operatore, invece di inserire direttamente la scritta da visualizzare, mettesse un codice di 4 cifre che corrisponda a uno degli inserimenti previsti (banalmente, se mette AAA diventa 1A, se mette BBB diventa 2A). Ovviamente se l'inserimento non ha corrispondenze viene compilata la cella con la scritta "errore".

    Ho fatto alcune prove, semplicemente facendo una serie di if a parte, ma spesso si bloccava l'esecuzione o finiva in loop perchè la rimodifica del target riavviava lo sheet change.

    Qualcuno mi aiuta?
    Se ci sono soluzioni alternative che non hanno a che fare con lo sheet change, vanno bene lo stesso.

    Grazie, ciao.
     
    Option Compare Text
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    
           If myChg = "Off" Then Exit Sub
    
    ActiveSheet.Unprotect
    
                If (Target.Value Like "1*") = True Then
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        Selection.Cells.Interior.Color = 5296274
                    Next
    
                ElseIf (Target.Value Like "2*") = True Then
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        Selection.Cells.Interior.Color = 65535
                    Next
                    ElseIf (Target.Value Like "ok1*") = True Then
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        Selection.Cells.Interior.ColorIndex = 4
                    Next
                    ElseIf (Target.Value Like "ok2*") = True Then
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        Selection.Cells.Interior.Color = 52479
                    Next
                ElseIf (Target.Value Like "ok") = True Then
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        Selection.Cells.Interior.Color = 12611584
                    Next
                ElseIf Target.Value = "" Or Target.Value = 0 Then
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        
                       With Selection.Interior
                        .Pattern = xlNone
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                       End With
                    Next
                ElseIf (Target.Value Like "WARNING") = True Then
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        Selection.Cells.Interior.Color = 16711833
                    Next
                Else
                    For a = 1 To 4
                        Target.Select
                        ActiveCell.Offset(-a, 0).Activate
                        Selection.Cells.Interior.Color = 255
                    Next
                End If
    
     Target.Select
     ActiveSheet.Protect
     ActiveWorkbook.Save
       
    End Sub



  • di totygno71 data: 24/06/2015 17:59:50

    Per quanto ne capisco io se vuoi evitare errori di inserimento potresti utilizzare una conavlida dati e per quanto riguarda la colorazione delle celle una formattazione condizionale...
    Oppure ho capito male cosa vuoi ottenere?



  • di Sbizzy data: 25/06/2015 13:13:52

    No la logica dei colori va bene cosi e non voglio usare la formattazione condizionale per una serie di ragioni.
    Il mio problema non è che inseriscono dati non validi, ma il fatto che i 3 operatori devono inserire solo i dati a loro associati (ad esempio l'operatore A può inserire solo i valori 1A, 2A, OK1A e OK2A). Allo stato attuale, ma anche mettendo la convalida dati, l'operatore A può mettere 2B senza che nessuno se ne accorga. Io voglio evitare questo e per farlo avevo pensato di far inserire un codice che conosce solo l'operatore A che poi si tramutasse automaticamente in uno degli inserimenti possibili.

    Per sintetizzare, io dico all'operatore A che per mettere 1A deve inserire il codice AAA, allora se scrive AAA nella cella A5, lo sheet change deve cambiare tale valore in 1A e colorare le celle sopra di verde. Se invece prova a mettere direttamente 1A, deve segnalare errore.



  • di totygno71 data: 25/06/2015 15:01:06

    Prova il file Test_Toty



  • di Sbizzy data: 26/06/2015 15:51:52

    Ciao, sembra che sia perfetto, lo provo oggi o lunedì e ti faccio sapere.

    Grazie.



  • di Sbizzy data: 29/06/2015 11:25:24

    Ok funziona alla grande!!!

    Grazie ancora.



  • di totygno71 data: 29/06/2015 13:25:11