› Sviluppare funzionalita su Microsoft Office con VBA › Statistica e/o Grafico movimenti giorni e/o mesi
-
AutoreArticoli
-
Avrei voluto presentarmi, ma come?! Non sono molto pratico e scusatemi se...
Vengo al dunque, ho due fogli excel nei quali elaboro e conservo i movimenti giornalieri e mensili. Vorrei fare delle statistiche tipo
1 selezionando un articolo (es. "Pane Bianco 1 Kg")
1a Quanti ne ho venduti il giorno tot,
1b quanti dal giorno tot al giorno tot e
1c quanti in un mese
2 Selezionando una data o un periodo dal giorno tot al giorno tot o un mese
quale articolo è stato venduto di più?
I dati nei due fogli vengono arriornati ogni giorno e ogni mese.
Sono capace di impostare una user ma non ho molta pratica col vba ma nemmeno con i grafici e le tabelle pivot, non saprei neanche quale strumento usare per lo scopo. Volevo un aiuto se è possibile e allego il file con i due fogli e i dati.
Grazie anticipato per l'interesse
Allegati:
You must be logged in to view attached files.Ciao
Volevo un aiuto se è possibile e allego il file con i due fogli e i dati.
Sì, d'accordo, siam qui per "aiutare" ma tu cosa hai tentato di fare. Se dici che non hai molta dimestichezza con Grafici e VBA significa che dovremmo fare noi il lavoro per te?
Non sono di questo parere per due ordini di motivi:
1°) se ti faccio (ammesso che sappia farlo) il lavoro io tu cosa impari?
2°) ancora più importante, se succede un inghippo come lo sistemi?
Ti dico subito che quello che vuoi fare non è affatto difficile (ma non è neppure una passeggiata). Impegnati un po' e noi siamo qui a disposizione.
Ciao,
Mario
Stando in Excel penso che la soluzione più pratica e conveniente sia imparare ad usare le tabelle pivot.
Sempre restando in Excel si può tentare anche con un filtro su altra posizione (nello stesso Foglio o in altro Foglio) e su quanto filtrato impostare il Grafico.
Ciao,
Mario
Grazie Marius44 per aver considerato il mio post ...
Hai ragione, sono convinto di dover imparare, ma come dicevo sono capace di impostare una user quindi riesco a filtrare dei dati con una macro anche se non ho molta pratica col vba quindi ottengo dei dati che non so come renderli "statistici" <em> non saprei neanche quale strumento usare per lo scopo. </em> Qui la mia richiesta di aiuto: Per avere una statistica tipo quella che ho descritto, cosa devo usare? Posso impostare un grafico o è meglio una tabella pivot (che non ho mai usato) Oppure è più pratico tentare di estrapolare le statistiche con delle macro dei filtri etc?
Quindi conoscendo solo un poco di vba ho tentato... ma il massimo che riesco a fare è nel file allegato. Una user con combobox x selezionare cliente/date e list box che dovrei popolare con i risultati. Nel codice vba ho segnato con " '******* " i punti dove o sono in difficoltà o non so proprio come fare. Ma non so se questa è la strada giusta!
Le ceckbox le userei per rendere visibili solo le combobox che servono per il caso.
Ringrazio ancora
Allegati:
You must be logged in to view attached files.Grazie Vecchio frac e mario...
Ho fatto un poco di casini e ho copiato a destra e a manca spezzoni di codici vba e, siccome è la sola conoscenza che ho (e manco tanto) sono riuscito ad ottenere un risultato col vba. Risultato che praticamente mi soddisfa ma è grezzissimo e limitato. Detto ciò condivido il mio lavoro nel caso potesse servire a dare un aiuto a qualche amico. Magari se qualcuno lo perfeziona, lo sistema un poco o magari usa un grafico o una tabella pivot (cosa che mi affascina ma non riesco proprio a capirne il funzionamento sigh.) per ottenere lo stesso scopo, ringrazio.
Ciao a tutti Alfredo
Allegati:
You must be logged in to view attached files.Ciao
Complimenti per l'ottimo lavoro (alla faccia del principiante.....)
Con Excel-VBA tutto e sempre è "migliorabile" (ma io direi: "meglio adattabile al proprio gusto").
Se ti soddisfa, va benissimo così! Grazie per la condivisione.
Ciao,
Mario
PS - Parlavi anche di "grafico" che, però, non vedo (ma non mi sembra necessario).
PS - Parlavi anche di "grafico" che, però, non vedo (ma non mi sembra necessario).
Grazie per il complimento, ho bisogno di lavorarci su, al grafico, non li ho mai usati! Ma se riesco sarò felice di condividere.
Buona Giornata
Io sono il solito rompiscatole e noto che manca Option Explicit, che ti invito a inserire sempre i testa a tutti i tuoi moduli 🙂
L'eventuale grafico, mi par di capire, è una feature aggiuntiva, un risultato desiderato. Credo che si possa realizzare nel form stesso, ma dovrei documentarmi un po'.
Grazie Vecchio frac x il consiglio che vedrò di applicare appena ho tempo, e grazie x e se mi informi nel caso del grafico.
Scusate se approfitto, magari è una cosa semplice che a me sfugge... ma sto picchiando la testa contro un muro e vorrei un parere: Sempre nella stessa user ho aggiunto una textbox dove recupero il peso degli articoli che sto movimentando con una funzione aggiunta nella sub "Private Sub CalcFiltro()". Quando avvio la user e fa il calcolo senza alcun filtro è tutto ok, poi se aggiungo un filtro (es seleziono "Pane Bianco 500 Gr") mi si impalla o mi da "0" o va in errore. Sono certo che il problema sta sul metodo ".SpecialCells(xlCellTypeVisible).Row" che uso per determinare le righe, ma non ne vengo a capo. Vi allego il file e vi ringrazio anticipatamente.
Allegati:
You must be logged in to view attached files.Artdb = Sheets("DbGiorn").Cells(urodbnew, 3) ArtAr = Sheets("Archivio").Cells(urocicla, 3).SpecialCells(xlCellTypeVisible) If Artdb = ArtAr Then 'trova la corrispondenza articolo fra archivio e db
A me si inchioda già quando faccio un filtro. Del resto Artdb assume un valore stringa ben definito ma ArtAr è... boh, e questo è uno degli effetti spiacevoli della mancata dichiarazione di Option Explicit. Naturalmente non puoi confrontare Artdb con ArtAr perchè questo (che potrebbe essere un range) non può sopportare un confronto in questo modo.
Buongiorno e grazie per l'interesse.
A me si inchioda già quando faccio un filtro.
Si... come dicevo nel precedente post, quando parte il file si avvia in automatico la user e mi và a calcolare il peso tenendo conto dell'intero archivio, quindi senza nessun filtro, e funziona. Cioè quando confronta le stringhe di testo nella variabili "Artdb" e "ArtAr" va che è una favola e mi riporta il valore 4,5 nella textbox5 con etichetta "Peso Totale". Appena applico un filtro in Archivio questo non funziona più, qualcosa si inceppa!!!
Naturalmente non puoi confrontare Artdb con ArtAr perchè questo (che potrebbe essere un range) non può sopportare un confronto in questo modo.
Ho dichiarato le variabili come stringa (Dim Artdb As String Dim ArtAr As String) queste, quando non è applicato alcun filtro, si caricano con la Descrizione Articolo. La prima prende la descrizione articolo dal foglio "DbGiorn" e la seconda dal foglio "Archivio". Invece, quando viene applicato il filtro al foglio "Archivio" la seconda variabile resta vuota e mi da errore "1004 Tipo non corrispondente" . Ho notato che "UroArchivio" dovrebbe riportare il numero dell'ultima riga visibile dopo il filtro ad esempio "4" invece risulta "1" (uroArchivio = Sheets("Archivio").Range("B65536").End(xlUp).SpecialCells(xlCellTypeVisible).Row). Non và!
Ci sbatto ancora la testa, anche con le variabili dichiarate! Oggi, domani e domenica si lavora a go go giorno e notte, avrò poco tempo (paneeee) ma farò altre prove. Accetto con molto piacere altri suggerimenti, grazie amici e grazie vecchio frac
Ho cercato di approfondire il codice ma mi ballano un po' gli occhi.
Saresti così paziente da spiegarmi (quando puoi) cosa deve fare CalcFiltro? Qual è la logica di questa routine? mi sto incasinando tra For, Do While e Ifs, anche perchè anche l'indentazione non è corretta e forse anche perchè son un po' di coccio.
Per il resto, buon pane 🙂
Forse sto cominciando a capire...
- per ogni voce in "descrizione" dell'archivio, conto quanti ne ho
- se il prodotto ha una voce di "incidenza" (che nel codice chiami "peso"), moltiplico tale voce per il numero di prodotti corrispondenti
- sommo quindi tra loro le voci di "incidenza" dei prodotti che ne hanno una
- divido il risultato per 1.000
Quindi nel tuo file di esempio io ho:
- "Pane Bianco 1 Kg" ha una voce di "incidenza" pari a 1.000 e ho 3 voci per questo prodotto (subtotale parziale 3.000)
- "Pane Bianco 500 Gr" ha una voce di "incidenza" pari a 500 e ho 3 voci per questo prodotto (subtotale parziale 1.500)
- La somma di 3.000 + 1.500 fa 4.500, divido per 1.000 e ottengo 4,5 che è il risultato che dici essere corretto (va che è una favola e mi riporta il valore 4,5 nella textbox5 con etichetta "Peso Totale").
Giusto così il mio ragionamento o no?
ps non aver fretta di rispondermi. In questi giorni sono di seggio e non sarò presente in forum
Hai capito perfettamente!!!
Come tutti i fine settimana, e per noi inizia il venerdi notte, dovrò preparare qualche migliaia di pezzi di pane, buon seggio !
Però che fame che mi fai venire, sento già il profumo del pane fresco 😛
Buon lavoro a te. Io sto cominciando a pensare di introdurti nel magico mondo dell'interazione fra Excel e ADO (c'è un mio articoletto recente nel blog). Tutte queste operazioni si fanno in modo indolore e velocissimo senza cicli e sbattimenti 🙂
Durante una lunga notte di lavoro si ha tempo per meditare ed ho avuto una idea, semplice un poco spartana ma si è rivelata funzionante. Ho pensato che siccome mi si presenta l'errore solo se applico un filtro sul foglio "Archivio" come posso fare per aggirare il sistema? Bene aggiungo un foglio (nome "Leggimi") dentro al quale copio i dati filtrati dal foglio "Archivio" poi faccio girare la parte della sub "CalcFiltro" che mi dava errore sui dati nel foglio "Leggimi" che adesso non presentano un filtro, e ho risolto!!!
Certo la soluzione è buona perchè ottengo ciò che volevo, ma non sono riuscito a capire come mai non andava col filtro. Qui sotto metto le due sub che ho usato e la modifica fatta alla sub "CalcFiltro" per essere chiaro e per tutti gli amici che possono aver bisogno, Ma appena ho tempo e compilo perbene il file lo posto in allegato ai miei prossimi saluti.
Grazie
Mi preparo per altra notte di fuoco
Modifica alla sub "CalcFiltro":
Sheets("Archivio").Select
'Se ci sta un fitro
If ActiveSheet.AutoFilterMode = True Then
'lancia macro
Call SpostaPeso
Exit Sub
End Ifle due sub: la prima sposta i dati e la seconda li cicla, con lo stesso metodo della sub "CalcFiltro" ma con i riferimenti al foglio "Leggimi"
Private Sub SpostaPeso() 'provo a usare x risolvere errore sopra MANCA ELIMINA DATI COPIATI ALLA FINE
'mi serve un Archivio per ciclare le righe filtrate a salire altrimenti va in errore
'Quindi mi copio i dati filtrati in un altro foglio e poi li cicloOn Error GoTo RigaErrore
Dim shArch As Worksheet
Dim shLeg As Worksheet
Dim lRiga As Long
Dim rng As RangeWith ThisWorkbook
Set shArch = .Worksheets("Archivio")
Set shLeg = .Worksheets("Leggimi")
End WithWith shArch
lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
Set rng = .Range("A1:F" & lRiga).SpecialCells(xlCellTypeVisible)
rng.Copy Destination:=shLeg.Range("A1")
End WithRigaChiusura:
Set rng = Nothing
Set shLeg = Nothing
Set shArch = Nothing
Call FiltroPeso
Exit SubRigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusuraEnd Sub
Sub FiltroPeso()
Sheets("Leggimi").Select
uroLeggimi = Sheets("Leggimi").Range("B65536").End(xlUp).SpecialCells(xlCellTypeVisible).Row
Sheets("DbGiorn").Select
uroDb = Sheets("DbGiorn").Range("B65536").End(xlUp).SpecialCells(xlCellTypeVisible).Row
urodbnew = uroDb
urocicla = uroLeggimi'ad ogni riga di Leggimi se trovo incidenza nella colonna H di db
For n = 1 To uroLeggimi
urodbnew = uroDb
Do While urodbnew <> 1
Artdb = Sheets("DbGiorn").Cells(urodbnew, 3)
ArtAr = Sheets("Leggimi").Cells(urocicla, 3).SpecialCells(xlCellTypeVisible)
If Artdb = ArtAr Then
If Sheets("DbGiorn").Cells(urodbnew, 8) > 1 Then
peso = Sheets("DbGiorn").Cells(urodbnew, 8)
Xtot = Sheets("Leggimi").Cells(urocicla, 1).SpecialCells(xlCellTypeVisible)
Incidenza = peso * Xtot
TotInc = TotInc + Incidenza
peso = ""
Xtot = ""
Incidenza = ""
urodbnew = 1
Else
urodbnew = 1
End If
Else
urodbnew = urodbnew - 1
End If
Loop
urocicla = urocicla - 1
Next
TextBox5.Value = CDbl(TotInc) / 1000'svuota leggimi
Sheets("Leggimi").Select
Sheets("Leggimi").Range("A1:F" & uroLeggimi).Select
Selection.ClearContents
End SubFelice week End
Eccomi... allego il file finalmente funzionante 100% anche se devo testare alcune cosine e sistemare ancora un poco, aggiungo tutto l'archivio e faccio le prove. Gradisco comunque suggerimenti e/o spiegazioni sia per il problemino "irrisolto" che per la compilazione (che non è molto elegante). Ancora grazie e a buon rendere
Alfredo
Allegati:
You must be logged in to view attached files. -
AutoreArticoli