Condividi:        

filtro ordini

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

filtro ordini

Postdi raimea » 01/03/17 18:46

ciao
nel fgl riepilogo,
vorrei riportare gli ordini del singolo cliente che seleziono tramite menu tendina

in C8 e D8 seleziono il cliente interessato,
la sua provincia e la via la vado a cercare nel fgl clienti
la data e il cod ordine lo cerco in fgl ordino

poi dello stesso cliente lo cerco in fgl ordini e riporto solo cio che ha ordinato
il prodotto lo cerco in riga 5 e la relativa concia in riga 7
e le riporto in fgl riepilogo col I J
poi cerco la relativa quantita' ordinata e la riporto in col K

il risultato dovrebbe essere cosi:
Immagine
( con relativa prov-via -data-codordine , come descritto)
vi allego il file
https://dl.dropboxusercontent.com/u/96374724/filtro_ordini.rar

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Sponsor
 

Re: filtro ordini

Postdi Anthony47 » 02/03/17 02:38

Penso potrebbe funzionare questa:
Codice: Seleziona tutto
Sub EstraiZZ()
Dim cCol As Long, sCol As Range, I As Long, myNext As Long
'
Sheets("riepilogo").Select
With Sheets("ordini")
    For I = 8 To .Cells(Rows.Count, 3).End(xlUp).Row
        If .Cells(I, "C") = Cells(8, "C") And _
          InStr(1, .Cells(I, "D"), Cells(8, "D"), vbTextCompare) > 0 And _
          InStr(1, .Cells(I, "E"), Cells(8, "E"), vbTextCompare) > 0 And _
          InStr(1, .Cells(I, "F"), Cells(8, "F"), vbTextCompare) > 0 And _
          (.Cells(I, "G") = Cells(8, "G") Or Cells(8, "G") = "") And _
          (.Cells(I, "H") = Cells(8, "H") Or Cells(8, "H") = "") Then
            Set sCol = .Cells(I, "H")
            Do
                cCol = sCol.End(xlToRight).Column
                If cCol < .Columns.Count Then
                    myNext = Cells(Rows.Count, "I").End(xlUp).Row + 1
                    Cells(myNext, "I") = .Cells(5, cCol)
                    Cells(myNext, "J") = .Cells(7, cCol)
                    Cells(myNext, "K") = .Cells(I, cCol)
                    Set sCol = .Cells(I, cCol)
                Else
                    Exit Do
                End If
            Loop
        End If
    Next I
End With
End Sub


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

Re: filtro ordini

Postdi raimea » 02/03/17 07:01

ciao
la macro preleva correttamente i prodotti+concie,
MA, manca la 1ma parte descritta

la sua provincia e la via la vado a cercare nel fgl clienti
la data e il cod ordine lo cerco in fgl ordino


ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: filtro ordini

Postdi Anthony47 » 03/03/17 12:50

Veramente io avevo capito che la riga 8 conteneva dei filtri... esempio potevi impostare solo i clienti della provincia di Milano.
Allora facciamo che i dati anagrafici li prendi con Cerca.Vert dalle relative tabelle, mentre alla macro facciamo gestire anche l'Ordine e la Data.
Il nuovo codice:
Codice: Seleziona tutto
Sub EstraiZZ2()
Dim cCol As Long, sCol As Range, I As Long, myNext As Long
'
Sheets("riepilogo").Select
With Sheets("ordini")
    For I = 8 To .Cells(Rows.Count, 3).End(xlUp).Row
        If .Cells(I, "C") = Cells(8, "C") Then
            Set sCol = .Cells(I, "H")
            myNext = Cells(Rows.Count, "I").End(xlUp).Row + 1
            Cells(myNext, "G") = sCol.Offset(0, -1).Value
            Cells(myNext, "H") = sCol.Value
            Do
                cCol = sCol.End(xlToRight).Column
                If cCol < .Columns.Count Then
                    myNext = Cells(Rows.Count, "I").End(xlUp).Row + 1
                    Cells(myNext, "I") = .Cells(5, cCol)
                    Cells(myNext, "J") = .Cells(7, cCol)
                    Cells(myNext, "K") = .Cells(I, cCol)
                    Set sCol = .Cells(I, cCol)
                Else
                    Exit Do
                End If
            Loop
        End If
    Next I
End With
End Sub

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

Re: filtro ordini

Postdi raimea » 03/03/17 15:53

ciao
no non va bene
la macro estraiZZ2 mi riporta i dati di 2 persone con lo stesso nome
mentre io voglio i dati di una sola persona del comune specificato in D8
nella foto infatti mi ha riportati i dati di rossi mario sia di quello di lodi che quello di milano
a me servono solo i dati di quello del comune specif in cella D8

Immagine

per quanto riguarda il cerca vert io non so come si puo usare
dovendo fare un doppio controllo su 2 campi

io ho impostato:
=SE.ERRORE(CERCA.VERT(C8;'clienti-prodotti'!C6:F19;3;0);"")

ma giustamente mi riporta i dati del primo nome che trova
mentre dovrei scrivere un cerca.vert che faccia 2 controlli nome+comune
e non saprei come scrivere la formula

vi riallego il nuovo file
https://dl.dropboxusercontent.com/u/96374724/piano_semina_1_4.rar

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: filtro ordini

Postdi cromagno » 04/03/17 02:34

Ciao a tutti,

@Raimea
ti stavo per scrivere solo la formula per la ricerca con doppio criterio ma vedendo i menu a tendina con tutti quegli spazi...ho proseguito.

Nel file che allego, il tutto è stato fatto per gestire al meglio il range C8:H8 del foglio "ripilogo"...in modo da creare anche meno problemi al codice di Anthony (che saluto).

Per avere dei menu a tendina senza spazi vuoti, si creano dei "nomi definiti" (tanti per quanti elenchi bisogna gestire) e la loro formula avrà questa sintassi:
esempio, per l'elenco dei clienti, è stato creato un "nome definito" che ho chiamato "Clienti" e la sua formula è:
=SCARTO('clienti-prodotti'!$C$6;;;MATR.SOMMA.PRODOTTO(--('clienti-prodotti'!$C$6:$C$105<>"")))

stessa cosa per il nomi definiti "Prodotto" e "Concia".
Per gli altri nomi definiti, che mi serviranno per i menu a tendina dinamici da mettere nelle celle D8, G8 e H8 del foglio "riepilogo", ho preferito aggiungere in foglio "Elenchi" per contenerli.
Nel foglio "Elenchi" avremo....
per i "COMUNI" nella cella A2 (da copiare poi in basso) la formula matriciale (quindi da confermare con la combinazione di tasti CTRL+MAIUSC+INVIO anzichè solo con INVIO):
=SE.ERRORE(INDICE('clienti-prodotti'!$D$1:$D$105;PICCOLO(SE.ERRORE(RIF.RIGA('clienti-prodotti'!$C$6:$C$105)/('clienti-prodotti'!$C$6:$C$105=riepilogo!$C$8);"");RIF.RIGA(A1)));"")

per le "DATE" nella cella B2 (da copiare poi in basso) la formula matriciale:
=SE.ERRORE(INDICE(ordini!$G$1:$G$110;PICCOLO(SE.ERRORE(RIF.RIGA(ordini!$C$8:$C$110)/((ordini!$C$8:$C$110=riepilogo!$C$8)*(SE(riepilogo!$D$8<>"";ordini!$D$8:$D$110=riepilogo!$D$8;1)));"");RIF.RIGA(A1)));"")

per gli "ORDINI" nella cella C2 (da copiare poi in basso) la formula matriciale:
=SE.ERRORE(INDICE(ordini!$H$1:$H$110;PICCOLO(SE.ERRORE(RIF.RIGA(ordini!$C$8:$C$110)/((ordini!$C$8:$C$110=riepilogo!$C$8)*(SE(riepilogo!$D$8<>"";ordini!$D$8:$D$110=riepilogo!$D$8;1))*(SE(riepilogo!$G$8<>"";ordini!$G$8:$G$110=riepilogo!$G$8;1)));"");RIF.RIGA(A1)));"")

rimangono solo le formule per cui ho iniziato... :lol:
Nel foglio "riepilogo", nella cella E8 (da copiare poi nella cella F8) la formula matriciale:
=SE.ERRORE(INDICE('clienti-prodotti'!E$6:E$105;CONFRONTA($C$8&$D$8;'clienti-prodotti'!$C$6:$C$105&'clienti-prodotti'!$D$6:$D$105;0));"")&""

Allego il file...
http://www.filedropper.com/pianosemina14

Ciao
Tore
Windows 10 + Office 2013 64bit(ita)
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Avatar utente
cromagno
Utente Junior
 
Post: 66
Iscritto il: 08/10/16 16:33
Località: Sardegna

Re: filtro ordini

Postdi raimea » 04/03/17 07:10

ciao
grazie - cromagno- , il prelievo della provincia e della via del cliente, funziona
-ma le formule non riporta la data e il cod ordine, ho visto che hai messo un menu tendina
ad entrambi x selezionarlo ma cosi non mi va bene, in G8 e H8 non ci deve essere menu tendina.

ora
mi rimane il problema descritto sopra riguardo la macro estraiZZ2:
la macro estraiZZ2 mi riporta i dati di 2 persone con lo stesso nome
mentre io voglio i dati di una sola persona del comune specificato in D8
nella foto infatti mi ha riportati i dati di rossi mario sia di quello di lodi che quello di milano
a me servono solo i dati di quello del comune specif in cella D8


ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: filtro ordini

Postdi cromagno » 04/03/17 08:07

Ciao,
ora non ho il pc, ma scusa.... senza menu a tendina in quelle celle che fai, ogni volta vai nel foglio ordini a controllare le date e i rispettivi ordini per poterli scrivere manualmente in quelle celle???
Mi vuoi dire che non potrà mai capitare di avere due clienti omonimi che vivono nella stessa città?
In quel caso le ipotetiche formule cosa ti dovrebbero restituire?

Ciao
Tore
Avatar utente
cromagno
Utente Junior
 
Post: 66
Iscritto il: 08/10/16 16:33
Località: Sardegna

Re: filtro ordini

Postdi cromagno » 04/03/17 08:19

[EDIT]
anzi.... non ho messo apposta il menu nella cella della via e pensavo che trovassi li l'inghippo :)

Comunque, se vuoi usare le formule, la struttura è identica a quella che ho usato per la provincia... devi solo adattare i riferimenti.
Windows 10 + Office 2013 64bit(ita)
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Avatar utente
cromagno
Utente Junior
 
Post: 66
Iscritto il: 08/10/16 16:33
Località: Sardegna

Re: filtro ordini

Postdi Anthony47 » 04/03/17 19:21

Allora avevo capito bene che il contenuto di riga 8 era da usare come filtro...
Ma questo apre all'ipotesi che il filtro possa portare a piu' nomi di clienti, e allora la sola riga 8 non basterebbe a elencare i dettagli dei vari ordini estratti dal filtro...
Quindi la mia proposta e' questa penultima versione di Sub Estrai:
Codice: Seleziona tutto
Sub EstraiZZ33()
Dim cCol As Long, sCol As Range, I As Long, myNext As Long
'-------------------
'questa macro cerca il cliente del relativo comune in fgl ordini
'e ne riporta i prodotti a lui assegnati
'--------------------
Sheets("riepilogo").Select

'tolgo dati precedenti-------
    Range("g8:K105").Select
    Selection.ClearContents
    Range("C9:K105").ClearContents

With Sheets("ordini")
    For I = 8 To .Cells(Rows.Count, 3).End(xlUp).Row
        If InStr(1, .Cells(I, "C") & " ", Cells(8, "C"), vbTextCompare) > 0 And _
          InStr(1, .Cells(I, "D") & " ", Cells(8, "D"), vbTextCompare) > 0 Then
            Set sCol = .Cells(I, "H")
            myNext = Cells(Rows.Count, "I").End(xlUp).Row + 1
            If myNext < 9 Then myNext = 9                           'ZZZZZ
            Cells(myNext, "G") = sCol.Offset(0, -1).Value
            Cells(myNext, "H") = sCol.Value
           
            myc = sCol.Offset(0, -5)
            Cells(myNext, "C") = myc
            myd = sCol.Offset(0, -4)
            Cells(myNext, "D") = myd
            Cells(myNext, "E") = Evaluate("=IFERROR(INDEX('clienti-prodotti'!E6:E105,MATCH(""" & myc & myd & """,'clienti-prodotti'!C6:C105&'clienti-prodotti'!D6:D105,0)),""Z"")&""""")
            Cells(myNext, "F") = Evaluate("=IFERROR(INDEX('clienti-prodotti'!F6:F105,MATCH(""" & myc & myd & """,'clienti-prodotti'!C6:C105&'clienti-prodotti'!D6:D105,0)),"""")&""""")
           
            Do
                cCol = sCol.End(xlToRight).Column
                If cCol < .Columns.Count Then
                    myNext = Cells(Rows.Count, "I").End(xlUp).Row + 1
                    If myNext < 9 Then myNext = 9
                    Cells(myNext, "I") = .Cells(5, cCol)
                    Cells(myNext, "J") = .Cells(7, cCol)
                    Cells(myNext, "K") = .Cells(I, cCol)
                    Set sCol = .Cells(I, cCol)
                Else
                    Exit Do
                End If
            Loop
        End If
    Next I
End With
Range("b2").Select
End Sub

In questo modo il contenuto di C8 e D8 sara' usato come filtro per estrarre dal database in "ordini"; salvo vincoli posti con la Convalida, sara' possibile ad esempio estrarre anche solo per "parti" di Cognome (es solo Rossi) e di Comune (es mil, per estrarre sia milano che milanello).
Il riepilogo verra' formato da riga 9 in avanti e comprendera' sia i dati anagrafici che i dettagli dell'ordine.
In questa ipotesi le belle formule di cromgno scompaiono dal foglio ma sono incluse nelle righe "Evaluate" della macro.

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

Re: filtro ordini

Postdi cromagno » 04/03/17 19:32

Anthony47 ha scritto:In questa ipotesi le belle formule di cromgno scompaiono dal foglio ma sono incluse nelle righe "Evaluate" della macro.


:)
Windows 10 + Office 2013 64bit(ita)
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
Avatar utente
cromagno
Utente Junior
 
Post: 66
Iscritto il: 08/10/16 16:33
Località: Sardegna

Re: filtro ordini

Postdi raimea » 04/03/17 20:38

ciao
quasi ci siamo.

ora: prov+via+data+num ordine sono ok

pero' non so perche' ma se ad un cliente inserisco piu ordini
consecutivi dalla col I J K...
in fgl riepilogo mi preleva solo l'ultimo prodotto a DX del fgl ordini

Immagine

vi allego il file aggiornato
https://dl.dropboxusercontent.com/u/96374724/preleva.rar

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago

Re: filtro ordini

Postdi Anthony47 » 06/03/17 01:07

Eh, era proprio sbagliata la logica del loop.
Questa e' la vera penultima versione:
Codice: Seleziona tutto
Sub EstraiZZ33()
Dim cCol As Long, sCol As Range, I As Long, myNext As Long
'-------------------
'questa macro cerca il cliente del relativo comune in fgl ordini
'e ne riporta i prodotti a lui assegnati
'--------------------
Sheets("riepilogo").Select

'tolgo dati precedenti-------
'    Range("g9:K105").Select
'    Selection.ClearContents
    Range("C9:K105").ClearContents

With Sheets("ordini")
    For I = 8 To .Cells(Rows.Count, 3).End(xlUp).Row
        If InStr(1, .Cells(I, "C") & " ", Cells(8, "C"), vbTextCompare) > 0 And _
          InStr(1, .Cells(I, "D") & " ", Cells(8, "D"), vbTextCompare) > 0 Then
            Set sCol = .Cells(I, "H")
            myNext = Cells(Rows.Count, "I").End(xlUp).Row + 1
            If myNext < 9 Then myNext = 9                           'ZZZZZ
            Cells(myNext, "G") = sCol.Offset(0, -1).Value
            Cells(myNext, "H") = sCol.Value
'
            myc = sCol.Offset(0, -5)
            Cells(myNext, "C") = myc
            myd = sCol.Offset(0, -4)
            Cells(myNext, "D") = myd
            Cells(myNext, "E") = Evaluate("=IFERROR(INDEX('clienti-prodotti'!E6:E105,MATCH(""" & myc & myd & """,'clienti-prodotti'!C6:C105&'clienti-prodotti'!D6:D105,0)),""Z"")&""""")
            Cells(myNext, "F") = Evaluate("=IFERROR(INDEX('clienti-prodotti'!F6:F105,MATCH(""" & myc & myd & """,'clienti-prodotti'!C6:C105&'clienti-prodotti'!D6:D105,0)),"""")&""""")
            coladdr = Cells(I, "A").Resize(1, Columns.Count - 10).Address(0, 0)
            lastc = Evaluate("=max((Ordini!" & coladdr & "<> """")*(column(" & coladdr & ")))")    '***
            For j = 9 To lastc
'            Do
'                cCol = sCol.End(xlToRight).Column
                If .Cells(I, j) <> "" Then
                    myNext = Cells(Rows.Count, "I").End(xlUp).Row + 1
                    If myNext < 9 Then myNext = 9
                    Cells(myNext, "I") = .Cells(5, j)
                    Cells(myNext, "J") = .Cells(7, j)
                    Cells(myNext, "K") = .Cells(I, j)
'                    Set sCol = .Cells(I, cCol)
                End If
'            Loop
            Next j
        End If
    Next I
End With

    Columns("f:f").Select
    Selection.ColumnWidth = 23.5

Range("b2").Select
End Sub

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

Re: filtro ordini

Postdi raimea » 06/03/17 07:39

ciao

tutto ok

grazie ad entrambi per avermi aiutato, GRAZIE

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1408
Iscritto il: 11/02/10 07:33
Località: lago


Torna a Applicazioni Office Windows


Topic correlati a "filtro ordini":


Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti