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

[Excel 2007]- Macro per dati filtrati Opzioni
aetio
Inviato: Friday, September 10, 2010 3:19:18 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Sto cercando di velocizzare con delle macro alcuni passaggi frequenti che devo fare lavorando sulle mie ormai famose tabelle :) Alcune riesco a costruirmele adattando i moduli che il carissimo a10n11 mi ha magistralmente “confezionato” ad hoc, ma altre non riesco proprio a scriverle, anche usando il registratore di macro del programma, a causa della variabilità dell’estensione del range a seguito di filtratura dati che non comprendono un numero fisso di righe…
In sostanza vorrei, usando una sola macro che concateni 3 operazioni (come ho visto nella macro della tabella Pivot, che prima veniva impartito un compito ad un confronto di tabelle e poi veniva ordinata l’edizione vera e propria della tabella Pivot), far fare al programma un percorso di questo tipo, vedere le foto delle tabelle:




Supponendo che in queste tabelle di Foglio1, che per comodità chiamerò tabella1 e tabella2, io debba filtrare il dato contenuto in cella C2 (in questo caso specifico il valore 32), che sarà una posizione fissa da implementare nel testo della macro, e successivamente mantenendo in quel modo filtrata la tabella debba filtrare anche il dato contenuto in cella J2 (in questo caso specifico il valore 110- anche questa sarà una posizione fissa da implementare nel testo della macro) ottenendo in questo esempio questa situazione:




Dovrei quindi copiare/ incollare in Foglio2 l’intervallo di tabella1 così ottenuto, includendo i dati di col.A e col.B




Risultato: in foglio2 ho l'intervallo A2:I27 (si badi bene: filtrato)

La mia difficoltà sta nel fatto che gli intervalli variano di volta in volta, a seconda della filtratura dei dati di col.C e di col.J, e quindi il numero di righe da selezionare per la copiatura in Foglio2 non è mai lo stesso…
E’ una situazione fattibile per le “sante” macro? Mi sarebbe di enorme aiuto la dima, che adatterei a seconda delle circostanze...
Grazie infinite anticipate per l’enorme pazienza…
Buona giornata
eZio

EDIT: è ovvio che nelle mie tabelle di 4700 e rotte righe le colonne sono ben più lunghe... :))
Sponsor
Inviato: Friday, September 10, 2010 3:19:18 PM

 
a10n11
Inviato: Friday, September 10, 2010 4:33:24 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
il succo di tutto il discorso è come copiare un range filtrato limitatamente alle colonne A:I?

prova questa:

Sub copiafiltrato()
Set area = Range("a2", Range("I2").End(xlDown)).SpecialCells(xlCellTypeVisible)
area.Copy Destination:=Sheets("foglio2").Range("a1")
Set area = Nothing
End Sub

saluti
Giap

aetio
Inviato: Friday, September 10, 2010 5:17:33 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
si quella sub è l'ultima parte del succo :))
Ho provato a metter giù questo

Sub filtra1()
Range("C2").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1", Range("$AI$1").End(xlDown)).AutoFilter Field:=3, Criteria1:="C2", _
Operator:=xlAnd
Range("J2").Select
ActiveSheet.Range("$A$1", Range("$AI$1").End(xlDown)).AutoFilter Field:=10, Criteria1:="J2", _
Operator:=xlAnd
End Sub


ma la filtratura arriva alla riga successiva all'ultima riga scritta, e il tutto ovviamente resta "in bianco" :)
Molto probabilmente anziché scrivere un generico
Criteria1:="C2"
e altrettanto generico
Criteria1:="J2"
dovrei scrivere qualcos'altro di più preciso, in termini di linguaggio vba....... almeno credo...... che precisi "qualunque valore che è scritto in C2 e in J2, ma quel preciso valore (che ovviamente varia di volta in volta, di fisso rimane il riferimento di cella)"

Grazie per l'attenzione
Saluti
eZio
a10n11
Inviato: Friday, September 10, 2010 6:56:27 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve

al limite la seguente riga:

ActiveSheet.Range("$A$1", Range("$AI$1").End(xlDown)).AutoFilter Field:=3, Criteria1:="C2"

andrebbe scritta così:
ActiveSheet.Range("$A$1", Range("$AI$1").End(xlDown)).AutoFilter Field:=3, Criteria1:=Range("C2").value
devi indicare un valore di cella e non un indirizzo di cella.


Ma la domanda che mi pongo... devi sempre e solo applicare il filtro solo per il valore delle celle C2 e J2 ??
Se l'operazione di fitro è fatta per valori variabili, il codice non ha alcun senso.
saluti
Giap





aetio
Inviato: Friday, September 10, 2010 7:14:42 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
a10n11 ha scritto:
Ma la domanda che mi pongo... devi sempre e solo applicare il filtro solo per il valore delle celle C2 e J2 ??
Se l'operazione di fitro è fatta per valori variabili, il codice non ha alcun senso.

affermativo: in questa dima le "costanti", anche se qui il termine è usato impropriamente, sono C2 e J2 che variano di valore, ma i valori contenuti in esse devono essere sottoposti a filtro...
Esempio: guardando la tabella di cui sopra se essa partisse dal Set.72'75, anziché dal Set.72'81, i valori da filtrare sarebbero 70 e 81... la macro sarebbe la stessa... i valori scritti nelle celle A2 e J2 sarebbero diversi, ma sempre le celle A2 e J2 dovrebbero essere filtrate con i valori scritti in esse...
Grazie e buona serata
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.