Excel e gli applicativi Microsoft Office Gestire filtri senza risultati

LoginRegistrati
Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
  • Autore
    Articoli
  • #19610 Risposta

    Lucastar
    Partecipante

      Ciao a tutti,

      mi sto arrovellando per un problema al quale non riesco a trovare una soluzione efficace

      ho un elenco che verrà filtrato 4 volte e i relativi risultati copiati. l'ho realizzato col registratore di macro e funziona.

      il problema è che può capitare che non ci siano valori da filtrare. in questo caso la macro va in loop e si pianta oltre a generare un file enorme. c'è un modo semplice per evitarlo?

      io stavo pensando di fare un controllo preliminare prima filtrare i dati. se ci sono i valori da filtrare allora procede altrimenti salta al filtro successivo.

      ho provato con le funzioni countifs, match e find ma non sono stato in grado di farli funzionare.

      a compicare le cose (per me) è che ogni filtro ha 3 termini da cercare.

      allego parte del codice

      ' primo filtro
      Selection.AutoFilter
              ActiveSheet.Range("$A$1:$N$419").AutoFilter Field:=7, Criteria1:=Array("20" _
              , "23", "124"), Operator:=xlFilterValues
          Range("J4:K4").Select
          Range(Selection, Selection.End(xlDown)).Select
          Selection.Copy
          Sheets("Elenco passaggi").Select
          Range("A3").Select
          ActiveSheet.Paste
          Sheets("Master").Select
          ActiveWindow.SmallScroll Down:=-27
      
      'secondo filtro
                  ActiveSheet.Range("$A$1:$N$419").AutoFilter Field:=7, Criteria1:=Array("21" _
              , "125", "136"), Operator:=xlFilterValues   
          Range("J4:K4").Select
          Range(Selection, Selection.End(xlDown)).Select
          Application.CutCopyMode = False
          Selection.Copy
          Sheets("Elenco passaggi").Select
          Range("C3").Select
          ActiveSheet.Paste
          Sheets("Master").Select
      
      'terzo filtro
             ActiveSheet.Range("$A$1:$N$419").AutoFilter Field:=7, Criteria1:=Array("126" _
              , "128", "130"), Operator:=xlFilterValues      
          Range("J4:K4").Select
          Range(Selection, Selection.End(xlDown)).Select
          Application.CutCopyMode = False
          Selection.Copy
          Sheets("Elenco passaggi").Select
          Range("E3").Select
          ActiveSheet.Paste
          Sheets("Master").Select
          ActiveWindow.SmallScroll Down:=-18
      
      'quarto filtro
             ActiveSheet.Range("$A$1:$N$419").AutoFilter Field:=7, Criteria1:=Array("22" _
              , "25", "127"), Operator:=xlFilterValues     
          Range("J4:K4").Select
          Range(Selection, Selection.End(xlDown)).Select
          Application.CutCopyMode = False
          Selection.Copy
          Sheets("Elenco passaggi").Select
          Range("G3").Select
          ActiveSheet.Paste
      

      Grazie

      #19617 Risposta
      Luca73
      Luca73
      Partecipante
        16 pts

        Ciao 

        potresti allegare il file con il data base e la macro? eventualmente sostituisci i dati sensibili.

        Ciao

        Luca

        #19618 Risposta

        vecchio frac
        Senior Moderator
        • Sfida #1
          168 pts

          Lucastar ha scritto:

          oltre a generare un file enorme

          Questo non capisco come possa avvenire. Non ci sono migliaia e migliaia di record copiati o trasferiti.

          #19714 Risposta

          Lucastar
          Partecipante

            Scusate il ritardo nella risposta ma sono all'estero.

            ho ripulito il mio file e mantenuto solo la parte che interessa.

            per far partire la selezione occorre cliccare sul pulsante Master 1 e caricare il file prova.csv, che pure allego, dove volutamente o omesso alcuni dati (caso reale).

            come potete notare, in questo caso, impiega tanto a filtrare e il file diventa enorme (dopo la mia prova è diventato 8 MB!)

            durante l'utilizzo, questa funzione la faccio partire più volte (ci sono più fogli " Master" e relativi pulsanti)

            per ovviare al problema io ho inserito due flag (I e II, solitamente i gruppi che potrebbero non essere presenti) ma questo presuppone saper in anticipo e io vorrei che fosse riconosciuto in automatico

            Allegati:
            You must be logged in to view attached files.
            #19739 Risposta
            gibra
            gibra
            Partecipante
              10 pts

              Lucastar ha scritto:

              ho un elenco che verrà filtrato 4 volte e i relativi risultati copiati. l'ho realizzato col registratore di macro e funziona.

              Scusa, cosa significa: filtrato 4 volte?

              Devi chiarire sia lo 'scenario' sia lo 'scopo' di ciò che stai facendo e del perché, ovvero qual'è l'obiettivo finale da raggiungere.

              Dici che  'funziona' ma in realtà non funziona visto il problema.

               

              Ho guardato il file TEST.XLSM e ti dico subito che PRIMA va 'azzerato' e ripulito di tutti quei modulo vuoti che non c'entrano nulla e poi lo riposti senza dati e, come ho scirtto ospra, devi spiegare cosa dovrebbe fare la macro.

              Cerca di capire, ma indovinarlo è davvero difficile.  

              Ho copiato i dati dal tuo file ad un nuovo file. Risultato: 50 kb!
              Questo significa che il tuo file contiene un sacco di sporcizia e, a causa delle numerose celle unite, non si può ripulire con strumenti appositi, come questo:

              Excel Swiss Knife – take your Excel to the next level

              Cos’è Excel Swiss Knife

               

               

              #19741 Risposta

              Lucastar
              Partecipante

                L'operazione che devo fare è questa:

                da un file che può essere un csv oppure un txt devo ricavare da 1 a 4 colonne "pulite" da mettere nel foglio "Elenco passaggi" con questi criteri:

                - nel caso in cui nella cella A1 del file caricato ci sia scritto Generato e poi una data e un orario allora:

                - in A:B di elenco passaggi i valori J:K filtrati con 23, 124 e 20 nella colonna G del foglio "Master1" (dove ho caricato e incolonnato il file)

                - in C:D i valori 136, 125, 21

                - in E: F i valori 136, 130, 128

                - in G:H i valori 25, 127, 22

                 

                nel caso in cui nella cella B1 del file caricato ci sia scritto Digitech Master allora:

                - in A:B di elenco passaggi i valori B:C filtrati con 23, 108 e 20 nella colonna A del foglio "Master1"

                - in C:D i valori 136, 107, 21

                - in E: F i valori 136, 130, 128

                - in G:H i valori 25, 109, 22

                 

                Tu come faresti con strumenti standard di Excel 2007?

                #19769 Risposta
                gibra
                gibra
                Partecipante
                  10 pts

                  Lucastar ha scritto:

                  Tu come faresti con strumenti standard di Excel 2007?

                  Nel tuo caso io userei ADODB.

                  C'è un ottimo tutorial nel blog di @vecchio frac:
                  https://www.excelvba.it/forumexcel/excel-e-ado-scrittura-lettura-dati-da-tabelle-excel/

                  Una volta impostata la struttura del codice, basta cambiare la query per importare i dati dal file CSV.

                   

                  N.B. Però ti avverto che le celle unite sono nemiche di qualsiasi elaborazione VBA si faccia.
                  Meglio evitarle come la peste. Caso mai le si creano dopo l'elaborazione.

                   

                   

                   

                LoginRegistrati
                Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
                Rispondi a: Gestire filtri senza risultati
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni:



                vecchio frac - 2564 risposte

                albatros54
                albatros54 - 680 risposte

                patel
                patel - 585 risposte

                Marius44
                Marius44 - 480 risposte

                Luca73
                Luca73 - 476 risposte