|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, devo risolvere questo problema, ma purtroppo mi incarto quasi subito a causa della mia limitatissima conoscenza del VBA (del quale peraltro sono innamorato alla follia…). In un file di Excel 2007: -in foglio1 ho dei codici scritti nel Range A5:A12, codici che vengono aggiornati in base alla loro presenza in magazzino; -in foglio2 ho dei codici scritti nel Range A7:CX [variabile in altezza, con un’istruzione di selezione del tipo Range("A7", Range("C" & Rows.Count).End(xlUp)).Select]. Obiettivo: quando nel RangeA5:A12 di foglio1 vi sono dei codici compresi nel Range di tipo variabile di foglio2 le rispettive celle, in entrambi i fogli, si colorano di rosso. Esempio: in foglio1 nelle celle A5:A12 vi sono i codici 1 2 3 4 5 6 7 8 in foglio 2 nel Range (di tipo variabile nel numero di righe, nel ns. esempio 5) A7:C11 vi sono i codici 9 12 14 15 3 27 4 1 11 6 16 8 19 22 41 le celle contenenti i codici 3 4 1 6 8 si colorano di rosso, in entrambi i fogli. Grazie infinite, buon pomeriggio eZio.
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve prova con questa: Sub compare() With Sheets("Foglio2") Set rng2 = .Range("A7", .Range("C" & Rows.Count).End(xlUp)) End With With Sheets("Foglio1") Set rng = .Range("A5:A12") End With For Each cl In rng For Each cl2 In rng2 If cl.Value = cl2.Value Then cl.Interior.ColorIndex = 3 cl2.Interior.ColorIndex = 3 End If Next cl2 Next cl Set rng = Nothing Set rng2 = Nothing End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, la macro è perfetta (...c'era forse qualche dubbio?? :-)) ) e come sempre in due righe di stupende istruzioni fà tutto quanto!!
purtroppo sto riscontrando molte tabelle in cui nel foglio2, nel range variabile, non tutte le celle (e le righe) sono scritte... Per darti un esempio: supponiamo Range A7:C16, vi sono i codici 9 (vuota) 14 15, 3, (vuota) (vuote) 6, 16, 8 (vuota), 22, 41 (vuote) (vuote) 4, 7, 5 (vuote) 8, 5, 1 la macro chiaramente restituisce solo fino alla 2^Riga, perché la 3^ riga è completamente vuota bisognerebbe invece che in foglio1 le celle colorate di Range A5:A12 contenessero i codici 3, 6, 8, 4, 7, 5, 1. Detta in volgare, ci correbbe un'istruzione che lavorasse sull'ultima riga in cui ci fosse almeno una cella scritta, ma contemplando la possibilità di incontrare anche più righe vuote...Insomma, un bel Rebus!! Grazie infinite, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
EDIT. Un'idea alla "Ulisse-Nessuno" potrebbe essere quella di ingannare il VBA sovradimensionando il Range (una colonna in più), scrivendo nella colonna in più un codice inesistente che la macro legge comunque, ma che ovviamente non restituisce... l'istruzione della macro incontra la riga che è comunque scritta, la oltrepassa e processa la rimanenza del Range... sono a disposizione per sculacciate solenni, se ho scritto un'asinata, ma l'ho provata e funziona a meraviglia... ;-)) Per cui anche questa volta mi hai risolto un bel problema!! (...e la macro è come sempre bellissima) Grazie assai, buona serata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve nel foglio2 esiste solo la tabella che occupa le tre colonne?? se così fosse, basta usare l'istruzione Usedrange per determinare l'ultima riga. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto:salve nel foglio2 esiste solo la tabella che occupa le tre colonne?? se così fosse, basta usare l'istruzione Usedrange per determinare l'ultima riga. saluti Giap Ciao, scusa il ritardo nel risponderti, ma oggi ero in "trasferta"... Purtroppo le tabelle di foglio2 NON hanno un numero fisso di colonne, per cui temo che la cosa si complichi non poco... provando con la colonna fittizia la macro lavora perfettamente, ma ho il sospetto che sia un escamotage da "cioccolataio" :-)) Grazie assai, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:
provando con la colonna fittizia la macro lavora perfettamente, ma ho il sospetto che sia un escamotage da "cioccolataio" :-)) Grazie assai, buona serata eZio
Salve non hai risposto alla mia domanda. Il foglio2 contiene solo la tabella da elaborare? saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto: Salve non hai risposto alla mia domanda. Il foglio2 contiene solo la tabella da elaborare? saluti Giap
Ciao, Scusa..... Vero!! Negativo, nelle prime 10 righe ci sono anche dei pulsanti e dei commenti. Ma la tabella è unica, anche se varia in estensione e lunghezza a seconda delle tabelle a cui si riferisce. Grazie assai, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve prova con questa: Sub compare() With Sheets("Foglio2") righe = .UsedRange.Rows.Count + 6 colonne = .UsedRange.Columns.Count Set rng2 = Range(.Cells(7, 1), .Cells(righe, colonne)) End With With Sheets("Foglio1") Set rng = .Range("A5:A12") End With For Each cl In rng For Each cl2 In rng2 If cl.Value = cl2.Value Then cl.Interior.ColorIndex = 3 cl2.Interior.ColorIndex = 3 End If Next cl2 Next cl Set rng = Nothing Set rng2 = Nothing End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, dire che resto letteralmente allibito equivale a sminuire di parecchio la mia reazione...!! Funziona a meraviglia, ma la cosa che mi lascia senza parole è che il tutto avviene grazie a solo 18 righe di istruzioni precise, stringate ed essenziali. Non so proprio come ringraziarti, e mi scuso ancora per non avre risposto sopra alla tua domanda, ma ero di gran fretta... hai presente quel film inizio '80 con Lino Banfi in cui all'inizio doveva " SOLO accendere e spegnere due spie luminose"?? ecco, forse ho reso l'idea ahahahGrazie assai, e buona giornata eZio
|
|
Guest |