|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve senza riscrivere tutta la macro, guarda se intanto il risultato va bene: Option Base 1 Public Cl As Variant Public sequenza As Long Public myrow As Long Public crit As Variant Sub TabellaTabelle() Dim ctr As Boolean, ctr2 As Boolean With Sheets("foglio2") .Cells.Interior.ColorIndex = xlNone .Cells.Borders.LineStyle = xlNone End With sequenza = CLng(InputBox("SEQUENZA", "Dichiara limite sequenza")) conta = 0 uriga = Range("A" & Rows.Count).End(xlUp).Row For I = 8 To 33 Set Area = Range(Cells(3, I), Cells(uriga, I)).SpecialCells(xlCellTypeVisible) If Area.Cells.Count > sequenza Then If Sheets("foglio1").AutoFilterMode Then With Sheets("Foglio1").AutoFilter.Filters(I) If .On Then crit = Area.Cells(1).Row Colfil = Area.Cells(1).Column End If End With Else: Exit Sub End If For Each Cl In Area If Cl.Interior.ColorIndex = xlNone Then conta = conta + 1 If Not ctr2 Then myrow = Cl.Row End If ctr2 = True Else If conta = sequenza Then Call copiaDati ctr = True conta = 0 End If conta = 0 End If Next End If conta = 0 ctr2 = False Next If ctr Then With Sheets("foglio2").Cells(crit, Colfil).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 3 End With End If End Sub Sub copiaDati() colonna = Cl.Column With Sheets("foglio2") With .Cells(myrow, colonna).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 3 End With End With End Sub Ora per l'applicazione dei filtri mi devi dire dove andare a pescare i criteri per ogni colonna della tabella 2 saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, il risultato è esatto. Per quanto riguarda i criteri, come ho spiegato (male...) sopra, la macro dovrebbe scansionare la tabella colonna per colonna e codice per codice, restituendo in foglio2 tutte le ricorrenze che hanno soddifatto il criterio di ricerca: in questo caso il 10. Grazie assai, buon pomeriggio, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve premesso che nelle macro che ti ho inviato, c'è un errore nell'indicazione di un interruttore che ti correggerò, il filtro applicato a tutte le colonne della tabella 2 per ogni valore presente in ciascuna colonna rappresenterà un peso enorme di elaborazione. Scrivere la macro non è un problema non saprei quanto tempo impiegherà per l'elaborazione visto che tu hai tabelle macroscopiche. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, nessun problema di tempo... quando hai tempo e voglia, ci mancherebbe pure che ti metto fretta!! ;) Non riesco ad inquadrare perché questa ricerca delle macro sarà più "pesante" delle altre... così, da ignorante che molto probabilmente spara una barzelletta, più o meno siamo ai livelli delle altre, solo che invece di avere due filtri numerici ne abbiamo 1 numerico (quello del cod. da filtrare) e uno per colore che cerca le ricorrenze in cui le celle delle altre colonne della tabella, interessate dal filtro (nelle stesse righe del cod. filtrato), non si sono colorate per un numero di volte pari a quello inserito nella InputBox. Grazie per tutto, buon pomeriggio eZio
EDIT: Ma se ragioniamo sul numero di colonne in cui andranno a lavorare e il numero di codici da scansionare... ecco spiegato il motivo :))) Ci metto un pò a carburare... l'importante è che questa "carburazione" avvenga...
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto: ... (nelle stesse righe del cod. filtrato)
salve questa precisazione tra parentesi, potrebbe essere quello che vanifica tutto il lavoro. guarda l'immagine qui sotto. La tabella è filtrata per il codice 57 in colonna AC per cataste lunghe 6 le mie macro prelevano il valore 61 di colonna Z è corretta l'interpetazione o è miservolmente sbagliata?? PS. perchè la strada non è semplice come quella che ipotizzi?? considera che la sola colonna H contiene 92 record univoci, quindi per la sola colonna H bisogna applicare 92 filtri ipotizzando che tutte le altre colonne abbiano altrettanti records univoci moltiplica 92 x 26 colonne e ti portano ad un totale di 2496 filtri su ciascun filtro vengono eseguti almeno 3 cicli saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto: La tabella è filtrata per il codice 57 in colonna AC per cataste lunghe 6 le mie macro prelevano il valore 61 di colonna Z è corretta l'interpetazione o è miservolmente sbagliata??
...E' esatta. In foglio2, se la cosa è fattibile, dovrebbero esserci le 2 celle responsabili (che sono sulla stessa riga, e mi forniscono- in col.C- il Sett. a cui appartengono) della catasta lunga 6: il cod.61 di col.Z e il cod.57 di col.AC, insieme a tutte le loro simili... (quelle che hanno cataste lunghe 6...) Grazie infinite, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve quelle che seguono, sono le macro applicate sul file Aetio-prova-iv.xls La macro principale alla quale sono legate tutte le altre è: filtrasequenza() Option Base 1 Public Cl As Variant Public sequenza As Long Public myrow As Long Public crit As Variant Public urig As Long Public colore As Long Sub filtrasequenza() Sheets("foglio1").Select Application.ScreenUpdating = False urig = Range("A" & Rows.Count).End(xlUp).Row With Sheets("foglio2") .Cells.Interior.ColorIndex = xlNone .Cells.Borders.LineStyle = xlNone End With sequenza = CLng(InputBox("SEQUENZA", "Dichiara limite sequenza")) If Sheets("foglio1").AutoFilterMode Then Selection.AutoFilter End If Range("A1").AutoFilter colore = 6 For n = 8 To 33 Set miaColl = New Collection Set AreaCol = Range(Cells(3, n), Cells(urig, n)) For Each Clx In AreaCol On Error Resume Next miaColl.Add Clx, CStr(Clx) On Error GoTo 0 Next For y = 1 To miaColl.Count Selection.AutoFilter Field:=n, Criteria1:=miaColl(y) Call TabellaTabelle Next y Selection.AutoFilter Field:=n Set miaColl = Nothing Set AreaCol = Nothing Next n Application.ScreenUpdating = True End Sub Sub TabellaTabelle() Dim ctr As Boolean, ctr2 As Boolean Dim miaColl As Collection conta = 0 For i = 8 To 33 Set Area = Range(Cells(3, i), Cells(urig, i)).SpecialCells(xlCellTypeVisible) If Area.Cells.Count > sequenza Then If Sheets("foglio1").AutoFilterMode Then With Sheets("Foglio1").AutoFilter.Filters(i) If .On Then crit = Area.Cells(1).Row Colfil = Area.Cells(1).Column End If End With Else: Exit Sub End If For Each Cl In Area If Cl.Interior.ColorIndex = xlNone Then conta = conta + 1 If Not ctr2 Then myrow = Cl.Row End If ctr2 = True Else If conta = sequenza Then Call copiaDati ctr = True ctr2 = False conta = 0 End If conta = 0 ctr2 = False End If Next End If conta = 0 ctr2 = False Next If ctr Then With Sheets("foglio2").Cells(crit, Colfil).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = colore colore = colore + 1 End With End If End Sub Sub copiaDati() colonna = Cl.Column With Sheets("foglio2") With .Cells(myrow, colonna).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = colore End With End With End Sub prova e fa sapere. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, innanzi tutto un più che stra-doveroso Grazie (credimi: è sincero e di cuore...) per tutto il lavorone che stai facendo per risolvere i miei problemi... Allora: ho provato le macro nel file di prova: sequenza 12 --> rileva correttamente il cod.6 in col.P e il cod.40 in col.Z sequenza 10 --> rileva correttamente il cod.6 in col.P e il cod.89 in col.I sequenza 10 --> rileva correttamente il cod.12 in col.K e il cod.66 in col.R sequenza 16 --> rileva correttamente il cod.6 in col.P e il cod.12 in col.AE sequenza 6 --> rileva correttamente il cod.12 in col.K e il cod.84 in col.AA, ma restituisce anche altre celle singole (nelle righe) e di colore differente Provando le macro su un mio sim.file le macro si piantano quasi alla fine dell'ultima macro restituendomi 'errore' nell'istruzione Sub copiaDati() colonna = Cl.Column With Sheets("foglio2") With .Cells(myrow, colonna).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = coloreEnd With End With End Sub Ecco il foglio2 dopo la "piantata motore" (termine aeronautico che non si vorrebbe mai pronunciare...) Di nuovo un Grazie immenso, buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
In volo Lascia lente le briglie del tuo ippogrifo, o a10n11, e sfrena il tuo volo dove più ferve l'opera dell'uomo. Però non ingannarmi con false immagini ma lascia che io veda la verità e possa poi toccare il giusto. Da qui, aetio, si domina la valle; ciò che si vede, è. Ma se l'imago è scarna al nostro occhio scendiamo a rimirarla da più in basso e planeremo in un galoppo alato entro il cratere ove gorgoglia il tempo. ...già nel 1972 il "Banco del Mutuo Soccorso" aveva presagio dei futuri accadimenti.
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve ho potuto solo ora verificare la macro. Ho individuato un errore che si verifica in una particolare circostanza (catasta che finisce nell'ultima cella della tabella) domani con calma faccio la correzione. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
lui49 ha scritto:In volo Lascia lente le briglie del tuo ippogrifo, o a10n11, e sfrena il tuo volo dove più ferve l'opera dell'uomo. Però non ingannarmi con false immagini ma lascia che io veda la verità e possa poi toccare il giusto. Da qui, aetio, si domina la valle; ciò che si vede, è. Ma se l'imago è scarna al nostro occhio scendiamo a rimirarla da più in basso e planeremo in un galoppo alato entro il cratere ove gorgoglia il tempo. ...già nel 1972 il "Banco del Mutuo Soccorso" aveva presagio dei futuri accadimenti. salve si deve interpetare la figura dell'Ippogrifo, seguendo Ariosto o BMS ? saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto:salve ho potuto solo ora verificare la macro. Ho individuato un errore che si verifica in una particolare circostanza (catasta che finisce nell'ultima cella della tabella) domani con calma faccio la correzione. saluti Giap Caro Amico mio, nessunissima fretta... Grazie infinite per tutto quello che stai facendo per me. Buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
a10n11 ha scritto:
salve si deve interpetare la figura dell'Ippogrifo, seguendo Ariosto o BMS ?
saluti Giap
Il mio ippogrifo non è certo la bestiaccia Ariostana. Il mio ippogrifo è spirito, è conoscenza, è vento del nord, è folle magia.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve con un po' di ritardo ti posto le modifiche effettuate nelle macro. ad un sommario controllo pare che vada prova tu in maniera più approfondita. saluti Giap Public Cl As Variant Public sequenza As Long Public myrow As Long Public crit As Variant Public urig As Long Public colore As Long Public colfil As Long Sub filtrasequenza() Sheets("foglio1").Select Application.ScreenUpdating = False If Sheets("foglio1").AutoFilterMode Then Selection.AutoFilter End If Range("A1").AutoFilter urig = Range("A" & Rows.Count).End(xlUp).Row With Sheets("foglio2") .Cells.Interior.ColorIndex = xlNone .Cells.Borders.LineStyle = xlNone End With sequenza = CLng(InputBox("SEQUENZA", "Dichiara limite sequenza")) colore = 7 For n = 8 To 33 Set miaColl = New Collection Set AreaCol = Range(Cells(3, n), Cells(urig, n)) For Each Clx In AreaCol On Error Resume Next miaColl.Add Clx, CStr(Clx) On Error GoTo 0 Next For y = 1 To miaColl.Count Selection.AutoFilter Field:=n, Criteria1:=miaColl(y) With Sheets("Foglio1").AutoFilter.Filters(n) If .On Then crit = Range(Cells(3, n), Cells(urig, n)).SpecialCells(xlCellTypeVisible).Cells(1).Row colfil = n End If End With Call TabellaTabelle Next y Selection.AutoFilter Field:=n Set miaColl = Nothing Set AreaCol = Nothing Next n Application.ScreenUpdating = True End Sub Sub TabellaTabelle() Dim ctr As Boolean, ctr2 As Boolean, CtrlCol As Boolean Dim miaColl As Collection conta = 0 For i = 8 To 33 Set area = Range(Cells(3, i), Cells(urig, i)).SpecialCells(xlCellTypeVisible) Lastfilt = Cells(Cells.Rows.Count, i).End(xlUp).Row If area.Cells.Count < sequenza Then Exit For For Each Cl In area If Cl.Interior.ColorIndex = xlNone Then conta = conta + 1 If Not ctr2 Then myrow = Cl.Row End If ctr2 = True If Cl.Row = Lastfilt Then GoTo dopo Else dopo: If conta = sequenza Then CtrCol = True Call copiaDati With Sheets("foglio2").Cells(crit, colfil).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = colore End With Else End If conta = 0 ctr2 = False End If Next conta = 0 ctr2 = False Set area = Nothing Next If CtrCol Then colore = colore + 1 End If CtrCol = False End Sub Sub copiaDati() colonna = Cl.Column With Sheets("foglio2") With .Cells(myrow, colonna).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = colore End With End With End Sub
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Grazie per il tuo preziosissimo aiuto... purtroppo dà lo stesso errore... nello stesso punto delle istruzioni... ecco in foglio2 cosa appare Buona notte, eZio Code:con un po' di ritardo ti posto....... (etc.)... nessun ritardo, ci mancherebbe altro!! ;))) Grazie assai...
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve l'errore che indichi presume che ti dica che hai superato il limite dei colori disponibili (in Excel sono 56) almeno fino alla mia versione. ho solo paura di pensare quanto è corposa la tua tabella. l'unica soluzione che mi viene in mente è quella di reinizializzare la variabile colore quando arriva a 56, oppure mettere un colore fisso. L'immagine qui sotto è il risultato (parziale) dell'elaborazione del file di prova con "catasta" 6 saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, in cuor mio ho pensato che la causa fosse quella... infatti vedevo che venivano usati più colori, con un errore sulla variabile .ColorIndex, ma in questa stupenda Materia di castronerie te ne dico già fin troppe e avevo paura di scriverlo... se non è un problema, se non ti dà particolare lavoro aggiunto, si potrebbe usare un colore fisso.... a me importa che mi vengano segnalate in modo esatto queste circostanze; l'uso di diversi colori è una raffinatezza in più che certo non guasta, ma non è di vitale importanza dato che il resoconto di foglio2 è riferito solo ad una delle altezze delle cataste e quindi non v'è pericolo di confusione... Grazie assai, e buona giornata (visto che sono le 05:20 è ancora lunga, e quindi ha un "Range" piuttosto esteso ahahahahah) eZio
p.s. le tabelle sono sì corpose... eccome!! :))) Quesito: nell'immagine che hai postato vedo in col.P il cod.6, in col.U cod.87, in col.AB cod.33, in col.AC cod.57 ---> perché sono soli? in una riga ci dovrebbero essere almeno 2 celle bordate: 1 del cod. filtrato, l'altra del cod. che, con quel codice filtrato, genera la catasta di altezza ricercata...
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve per impostare un solo colore (es. rosso) modifica la macro TabellaTabelle() come segue Sub TabellaTabelle() Dim ctr As Boolean, ctr2 As Boolean Dim miaColl As Collection conta = 0 For i = 8 To 33 Set area = Range(Cells(3, i), Cells(urig, i)).SpecialCells(xlCellTypeVisible) Lastfilt = Cells(Cells.Rows.Count, i).End(xlUp).Row If area.Cells.Count < sequenza Then Exit For For Each Cl In area If Cl.Interior.ColorIndex = xlNone Then conta = conta + 1 If Not ctr2 Then myrow = Cl.Row End If ctr2 = True If Cl.Row = Lastfilt Then GoTo dopo Else dopo: If conta = sequenza Then Call copiaDati With Sheets("foglio2").Cells(crit, colfil).Borders .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = colore End With Else End If conta = 0 ctr2 = False End If Next conta = 0 ctr2 = False Set area = Nothing Next End Sub Commenta: Quesito: nell'immagine che hai postato vedo in col.P il cod.6, in col.U cod.87, in col.AB cod.33, in col.AC cod.57 ---> perché sono soli? in una riga ci dovrebbero essere almeno 2 celle bordate: 1 del cod. filtrato, l'altra del cod. che, con quel codice filtrato, genera la catasta di altezza ricercata...
non lo vedi perchè l'immagine è parziale. (Con filtro 6 in colonna P criterio di filtro 6), la "catasta" inizia in cella U48 con il codice 45 quindi al di fuori dell'immagine. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, ora le macro non si piantano più... [ v'era forse qualche dubbio?? :)) ] tempo di lavoro delle macro: totale 3min. pensavo molto di più...!! Ma quanto sono belle!! Ma quanto son belle!!!! Poi più avanti, con calma ti chiederò alcune spiegazioni per capire il significato di alcune istruzioni... a10n11 ha scritto: non lo vedi perchè l'immagine è parziale. (Con filtro 6 in colonna P criterio di filtro 6), la "catasta" inizia in cella U48 con il codice 45 quindi al di fuori dell'immagine.
Ho un problema ehm... "contingente"... molto importante poiché le tabelle, come hai sottolineato, sono parecchio corpose: vi sarebbe la necessità di marcare in riga 48 anche la cella p48 del cod. 6 che ha generato la "catasta" di altezza 6. *** A questo punto penso che veramente mi mandi ehm... "in Papuasia"... e hai ragione!!*** Sei un Santo, oltre che un sommo conoscitore di questa meravigliosa Materia, che tanto mi affascina... Spesso mi sorge il dubbio- più che fondato- che dietro il tuo nick si nasconda in realtà uno degli inventori del VBA... ;) Grazie infinite, e buona giornata eZio
|
|
Guest |