Integrare più filtri in vba



  • Integrare più filtri in vba
    di 3alfredo3 (utente non iscritto) data: 29/03/2014 11:20:21

    Vorrei sapere se è possibile ...

    Ho un mini programma per gestire gli articoli e fare la fattura. Da una User seleziono la combobox1 il criterio per applicare un filtro ad una lista. Dopo aver applicato il filtro (questa è la riga che lo corica ".Range("A1").AutoFilter Field:=10, Criteria1:= _
    Me.ComboBox1.Value") mi viene restituito come risultato le righe che nella colonna "L" rispondono al criterio selezionato nella combobox1 e questo va bene.

    A questo punto avrei bisogno di perfezionare il filtro:Ho aggiunto una nuova combobox4 dovrei filtrare i dati risultanti dal primo filtro applicando alla colonna "C" il criterio selezionato nella combobox4 e, se non inserisco nulla nella combobox4 deve lasciare i risultati del primo filtro. Per finire dovrei applicare al risultato ottenuto un ulteriore filtro per un periodo es.: dal 25/03/2014 al 27/03/2014.

    Per farla semplice un esempio: lo faccio manualmente in excel cosi: Menu Dati/Filtro/filtro automatico poi nel foglio seleziono la freccietta sulla colonna "L" e metto il primo criterio, poi vado alla freccia sulla colonna "C" e metto il secondo criterio e infine sulla freccia colonna "B" seleziono "personalizza" e scelgo le date per il margine che mi interessa.

    Siccome il codice è molto lungo e complesso (fa anche altre funzioni), in alternativa mi andrebbe bene anche avere solo un codice che mi permetterebbe di applicare i tre filtri su un foglio excel estraendo i criteri da una User che creo ad hoc!

    Accetto consigli e... so di aver fatto un po di confusione!

     
    Option Explicit
    Private shAutori As Worksheet
    Private shOperatore As Worksheet
    Private shSequenza As Worksheet
    Private shRaggruppa As Worksheet
    
      Private shArticoli As Worksheet 'Aggiunto per popolare combobox4 **
    
    Private lRigaAut As Long 'riga autore
    Private lRigaOp As Long 'riga operatore
    
    
    Private Sub UserForm_Initialize()
           Dim lng As Long
        With ThisWorkbook
            Set shAutori = .Worksheets("elenco")
            Set shOperatore = .Worksheets("RagioneSociale")
            Set shSequenza = .Worksheets("ArchivioStatistiche")
            Set shRaggruppa = .Worksheets("Raggruppa")
    
              Set shArticoli = .Worksheets("Articoli") 'Aggiunto per popolare combobox4  **
    
    '**Ho Aggiunto fin qui per popolare combobox4 (dal Foglio "Articoli" colonna "A") ma 
    'da qui in poi non so come procedere per popolare la combo
    
        End With
           lRigaAut = shAutori.Range("A" & Rows.Count).End(xlUp).Row
        lRigaOp = shOperatore.Range("A" & Rows.Count).End(xlUp).Row
           For lng = 2 To lRigaAut
            Me.ComboBox1.AddItem shAutori.Cells(lng, 1).Value
        Next
           For lng = 2 To lRigaOp
            Me.ComboBox2.AddItem shOperatore.Cells(lng, 1).Value
        Next
       End Sub
    
    Private Sub ApplicaFiltro_Click()
          
        Dim lng As Long
        Dim rng As Range
        Dim lRiga As Long
       
        Application.ScreenUpdating = False
       
        ThisWorkbook.Worksheets.Add ' aggiungo un foglio
    On Error Resume Next
        ActiveSheet.Name = "Pippo"
        If Err.Number = 1004 Then
            Application.DisplayAlerts = False
            MsgBox "(1)Movimento gia eseguito: Contatta Alfredo!"
                   ActiveSheet.Delete ' lo elimino
            Application.DisplayAlerts = True
            Exit Sub
        End If
    On Error GoTo 0
       
    On Error GoTo RigaErrore
    
        With shAutori ' carico nelle due combobox le liste
            For lng = 2 To lRigaAut
                If .Range("A" & lng).Value = _
                    Me.ComboBox1.Value Then
                    .Range("A" & lng & ":G" & lng).Copy _
                        Destination:=ActiveSheet.Range("A1")
                End If
            Next
        End With
     
        With shOperatore
            For lng = 2 To lRigaAut
                If .Range("A" & lng).Value = _
                    Me.ComboBox2.Value Then
                    .Range("A" & lng & ":G" & lng).Copy _
                        Destination:=ActiveSheet.Range("A2")
                End If
            Next
        End With
    
       With shSequenza ' dentro al foglio statistiche
            Application.ScreenUpdating = False
            .Range("A1").AutoFilter Field:=10, Criteria1:= _
                Me.ComboBox1.Value 'applico il filtro usando il valore della combo
    
    '****A QUESTO PUNTO VORREI POTER PERFEZIONARE IL FILTRO 
    '****AGGIUNGENDO IL CRITERIO SELEZIONATO NELLA COMBOBOX4 E SCEGLIERE UN PERIODO 
           '(FILTRO PER DATA SULLA COLONNA "B")
    
             Unload Me
         Application.Run "CopiaRigheStatistica" 'dopo applica filtro copia le righe
        If Sheets("Pippo").Range("A16") > 0 Then
        Sheets("Pippo").Select
        Application.Run "TestataStatisticaRaggruppa"
        
        Else
        Application.DisplayAlerts = False
        MsgBox "(2)Nessun risultato Ottenuto"
        Sheets("Pippo").Delete
        Sheets("PiePagina").Select
        Range("A21:L21").Select
        Selection.Copy
        Sheets("Archivio").Select
        Range("A1").Select
        ActiveSheet.Paste
        Selection.AutoFilter
        Sheets("Comandi").Select
        Raggr_User.Show
        
        Exit Sub
    End If
        End With
        
    RigaChiusura:
    Exit Sub
        Application.ScreenUpdating = True
        shSequenza.Range("A1").AutoFilter
    RigaErrore:
        If Err.Number = 1004 Then
            Application.DisplayAlerts = False
            MsgBox "(3)Nessun risultato Ottenuto"
            ActiveSheet.Delete
            Application.DisplayAlerts = True
        Else
            MsgBox Err.Number & vbNewLine & Err.Description
        End If
        Resume RigaChiusura
     
    End Sub
    
    


  • Rinuncio
    di 3alfredo3 (utente non iscritto) data: 31/03/2014 18:59:04

    Lascio stare, è troppo complesso. Lo continuo a fare a mano, fino a quando non trovo qualcosa di nuovo!
    Grazie lo stesso a tutti!!!



  • di Vecchio Frac data: 31/03/2014 20:24:03

    Non ho capito, rinunci perchè pensi che nessuno sia in grado di aiutarti, rinunci perchè non puoi aspettare che qualcuno ti dia un consiglio, o rinunci perchè stai cercando qualcosa di nuovo (ma non spieghi cosa)? ^_^

    (p.s. se una cosa si può fare a mano allora è quasi sempre possibile automatizzarla)





  • di 3alfredo3 (utente non iscritto) data: 01/04/2014 11:27:58

    Scusa "Vecchio frac" (complimenti per il nik se è riferito a Modugno) Ho scelto un metodo piu semplice, mi stavo complicando la vita e ho trovato la soluzione nel metodo diverso: Faccio lanciare due macro autonome dal codice in questione dopo "Unload Me". Una mi filtra la colonna "C" e l'altra mi filtra le date. Risolto ... la notte porta consiglio!

    Grazie per l'interessamento
    Alfredo