Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]- Scrittura di dati nelle macro Opzioni
aetio
Inviato: Tuesday, September 10, 2013 1:48:37 PM

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

Sponsor
Inviato: Tuesday, September 10, 2013 1:48:37 PM

 
a10n11
Inviato: Tuesday, September 10, 2013 4:35:51 PM

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

aetio
Inviato: Tuesday, September 10, 2013 5:38:33 PM

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?
a10n11
Inviato: Tuesday, September 10, 2013 5:57:44 PM

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

aetio
Inviato: Tuesday, September 10, 2013 10:35:45 PM

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
aetio
Inviato: Wednesday, September 11, 2013 4:53:32 PM

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
a10n11
Inviato: Thursday, September 12, 2013 9:28:33 AM

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

aetio
Inviato: Thursday, September 12, 2013 10:24:50 AM

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
a10n11
Inviato: Thursday, September 12, 2013 11:18:42 AM

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


aetio
Inviato: Thursday, September 12, 2013 1:45:17 PM

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
a10n11
Inviato: Thursday, September 12, 2013 2:28:06 PM

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



aetio
Inviato: Thursday, September 12, 2013 2:56:00 PM

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





aetio
Inviato: Thursday, September 12, 2013 3:41:01 PM

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
a10n11
Inviato: Thursday, September 12, 2013 7:42:35 PM

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

aetio
Inviato: Thursday, September 12, 2013 8:43:38 PM

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
aetio
Inviato: Friday, September 13, 2013 6:00:38 PM

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




a10n11
Inviato: Friday, September 13, 2013 7:43:17 PM

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

aetio
Inviato: Friday, September 13, 2013 9:40:25 PM

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:=xlAnd


Riassumendo 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


.
aetio
Inviato: Sunday, September 15, 2013 9:07:23 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
EDIT


a10n11 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
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.