Filtro su cella dinamica



  • Filtro su cella dinamica
    di Ale (utente non iscritto) data: 13/03/2015 15:59:43

    Buongiorno,
    spero che qualcuno di voi mi riesca ad aiutare.
    ho questo problema, dovrei filtrare(tramite macro vba) i dati presenti in una colonna di Excel, e fin qui nulla di particolare, la parte che mi stà creando problemi è legata al fatto che la colonna specifica non si trova sempre nella stessa posizione.
    Avevo pensato di unire il cerca con la funzione filtro ma non sono riuscito a risolvere.
    Come posso ovviare il problema.
    grazie
    Ale

    qui un' estratto di quello che avevo composto, il problema come scrivevo e che non sempre il Field 25 corrisponde al dato cercato...


     
    Selection.Find(What:="data prossima", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
        ActiveSheet.Range("$A$1:$AK$5823").AutoFilter Field:=25, Criteria1:=xlFilterNextWeek, Operator:=xlFilterDynamic



  • di Vecchio Frac data: 13/03/2015 16:13:34

    In un database non è raccomandabile che una colonna (un campo) si sposti.
    Non ho idea di come sia strutturato il tuo file nè che esigenze o dinamiche di input ci siano dietro.
    Di solito per risolvere questo problema si usano i nomi di range definiti, cioè assegni un nome alla colonna (o alla cella) 25, qualunque cosa voglia dire "colonna 25" (etichetta? posizione?), e poi sei a posto perchè anche se inserisci o cancelli colonne quel range viene identificato dal suo nuovo nome.





  • di Ale (utente non iscritto) data: 13/03/2015 16:35:13

    il file Excel viene esportato da un programma, il problema e che non sempre i valori esposti nella colonna identificata come "data prossima proposta" sono nella colonna Z a volte possono essere presenti nella colonna Y o in altre colonne. io avrei bisogno di automatizzare il filtro della colonna "Data Prossima Proposta" ma non so come identificare la colonna da filtrare dato che le sue coordinate variano da estrazione a estrazione...scusate se prima non avevo espresso chiaramente il problema....io avevo pensato a fare in modo che il sistema mi cercasse la cella che riportasse la dicitura "Data Prossima Proposta" e una volta trovata mi fornisse le coordinate della stessa per poi sulle coordinate trovate applicare il filtro...
    e sin qui a logica ci potrebbe stare non so però come impostare il tutto in VBA :(



  • di alfrimpa data: 13/03/2015 18:46:59

    Ciao Ale

    Prova ad utilizzare la function sottostante

    Sul foglio Excel in cui vuoi fare la ricerca scrivi in una cella "Data Prossima Proposta" supponiamo A1 e supponiamo che la zona di ricerca sia A3:H1000 in altra cella potrai scrivere

    =TrovaColonna(A3:H1000;A1)

    e ti verrà restituito il numero della colonna ove è presente "Data Prossima Proposta" (1 per la A, 2 per la B ecc.).

    Tale funzione può essere utilizzata all'interno di altro codice VBA memorizzando il suo valore in una variabile ed utilizzare questa come criterio di filtraggio dati.

    Spero di essere stato chiaro.

    Alfredo

     
    Function TrovaColonna(Tabella_Dati As Range, Colonna As Variant) As Variant
        If Colonna = "" Then
            TrovaColonna = ""
         Exit Function
        End If
        TrovaColonna = Tabella_Dati.Find(Colonna, LookAt:=xlWhole).Column
    End Function
    






  • di alfrimpa data: 13/03/2015 18:49:23

    Poi magari, per dare risposte più mirate occorrerebbe avere il file nella forma in cui ti arriva (la struttura) ed uno come tu vorresti che fosse

    Alfredo





  • di Ale (utente non iscritto) data: 13/03/2015 19:04:57

    Ciao Alfredo, Grazie per l'aiuto appena arrivo a casa provo sicuramente il tuo suggerimento...
    Il file contiene una serie di informazioni
    Colonna a nome cliente
    Colonna b codice cliente
    Ecc ecc
    Sino ad arrivare a colonna az
    Di tutti questi dati ho bisogno di estrarre tutti i clienti che risultano in lavorazione settimana prossima(filtro) per poi copiare solo alcune colonne su di un nuovo folder e incrociare il risultato ottenuto con i dati di un'altro file in modo da classificare ogni singolo cliente



  • di alfrimpa data: 14/03/2015 16:24:01

    Ciao Ale

    Questo sotto è il banale codice che viene fuori dalla registrazione di una macro che mette un filtro su un database ed estrae dei dati.

    Come vedi c'è un campo Field che deve essere valorizzato con un valore numerico e sta ad indicare quale campo del database si debba utilizzare per l'estrazione dei dati.

    Quindi con la funzione che ti ho dato prima puoi memorizzare in una variabile il valore del campo che ti interessa ed utilizzare questa come parametro da passare all'argomento Field; in questo modo anche se la posizione della colonna "Data Prossima Proposta" dovesse cambiare per l'estrazione dati non ci dovrebbero essere problemi.

    Spero di essere stato chiaro ed, ovviamente, la cosa va testata sul campo.

    Alfredo
     
    Da così
    
    ActiveSheet.Range("$A$1:$F$529").AutoFilter Field:=6, Criteria1:="3"
    
    a così
    
    ActiveSheet.Range("$A$1:$F$529").AutoFilter Field:=variabile, Criteria1:="3"






  • di alfrimpa data: 14/03/2015 17:38:35

    Ale se alleghi un piccolo estratto del tuo file possiamo fare delle prove

    Alfredo





  • di Ale (utente non iscritto) data: 18/03/2015 15:14:45

    Ciao Alfredo,
    ancora grazie per il tuo aiuto, ho provato ad inserire le due funzioni che mi suggerivi ma senza esito positivo, sicuramente per mio errore dato che sono neofita nel campo....da tuo suggerimento ti allego un'estratto del file, come ti dicevo in precedenza l'unico ostacolo che incontro è il filtro su colonna con intestazione data prossimo slot per il resto ho verificato e funziona correttamente....
    spero si riesca a risolvere l'arcano....
    ps avevo provato anche ad inserire una formula nel file che mi cercasse la cella con il valore "data prossima proposta" e mi fornisse la sua coordinata...pensavo fosse una strada alternativa da poter sfruttare ma ho riscontrato due inconvenienti: il primo che se la ricerca veniva posta sino alla colonna I la formula funzionava correttamente se successiva invece no, il secondo problema invece e che non sapevo poi come poter tramite vba impostare il comando affinchè prendesse il valore contenuto nella cella di ricerca.....
    volevo allegarvi un estratto del file come da voi suggerito ma non ho trovato nessun campo dove poter effettuare l'upload





  • di alfrimpa data: 18/03/2015 15:20:59

    Ciao Ale

    Per caricare il file c'è il pulsante Allega File

    Ora sono fuori per cui prima di domani non posso vederlo

    A domani

    Alfredo





  • di Ale (utente non iscritto) data: 18/03/2015 16:28:49

    Ciao Alfredo,
    ti ringrazio,ho uplodato il file o anche risolto il discorso della formula che mi restituisse le coordinate della cella.
    la formula che ho impostato è la seguente:

    =INDIRIZZO(1;CONFRONTA("data prossima proposta";A1:AK1;0))

    in questo modo ho le coordinate della cella ogni qual volta cambia posizione.
    quello che ora non so come fare è far si che tramite vba la macro mi applichi il filtro sulla colonna corrispondente al risultato della formula.....
    suppongo che se si possa dire di applicare il filtro al Field=valore della formula si risolva il tutto.....attendo ad ogni modo con ansia un tuo feedback
    ciao e grazie
    Ale



  • di alfrimpa data: 20/03/2015 16:40:27

    Ciao Ale e perdona il ritardo nella risposta.

    Potresti fare così

    1) Su un altro foglio crea una tabella denominata TabellaColonne ed in colonna A metterai le lettere a A ad AZ ed in colonna B numeri da 1 a 52; in tal modo, con la formula sottostante ricaviamo il numero della colonna in cui è presente ("data prossima proposta".

    2) Supponiamo che inserisci tale formula nella cella AZ1 in VBA si può scrivere il codice che riporto sotto

    Prova e fai sapere

    Alfredo
     
    =VALORE(CERCA.VERT(STRINGA.ESTRAI(INDIRIZZO(1;CONFRONTA("data prossima proposta";A1:AK1;0));2;1);TabellaColonne;2;FALSO))
    
    Dim campo as Integer
    campo = Range("AZ1").Value
    
    ActiveSheet.Range("$A$1:$AK$5843").AutoFilter Field:=campo, Criteria1:="3"






  • di alfrimpa data: 20/03/2015 16:45:41

    Ti ho riallegato il tuo file

    Alfredo





  • di ale (utente non iscritto) data: 02/04/2015 23:34:19

    Ciao Alfredo,
    scusami se non ti ho risposto in questi giorni ero fuori sede...
    non riuscendo ad applicare l'originale progetto ho trovato un'espediente forse meno professionale ma che ad ogni modo mi restituisce quanto mi serviva....
    alla fine ho impostato una semplice funzione cerca in modo che il puntatore si andasse a posizionare nella cella in cui era presente il valore da me cercato, una volta fatto ciò gli ho chiesto di applicare il filtro secondo determinati criteri.
    allego il codice VBA nel caso potesse servire....ovviamente nel mio caso funziona dato che il valore cercato è univoco nel caso non fosse così penso si possa ovviare con un semplice find next...
    ad ogni modo grazie infinite per il supporto
     
    Sub Filtra()
    
    Cells.Find(What:="data prossima proposta", After:=ActiveCell, LookIn:= _
            xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext _
            , MatchCase:=False).Activate
                Dim campo As Integer
    campo = ActiveCell.Column - ActiveCell.End(xlToLeft).Column + 1
    ActiveCell.AutoFilter Field:=campo, Criteria1:=xlFilterNextWeek, Operator:=xlFilterDynamic
                
    End Sub