Cambiare sfondo Celle



  • Cambiare sfondo Celle
    di tony88 (utente non iscritto) data: 31/07/2015 10:04:58

    Buongiorno,
    ho bisogno del vostro aiuto,

    Ho 4 colonne in un foglio di lavoro excel con dei valori all’interno.

    Vorrei che la cella della colonna A con valore X si colori del colore dello sfondo della cella con valore X presente nelle colonne B,C, D.

    Faccio un esempio pratico :

    la cella B5 ha valore 1 e ha sfondo verde,
    vorrei che la cella A1 con valore 1 si colori di sfondo verde,
    se cambio il valore della cella B5 in 2 la cella A2 con valore 2 diventa verde ecc ecc.

    spero di essere stato chiaro .
    grazie



  • di Vecchio Frac data: 31/07/2015 10:50:41

    Una formattazione condizionale?
    Che versione di Excel usi?
    Le condizioni sono pre-determinate e sono finite?
    Un esempietto con un file?





  • di cromagno data: 31/07/2015 10:52:22

    Buongiorno,
    puoi provare il codice che ti lascio sotto, ma se nelle colonne B,C,D c'è più di un valore che corrisponde al valore di una cella della colonna A, il colore considerato sarà l'ultimo della ricerca.
    Esempio...
    A2 = 2
    B5 = 2 colore verde
    C9 = 2 colore giallo

    ...in questo caso il colore della cella A2 sarà il giallo.
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim campo, colA As Range
    Set campo = Range("B1:D10")  'da modificare col proprio range
    Set colA = Range("A1:A10")   'da modificare col proprio range
    colA.Interior.Color = xlNone
        For i = 1 To 10
            For Each cell In campo
                If cell.Value = Cells(i, 1).Value Then
                    Cells(i, 1).Interior.Color = cell.Interior.Color
                End If
            Next
        Next i
    End Sub



  • di tony88 (utente non iscritto) data: 31/07/2015 11:08:10

    Cromagno,
    grazie mille per il codice penso che faccia al mio caso,
    ti chiedo solo come fare ad inserirlo perchè non mi ricordo bene come funzionano le macro è anni che non ci metto mano...



  • di cromagno data: 31/07/2015 11:15:30

    Segui questa mini-guida (il punto che interessa a te è questo "3 - Dove trovo questi moduli?" e questo "3.2 - Se devo inserire il codice nel modulo di codice del foglio"):
    h t t p ://answers.microsoft.com/it-it/office/wiki/office_2013_release-excel/excel-dove-e-come-inserire-il-codice-visual-basic/ed29ee63-a537-4e5d-8631-76766cf40503



  • di tony88 (utente non iscritto) data: 31/07/2015 11:34:49

    ho eseguito le istruzioni ma quando vado a fare F8 non mi compare nessuna macro da poter selezionare...
    dove ho sbagliato? ( se premo F11 il codice è inserito)



  • di cromagno data: 31/07/2015 11:50:22

    Non devi lanciare alcuna macro...
    Questo:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    significa che il codice parte quando cambi selezione nel foglio in questione. Naturalmente il codice lo devi mettere all'interno del foglio giusto, che scegli sulla sinistra nella "struttura ad albero" dell'editor VBA. Se ad esempio al foglio hai dato come nome "color change", farai doppio click in questo foglio nell'editor VBA e dopo inserirai il codice.

    Quando salvi il file ricordati di salvarlo come "Cartella di lavoro con attivazione macro di excel".



  • di Vecchio Frac data: 31/07/2015 11:55:59

    Se ti riferisci alla sub di cui si è parlato (che intercetta l'evento Worksheet_SelectionChange) non la troverai nell'elenco delle macro eseguibili (nota che la finestra delle macro si apre con Alt-F8, non con F8 solo). Questa macro è speciale perchè intercetta un evento di sistema, cioè viene scatenata automaticamente da Excel quando sposti il cursore sul foglio (con tasti freccia o mouse).
    E ciò avviene ogni volta che sposti il cursore nel foglio in cui hai inserito il codice, quindi quelle azioni vengono eseguite *sempre*... potrai quindi sperimentare anche un certo rallentamento o unno sfarfallio (due for annidati, impostazione di sfondi di cella, ecc.).
    Noto incidentalmente che "cell" non è definito e che manca Option Explicit in testa al modulo (la nota è per l'amico cromagno ^_^)





  • di tony88 (utente non iscritto) data: 31/07/2015 11:57:46

    Ok, allora c'è un problema quando la macro è attiva praticamente non mi fa lavorare sul foglio e cambia colore alle celle A2,A3,A4,A5,A6.
    quelle che mi interessano a me no.

    ho allegato il file in questione magari ho sbagliato qualcosa io ma non mi risulta ho eseguito tutti i passaggi.



  • di cromagno data: 31/07/2015 12:02:50

    @ VF
    hai ragione al 100%. Mi deve ancora venire naturale inserire "Option Explicit"
    ma mi allenerò



  • di tony88 (utente non iscritto) data: 31/07/2015 12:17:50

    Ho riprovato ma continua a non funzionare... ho eseguito tutti i passaggi ma si colorano di bianco solo le celle dalla A2 alla A7 che non centrano nulla con quelle che servono a me.



  • di cromagno data: 31/07/2015 12:34:53

    Beh si, la struttura del file è diversa da quella che hai spiegato all'inizio...
    Prova questo codice, anche se come ha detto VF, noterai un rallentamento.
     
    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim campo, origine, cell As Range, i, j As Integer
    Set campo = Union(Range("A9:A38"), Range("E9:E38"), Range("H9:H38"))
    Set origine = Range("K12:T24")
    campo.Interior.Color = xlNone
        For j = 2 To 8 Step 3
            For i = 9 To 38
                For Each cell In origine
                    If cell.Value = Cells(i, j).Value Then
                        Cells(i, j).Interior.Color = cell.Interior.Color
                    End If
                Next
            Next i
        Next j
    End Sub
        
    



  • di cromagno data: 31/07/2015 12:54:03

    Forse potresti un pò "alleggerire" aggiungendo questa riga dopo "Set origine = Range("K12:T24")":

    If Intersect(Target, Range("A9:I38")) Is Nothing Then Exit Sub

    ma credo che la soluzione migliore sia aggiungere un pulsante e assegnargli il codice.



  • di tony88 (utente non iscritto) data: 31/07/2015 13:03:52

    purtroppo cosi è troppo rallentato, è praticamente impossibile lavorarci.



  • di Vecchio Frac data: 31/07/2015 13:29:35

    cit. cromagno: " la soluzione migliore sia aggiungere un pulsante e assegnargli il codice."
    ---> certamente è la soluzione migliore. Il codice verrà eseguito alla bisogna.





  • di tony88 (utente non iscritto) data: 31/07/2015 14:31:47

    vi chiedo 2 cose,
    il codice funziona ma bisogna che funzioni al contrario cioè le celle della colonna B e E e H vengono colorate e le celle nella zona pullman si colorano in automatico.

    invece per inserire un pulsante sul foglio per attivare e disattivare la macro come posso fare?



  • di cromagno data: 31/07/2015 15:17:21

    Prova il file in allegato...




  • di tony88 (utente non iscritto) data: 03/08/2015 14:08:03

    Grazie mille Cromagno, sei stato gentilissimo,
    ho un ultima richiesta, visto che siete cosi disponibili.
    ho bisogno di contare quante "celle" nelle colonne B , E , H hanno il colore dello sfondo della casella I3, I4, I5 ecc ecc.
    come posso fare?



  • di cromagno data: 03/08/2015 16:02:54

    Ma, nel file che abbiamo usato finora, nella colonna I (quindi I3,I4,I5 etc..) non c'è nulla che abbiamo preso in considerazione.
    Se hai modificato la struttura, allega nuovamente il file e rispiegami cosa vorresti ottenere.

    Ciao



  • di tony88 (utente non iscritto) data: 03/08/2015 16:15:19

    Ho inserito il nuovo file,
    praticamente ho bisogno di questo :
    nella cella J3 vorrei che uscisse il numero di celle con il colore della cella I3 presente nelle colonne B, E , H

    (in pratica mi serve calcolare quante persone salgono sul pullman alla presa X)

    ti chiedo di mettermi il codice anche nel forum perchè lo dovrei utilizzare anche per altri file.
    grazie mille mi stai semplificando ore di lavoro!



  • di cromagno data: 03/08/2015 16:56:57

    Ciao tony,
    prova questo codice (sotto)...
    Però, ho dovuto cambiare il colore relativo a "Cesate".
    Che io sappia, in excel/vba possiamo lavorare su una gamma di 56 colori, se i colori che usi sono simili, rischi di avere dei risultati errati nel conteggio.
    Per ovviare a questo, nel codice proposto potresti specificare il numero del colore o più semplicemente cerchi di utilizzare colori nettamente distinguibili tra loro.... 
     
    Option Explicit
    Sub conteggi()
    Dim rng1, cell As Range
    Dim i, tot As Integer
    Set rng1 = Union(Range("B9:B38"), Range("E9:E38"), Range("H9:H38"))
        For i = 3 To 5
            tot = 0
                For Each cell In rng1
                    If Range("I" & i).Interior.ColorIndex = cell.Interior.ColorIndex Then
                        tot = tot + 1
                    End If
                Next
            Range("J" & i).Value = tot
        Next i
    End Sub



  • di tony88 (utente non iscritto) data: 03/08/2015 17:07:42

    ok userò i colori "standard" di excel che sono ben distinguibili, però non trovo il tuo file, e quindi non mi è chiaro che formula devo mettere nelle celle dopo aver inserito il modulo con il codice.


    ho un nuovo problema quando vado a cliccare il pulsante aggiorna dati mi esce fuori errore dove dice che la macro non è nella cartella di lavoro o che ho disattivato le macro, ma io sinceramente non ho toccato nulla.



  • di cromagno data: 03/08/2015 17:13:19

    Infatti nel foglio che hai allegato mancava l'ultimo codice che ti avevo lasciato.
    Io file non ne ho allegato, ti ho lasciato solo il codice in modo che tu lo integrassi a quello che già avevi.

    Cmq, se non riesci, ti riallego tutto.
    Fammi sapere



  • di tony88 (utente non iscritto) data: 03/08/2015 17:18:41

    si se riesci ad riallegarmi il tutto è meglio, il codice con il pulsante non so dove prenderlo.
    non ho capito una cosa dell'ultimo tuo codice :
    io inserisco il codice in vba, ma che formula devo mettere in J3 per fare funzionare il codice?
    questo passaggio non mi è chiaro ( se lo devo applicare su altri fogli)



  • di cromagno data: 03/08/2015 17:29:21

    Non devi mettere nessuna formula.
    Il conteggio lo fa il codice VBA.
    Con le formule non puoi contare i colori (anche se spero di essere smentito ).
    Ti lascio il file in allegato ("ROOMING 5 - new")..
    Facci qualche prova perchè ho dovuto modificare leggermente i riferimenti nel codice visto che la tabella a destra è un pò diversa.
     
    Option Explicit
    Sub colori()
    Dim campo, origine, cell As Range, i, j, tot As Integer
    Set campo = Union(Range("B9:B38"), Range("E9:E38"), Range("H9:H38"))
    Set origine = Range("L12:P24")
    origine.Interior.Color = xlNone
        For j = 2 To 8 Step 3
            For i = 9 To 38
                For Each cell In origine
                    If cell.Value = Cells(i, j).Value Then
                        cell.Interior.Color = Cells(i, j).Interior.Color
                    End If
                Next
            Next i
        Next j
    For i = 3 To 5
        tot = 0
            For Each cell In campo
                If Range("I" & i).Interior.ColorIndex = cell.Interior.ColorIndex Then
                    tot = tot + 1
                End If
            Next
            Range("J" & i).Value = tot
        Next i
    End Sub



  • di cromagno data: 03/08/2015 17:33:41

    Quindi, se va bene, prima di adattare il codice per altri fogli (non per forza uguali), cerca di capire almeno come funziona il codice in modo da poterlo modificare in futuro.



  • di tony88 (utente non iscritto) data: 03/08/2015 17:42:47

    grazie mille sei stato gentilissimo funziona tutto,
    solo un ultima cosa, il codice che conta le celle colorate , non ho capito come funziona,
    se lo dovessi inserire in un altro foglio cosa dovrei modificare? cioè ho sempre delle colonne una cella con il colore da contare e una cella dove fare uscire il numero di quelle celle colorate.



  • di cromagno data: 03/08/2015 17:50:12

    Come ti ho detto, dovrei spiegarti comando per comando...
    Per aiutarti, dai uno sguardo a questa mini-guida soprattutto paragrafo riguardante il "ciclo For...":
    h t t p ://forum.wintricks.it/showthread.php?t=155252



  • di tony88 (utente non iscritto) data: 03/08/2015 17:59:50

    ok, sta sera me lo leggo, ma ci vuole sempre il pulsante aggiorna dati se uso quella formula?



  • di cromagno data: 03/08/2015 18:06:04

    In questo caso il codice è associato al pulsante, quindi se vuoi fare la stessa cosa in un altro foglio, ci vorrà il pulsante anche li.
    Ma potresti anche avviare il codice con una combinazione di tasti, o farlo partire all'attivazione del foglio, etc... dipende tutto da come ti viene più comodo e soprattutto che non si avvii in continuazione quando non è necessario (se ricordi, il primo codice proposto rallentava il lavoro perchè si avviava a qualsiasi modifica del foglio... per questi abbiamo optato per il pulsante).



  • di tony88 (utente non iscritto) data: 04/08/2015 12:45:51

    Gentilissimo Cromagno,
    grazie per tutto,
    ma non sono riuscito a capire come la funzione faccia uscire il conteggio dei colori, ora in J3,J4,J5 mi servirebbe spostare il risultato in G3,G4,G5 e non so come fare dalla tua funzione.
    cosa devo modificare?



  • di tony88 (utente non iscritto) data: 04/08/2015 13:00:40

    perfetto ci sono riuscito :D ho modificato la J con la G grazie mille !!!!



  • di cromagno data: 04/08/2015 13:42:08

    Ok... meglio così