Integrare più filtri in vba
Hai un problema con Excel? 
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
Vuoi Approfondire?