Ricerca con più parametri



  • Ricerca con più parametri
    di miotz (utente non iscritto) data: 04/12/2012 19:28:31

    Ciao a tutti!
    Vi posto questo quesito: ho un foglio "timereport" con una serie di record, i campi sono i seguenti:

    mese | cliente | servizio | attività | numero fattura

    su questo elenco vengono registrate a mano giorno dopo giorno le attività eseguite per il singolo cliente, che vengono poi recuperate nel momento della fatturazione. Il campo numero fattura è vuoto e viene compilato (a mano) con il numero della fattura nella quale la specifica riga di attività è confluita. Come è possibile automatizzare questa procedura? Aggiungo ulteriori dettagli: su un altro foglio "stampa", che ha il layout della fattura, scrivo il nome del cliente, il mese, la tipologia di servizio e il numero della fattura, vorrei che quest'ultimo venisse riportato nel foglio "timereport" in corrispondenza delle attività che hanno: il campo numero fattura vuoto, il cliente = al nome che ho indicato nel foglio "stampa", il mese = al mese indicato nel foglio "stampa" e idem per il servizio.
    Sono riuscito a fare un'operazione simile eseguendo la ricerca su un solo campo utilizzando questo (pezzo) di codice qui
    With Worksheets("vendite").Range("b1:b100")
    Set c = .Find(ActiveSheet.Range("M4").Value, LookIn:=xlValues)
    (..etc)
    ma su più campi non ho proprio capito come si può fare.
    Un grazie anticipato a tutti!



  • di Vecchio Frac data: 05/12/2012 22:12:45

    Non riesco a capirti.
    Qual è la procedura che vorresti automatizzare?
    Quali sono questi campi multipli su cui effettuare una ricerca? e cosa si deve ricercare?
    Se puoi allega un file con dati fittizi.





  • di miotz (utente non iscritto) data: 10/12/2012 14:50:49

    Ciao Vecchio Frac e grazie per l'attenzione. Ho inserito il file dove vedi il foglio dei dati "timereport" che aggiorno quotidianamente. Oltre a questo c'è un altro foglio che serve per stampare la fattura, ovvero ha un layout apposito, e una tabellina a fianco dove seleziono cliente, mese di riferimento, tipo di servizio, e il corpo della fattura si popola con gli importi che legge e somma dal foglio "timereport".
    Il passo successivo lo eseguo a mano e vorrei capire se si riesce ad automatizzare, ed è questo: una volta fatta la fattura al cliente Gamma indico a mano sulla colonna A il numero di fattura nella quale l'attività corrispondente è confluita. Nel caso di specie nella fattura numero 12 è confluito l'importo relativo alla compilazione di un intrastat, attività che fa parte del servizio "contabilità". Qui nell'esempio è stata fatturata una sola riga ma naturalmente una stessa fattura può raggruppare gli importi originati da più righe del foglio "timereport".
    Questa fase è quella che vorrei automatizzare, considerando che in un foglio successivo io già indico i valori utili per eseguire la selezione delle righe a fianco delle quali scrivere il numero della fattura in cui le stesse sono confluite.
    Spero di essere stato abbastanza chiaro mi rendo conto che per iscritto non è affatto semplice rendere il quesito..!



  • di Textomb data: 10/12/2012 15:42:42

    non ho visto il file allegato ma mi pare che il quesito posto sembra simile a quello che ho affrontato un pò di tempo fa...
    Se ricorri all'utilizzo dei filtri ti togli dall'impiccio.
    Nei criteri di selezione inserisci i campi che ti servono e poi il gioco è fatto.
    un qualcosa del genere...
    Ovviamente lo devi adattare alle tue esigenze.

     
    Dim Mese as string, Cliente as String, Servizio as String, Attivity as string
    Mese = Worksheets("Stampa").[M4]
    Cliente = Worksheets("Stampa").[M5]
    Servizio = Worksheets("Stampa").[M6]
    Attivity = Worksheets("Stampa").[M7]
    
    with Worksheets("Vendite").Range("b1:b100")
    .AutoFilter field:=1, Criteria1:=Mese, Operator:=xlFilterValues
    .AutoFilter field:=2, Criteria1:=Cliente, Operator:=xlFilterValues
    .AutoFilter field:=3, Criteria1:=Servizio, Operator:=xlFilterValues
    .AutoFilter field:=4, Criteria1:=Attivity, Operator:=xlFilterValues
    End with
    
    
    



  • di miotz (utente non iscritto) data: 11/12/2012 19:09:07

    Textomb l'idea dei filtri è buona ma Autofilter gestisce max 2 criteri - me lo confermi?
    A me ne servirebbe gestirne 3...



  • di Textomb data: 12/12/2012 18:09:26

    L'AutoFilter gestisce due criteri su ogni campo colonna.
    A me è sembrato di capire che le colonne che devi filtrare sono quattro diverse.
    Colonna 1: Mese, Colonna 2: Cliente, Colonna 3: Servizio, Colonna 4: Attivity
    Quindi, se è così, non hai nessun problema.
    Guarda il codice che ti ho scritto nel precedente post.
    Io uso spesso questa metodologia ed oltre ad essere veloce ed efficace è anche abbastanza semplice-



  • di miotz data: 13/12/2012 15:21:40

    eh purtroppo non è così
    nel campo Mese considero gli ultimi tre mesi quindi ho 3 condizioni su questo campo, come pure sul campo servizio, per il quale anche qui in fase di sviluppo del file ho tenuto la possibilità di indicare max 3 tipologie di servizi.



  • di Albatro54 (utente non iscritto) data: 13/12/2012 17:52:23

    questo codice dovrebbe fare quello che chiedi.
    Adattalo alle tue esigenze.
    Ciao
    Albatros54
     
    Sub FILTRA_MULTI_VBA()
    ur = Range("a65536").End(xlUp).Row
    Dim Cerco1, Nome As String
    Dim Cerco2, Citta As String
    Dim Cerco3
    Dim Totale As Double
    Dim Q As Integer
    Cerco1 = InputBox("SCRIVI IL NOME DA CERCARE O PARTE DEL NOME")
    If Cerco1 = "" Then Exit Sub
    Cerco2 = InputBox("SCRIVI IL NOME DELLA CITTA' O PARTE DEL NOME")
    If Cerco2 = "" Then Exit Sub
    Cerco3 = InputBox("SCRIVI LA CIFRA CHE TI INTERESSA")
    If Cerco3 = "" Then Exit Sub
    Nome = "*" & Cerco1 & "*"
    Citta = "*" & Cerco2 & "*"
    Totale = 0
    For Q = 2 To ur
    If Cells(Q, 1).Value Like Nome And Cells(Q, 2).Value Like Citta And Cells(Q, 3).Value >= CDbl(Cerco3) Then
    Rows(Q).Hidden = False
    Totale = Totale + Cells(Q, 3)
    Else
    Rows(Q).Hidden = True
    End If
    Next
    MsgBox "IL TOTALE PER " & UCase(Cerco) & " di € " & Format(Totale, "#,###.00")
    End Sub
    



  • di Vecchio Frac data: 13/12/2012 18:17:36

    Il codice postato da Albatro54 è buono, ma faccio notare solo due piccole imprecisioni:
    - se l'utente ha una versione di Excel superiore alla 2003 la riga
    ur = Range("a65536").End(xlUp).Row
    può produrre un risultato errato, perchè da Excel 2007 in su le righe sono molte di più; userei al suo posto la versione generica:
    ur = Columns(1).cells.count

    - "cerco" non è definito da nessuna parte, per cui
    MsgBox "IL TOTALE PER " & UCase(Cerco) & " di € " & Format(Totale, "#,###.00")
    non produrrà un messaggio corretto (volevi indicare forse "cerco1"?) e anzi produce errore se è impostato Option Explicit (cosa raccomandabile sempre, anche per scovare piccolezze come questa).





  • di Albatros54 (utente non iscritto) data: 13/12/2012 18:24:49

    Non volevo dare la soluzione completa, ma bensi' indirizzare il nostro amico a risolvere il problema.
    Naturalmente, masticando un po di VBA il codice si puo adattare alle proprie esigenze.
    Ciao
    Albatros54