sfondo celle



  • sfondo celle
    di Alex (utente non iscritto) data: 12/09/2014 21:49:09

    Salve, premetto che sono di vba ne conosco davvero pochissimo però vorrei risolvere un problema che mi si è posto con una macro vba. Su un file contenente circa 40 fogli tutti nascosti, un foglio di indice mi permette attraverso delle macro che ho registrato di scoprire sottoinsiemi di fogli (massimo credo 8) tutti funzionali al foglio che vado a scoprire. Quindi quando premo il pulsante "All.1" mi si scopre il foglio All.1 ed insieme ad esso un certo numero di altri fogli che ho determinato.
    In testa a ciascun foglio ho un'area di 4x2 o a volte 4x3 in cui ho inserito collegamenti a dei fogli del file. Ovviamente solo i collegamenti ai fogli scoperti funzioneranno. Di qui la domanda: esiste uno script che mi permetta di colorare lo sfondo delle celle appartenenti all'area 4x2 (mettiamo si vada M3 a quella P4 o P5) di un certo colore (quello poi lo può modificare anche un asino come me da solo)?
    Vi ringrazio comunque, anche se non risponderete per tutte le volte che, leggendo il forum, ho risolto un problema.
    Ciao, buon we
    Ale



  • di Lucas87 data: 13/09/2014 13:12:40

    Allega il file



  • di Alex (utente non iscritto) data: 15/09/2014 09:50:19

    Ciao Lucas87,
    ho subito fatto casino con gli allegati: comunque i file prova e prova 2 adesso sono esattamente identici.
    Detto questo, la macro di cui avrei bisogno dovrebbe evidenziarmi le celle nell'area da L3 a R5 che hanno nomi uguali ai fogli scoperti. Nell'esempio vorrei che nel foglio "All. 1" la macro mi evidenziasse la cella R5 "All. 16 10% IRAP" con gli stessi colori delle celle L3 ed N3. Ogni allegato si porta dietro un certo sottoinsieme di fogli che assieme ad esso si scoprono ed io vorrei che nell'area da L3 ad R5 di ciascun foglio si evidenziassero le celle con collegamenti ai fogli appunto aperti. Per capire quali allegati si scoprono ho creato un foglio "Navigazione" che per ogni Allegato pone sulla stessa riga tutti i fogli da scoprire. Ne trovi un esempio nel file prova 2 (è nascosto).
    Non so che dirti, a parte grazie. Anche solo per il fatto di esserti sorbito queste due pappardelle!



  • di Lucas87 data: 15/09/2014 10:19:31

    Ciao.
    il codice sotto confronta i valori delle celle con i nomi dei fogli. Quando trova il foglio, se è visibile, imposta il colore della cella come quello di L3.
    Con le poche informazioni che hai dato però non è possibile capire dove inserirlo.
     
    For Each cel In Range("l5:r5")
        For Each sh In ThisWorkbook.Worksheets
            If sh.Name = cel.Value And sh.Visible = True Then
                cel.Interior.ColorIndex = Range("l3").Interior.ColorIndex
            Exit For
        Next
    Nex



  • di Alex (utente non iscritto) data: 15/09/2014 18:57:13

    Hai ragione Lucas. Primo mi sono espresso come un cinghiale dislessico, secondo non ti ho dato il file globale.
    Comunque provo a spiegarmi di nuovo ed eventualmente se non bastasse ti reinoltro un altro file che spieghi meglio.
    Nel file finale ci sarà visibile un indice con tante macro quanti sono gli allegati da scoprire. Quindi 30 allegati= 30 forme con 30 macro. Ciascuna macro deve:
    1) coprirmi il foglio "Indice"
    2) scoprirmi il foglio dell'allegato che voglio scoprire (es. All.1) e tutti i fogli a questo collegati (te ne ho portati alcuni in esempio nel foglio "Navigazione") - domanda il fogli0 Navigazione deve rimanere visibile o può essere nascosto?
    3) nascondermi la colonna B del foglio che ha nome = a quello della cella C6
    4) colorare il tag del foglio con nome = a quello della cella C6
    5) colorare con lo sfondo le celle dell'area L3-R5 che presentano nomi = a quelli degli allegati scoperti
    6) prepararmi la cena stasera :)

    ah..e dovrei avere una macro che mi riporta tutto alla situazione originale (una inversa diciamo).

    Ohiohiohihoihoihi..la funzione if comincio un pò (un pò) a capirla ma quando ci sono più condizioni mi perdo nella sintassi.
    Grazie comunque Lucas e fammi sapere se il file allegato ti basta o devo inviartene un altro



  • di Lucas87 data: 15/09/2014 20:05:54

    Non ho capito se queste cose già le sai fare o se chiedi come farle...io comunque uno spunto te lo do.
    L'indice sarà il primo foglio, all'apertura è l'unico visibile. Cliccando sulle voci dell'indice verranno mostrati i vari fogli. Qui puoi fare in diversi modi: tenere il foglio navigazione (magari non con i nomi dei fogli buttati li a caso), nascosto e da quello leggere quali fogli aprire; oppure scriverli direttamente da codice. Il foglio indice intanto viene nascosto (prima si mostrano i fogli, poi si nasconde l'indice, altrimenti andrebbe in errore). L'istruzione è sheets(nome).visible=true/false
    Il punto 3 non l'ho ben capito ma l'istruzione potrebbe essere Columns(Range("c6")).Hidden = True
    L'etichetta del foglio si colora con Sheets(Range("c6")).Tab.Color = 255

    Vediamo se riesci ad adattarlo alla tua situazione



  • di Ale (utente non iscritto) data: 16/09/2014 09:20:34

    Intanto ti ringrazio per l'ennesima volta e poi ti allego un nuovo file (PROVA 1), un pò più completo e forse più esplicativo.
    LE macro le so strutturare solo con il registratore di VBA, il che mi porta ad evidenti problemi di staticità (se mi cambia una cella o una colonna mi sputtana tutta la macro :( ). Quindi pensavo a funzioni di formattazione con la struttura IF ma sono un cane ad usarla.
    Comunque, vediamo se con l'ennesima pappardella riesco a spiegarmi meglio (mi scuso in anticipo).

    Come puoi vedere sul file tutti i fogli sono scoperti ma nella situazione di partenza dovrà essere visibile solo l'indice in cui ci sono tanti attivatori di macro quanti sono gli allegati (colonna C).
    Ti ho allegato un pò di fogli, in modo da rendere possibile l'attivazione dell'allegato 1 ad es.

    Con una macro da associare nell'esempio al tasto corrispondente ad allegato 1 nel foglio Indice vorrei:
    1) copiare ed incollare il solo valore della cella D10 del foglio Indice (nome "All. 1") nella cella B3 del foglio navigazione in modo da avere tutta le celle B3:L3 del foglio Navigazione completate;
    2) scoprire tutti i fogli con nomi da B3:L3 del foglio Navigazione
    3) coprire il foglio Indice
    4) scoprire la colonna B del foglio che ha il nome = a quello della cella B3 nel foglio Navigazione ("All. 1" nell'esempio) - nella colonna B di ogni foglio ho infatti inserito una forma che mi servirà poi per associarvi una macro di ritorno (una macro inversa che mi riporti alla situazione di default il file)
    5) colorare il tag del foglio di cui sopra ("All. 1") di azzurro (o qualsiasi altro colore)
    6) colorare lo sfondo delle celle nelle aree dei collegamenti presenti in matrici 4x2 (o 4x3) presenti in ogni foglio: per es. sul foglio "All.1" tale area è compresa tra le celle K3:Q5, nel foglio "All. 16" invece in K3:Q7; come puoi vedere le diverse celle sono connotate dai nomi dei vari fogli del file (alcuni in questa prova non li ho inseriti): a me servirebbe che venissero colorati gli sfondi solo dei fogli scoperti in modo che siano evidenziati immediatamente i collegamenti attivi; se è un problema la dimensioni di queste aree e la loro posizione in ciascun foglio (forse sarebbe meglio fossero tutte della stessa dimensione e posizionate nello stesso posto)

    Grazie mille ancora per l'attenzione Lucas.
    Ale



  • di Lucas87 data: 16/09/2014 10:15:46

    Ciao
    Scusa ma non ho tempo di concentrarmi su questo lavoro e usando excel 2003 quando apro il tuo file mi va in errore e quindi è probabile che venga modificata la struttura...dovrai affidarti a qualcun'altro o aspettare.



  • di Alex (utente non iscritto) data: 16/09/2014 10:35:08

    Figurati Lucas. Anzi, grazie ancora per l'attenzione.
    Vedo come (e se) riesco ad arrabattarmi da solo.



  • di Luca73 data: 16/09/2014 11:20:37

    Ciao
    provo a darti una mano

    Punti da 1 a 4 ho capito e OK.
    Punti 5 colorare il tag del foglio di cui sopra ("All. 1") di azzurro (o qualsiasi altro colore)
    cosa intendi per TAG? la linguetta scheda?
    Punto 6 Lo vuoi per tutti i fogli che apri oppure solo per quello il cui nome e' in B3?

    Ciao
    Luca





  • di Alex (utente non iscritto) data: 16/09/2014 13:55:31

    Ciao Luca!
    Allora: sì per tag intendo l'etichetta (la linguetta insomma) del foglio con nome in C3 del foglio Navigazione (solo di quello) mentre, riguardo al punto 6), intendevo le celle nelle aree 4x2 di tutti i fogli scoperti, sia quello principale (nome = B3 nel foglio Navigazione) che i fogli collegati (nomi da C3 ad L3 nel foglio Navigazione).



  • di Luca73 data: 16/09/2014 14:43:40

    Ciao
    prova a vedere se fa quello che vuoi (vedi file allegato LucaScopriCopri).
    per me è stato difficile finire il debug in quanto non ho tutti i fogli

    Ti ho preparato tutte le macro da collegare alle forme (rettangoli blu) nel foglio Indice le prime le ho già collegate ma quelle da All.1 in avanti non sono riuscito in quanto il foglio è protetto. Comunque le ho create dando alla macro lo stesso nome della cella a destra del bottone sostituendo i caratteri non accettati (spaxi, punti, meno e percentuali) con degli underscore.

    quando clicchi sulla figura blu fa quello che hai chiesto.
    Ti ho anche preparato la macro di "rientro" da collegare alle frecce che sono sulla colonna B:B del foglio il cui nome e' in B3.
    In tale macro:
    - nasconde tutti i fogli escluso indice e navigazione
    - rimette tutti i tag (o tab o linguetta) nel colore originale
    - decolora tutte le celle con collegamenti ipertestuali nelle matrici 3X2 o 4X2 (non gli interessa tanto cerca tra tutti gli hyper lin della pagina)
    - chide B:B e lo nasconde.

    Ciao
    Luca

    P.S. fammi sapere se funziona.







  • di Alex (utente non iscritto) data: 16/09/2014 19:11:44

    Luca, intanto ringrazio anche te.
    Non so nemmeno leggerlo lo script che hai fatto :)
    Comunque ho iniziato il test e in apertura sembra giri anche se i nomi delle macro non sono sincronizzati con i nomi dell'allegato principale che dovrebbero far partire. Es: la macro All.16 fa aprire come allegato principale un altro allegato. Però girano. Forse il problema è dovuto al fatto che ti ho dato una versione parziale del file.

    Tuttavia non mi funzionano le macro di ritorno (che credo sia per tutti gli allegati la ZZChiudi). Facendola partire su un qualsiasi allegato mi rende questo messagio di debug

    Hyper_W.Range.Select

    Ti allego anche il codice VBA che mi avevi fornito per la macro ZZChiudi.
    Domani mattina in ufficio comunque provo a testare meglio il file.
    Intanto ti saluto
    Alex
     
    Sub ZZChiudi()
    Dim FoglioW
    Dim IndSh
    Dim NavSh
    Dim ActB
    Dim Hyper_W
    
    Set ActB = ActiveWorkbook
    Set IndSh = ActB.Sheets("Indice")
    Set NavSh = ActB.Sheets("Navigazione")
    IndSh.Visible = True
    NavSh.Visible = True
    For Each FoglioW In ActB.Sheets
        With FoglioW
            If .Visible And .Name <> IndSh.Name And .Name <> NavSh.Name Then
                For Each Hyper_W In .Hyperlinks
                    Hyper_W.Range.Select
                    If Not (Hyper_W.Range.Text = "INDICE" Or Hyper_W.Range.Text = "IRES") Then
                        Hyper_W.Range.Interior.Pattern = xlNone
                    End If
                Next Hyper_W
                .Range("B:B").EntireColumn.Hidden = True
                .Visible = False
                With .Tab
                    .ThemeColor = xlThemeColorDark1
                    .TintAndShade = -9.99786370433668E-02
                End With
            End If
        End With
        
    Next FoglioW
    End Sub



  • di Luca73 data: 17/09/2014 14:26:58

    Ciao, prego
    riguardo alle macro da assegnare ai singoli bottoni avrai notato che queste non fanno niente altro che richiamare la main macro passandogli un numero tra parentesi.
    Il numero che passano è il numero di riga corrispondente al "bottone selezionato"
    Pertanto nell'esempio sotto riportato verifica che il Tasto corrispondente all'allegato Cambi sia effettivamente sulla riga 8 altrimenti modifica con il numero corretto.

    Riguardo all'altro errore a me non viene fuori ma è una istruzione che non serve, modificala mettendogli davanti un apice (') e diventerà verde (testo di commento) oppure cancellala ( a me è servita per fare debug e vedere su quale cella stava lavorando.

    Ciao
    Luca
     
    Sub Cambi()
    Call MainMacro(8)
    End Sub
    






  • di Alex (utente non iscritto) data: 17/09/2014 21:45:25

    Funziona! :)
    Grazie infinite Luca. Se hai bisogno di una mano su VBA chiedi pure quando vuoi (ahah..).
    Ciao
    Alex