Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Problema filtraggio dati con macro

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Problema filtraggio dati con macro

Postdi marte1503 » 05/02/23 10:35

Buon giorno Anthony,
non tanto tempo fa mi hai creato questa macro da inserire nel foglio, che sfruttando 2 criteri immessi in 2 differenti celle restringe i risultati accelerando la ricerca del dato utile.
L'ho inserita all'interno di un'altra macro e ho aggiunto qualche piccolissima modifica. Ri-posto solo il pezzetto per farti capire di cosa sto parlando
Codice: Seleziona tutto
ActiveSheet.ListObjects("Tabella2133").Range.AutoFilter Field:=18
If Target.Address = "$F$3" Then
    Range("F5,D9").ClearContents
    If Target.Value <> "" Then
        ActiveSheet.ListObjects("Tabella2133").Range.AutoFilter Field:=4, Criteria1 _
            :=Target.Value
    Else
        ActiveSheet.ListObjects("Tabella2133").Range.AutoFilter Field:=4
    End If
ElseIf Target.Address = "$F$5" Then
    If Target.Value <> "" Then
        ActiveSheet.ListObjects("Tabella2133").Range.AutoFilter Field:=7, Criteria1 _
            :=Target.Value
    Else
        ActiveSheet.ListObjects("Tabella2133").Range.AutoFilter Field:=7
    End If
End If


Nel Foglio dove l'ho inserita funziona perfettamente perchè il primo criterio (in F3) trova il Nome del Cliente che mi serve filtrando colonna 4 e il secondo Valore (in F5) restringe ancora di più il risultato, legando il Nome Cliente al Numero d'Ordine in Colonna7, dandomi solo le macchine legate a quel numero d'Ordine.


In un altro foglio simile ho manipolato questa macro per riadattarla ai nuovi criteri, ma non funziona correttamente..
E' un po' complicato da spiegare, spero di essere chiaro nell'esposizione, comincio a postare la macro poi provo a spiegare..

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Sheets("Foglio8").Unprotect
 ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=18
 ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=5
 ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4
 ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=2
If Target.Address = "$F$3" Then
    Range("F5,D9").ClearContents
    If Target.Value <> "" Then
    ActiveSheet.Unprotect
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4, Criteria1 _
            :=Target.Value
    Else
    Sheets("Foglio8").Unprotect
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4
    End If
ElseIf Target.Address = "$F$5" Then
Range("D9").ClearContents
    If Target.Value <> "" Then
    ActiveSheet.Unprotect
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=2, Criteria1 _
            :=Target.Value
    Else
    ActiveSheet.Unprotect
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=2
    End If
End If
Sheets("Foglio8").Protect
Application.ScreenUpdating = True
End Sub


- Inserendo il Nome Cliente MARIO ROSSI in F3, la tabella si filtra correttamente restituendomi tutte le righe dove compare il Nome MARIO ROSSI.

- F5 questa volta, è la cella dove inserisco il Modello della macchina presente in Colonna2 (modello che ritrovo svariate volte all'interno della mia Tabella, perchè in questo caso i modelli hanno tutti lo stesso nome (poniamo Audi A6, il problema è che a me interessa trovare soltanto LE Audi A6 di MARIO ROSSI) , attualmente invece mi visualizza anche LE Audi A6 di altri clienti...

Cosa devo fare?

Spero di essere stato sufficientemente chiaro :undecided:
Grazie per l'aiuto
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Sponsor
 

Re: Problema filtraggio dati con macro

Postdi Anthony47 » 05/02/23 19:03

Il problema e' che qualsiasi WorksheetChange rimuove i filtri...

Prova con questa versione DA ADATTARE:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'Application.ScreenUpdating = False
Me.Unprotect
Application.EnableEvents = False
If Target.Address = "$N$1" Or Target.Address = "$O$1" Then                  '*****
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=18
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=5
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=2
       
    If Target.Address = "$N$1" Then Range("F5,D9").ClearContents            '*****
    If Target.Address = "$O$1" Then Range("D9").ClearContents               '*****
    If Range("N1").Value <> "" Then                                         '*****
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4, Criteria1 _
            :=Range("N1").Value                                             '*****
    End If
    If Range("O1").Value <> "" Then                                         '*****
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4, Criteria1 _
            :=Range("O1").Value                                             '*****
    End If
End If
Application.EnableEvents = True
Me.Protect
Application.ScreenUpdating = True
End Sub

L'adattamento riguarda le celle da me usate N1 e O1 (invece che F3 ed F5); devi pertanto adattare le righe marcate **** inserendo i tuoi indirizzi invece che i miei

Prova...
Avatar utente
Anthony47
Moderatore
 
Post: 18738
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Problema filtraggio dati con macro

Postdi marte1503 » 06/02/23 07:13

Ciao Anthony, grazie.
Ho provato la tua macro e ho aggiornato i campi contrassegnati.

Ho visto che

- il primo criterio (Filtra Nome tramite Cella F3) funziona

- quando inserisco il secondo criterio (tramite Cella F5), a differenza di prima la Tabella (correttamente) visualizza esclusivamente il Nome Cliente impostato, ma l'Informazione Modello
viene completamente ignorata dalla macro, come se nemmeno riempissi CellaF5

- con la precedente versione di macro poi, se provavo a inserire il Modello, lasciando vuoto il criterio Cliente,
avevo la possibilità di vedere il totale vendite per quel modello includendo tutti i Clienti che l'hanno acquistata (funzione che non mi dispiaceva affatto..)
Ora se provo a inserire solo il modello omettendo il Cliente, la tabella si riduce a zero...

Forse non è nemmeno possibile ottenere entrambi i risultati che mi aspetto utilizzando soltanto queste 2 celle

riepilogando vorrei avere queste 2 possibilità:

- riuscire a vedere il totale di un determinato modello escludendo il criterio Nome Cliente
- riuscire a vedere il totale di un determinato modello per un determinato Cliente


Se pensi che la cosa sia troppo complessa o addirittura non fattibile rivedo un po' il layout del mio foglio e aggiro l'ostacolo.. (avrei già qualche idea)


Posto la Macro così come l'ho inserita nel mio Foglio.

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)

Sheets("Foglio8").Unprotect
Sheets("Foglio8").Select
Area = "F3"     '<<< l'area da convertire in maiuscolo
Set inArea = Application.Intersect(Target, Range(Area))
If Not inArea Is Nothing Then
    Application.EnableEvents = False
    For Each myC In inArea
        If myC.Value <> "" Then
            myC.Value = UCase(myC.Value)
        End If
    Next myC
    Application.EnableEvents = True
End If


 Me.Unprotect
Application.EnableEvents = False
If Target.Address = "$F$3" Or Target.Address = "$F$5" Then                  '*****
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=18
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=5
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4
    ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=2
       
    If Target.Address = "$F$3" Then Range("F5,D9").ClearContents            '*****
    If Target.Address = "$F$5" Then Range("D9").ClearContents               '*****
    If Range("F3").Value <> "" Then                                         '*****
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4, Criteria1 _
            :=Range("F3").Value                                             '*****
    End If
    If Range("F5").Value <> "" Then                                         '*****
        ActiveSheet.ListObjects("Tabella21334").Range.AutoFilter Field:=4, Criteria1 _
            :=Range("F3").Value                                             '*****
    End If
    Application.EnableEvents = True
End If

Me.Protect

End Sub



Grazie
Buona giornata
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como

Re: Problema filtraggio dati con macro

Postdi Anthony47 » 07/02/23 11:46

Mi devi dire a quale foglio e' applicata la Sub Worksheet_Change e su quale foglio si trova la Tabella, altrimenti giriamo a vuoto

Se la tabella si trova su foglio diverso da quello a cui la Sub Worksheet_Change si riferisce, sei sicuro che sia necessario filtrare la tabella nello stesso momento in cui cambi F3 o F5, o l'importante e' che quando vai alla tabella la trovi coi filtri applicati?
Avatar utente
Anthony47
Moderatore
 
Post: 18738
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Problema filtraggio dati con macro

Postdi marte1503 » 08/02/23 08:24

Anthony, la tua macro funziona che è una meraviglia!
Sono io che dopo una certa ora non funzionò più...
Grazie!
Ciao
marte1503
Utente Senior
 
Post: 232
Iscritto il: 08/01/10 20:43
Località: Como


Torna a Applicazioni Office Windows


Topic correlati a "Problema filtraggio dati con macro":


Chi c’è in linea

Visitano il forum: Nessuno e 25 ospiti