|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, devo risolvere questo ennesimo [ nel vero senso matematico della parola :-)) ] problema: in un file EXCEL_A c'è una tabella come QUESTA, da col.H a col.O (totale 8 colonne) ci possono essere delle celle con i bordi colorati; quelle che interessano la mia ricerca attuale sono solo le celle di riga 3. In un modulo di ciascuno di una serie di file gemelli EXCEL1, EXCEL2 etc. fino a EXCEL8 (uno per ogni colonna in cui vi possono essere celle con bordi colorati) c'è la macro Sub Filtra1() swProcessato = ActiveWorkbook.Name Workbooks(swProcessato).Activate Sheets("Foglio 2").Select Selection.AutoFilter ActiveSheet.Range("$A$15", Range("$P$15").End(xlDown)).AutoFilter Field:=Range("i15").Column, Criteria1:=Range("i15").Value, _ Operator:=xlAnd ActiveSheet.Range("$A$15", Range("$P$15").End(xlDown)).AutoFilter Field:=Range("P15").Column, Criteria1:=Range("P15").Value, _ Operator:=xlAnd End Sub in cui nel Foglio 2 del file attivo esegue un filtro del valore di cella i15 e un filtro in quello di cella P15 di una tabella (la macro è collegata ad altre che poi svolgeranno il loro lavoro in base a quei dati filtrati). Attualmente svolgo in modo manuale (!!) il rilevamento della colonna, riga 3, della tabella in cui c'è la cella con bordi colorati e scrivo la colonna nei campi FIELD e CRITERIA1 del primo dei due filtri della macro. Usando l'immagine ad esempio, in riga3: 1^ cella con bordi colorati in col.I > scrivo la i nei campi FIELD e CRITERIA1 primo dei due filtri della macro di EXCEL1 2^ cella con bordi colorati in col.O > scrivo la o nei campi FIELD e CRITERIA1 primo dei due filtri della macro di EXCEL2 etc. Supponendo il caso limite puramente teorico di avere tutte le 8 colonne, riga 3, con le celle con bordi colorati ciascuna delle rispettive colonne andrebbero scritte nel primo dei due filtri dei file, rispettivamente, EXCEL1, EXCEL2, EXCEL3, EXCEL4, EXCEL5, EXCEL6, EXCEL7, EXCEL8. In volgare villano il dialogo con la macro dovrebbe essere questo: -trova la 1^ cella con bordi colorati in riga 3 della tabella, da col.H a col.O, e scrivi la colonna nei campi FIELD e CRITERIA1 del primo dei due filtri della Sub Filtra1 di EXCEL1 -trova la 2^ cella con bordi colorati in riga 3 della tabella, da col.H a col.O, e scrivi la colonna nei campi FIELD e CRITERIA1 del primo dei due filtri della Sub Filtra1 di EXCEL2 -trova la 3^ cella con bordi colorati in riga 3 della tabella, da col.H a col.O, e scrivi la colonna nei campi FIELD e CRITERIA1 del primo dei due filtri della Sub Filtra1 di EXCEL3 etc. fino a un numero massimo di 8 celle con bordi colorati, nel qual caso -trova l'8^ cella con bordi colorati in riga 3 della tabella, da col.H a col.O, e scrivi la colonna nei campi FIELD e CRITERIA1 del primo dei due filtri della Sub Filtra1 di EXCEL8 -Quando non trovi più celle con bordi colorati esci dalla ricerca. Gli 8 file gemelli e il file EXCEL_A sono tutti nella stessa cartella. E' fantaVBa o con la dovuta conoscenza della Materia è un'operazione fattibile? Qui davvero sono lecite Grazie INFINITE... eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve andando per interpretazione: prova questa: Dim mycoll As Collection Dim myvalue As Collection Dim n As Integer Sub controlla() Set mycoll = New Collection Set myvalue = New Collection Set area = Range("h3:o3") For Each cell In area If Not cell.Borders.LineStyle = xlNone Then mycoll.Add (cell.Address) myvalue.Add cell.Value n = n + 1 End If Next cell Call Filtra1 n = 0 Set mycoll = Nothing Set myvalue = Nothing End Sub Sub Filtra1() swProcessato = ActiveWorkbook.Name Workbooks(swProcessato).Activate Sheets("Foglio1").Select Selection.AutoFilter For a = 1 To n Colfield = Range(mycoll(a)).Column Crit = myvalue(a) ActiveSheet.Range("$H$3", Range("$O$3").End(xlDown)).AutoFilter Field:=Colfield, Criteria1:=Crit, _ Operator:=xlAnd '' qui il codice di '' quello che deve fare con il filtro applicato-------> Next a End Sub Note: La macro Controlla() controlla quali celle in riga 3 contengono un bordo, inserisce nella Collection (Mycoll) l'indirizzo di cella e nella Collection (Myvalue) il valore della cella bordata. nella macro Filtra1 viene eseguito il ciclo per il numero di celle bordate (variabile N) ed estrae uno alla volta i valori delle collection utilizzando il valore di Mycoll come campo Field e il valore di Myvalue come campo Criteria saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, ...il grande Bonvi di fronte a un capolavoro del genere avrebbe scritto a caratteri cubitali un bel GULP
Vado subito a provarla (dovrò sicuramente rivoluzionare tutto l'ambaradan legato alla mia ormai superata Filtra1, perché quella macro gestisce tutta una serie di operazioni strettamente incastrate tra loro...) Un immenso Grazie, eZio
Nota: una domanda, molto probabilmente stupida: come dialogano tra loro i due file EXCEL_A in cui risiede la tabella con le celle bordate col colore e il file EXCEL1 in cui risiede la Sub Filtra1 che riceve le istruzioni?
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao,
Nota: una domanda, molto probabilmente stupida: come dialogano tra loro i due file EXCEL_A in cui risiede la tabella con le celle bordate col colore e il file EXCEL1 in cui risiede la Sub Filtra1 che riceve le istruzioni? Salve se la macro risiede sul file EXCEL1 e deve lavorare sul file EXCEL_A basta che metti i riferimenti dei file in testa alla macro come segue: Sub controlla() ' -> aggiungi le seguenti righe-------------- Set wb = Workbooks("EXCEL_A.xlsx") Set sh = wb.Sheets("Foglio1") sh.Activate'----------------- Set mycoll = New Collection Set myvalue = New Collection Set area = Range("h3:o3") For Each cell In area .......................... .................... saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: se la macro risiede sul file EXCEL1 e deve lavorare sul file EXCEL_A basta che metti i riferimenti dei file in testa alla macro come segue:
Sub controlla()
' -> aggiungi le seguenti righe-------------- Set wb = Workbooks("EXCEL_A.xlsx") Set sh = wb.Sheets("Foglio1") sh.Activate '-----------------
Set mycoll = New Collection Set myvalue = New Collection Set area = Range("h3:o3") For Each cell In area .......................... ....................
Grazie assai, You're my Angel ;-)) eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao,
premetto che questa volta ho un serio e fondato timore che verrò defenestrato.... :-)) Sono finalmente riuscito Grazie esclusivamente ad a10n11 a risolvere anche questo mio ennesimo problema, ma purtroppo ho una numerosa serie di file in cui il lavoro ciclico della stupenda macro Filtra1 non può essere svolto poiché essa è inserita in una sequenza di altre macro per cui, purtroppo non ho alternative, andrebbe eseguita di volta in volta esattamente come ho scritto in apertura di thread. So di chiedere davvero assai dell'assai, ma se fosse possibile anche solo avere una "dima" che di volta in volta poi rettifico nei vari file in base alle istruzioni di puntamento per me sarebbe già una squisita Manna. Il dialogo tra i due file ci stà perfettamente in quanto sono già entrambi aperti, ma ciascuna Sub Filtra1, inserita in ciascun file EXCELn, può puntare solo ad una delle colonne con i bordi colorati della tabella del file EXCEL_A.xlsm (oltre ovviamente al secondo filtro che però è costantemente indirizzato alla cella P15) seguendo la traccia in volgare villano scritto nel post di apertura del thread.
Grazie infinite, anche per l'immensa pazienza.... buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao,
premetto che questa volta ho un serio e fondato timore che verrò defenestrato.... :-)) Sono finalmente riuscito Grazie esclusivamente ad a10n11 a risolvere anche questo mio ennesimo problema, ma purtroppo ho una numerosa serie di file in cui il lavoro ciclico della stupenda macro Filtra1 non può essere svolto poiché essa è inserita in una sequenza di altre macro per cui, purtroppo non ho alternative, andrebbe eseguita di volta in volta esattamente come ho scritto in apertura di thread. So di chiedere davvero assai dell'assai, ma se fosse possibile anche solo avere una "dima" che di volta in volta poi rettifico nei vari file in base alle istruzioni di puntamento per me sarebbe già una squisita Manna. Il dialogo tra i due file ci stà perfettamente in quanto sono già entrambi aperti, ma ciascuna Sub Filtra1, inserita in ciascun file EXCELn, può puntare solo ad una delle colonne con i bordi colorati della tabella del file EXCEL_A.xlsm (oltre ovviamente al secondo filtro che però è costantemente indirizzato alla cella P15) seguendo la traccia in volgare villano scritto nel post di apertura del thread.
Grazie infinite, anche per l'immensa pazienza.... buona serata eZio salve Non è molto chiaro il concetto. magari un esempio esplicativo aiuterebbe a comprendere meglio il problema. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto:Non è molto chiaro il concetto. magari un esempio esplicativo aiuterebbe a comprendere meglio il problema. in effetti il concetto è semplicissimo, il vero problema è spiegarlo in poche e semplici parole... :-(( forse un' IMMAGINE può chiarire meglio le dinamiche del ragionamento In sintesi: la macro, chiamiamola Macro1, con la stessa logica della stupenda Filtra1 che mi hai scritto sopra, scansiona nel file EXCEL_A, Foglio1, la riga3 da col.H a Col.O finché trova la 1^ cella con i bordi colorati. Se la trova rileva la colonna e la inserisce nella sub Filtra1 (quella che ho scritto ad inizio thread) del file EXCEL1. Nello stesso modo una Macro2 uguale nell'impianto, ma con le istruzioni di puntare alla 2^ cella bordata e, se la trova, ne scrive la colonna nella sub Filtra1 del file EXCEL2. Così fino a quando vengono rilevate celle bordate col colore. Se non vengono trovate bypassa per non bloccare la sequenza operativa. So perfettamente che lo stato dell'Arte è la tua bellissima Filtra1, infatti dove ho potuto farlo l'ho già inserita e funziona a meraviglia, ma dato che in una serie di file (corposa, purtroppo) le macro in cui devo inserire i dati sono esse stesse annidate in un fitto intreccio di altre operazioni (e macro) di fatto mi è impossibile rivoluzionare tutto l'impianto. Ora l'operazione viene svolta manualmente, ma al di là della laboriosità della scrittura manuale c'è un alto rischio di refusi che rallentano notevolmente il lavoro... Della serie bottigliate alla Giacomo (Aldo, Giovanni & Giacomo) sul povero creapopoli...................... Grazie infinite per tutto. sono proprio imperdonabile eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao, in effetti il concetto è semplicissimo, il vero problema è spiegarlo in poche e semplici parole... :-(( forse un' IMMAGINE può chiarire meglio le dinamiche del ragionamento In sintesi: la macro, chiamiamola Macro1, con la stessa logica della stupenda Filtra1 che mi hai scritto sopra, scansiona nel file EXCEL_A, Foglio1, la riga3 da col.H a Col.O finché trova la 1^ cella con i bordi colorati. Se la trova rileva la colonna e la inserisce nella sub Filtra1 (quella che ho scritto ad inizio thread) del file EXCEL1. Nello stesso modo una Macro2 uguale nell'impianto, ma con le istruzioni di puntare alla 2^ cella bordata e, se la trova, ne scrive la colonna nella sub Filtra1 del file EXCEL2. Così fino a quando vengono rilevate celle bordate col colore. Se non vengono trovate bypassa per non bloccare la sequenza operativa. So perfettamente che lo stato dell'Arte è la tua bellissima Filtra1, infatti dove ho potuto farlo l'ho già inserita e funziona a meraviglia, ma dato che in una serie di file (corposa, purtroppo) le macro in cui devo inserire i dati sono esse stesse annidate in un fitto intreccio di altre operazioni (e macro) di fatto mi è impossibile rivoluzionare tutto l'impianto. Ora l'operazione viene svolta manualmente, ma al di là della laboriosità della scrittura manuale c'è un alto rischio di refusi che rallentano notevolmente il lavoro... Della serie bottigliate alla Giacomo (Aldo, Giovanni & Giacomo) sul povero creapopoli...................... Grazie infinite per tutto. sono proprio imperdonabile eZio Salve domande: 1) le macro FILTRA1 sono uguali in tutti file? 2) se trovo 5 celle bordate dovrei trovarmi 5 file corrispondenti? 3) esiste una relazione tra la posizione della cella bordata e il nome del file dove opera la macro FILTRA1 ? 4) con che nome reale sono individuati i file dove opera la macro FILTRA1? Intanto mi bastano queste risposte saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: domande: 1) le macro FILTRA1 sono uguali in tutti file? 2) se trovo 5 celle bordate dovrei trovarmi 5 file corrispondenti? 3) esiste una relazione tra la posizione della cella bordata e il nome del file dove opera la macro FILTRA1 ? 4) con che nome reale sono individuati i file dove opera la macro FILTRA1?
1)Affermativo, l'unica variabile è la colonna da inserire nei campi FIELD e CRITERIA1 del 1^filtro (il secondo punta sempre in P15) 2)Affermativo (purtroppo NON ho alternative, a meno di rivoluzionare tutto l'impianto: un anno di lavoro :-\ ) 3)Se possibile, sarebbe ideale che la 1^ cella bordata trovata (indipendentemente dall'effettiva posizione in 1^ colonna, vale a dire col.H) avesse come riferimento il file EXCEL1, la 2^ il file EXCEL2 etc. 4) il concetto credo che possa in sintesi essere espresso in questo SCHEMA. Il file holding gestisce tutte le operazioni, la tabella con le celle bordate col colore è qui. Da qui, in base al numero delle celle con bordi colorati trovate vine gestito il lavoro dei vari EXCEL1, EXCEL2 etc. che si aprono uno alla volta (dopo che il precedente ha terminato). La macro Filtra1 è in questi file EXCELn e viene eseguita in ogni Data n che viene aperto (in gruppi di 10). Il lavoro viene regolato secondo la logica della posizione di apertura del file quindi: Holding è 1°, il file di turno EXCELn è il 2°, e poi via via gruppi di 10 file alla volta che vengono processati, e se vengono assolti i requisiti imposti dalle macro i relativi fogli- in cui vi sono i dati rispondenti alle specifiche- vengono copiati nel fil EXCELn di turno. Spero tanto di essere stato sufficientemente chiaro... :-) Grazie infinite, buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve Capisco che per te la logica complessiva del lavoro sia chiara, ma devi metterti nei panni di chi non conosce il lavoro. la riga sotto, rappresenta qualcosa che imbroglia ulteriormente le mie percezioni sensoriali. che significa tradotto in termini elementari: ..La macro Filtra1 è in questi file EXCELn e viene eseguita in ogni Data n che viene aperto (in gruppi di 10).... La logica su cui stavo ragionando era questa: Non avendo senso avere tante copie di macro sparse per i file, si assegnava una unica macro al file di origine delle tabelle che in funzione del controllo dei bordi delle celle, apriva i files corrsipondenti ed eseguiva le operazioni su di essi. ora pero alla luce delle nuove indicazioni non ci capisco più nulla. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: Capisco che per te la logica complessiva del lavoro sia chiara, ma devi metterti nei panni di chi non conosce il lavoro.
Certo, volevo proprio dire questo, sono consapevole che questo è un vero labirinto... E sei davvero molto bravo (e unico) a capirmi sempre :-) a10n11 ha scritto: che significa tradotto in termini elementari: ..La macro Filtra1 è in questi file EXCELn e viene eseguita in ogni Data n che viene aperto (in gruppi di 10)....
mediante un incastro di macro faccio lavorare quel "sistema" che ho sintetizzato nell'immagine usando un impianto compositivo molto semplice e sopra tutto polivalente. a10n11 ha scritto:La logica su cui stavo ragionando era questa:
Non avendo senso avere tante copie di macro sparse per i file, si assegnava una unica macro al file di origine delle tabelle che in funzione del controllo dei bordi delle celle, apriva i files corrsipondenti ed eseguiva le operazioni su di essi. Logica che condivido pienamente, infatti la tua stupenda Filtra1 sta già lavorando alla grande nei gruppi di file in cui la posso eseguire. Comunque sono convinto di essere io a non essere sufficientemente chiaro nell'esporre questo problema. Provo a cercare altre strade praticabili... Grazie infinite, anche per la tua immensa pazienza. eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, scusa se riprendo l'argomento, ma rileggendo a10n11 ha scritto:La logica su cui stavo ragionando era questa: Non avendo senso avere tante copie di macro sparse per i file, si assegnava una unica macro al file di origine delle tabelle che in funzione del controllo dei bordi delle celle, apriva i files corrsipondenti ed eseguiva le operazioni su di essi. e guardando l' ESEMPIO mi sono accorto che forse diciamo la stessa cosa... le aperture dei file vengono già gestite dalle macro esistenti, e al momento opportuno i due file che devono dialogare sono già aperti (1° e 2°) dovrei solo inserire nelle macro che organizzano il lavoro, a tempo debito, una call alla macro perché indirizzi di volta in volta le coordinate nei campi delle macro che poi svolgono il lavoro di filtro. Molto probabilmente sbaglio, ma forse no. Grazie assai eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
Salve ti mostro quello che pensavo fosse una soluzione. Nel file che contiene La tabella Excel_A gira questa macro: Public mycoll As Collection Public myvalue As Collection Public n As Integer Sub controlla() Set mycoll = New Collection Set myvalue = New Collection Set area = Range("h3:o3") For Each cell In area If Not cell.Borders.LineStyle = xlNone Then mycoll.Add (cell.Address) myvalue.Add cell.Value n = n + 1 End If Next cell Call Application.Run("PERSONAL.XLSB!Filtra1") n = 0 Set mycoll = Nothing Set myvalue = Nothing End Sub nel File PERSONAL.XLSB inserirei questa macro: Sub Filtra1() Set wb = Workbooks("EXCEL_A.xlsx") Set sh = wb.Sheets("Foglio1") sh.Activate Selection.AutoFilter For a = 1 To c1.n Colfield = Range(c1.mycoll(a)).Column Crit = c1.myvalue(a) ActiveSheet.Range("$H$3", Range("$O$3").End(xlDown)).AutoFilter Field:=Colfield, Criteria1:=Crit, _ Operator:=xlAnd 'QUI APRI IL PRIMO FILE ED ESEGUI LE TUE OPERAZIONI 'For I = 1 To c1.n 'Workbooks.Open ("ilTuoPrimofile" & I & ".Xlsx") '' qui il codice di '' quello che deve fare con il filtro applicato sul file aperto-------> 'finite le operazioni, chiudi il file e passi al secondo ecc 'Workbooks("ilTuoPrimofile" & I & ".Xlsx").Close sh.Activate Next a End Sub con questa macro apri tanti file Excel(n) per quante celle bordate hai. NB. è solo l'indicazione della possibile procedura. per farla girare occorre impostare alcuni parametri in ambiente vba saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, innanzi tutto un immenso e sincero Grazie per la tua esemplare, unica, disponibilità... Corro subito a verificare se riesco ad adattare al mio ambaradan infernale le tue tre splendide creature. Non vorrei sembrare uno "schizzinoso", ma il fatto è che sono pesantemente vincolato dal complicatissimo incastro che gestisce tutti i lavori. Grazie davvero infinite eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, sono profondamente costernato, ma dopo inummerevoli e tenaci tentativi per sistemare tutto l'ambaradan a ricevere le tue splendide macro devo rinunciare: sono troppe e radicali le modifiche che si devono fare per ottenere il risultato sperato. Ma chi mi conosce sa che NON mollo l'osso, qui l'unico mio immenso handicap è la pressoché totale ignoranza della materia... ho pensato ad un'ulteriore possibilità "forse" praticabile senza stravolgere l'impianto assai complesso degli incastri con cui lavorano le macro dei file. Prendendo ancora spunto dall' ESEMPIO già postato e ricordando che i dati che interessano sono quelli di riga 3 da col.H a col.O, se si riuscisse a dare istruzioni a 2 macro (mi scuso per il volgare villano, ben lontano dall'elegante sintassi del VBa): Macro1 -scansiona e trova da col.H a col.O di riga3 le celle con i bordi colorati e la 1^ che trovi la scrivi in col.R, la 2^ in col.S, la 3^in T etc. fino all' 8^ in col.Y Macro2 - Scrivi la colonna che è scritta in R3 nella macro Filtra1 del file EXCEL1 (con l'indirizzo nella macro), la colonna che è scritta in S3 nella macro Filtra1 del file EXCEL2, la colonna che è scritta in T3 nella macro Filtra1 del file EXCEL etc. fino all'ultima che trovi nelle colonne da R a Y I file EXCEL1, 2 etc. verranno quindi aperti manualmente in base al riscontro, nel file EXCEL_A, delle colonne in cui sono presenti le celle con bordi colorati e la Macro2 li distribuirà in modo esatto. Nulla a che vedere le tue splendide creature, ma purtroppo la realtà con ci devo fare i conti è questa. Non pensare però che le tue creature verranno accantonate: gradualmente modificherò i gruppi di file in modo che trovino la loro giusta e onorevole collocazione. Grazie infinite, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao, sono profondamente costernato, ma dopo inummerevoli e tenaci tentativi per sistemare tutto l'ambaradan a ricevere le tue splendide macro devo rinunciare: sono troppe e radicali le modifiche che si devono fare per ottenere il risultato sperato. Ma chi mi conosce sa che NON mollo l'osso, qui l'unico mio immenso handicap è la pressoché totale ignoranza della materia... ho pensato ad un'ulteriore possibilità "forse" praticabile senza stravolgere l'impianto assai complesso degli incastri con cui lavorano le macro dei file. Prendendo ancora spunto dall' ESEMPIO già postato e ricordando che i dati che interessano sono quelli di riga 3 da col.H a col.O, se si riuscisse a dare istruzioni a 2 macro (mi scuso per il volgare villano, ben lontano dall'elegante sintassi del VBa): Macro1 -scansiona e trova da col.H a col.O di riga3 le celle con i bordi colorati e la 1^ che trovi la scrivi in col.R, la 2^ in col.S, la 3^in T etc. fino all' 8^ in col.Y Macro2 - Scrivi la colonna che è scritta in R3 nella macro Filtra1 del file EXCEL1 (con l'indirizzo nella macro), la colonna che è scritta in S3 nella macro Filtra1 del file EXCEL2, la colonna che è scritta in T3 nella macro Filtra1 del file EXCEL etc. fino all'ultima che trovi nelle colonne da R a Y I file EXCEL1, 2 etc. verranno quindi aperti manualmente in base al riscontro, nel file EXCEL_A, delle colonne in cui sono presenti le celle con bordi colorati e la Macro2 li distribuirà in modo esatto. Nulla a che vedere le tue splendide creature, ma purtroppo la realtà con ci devo fare i conti è questa. Non pensare però che le tue creature verranno accantonate: gradualmente modificherò i gruppi di file in modo che trovino la loro giusta e onorevole collocazione. Grazie infinite, buona serata eZio Salve Quello che chiedi in definitiva è quello che avrebbe dovuto fare la macro senza celle di appoggio e senza duplicare la macro Filtra su tutti i file. Nel tuo esposto fai riferimento al numero della colonna della cella bordata, il Criterio per il filtro?? saluti. Ps. Da Lunedì ricominciano i miei impegni, pertanto la mia presenza potrà essere saltuaria. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto:Nel tuo esposto fai riferimento al numero della colonna della cella bordata, il Criterio per il filtro?? ...ecco affiorare la mia ignoranza in fatto di VBa. Intendi in che modo dev'essere inserito nella sub Filtra1? Riporto per comodità di lettura le istruzioni della macro Sub Filtra1() swProcessato = ActiveWorkbook.Name Workbooks(swProcessato).Activate Sheets("Foglio 2").Select Selection.AutoFilter ActiveSheet.Range("$A$15", Range("$P$15").End(xlDown)).AutoFilter Field:=Range("i15").Column, Criteria1:=Range("i15").Value, _ Operator:=xlAnd ActiveSheet.Range("$A$15", Range("$P$15").End(xlDown)).AutoFilter Field:=Range("P15").Column, Criteria1:=Range("P15").Value, _ Operator:=xlAnd End Sub in cui -Il primo filtro è quello della colonna in cui, in EXCEL_A c'è la cella bordata col colore di riga 3( nel ns. esempio, per EXCEL1 andrà insertita col.i e riga 15, per EXCEL2 è la col.o, e riga 15) ActiveSheet.Range("$A$15", Range("$P$15").End(xlDown)).AutoFilter Field:=Range("i15").Column, Criteria1:=Range("i15").Value, _ Operator:=xlAnd-il secondo filtro è costante, sempre col.P riga 15 (non viene interssato dalla macro) ActiveSheet.Range("$A$15", Range("$P$15").End(xlDown)).AutoFilter Field:=Range("P15").Column, Criteria1:=Range("P15").Value, _ Operator:=xlAndRiassumendo con altre parole, osservando la figura di QUESTO esempio: -nel file EXCEL_A, Foglio1, la Macro1 scansiona in riga3 da col.H a col.O se ci sono celle con bordi colorati. Se le trova, ne scrive la colonna della 1^ in R3, la colonna della 2^ in S3 etc. fino all'ultima colonna in cui c'è una cella con bordi colorati. - nel file EXCEL_A la Macro2, dopo che ha constatato quante celle sono state trovate ed ha aperto i file EXCEL1,2 3. etc. in base al loro numero, scriverà in FIELD e CRITERIA1 del primo filtro (sempre in riga15) la lettera corrispondente: in EXCEL1 la lettera scritta in R3 (nel ns. esempio la i), in EXCEL2 quella scritta in S3 (nel ns. esempio la o), in EXCEL3 quella scritta in T3 (nel ns. esempio non ve ne sono per cui termina) etc. Le lettere scritte nelle celle R3, S3, T3, U3, V3, W3, X3, Y3 di EXCEL_A andrebbero quindi scritte nei campi FIELD e CRITERIA1 della sub Filtra1 rispettivamente di EXCEL1, 2, 3, 4, 5, 6, 7, 8. Di volta in volta, terminato il lavoro di scrittura nel file EXCELn di competenza, il file EXCELn viene chiuso (salvando le modifiche). Purtroppo alla sub Filtra1 NON posso assegnare nessun altro lavoro da svolgere... E' inserita in un intreccio di altre macro e finito il suo compito, peraltro già importantissimo così, deve passare il testimone alle altre macro. Commenta:Ps. Da Lunedì ricominciano i miei impegni, pertanto la mia presenza potrà essere saltuaria. Mi fà piacere per te, ma nel contempo mi spiace tantissimo: perdo una preziosissima fonte di Cultura... :-(( Grazie assai,buona serata eZio .
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
EDITa10n11 ha scritto:Quello che chiedi in definitiva è quello che avrebbe dovuto fare la macro senza celle di appoggio e senza duplicare la macro Filtra su tutti i file. Ho provato a riscrivere le macro con le tue indicazioni... ma (ovvio) mi sono perso in quest'Oceano............. Che frana. Grazie infinite per tutto eZio
|
|
Guest |