Sviluppare funzionalita su Microsoft Office con VBA Statistica e/o Grafico movimenti giorni e/o mesi

Login Registrati
Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
  • Autore
    Articoli
  • #16000 Score: 0 | Risposta

    Alfredotto
    Partecipante

      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.
      #16005 Score: 0 | Risposta

      Marius44
      Moderatore
        51 pts

        Ciao

        Alfredotto ha scritto:

        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

        #16019 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          238 pts

          Stando in Excel penso che la soluzione più pratica e conveniente sia imparare ad usare le tabelle pivot.

          #16025 Score: 0 | Risposta

          Marius44
          Moderatore
            51 pts

            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

            #16029 Score: 0 | Risposta

            Alfredotto
            Partecipante

              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.
              #16250 Score: 0 | Risposta

              Alfredotto
              Partecipante

                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.
                #16253 Score: 0 | Risposta

                Marius44
                Moderatore
                  51 pts

                  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).

                  #16277 Score: 0 | Risposta

                  Alfredotto
                  Partecipante

                    Marius44 ha scritto:

                    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

                    #16281 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      238 pts

                      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'.

                      #16310 Score: 0 | Risposta

                      Alfredotto
                      Partecipante

                        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.
                        #16315 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          238 pts
                          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.

                          #16333 Score: 0 | Risposta

                          Alfredotto
                          Partecipante

                            Buongiorno e grazie per l'interesse.

                            vecchio frac ha scritto:

                            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!!!

                            vecchio frac ha scritto:

                            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

                            #16334 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              238 pts

                              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 🙂

                              #16335 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                238 pts

                                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

                                #16336 Score: 0 | Risposta

                                Alfredotto
                                Partecipante

                                  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 !

                                  #16340 Score: 0 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    238 pts

                                    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 🙂

                                    #16352 Score: 0 | Risposta

                                    Alfredotto
                                    Partecipante

                                      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 If

                                      le 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 ciclo

                                      On Error GoTo RigaErrore

                                      Dim shArch As Worksheet
                                      Dim shLeg As Worksheet
                                      Dim lRiga As Long
                                      Dim rng As Range

                                      With ThisWorkbook
                                      Set shArch = .Worksheets("Archivio")
                                      Set shLeg = .Worksheets("Leggimi")
                                      End With

                                      With shArch
                                      lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
                                      Set rng = .Range("A1:F" & lRiga).SpecialCells(xlCellTypeVisible)
                                      rng.Copy Destination:=shLeg.Range("A1")
                                      End With

                                      RigaChiusura:
                                      Set rng = Nothing
                                      Set shLeg = Nothing
                                      Set shArch = Nothing
                                      Call FiltroPeso
                                      Exit Sub

                                      RigaErrore:
                                      MsgBox Err.Number & vbNewLine & Err.Description
                                      Resume RigaChiusura

                                      End 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 Sub

                                      #16353 Score: 0 | Risposta

                                      Alfredotto
                                      Partecipante

                                        Felice week End  

                                        #16407 Score: 0 | Risposta

                                        Alfredotto
                                        Partecipante

                                          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.
                                        Login Registrati
                                        Stai vedendo 19 articoli - dal 1 a 19 (di 19 totali)
                                        Rispondi a: Statistica e/o Grafico movimenti giorni e/o mesi
                                        Gli allegati sono permessi solo ad utenti REGISTRATI
                                        Le tue informazioni: