Cambio colore targh...
 
Notifiche
Cancella tutti

La consultazione del forum è libera per tutti.

Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).

Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.

[Risolto] Cambio colore targhetta in base ad una parola contenuta in una cella

20 Post
3 Utenti
0 Reactions
1,586 Visualizzazioni
Forum 1
(@gnaffo-mancini)
Post: 0
New Member
Avviatore di Topic
 

Buongiorno, tempo fa ho chiesto aiuto per lo stesso problema in base al valore di una cella, oggi ho la necessità di cambiare il colore in base ad una parola contenuta nella cella. Ho provato a cambiare la macro allegata, sostituendo il valore 0 con la parola ma non ottengo risultati, come potrei ovviare? Vi allego copia della macro che mi avete creato.

Grazie

rivate Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Integer
For i = 5 To Sheets.Count
    
    With ActiveSheet.Tab
    If Range("J38").Value = "" Then
        .Color = vbWhite
    ElseIf Range("J38").Value = 0 Then
        .Color = vbRed
        ElseIf Range("J38").Value < 0 Then
        .Color = vbYellow
             ElseIf Range("J38").Value > 0 Then
             .Color = vbGreen
             
             
        End If
    End With
    
Next i


End Sub
Versione di Excel
Sistema operativo
 
Postato : 20/07/2022 10:23
emme
 emme
(@emme)
Post: 0
Moderatore
 

Mah, non faccio mai questo tipo di cose. Ma una mi salta all'occhio: la prima istruzione è Private o rivate?

Nel secondo caso aggiungi P all'inizio.

Invece di usare If ElseIf End If usa le istruzioni

Select Case Range("J38").Value

Case Is = ""

fai la prima cosa

Case Is = 0

fai la seconda cosa

Case Is < 0

fai la terza cosa

Case Is > 0

fai la quarta cosa

End Select

Tutto più chiaro e leggibile. E magari funziona pure.

 
Postato : 20/07/2022 10:51
Forum 1
(@gnaffo-mancini)
Post: 0
New Member
Avviatore di Topic
 

@emme perdonami, forse non mi sono spiegato io. La macro allegata è quella che uso normalmente, completa della "P" e funziona correttamente. Io volevo fare in modo che, nel caso in cui nella cella compaia una parola, cambi il colore della linguetta. "Bovinamente" ho sostituito lo 0 con la parola che deve far cambiare il colore ma, non sono riuscito, perchè, sicuramente, sbaglio in qualche cosa. La "P" manca per mancanza di attenzione nella fase di copia e incolla su questo forum.

Grazie

 
Postato : 20/07/2022 11:59
emme
 emme
(@emme)
Post: 0
Moderatore
 

Sostituisci a 0 la parola che vuoi testare. 0 o testo il ciclo Select Case / Case Is = / End Select è sicuramente più chiaro e con migliori prestazioni rispetto a If / Else If / End If. Inoltre non c'è limite al numero di comparazioni che si possono effettuare. Chiaramente se non è un numero le istruzioni > o < non hanno molto senso.

 
Postato : 20/07/2022 12:19
Forum 1
(@gnaffo-mancini)
Post: 0
New Member
Avviatore di Topic
 

@emme  praticamente, se ho capito bene

Private Sub Workbook_Sheetchange (ByVal sh As Object, ByVal target As Range)

Dim i As Integer

For i = (nr. fg da cui iniziare) to Sheets.Count

With ActiveSheet.Tab

Select Case Range ("___").Value

Case Is = (parola codice)

.Color = (colore)

Case Is = (parola codice)

.Color = (colore)

Case Is = (parola codice)

.Color = (colore)

Case Is = (parola codice)

.Color = (colore)

End Select

End With

Next i

End Sub

 

Se è corretto, cambia colore delle linguette solo in rosso, cambiando la parola codice resta invariato il rosso.

 
Postato : 20/07/2022 12:47
emme
 emme
(@emme)
Post: 0
Moderatore
 

Corretto, a patto ovviamente che Range punti sempre alla stessa cella in ogni foglio (es.: sempre B14)

 
Postato : 21/07/2022 11:38
Forum 1
(@gnaffo-mancini)
Post: 0
New Member
Avviatore di Topic
 

Allego il file a cui faccio riferimento, lo utilizzo per altre attività, i fogli vanno da un minimo di 10 ad un max di 355, perciò il colore è necessario per andare a colpo sicuro. Quello che vorrei è che andando a variare lo stato della pratica nel foglio "quaderno", lo stato viene copiato sul foglio di riferimento (quaderno foglio 1 = foglio 1 del file) e di conseguenza cambi il colore della linguetta in base al valore (parola) inserito. Con la macro da te fornita, sicuramente sbaglio io in qualcosa, la inserisco su "questa cartella di lavoro" e non cambia il colore della linguetta. O meglio, cambia il colore della linguetta del foglio "quaderno" che deve restare invariata. Dove sbaglio?

Grazie

 
Postato : 21/07/2022 12:11
emme
 emme
(@emme)
Post: 0
Moderatore
 

Appena posso darò un'occhiata al progetto.

 
Postato : 21/07/2022 15:25
Forum 1
(@gnaffo-mancini)
Post: 0
New Member
Avviatore di Topic
 

@emme 

grazie

 
Postato : 22/07/2022 07:06
cromagno
(@cromagno)
Post: 0
Moderatore
 

Ciao a tutti,

Hai allegato il file ma non hai spiegato esattamente quello che vuoi ottenere...
Nel codice trovato in "Questa_cartella_di_lavoro" perchè utilizzi il ciclo For...Next per tutti i fogli se poi non utilizzi la variabile i ???

Se vuoi che in ogni foglio, modificando la cella P1, vari anche il colore del "tab" del foglio:

Private Sub workbook_sheetChange(ByVal sh As Object, ByVal target As Range)
    
    If Not Intersect(target, Range("P1")) Is Nothing Then
        With ActiveSheet.Tab
            Select Case Range("P1").Value
                Case "VERIFICARE"
                    .Color = vbRed
                Case "in FIRMA"
                    .Color = vbYellow
                Case "CONCLUSA"
                    .Color = vbGreen
                Case "stanza VUOTA"
                    .Color = vbgrey
                Case Else
                    .Color = vbWhite
            End Select
        End With
    End If
End Sub

ho usato Not Intersect per non far partire il codice se non quando la cella P1 viene coinvolta.
Quando ci son varie condizioni, per una questione puramente pratica, è meglio utilizzare Select Case anziché If annidati.

Ricordati sempre di usare l'indentazione nel codice altrimenti risulta illeggibile.
Prova e nel caso facci sapere se il risultato è quello che volevi.

P.S.
in questo modo però vengono inclusi anche i primi fogli (DATI DA QUADERNO, ANAGRAFE, etc...)
sarebbe il caso di aggiungere una condizione per escludere tali fogli

 
Postato : 22/07/2022 07:30
Forum 1
(@gnaffo-mancini)
Post: 0
New Member
Avviatore di Topic
 

@cromagno 

Buongiorno, quello che desidero faccia è, per esempio:

- nel foglio QUADERNO, cella H1, cambio lo stato della pratica in base alla lavorazione;

- la cella H3 cambia colore (formattazione condizionale);

- il valore della cella "Quaderno H1" viene riportata nella cella P1 di ogni foglio di riferimento, in questo caso il foglio è 130-202;

il problema nasce qui, vorrei che la linguetta cambi colore in base allo stato riportato nella cella P1 del foglio stesso.

ho provato a cambiare i codici della macro che utilizzo per un altro tipo di cambio colore (in base al valore =>< di 0) ma, come hai notato non sono capace (se vai indietro di mail vedi a cosa mi riferisco)

ora ho copiato fedelmente il tuo ma, non funziona. Per quanto riguarda i fogli precedenti alle "stanze" in realtà sono 10.

Grazie

 
Postato : 22/07/2022 08:32
cromagno
(@cromagno)
Post: 0
Moderatore
 
Postato da: @gnaffo-mancini

ora ho copiato fedelmente il tuo ma, non funziona.

Quello che ti ho scritto, basandomi sul codice già presente, interviene quando modifichi la cella P1 dei vari fogli.
Ma da quel che hai scritto, quello che vuoi ottenere ha tutta un'altra logica.

 
Postato : 22/07/2022 09:29
Forum 1
(@gnaffo-mancini)
Post: 0
New Member
Avviatore di Topic
 

@cromagno 

perché, anche se copiato dalla cella di un altro foglio, non si tratta, comunque, di una variazione di stato della cella? A me va bene come viene riportato il dato nella cella, l'unica cosa che chiedo è il cambio di colore della targhetta...

 
Postato : 22/07/2022 09:37
cromagno
(@cromagno)
Post: 0
Moderatore
 

Visto che il tutto è gestito dal foglio QUADERNO, non ti serve verificare tutte le volte ogni foglio e modificare costantemente i colori... quindi niente cicli.

Puoi sfruttare l'evento Workbook_SheetActivate in modo che ogni volta che attivi un foglio (in questo caso dopo il terzo foglio, visto che ai primi tre non devi modificare il colore della tab), in base al proprio "indice" (foglio1, 2, 3, etc...) si controlli nella riga 1 del foglio QUADERNO, a partire dalla colonna H, e si verifichi quello che c'è scritto per poter modificare il colore della tab del foglio attivo.

Ho usato l'indice del foglio perchè nel foglio QUADERNO non è specificato il nome di nessun foglio ma hai invece scritto: FG1, FG2, etc...

Nel modulo di classe di "Questa_cartella_di_lavoro":

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim OriginSh As Worksheet
    Dim ActStatus As Variant
    
    If ActiveSheet.Index > 3 Then
        Set OriginSh = ThisWorkbook.Worksheets("QUADERNO")
        ActStatus = UCase(OriginSh.Range("H1").Offset(0, ActiveSheet.Index - 4))
        Range("P1").Value = ActStatus
        With ActiveSheet.Tab
            Select Case ActStatus
                Case "VERIFICARE"
                    .ColorIndex = 3         'vbRed
                Case "IN FIRMA"
                    .ColorIndex = 6         'vbYellow
                Case "CONCLUSA"
                    .ColorIndex = 4         'vbGreen
                Case "STANZA VUOTA"
                    .ColorIndex = 16        'vbgrey
                Case Else
                    .Color = 2              'vbWhite
            End Select
        End With
    End If
End Sub

N.B.

se i colori che utilizzi son quelli "base", puoi usare .ColorIndex al posto di .Color ed usare i numeri anziché il "nome del colore", visto che non tutti i colori hanno il loro corrispettivo nome in VBA.

Quando fai confronti con delle stringhe di testo, assicurati anche che non ci siano differenze tra minuscolo e maiuscolo, per questo ho usato Ucase; in alternativa puoi specificare Option Compare Text in cima al modulo.

Se utilizzi il VBA, dovresti cercare di evitare le formule... Le formule nelle celle P1 dei vari fogli le avresti dovute modificare manualmente, mentre con il codice puoi cambiare colore alla tab ed allo stesso tempo modificare il valore della cella P1.

 

Ti riallego il file...

 

 
Postato : 22/07/2022 10:07
cromagno
(@cromagno)
Post: 0
Moderatore
 
Postato da: @gnaffo-mancini

perché, anche se copiato dalla cella di un altro foglio, non si tratta, comunque, di una variazione di stato della cella?

No, l'evento scatta col foglio attivo non con la modifica di una cella di un'altro foglio tramite formula.

 
Postato : 22/07/2022 10:12
Pagina 1 / 2
Condividi:
My Agile Privacy
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.
Attenzione: alcune funzionalità di questa pagina potrebbero essere bloccate a seguito delle tue scelte privacy
     Scarica il nostro ebook gratuito     

Unisciti a oltre 35.000 professionisti
che hanno già scelto di semplificare il proprio lavoro
e aumentare la produttività con la nostra newsletter!

Scarica l’ebook con i
migliori trucchi e suggerimenti per Excel
selezionati per te da Excel Academy

Download