Condividi:        

Excel: un altro mega-filtro supersonico

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

Excel: un altro mega-filtro supersonico

Postdi fantina » 07/12/10 14:24

Ciao!..... lo so che non è bello farsi correggere dei lavori (magari fatti male) ma io ci provo...
La mia lunghissima tabella in excel ha quattro colonne di dati da filtrare, O, R, U, X
Sopra ai dati ho quattro chiavi di ricerca: N6, N8, X6, X8
in più ho un tastino in U7 con il comando Clear all filters.
Succede che quando vado a digitare la parola chiave dentro alla cella predisposta, la digitazione salta alla cella A10 (10 è la riga che contiene tutte le etichette delle colonne): non c'è verso, mettiamo che voglia cercare il prodotto "computer" nella cella destinata alla chiave di ricerca ci va solo la "c", il resto salta a scrivere di là. Premesso che il lavoro l'ho ereditato e quindi non sono io l'autore della macro, è più semplice per voi darmi la macro giusta da tutto inizio? Io intanto la copio qui sotto.... a me sembra terribile.... :-?

Codice: Seleziona tutto
Option Explicit
Dim wsMaster As Worksheet
Dim MyList() As String
Dim iRow As Integer
Const cSegCol As Integer = 2, cFamCol As Integer = 4, cClaCol As Integer = 6, cBriCol As Integer = 7

   
Private Sub btnClearAll_Click()
 If AutoFilterMode = True Then Selection.AutoFilter
  If AutoFilterMode = True Then Selection.AutoFilter
        Range(Cells(10, 1), Cells(10, 32)).AutoFilter
        cboSeg.Value = ""
        cboFam.Value = ""
        cboCla.Value = ""
        cboBri.Value = ""
        Selection.AutoFilter Field:=15
        Selection.AutoFilter Field:=18
        Selection.AutoFilter Field:=21
        Selection.AutoFilter Field:=24
End Sub

Private Sub cboBri_Change()
On Error Resume Next
   
    ActiveSheet.Cells(10, 1).Select
    ActiveSheet.Cells(10, 1).Select
    If (ActiveSheet.cboBri.Text = "") Then
        Selection.AutoFilter Field:=24
    Else
       Selection.AutoFilter Field:=24, Criteria1:=ActiveSheet.cboBri.Text
    End If
   
     
End Sub

Private Sub cboCla_Change()
On Error Resume Next
   
    ActiveSheet.Cells(10, 1).Select
    If (ActiveSheet.cboCla.Text = "") Then
        Selection.AutoFilter Field:=21
    Else
       Selection.AutoFilter Field:=21, Criteria1:=ActiveSheet.cboCla.Text
    End If

    Selection.AutoFilter Field:=24
     
     Remplir_Combo Sheet11, ActiveSheet.cboBri, 24, 11
      Trie (cboBri)

     
End Sub

Private Sub cboFam_Change()
On Error Resume Next
   
    ActiveSheet.Cells(10, 1).Select
    If (ActiveSheet.cboFam.Text = "") Then
        Selection.AutoFilter Field:=18
    Else
        Selection.AutoFilter Field:=18, Criteria1:=ActiveSheet.cboFam.Text
    End If
   
    Selection.AutoFilter Field:=21
    Selection.AutoFilter Field:=24
     
      Remplir_Combo Sheet11, ActiveSheet.cboCla, 21, 11
       Remplir_Combo Sheet11, ActiveSheet.cboBri, 24, 11
          Trie (cboCla)

End Sub

Private Sub cboSeg_Change()
On Error Resume Next

    ActiveSheet.Cells(10, 1).Select
    If (ActiveSheet.cboSeg.Text = "") Then
        Selection.AutoFilter Field:=15
    Else
        Selection.AutoFilter Field:=15, Criteria1:=ActiveSheet.cboSeg.Text
    End If
   
    Selection.AutoFilter Field:=18
    Selection.AutoFilter Field:=21
    Selection.AutoFilter Field:=24
    Remplir_Combo Sheet11, ActiveSheet.cboFam, 18, 11
    Remplir_Combo Sheet11, ActiveSheet.cboCla, 21, 11
    Remplir_Combo Sheet11, ActiveSheet.cboBri, 24, 11
    Trie (cboFam)
End Sub

Sub Filter(Col As Integer)
    If cboSeg.Value <> "" Or cboFam.Value <> "" Or _
        cboCla.Value <> "" Or cboBri.Value <> "" Then
        Cells(11, 1).Select
        Select Case Col
            Case 1
                cboSeg.Value = ""
                cboFam.Value = ""
                cboCla.Value = ""
                cboBri.Value = ""
                Selection.AutoFilter Field:=8
                Selection.AutoFilter Field:=6
                Selection.AutoFilter Field:=4
                Selection.AutoFilter Field:=2
            Case cSegCol
                Selection.AutoFilter Field:=2
                Selection.AutoFilter Field:=4
                Selection.AutoFilter Field:=6
                Selection.AutoFilter Field:=8
                Selection.AutoFilter Field:=2, Criteria1:=cboSeg.Value
            Case cFamCol
                Selection.AutoFilter Field:=2
                Selection.AutoFilter Field:=4
                Selection.AutoFilter Field:=5
                Selection.AutoFilter Field:=8
                Selection.AutoFilter Field:=4, Criteria1:=cboFam.Value
            Case cClaCol
                Selection.AutoFilter Field:=2
                Selection.AutoFilter Field:=4
                Selection.AutoFilter Field:=6
                Selection.AutoFilter Field:=8
                Selection.AutoFilter Field:=6, Criteria1:=cboCla.Value
            Case cBriCol
                Selection.AutoFilter Field:=2
                Selection.AutoFilter Field:=4
                Selection.AutoFilter Field:=6
                Selection.AutoFilter Field:=8
                Selection.AutoFilter Field:=8, Criteria1:=cboBri.Value
        End Select
    End If
End Sub


Sub Remplir_Combo(fFeuil, fobjet, fColonne, fLigne)
    Dim wValeur As String
    Dim wErreur As Integer
    Dim i As Integer
   
    'INITALISATION
    fFeuil.Visible = True
    fFeuil.Select
    fobjet.Clear
      fobjet.AddItem ""
    wValeur = ""
   
    'REMPLISSAGE COMBO TANT QUE <> ""
    Do
        If (ActiveSheet.Cells(fLigne, fColonne).EntireRow.Hidden = True Or ActiveSheet.Cells(fLigne, fColonne).Value = wValeur Or ActiveSheet.Cells(fLigne, fColonne).Value = "") Then
        Else
            wErreur = 0
            i = 0
            Do While (i < fobjet.ListCount)
                If (fobjet.Column(0, i) = ActiveSheet.Cells(fLigne, fColonne).Value) Then
                    wErreur = 1
                End If
                i = i + 1
            Loop
            If (wErreur = 0) Then
                fobjet.AddItem ActiveSheet.Cells(fLigne, fColonne).Value
                wValeur = ActiveSheet.Cells(fLigne, fColonne).Value
            End If
        End If
        fLigne = fLigne + 1
    Loop While (fLigne <= ActiveSheet.Cells(1, 1).Value)
 
    'TEST POUR L'OUVERTURE
    If fobjet.ListCount <> 0 Then
        'fobjet.Value = fobjet.Column(0, 0)
    End If
   
End Sub

Sub Trie(fobjet)

Dim i As Byte, j As Byte
Dim temp As String

With fobjet
For i = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .List(i) < .List(j) Then
temp = .List(i)
.List(i) = .List(j)
.List(j) = temp
End If
Next j
Next i
End With
End Sub


Sub Load_Feuille(fFeuille)

 If AutoFilterMode = True Then Selection.AutoFilter
  If AutoFilterMode = True Then Selection.AutoFilter
        Range(Cells(10, 1), Cells(10, 32)).AutoFilter
        cboSeg.Value = ""
        cboFam.Value = ""
        cboCla.Value = ""
        cboBri.Value = ""
       
       
   Remplir_Combo fFeuille, ActiveSheet.cboSeg, 15, 11
   Remplir_Combo fFeuille, ActiveSheet.cboFam, 18, 11
  Remplir_Combo fFeuille, ActiveSheet.cboCla, 21, 11
  Remplir_Combo fFeuille, ActiveSheet.cboBri, 24, 11
        Trie (ActiveSheet.cboSeg)

' If AutoFilterMode = True Then Selection.AutoFilter
'        Range(Cells(11, 1), Cells(11, 31)).AutoFilter
   'Remplir_Donnees cboSeg, 1, 15
'Remplir_Donnees cboFam, 2, 18
   
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Sponsor
 

Re: Excel: un altro mega-filtro supersonico

Postdi Anthony47 » 07/12/10 23:18

Perdona, ma non mi e' chiaro su che cosa chiedi aiuto:
-sul perche' quando digiti "la cella predisposta" salta in A10? Le prime cose che mi vengono in mente eì che puo' esserci una macro di evento su quel foglio; oppure e' un foglio protetto con la disabilitazione a selezionare celle protette.
-sul come fare a scrivere C invece di Computer? ad esempio usando la Convalida, e poi scegliere da elenco; oppure usando un ComboBox (trovi questo controllo nella barra degli Strumenti di controllo), poi usi la proprieta' ListFillRange per indicare quale e' l' elenco associato, e LinkedCell per indicare la cella in cui la voce scelta viene caricata (in genere si usa la stessa cella nascosta dal combobox)
-oppure?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 08/12/10 09:37

Le celle in cui non riesco a scrivere sono quelle destinate a contenere la parola chiave per filtrare le colonne quindi non sono protette. Non sapendo che lavoro abbiano impostato su quel foglio se mi aiutate a modificare il tutto a me serve: filtrare per parola chiave quattro colonne di dati che stanno nelle colonne O, R, U e X, le parole chiave di filtro sono rispettivamente nelle celle N6, N8, X6 e X8, devo poter usare i filtri anche contemporaneamente. Inoltre mi piacerebbe mantenere qual tastino con il comando Clear all filters (che adesso è in U7).
Per adesso mi basta questa funzionalità, poi.... vediamo..... grazie :)
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi Anthony47 » 09/12/10 00:12

Da quello che intravedo, il lavoro di filtro dovrebbe essere governato tramite dei combobox (Col O: cboSeg; col R: cboFam; col U: cboCla; col X: cboBri) di cui tu non parli; non e' che sono camuffati nelle celle N6, N8, X6, X8?
Questi dovrebbero lavorare in catena, nel senso che cboSeg popola i successivi 3 con i possibili valori, cboFam popola i successivi 2, cboCla popola il successivo 1.
Trovo ambiguo pero' l' approccio scelto, in quanto tutto e' controllato dall' evento change del combobox; per cui se voglio inserire "filtro", appena inserisco "f" il controllo perde il,focus (che va su A10), e per scrivere le lettere successive devo riselezionare il combobox per scrivere "i", "l" etc (lettera per lettera).
E' vero che il combobox consente la scelta da elenco (e' cosi', per quello che vedi in N6? Sempre che sia vera la mia ipotesi che in N6 ci sia un combobox), ma non impedisce la digitazione carattere per carattere. Forse sarebbe stato meglio usare dei "listbox", che consentono la sola scelta da elenco.
Oppure si sarebbero potuti condensare i 4 combobox su una userform, e sfruttare poi l' evento "exit" del singolo combobox.
Il listbox, avendo propieta' simili al combobox, probabilmente richiederebbe pochi adattamenti alle macro; l' interfaccia utente forse sarebbe piu' chiara se invece si usasse una userform.
L' ipotesi di lavorare direttamente nelle celle secondo me e' quella che richiede piu' modifiche.

Per capire se in N6, N8, X6 e X8 hai dei combobox (o un altro "controllo") visualizza la barra degli "Strumenti di controllo", attiva la modalita' progettazione (e' l' icona con righello e squadra) e seleziona N6; dovresti vedere il tipico segno della selezione di una forma e il suo nome nella "Casella nome", al posto delle coordinate della cella.

Se quanto ho detto fosse arabo allora sarei abbastanza preoccupato (per te)...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 09/12/10 13:52

sì sì Anthony! ci sono i combox ciascuno con il nome cboSeg, cboFam eccetera, inoltre con gli strumenti di controllo aperti dentro alla cella si è visualizzata la formula che non si vedeva
=INCORPORA("Forms.ComboBox.1";"")
:?: :?: :?: :?:
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 09/12/10 17:35

... e comunque non vedo nessun elenco, in realtà non ho idea a quale elenco si voglia collegare dato che non ho altri file o altri fogli collegati a questo foglio di lavoro.... Aiuto Anthony.... :-?
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi Anthony47 » 09/12/10 23:42

Ma questo file ha mai funzionato, e allora si dovrebbe conoscere quali sono le procedure di uso, oppure non ha ancora funzionato, ma allora si dovrebbero almeno conoscere gli obiettivi?
Nel combobox di N6 ci sono dei valori da cui puoi scegliere o niente? Se c' e' qualcosa scegli un valore; se non c' e' niente prova a digitare un carattere; in ambedue i casi dovrebbe partire la macro di evento cboSeg_Change, che filtrare l' elenco su col O e poi dovrebbe compilare gli altri combobox con i valori disponibili sulla base della prima scelta.
E' pero' probabile, guardando bene la macro, che il filtro non ti lascia niente, perche' parte sul primo carattere; se in effetti ti capita cio' allora, nella Private Sub cboSeg_Change modifica la scelta i Criteria1 da Criteria1:=ActiveSheet.cboSeg.Text a
Codice: Seleziona tutto
Criteria1:=ActiveSheet.cboSeg.Text & "*"
Dovrebbe cosi' filtrare con tutto quello che "comincia" con quanto digitato nel primo combobox.

Guardando meglio mi pare anche che la chiave possa essere la macro Load_Feuille(fFeuille), che da qualche parte dovrebbe essere invocata passandole il parametro fFeuille.
Ma guardando ancora meglio questa macro mi sembra che in realta' essa faccia finta di predisporre il filtro automatico sulle colonne A:AB; fa finta perche' l' area filtrata e' di 1 sola riga, quindi anche a mano oggi non dovresti essere in grado di filtrare niente; o invece a mano filtri che e' un piacere?
E sono senza senso le prime due righe, leggendo a caso sempre in testa a questa macro:
If AutoFilterMode = True Then Selection.AutoFilter
If AutoFilterMode = True Then Selection.AutoFilter
Range(Cells(10, 1), Cells(10, 32)).AutoFilter


Forse avrebbe piu' senso se fosse cosi':
Codice: Seleziona tutto
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
'  If AutoFilterMode = True Then Selection.AutoFilter   'Commentata perche' inutile
        Range(Cells(10, 1), Cells(ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Range("A1").Row, 32)).AutoFilter   'applica il filtro sulle righe presenti

Questo vale anche per la Sub btnClearAll_Click()

Pero' come vedi piu' si scava e piu' vengono fuori cose che non si capisce se hanno mai funzionato...
Per approfindimenti dovrebbe essere alquanto utile un file con la struttura dati su cui deve operare, sapere che cosa si dovrebbe fare, e se quanto e' stato fatto e' un punto di partenza affidabile perche' funzionava o e' invece non garantito da niente e nessuno e quindi e' da rottamare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 10/12/10 16:27

Dunque Anthony, intanto ti ringrazio per la pazienza: mi sono andata ad informare e mi hanno consegnato un file praticamente uguale dicendomi di usare questo e tutto quello che sanno dirmi che era stato scaricato da Internet. In questa seconda versione del file il combox (che è a tendina) ha dentro una lista che corrisponde ai dati contenuti nel foglio: questi dati sono vecchi, io li cancello, metto i nuovi ma il combox continua a fare riferimento ai precedenti; inoltre non mi interesserebbe nemmeno filtrare in questo modo, mi interessa inserire una parola chiave. Se sei ancora paziente ti invio la macro contenuta in questo, anche sarà più o meno simile alla precedente. Purtroppo nessuno mi sa dare spiegazioni ulteriori. Per tua informazione Criteria1:=ActiveSheet.cboSeg.Text & "*" si picchia con Private Sub cboSeg_Change(), mi dice che c'è un errore di sintassi.
Allora il mio scopo è: sostituire la lista articoli dentro al foglio con una nuova e far sì che la ricerca all'interno di questa lista possa essere fatta nei vari combox per parola chiave e non per lista predefinita.
Se mi ricordate qual'è il link per inviarvi il file lo invio. Grazie ancora Anthony, so che non ti do molti elementi ma semmai lasciamo stare.... :)

Option Explicit
Dim wsMaster As Worksheet
Dim MyList() As String
Dim iRow As Integer
Const cSegCol As Integer = 2, cFamCol As Integer = 4, cClaCol As Integer = 6, cBriCol As Integer = 7







Private Sub btnClearAll_Click()
If AutoFilterMode = True Then Selection.AutoFilter
If AutoFilterMode = True Then Selection.AutoFilter
Range(Cells(10, 1), Cells(10, 32)).AutoFilter
cboSeg.Value = ""
cboFam.Value = ""
cboCla.Value = ""
cboBri.Value = ""
Selection.AutoFilter Field:=15
Selection.AutoFilter Field:=18
Selection.AutoFilter Field:=21
Selection.AutoFilter Field:=24
End Sub

Private Sub cboBri_Change()
On Error Resume Next

ActiveSheet.Cells(10, 1).Select
ActiveSheet.Cells(10, 1).Select
If (ActiveSheet.cboBri.Text = "") Then
Selection.AutoFilter Field:=24
Else
Selection.AutoFilter Field:=24, Criteria1:=ActiveSheet.cboBri.Text
End If


End Sub

Private Sub cboCla_Change()
On Error Resume Next

ActiveSheet.Cells(10, 1).Select
If (ActiveSheet.cboCla.Text = "") Then
Selection.AutoFilter Field:=21
Else
Selection.AutoFilter Field:=21, Criteria1:=ActiveSheet.cboCla.Text
End If

Selection.AutoFilter Field:=24

Remplir_Combo Sheet11, ActiveSheet.cboBri, 24, 11
Trie (cboBri)


End Sub

Private Sub cboFam_Change()
On Error Resume Next

ActiveSheet.Cells(10, 1).Select
If (ActiveSheet.cboFam.Text = "") Then
Selection.AutoFilter Field:=18
Else
Selection.AutoFilter Field:=18, Criteria1:=ActiveSheet.cboFam.Text
End If

Selection.AutoFilter Field:=21
Selection.AutoFilter Field:=24

Remplir_Combo Sheet11, ActiveSheet.cboCla, 21, 11
Remplir_Combo Sheet11, ActiveSheet.cboBri, 24, 11
Trie (cboCla)

End Sub

Private Sub cboSeg_Change()
On Error Resume Next

ActiveSheet.Cells(10, 1).Select
If (ActiveSheet.cboSeg.Text = "") Then
Selection.AutoFilter Field:=15
Else
Selection.AutoFilter Field:=15, Criteria1:=ActiveSheet.cboSeg.Text
End If

Selection.AutoFilter Field:=18
Selection.AutoFilter Field:=21
Selection.AutoFilter Field:=24
Remplir_Combo Sheet11, ActiveSheet.cboFam, 18, 11
Remplir_Combo Sheet11, ActiveSheet.cboCla, 21, 11
Remplir_Combo Sheet11, ActiveSheet.cboBri, 24, 11
Trie (cboFam)
End Sub





Sub Filter(Col As Integer)
If cboSeg.Value <> "" Or cboFam.Value <> "" Or _
cboCla.Value <> "" Or cboBri.Value <> "" Then
Cells(11, 1).Select
Select Case Col
Case 1
cboSeg.Value = ""
cboFam.Value = ""
cboCla.Value = ""
cboBri.Value = ""
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=6
Selection.AutoFilter Field:=4
Selection.AutoFilter Field:=2
Case cSegCol
Selection.AutoFilter Field:=2
Selection.AutoFilter Field:=4
Selection.AutoFilter Field:=6
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=2, Criteria1:=cboSeg.Value
Case cFamCol
Selection.AutoFilter Field:=2
Selection.AutoFilter Field:=4
Selection.AutoFilter Field:=5
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=4, Criteria1:=cboFam.Value
Case cClaCol
Selection.AutoFilter Field:=2
Selection.AutoFilter Field:=4
Selection.AutoFilter Field:=6
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=6, Criteria1:=cboCla.Value
Case cBriCol
Selection.AutoFilter Field:=2
Selection.AutoFilter Field:=4
Selection.AutoFilter Field:=6
Selection.AutoFilter Field:=8
Selection.AutoFilter Field:=8, Criteria1:=cboBri.Value
End Select
End If
End Sub


Sub Remplir_Combo(fFeuil, fobjet, fColonne, fLigne)
Dim wValeur As String
Dim wErreur As Integer
Dim i As Integer

'INITALISATION
fFeuil.Visible = True
fFeuil.Select
fobjet.Clear
fobjet.AddItem ""
wValeur = ""

'REMPLISSAGE COMBO TANT QUE <> ""
Do
If (ActiveSheet.Cells(fLigne, fColonne).EntireRow.Hidden = True Or ActiveSheet.Cells(fLigne, fColonne).Value = wValeur Or ActiveSheet.Cells(fLigne, fColonne).Value = "") Then
Else
wErreur = 0
i = 0
Do While (i < fobjet.ListCount)
If (fobjet.Column(0, i) = ActiveSheet.Cells(fLigne, fColonne).Value) Then
wErreur = 1
End If
i = i + 1
Loop
If (wErreur = 0) Then
fobjet.AddItem ActiveSheet.Cells(fLigne, fColonne).Value
wValeur = ActiveSheet.Cells(fLigne, fColonne).Value
End If
End If
fLigne = fLigne + 1
Loop While (fLigne <= ActiveSheet.Cells(1, 1).Value)

'TEST POUR L'OUVERTURE
If fobjet.ListCount <> 0 Then
'fobjet.Value = fobjet.Column(0, 0)
End If

End Sub

Sub Trie(fobjet)

Dim i As Byte, j As Byte
Dim temp As String

With fobjet
For i = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .List(i) < .List(j) Then
temp = .List(i)
.List(i) = .List(j)
.List(j) = temp
End If
Next j
Next i
End With
End Sub


Sub Load_Feuille(fFeuille)

If AutoFilterMode = True Then Selection.AutoFilter
If AutoFilterMode = True Then Selection.AutoFilter
Range(Cells(10, 1), Cells(10, 32)).AutoFilter
cboSeg.Value = ""
cboFam.Value = ""
cboCla.Value = ""
cboBri.Value = ""


Remplir_Combo fFeuille, ActiveSheet.cboSeg, 15, 11
Remplir_Combo fFeuille, ActiveSheet.cboFam, 18, 11
Remplir_Combo fFeuille, ActiveSheet.cboCla, 21, 11
Remplir_Combo fFeuille, ActiveSheet.cboBri, 24, 11
Trie (ActiveSheet.cboSeg)

' If AutoFilterMode = True Then Selection.AutoFilter
' Range(Cells(11, 1), Cells(11, 31)).AutoFilter
'Remplir_Donnees cboSeg, 1, 15
'Remplir_Donnees cboFam, 2, 18

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi Anthony47 » 11/12/10 00:28

Ma guarda... che strano: scaricano un file da internet che non si sa che fa e si lamentano che non fa quello che vogliono... Suggerisci di provare con Format c: e vedere se cosi' poi funziona.

Per allegare un file guarda qui: viewtopic.php?f=26&t=80395
Ovviamente il file deve contenere dei dati utili.

Intanto vorrei chiederti se quando dici che vuoi fare la ricerca "per parola chiave e non per lista predefinita" intendi che il combobox deve contenere tutte le parole della colonna o che cosa?

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

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 13/12/10 14:26

Anthony ho usato filedropper, ecco il link
http://www.filedropper.com/combinedschema
Ti preciso che:
- le colonne da A a M non ho idea a cosa servano quindi possono anche sparire
- quando dico che voglio usare il filtro per parola chiave intendo che il combox sia vuoto e io digito liberamente al suo interno per filtrare la colonna relativa.
- la lista degli articoli che vedi è quella che a me non serve, in realtà la cancellerò e sostituirò con 15mila righe circa di prodotti che avranno comunque la stessa struttura.
Se infine, Anthony, questo fosse un file intelligente che fa di pià di quello che penso io e si riesce anche ad evincere ben venga, ma io finora non ci ho capito nulla....
Grazie :)
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi Flash30005 » 13/12/10 23:04

Fanti'
hai usato Filedropper bene ma con il file "sbagliato"
all'apertura appare un messaggio con scritto che proviene da un server che non è al momento disponibile
:?:
Riprova vedrai andrà meglio.

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 14/12/10 14:44

urka... allora ci riprovo da casa e vi copioincollo esattamente tutto quello che mi dice:

Link To Share This File With Anyone: http://www.filedropper.com/schemadeltahome
Embed Code to share this file on websites and forums: <a href=http://www.filedropper.com/schemadeltahome><img src=http://www.filedropper.com/download_button.png width=127 height=145 border=0/></a><br /> <div style=font-size:9px;font-family:Arial, Helvetica, sans-serif;width:127px;font-color:#44a854;> <a href=http://www.filedropper.com >file backup online</a></div>
A differenza del file che vi volevo mandare su questo vedete già l'elenco delle 14/15mila voci cosiddette nuove, messe da me; i combox sembrano non contenere nessuna lista, sarebbe il file da cui avevo parlato all'inizio. Purtroppo il secondo di cui ho parlato successivamente e che vi volevo mandare è in ufficio (forse per questo che il server non ha permesso) ma tanto provengono ambedue dalla stessa zuppa...
:-? grazie...
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi Anthony47 » 15/12/10 22:55

Tutto questo ambaradan ha una complessita' non rapportata alla semplicita' delle cose che vuoi fare; per quello basterebbe cancellare tutte le macro e tutti i combobox, poi usare le celle dei combobox per inserirci la chiave di ricerca, infine usare una macro di worksheet change oppure un pulsante per attivare il vari filtri con il valore della cella corrispondente

Cose simili sono descritte qui:
viewtopic.php?f=26&t=88262
viewtopic.php?f=26&t=85162
viewtopic.php?f=26&t=84789
e parecchi altri.

Per ora non ho molto tempo per cercare di capire il perche' della complicazione che hanno messo in piedi (salvo che ho il dubbio che abbia mai funzionato), quindi possibilmente portati avanti col filtro automatico come ho detto a grandi linee sopra.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel: un altro mega-filtro supersonico

Postdi Flash30005 » 16/12/10 01:04

@Fantina

dopo aver letto il post di Anthony ti consiglio di
iniziare dai dati origine e dati finali
in sostanza dire:
io ho questi dati e vorrei ottere questo risultato

perché è meno dipsendioso realizzare qualcosa per raggiungere la meta
che cercare di capire come altri avrebbero avuto intenzione di raggiungerla (e magari senza riuscirci) ;)
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 16/12/10 17:21

Mi trovate perfettamente d'accordo....
A questo punto se mi permettete cambio foglio e anche metodo: vorrei filtrare contemporaneamente le colonne E, F, G e H con un'unica parola chiave in D1, cioè mi deve proporre il prodotto cercato in qualunque di queste colonne esso compaia.
Inoltre, dato che la lista è molto lunga vorrei poter utilizzare il bottoncino "Clear All Filters" senza dover sempre andare in cima ai filtri a selezionare "Tutto" (infatti non sempre cancellando la parola chiave mi si riapre tutto il file...)

Grazie ancora, siete sempre splendidi.... se mi aiutate prometto che vi lascio in pace fino al 2011.... :)
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi ivo » 16/12/10 17:55

proposta...
tutto sto' lavoro lo farei in Access: archiviare 15mila articoli, poi fare dei filtri per ricerca ...
e magari voler stampare delle liste filtrate
E poi da Access si può importare il file Excel.

Se hai Access e sei interessata a questo ....
mandami il materiale e scrivimi dettagliatamente come vuoi effettuare le ricerche.
Immagine
Avatar utente
ivo
Utente Senior
 
Post: 1135
Iscritto il: 20/08/01 01:00
Località: Treviso

Re: Excel: un altro mega-filtro supersonico

Postdi Flash30005 » 16/12/10 20:15

Quella che ti propongo è il non uso dei filtri

ma riversare quei dati nel foglio2

Codice: Seleziona tutto
Sub TrovaProd()
UR2 = Worksheets("Foglio2").Range("E2").CurrentRegion.Rows.Count
If UR2 < 2 Then UR2 = 2
Worksheets("Foglio2").Range("E2:H" & UR2).Clear
URA = Worksheets("Foglio1").Range("E2").CurrentRegion.Rows.Count
Prod = Worksheets("Foglio1").Range("D1").Value
Worksheets("Foglio1").Select
For CC = 5 To 8
For RR = 2 To URA
ProdC = Worksheets("Foglio1").Cells(RR, CC).Value
If Prod = ProdC Then Worksheets("Foglio1").Range(Cells(RR, 5), Cells(RR, 8)).Copy Destination:=Worksheets("Foglio2").Cells(Rows.Count, 5).End(xlUp).Offset(1, 0)
Next RR
Next CC
Worksheets("Foglio2").Select
End Sub


Attenzione questa macro preleva solo le 4 colonne e non tutta la riga ma con una semplice modifica copieresti l'intera riga del foglio1 (origine dati) per incollarla nel foglio2 (foglio destinazione)

Allego il file

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 16/12/10 21:48

...ettepareva che a me ovviamente non funziona... sto facendo delle prove sul tuo stesso file, Flash, ma sta bello fermo... immobile... La mia protezione macro è media, non capisco perchè si sia inchiodato...
Sconfortatamente buonanotte.....

(Ivo, grazie anche a te, provo a mandarti qualcosa domani...)
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Excel: un altro mega-filtro supersonico

Postdi Anthony47 » 16/12/10 22:55

Se hai cambiato approccio, cioe' filtrare per la presenza della chiave in una qualsiasi delle 4 colonne, la mia proposta e':
-in una colonna di servizio ti crei il concatenamento delle 4 colonne con la formula in riga 2=E2&" "&F2&" ";G2&" "&H2 che poi copi verso il basso
-poi applichi il filtro solo a questa colonna scegliendo "(Personalizza)" nelle scelte del menu a discesa, poi il criterio "Contiene" e infine la tua parola chiave

Prova manualmente; se il risultato ti soddisfa:
-registra una macro mentre filtri per una parola chiave a piacere
-pubblica il codice prodotto
-dicci in quale cella vorresti scrivere la chiave di ricerca
e noi modificheremo la macro di conseguenza per fare in modo che il filtro parta con ogni modifica della chiave.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel: un altro mega-filtro supersonico

Postdi fantina » 17/12/10 13:59

Sì... risponde ai requisiti che mi servono però siccome i dati sono molti vorrei la possibilità di affinare la selezione quindi ho fatto questa macro: la colonna concatenata è in J e la vorrei filtrare con chiave in D1, poi vorrei la possibilità di filtrare se necessario la colonna H con la chiave in H1. Questa è lo schifo di macro che mi è venuto.... ho fatto paciughi??

Sub Macro2()
'
' Macro2 Macro
' Macro registrata il 17/12/2010 da fantasia
'

'
Selection.AutoFilter Field:=2, Criteria1:="=*power*", Operator:=xlAnd
Selection.AutoFilter Field:=1, Criteria1:="=*commercial*", Operator:= _
xlAnd
End Sub
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Excel: un altro mega-filtro supersonico":


Chi c’è in linea

Visitano il forum: Nessuno e 84 ospiti