Sviluppare funzionalita su Microsoft Office con VBA Calcoli in userform con doppia condizione

LoginRegistrati
Stai vedendo 21 articoli - dal 1 a 21 (di 21 totali)
  • Autore
    Articoli
  • #26397 Risposta
    Dodi
    Dodi
    Partecipante

      Buon giorno a tutti 

      sono un paio di anni che mi diletto a creare delle userform, 

      il tutto per aggevolarmi nel lavoro ; ma  più volte ho chiesto il vostro  prezioso aiuto, e quindi anche questa volta chiedo mi rivolgo a voi maestri in vba, ringraziandovi anche per gli aiuti e per gli esempi che mi avete suggerito per arrivare al risultato che cercavo.  

      cmq arrivo al punto. 

      Allego il file per far capire di cosa mi occorre. 

      al cliccare sul tasto "Avvio Gestionale" si apre un userfom. 

      come potete vedere è strutturata nello stesso modo della  tabella presente sul foglio excel nell'area evidenziata in giallo. 

      sto ricreando la stessa tabella sull'userfom. 

      in pratica se si clicca sul tasto "calcola" mi dovrebbe dare gli stessi risultati della tabella di excel. 

      io son riuscito a impostare la parte del calcolo più semplice. e cioè avere i risultati nelle textbox sotto i centri di costo, per ogni centro di Costo (Manodopera, Materiali,Sub_Appalti, Noleggi ecc ecc...) 

      premetto i dati li ricerco nella listBox. 

      ora mi servirebbe una formula che mi  mi trova per ogni singolo centro di costo, 

      esempio: "Manodopera" i costi diretti e i costi indiretti, 

      quindi mi servirebbe una formula  con doppia condizione. e cioè prendere i dati nella listbox nella colonna 6 e nella colonna 7.

      e avere il risultato nella textbox di riferimento. 

      non so se mi son spiegato bene. 

      ma se cliccate ad esempio sulla cella "K5" sul foglio excel vedete cosa fa la formula in excel. 

      e la stessa funzione mi serve nella userform con codice VBA.

      sicuramente mi direte. non e più semplice copiare i dati da excel e metterli in userform? 

      bhe nel foglio excel la tabella quando inserisco dei dati utilizzando un'altra userfom ci mette moltissimo tempo a caricare i dati rallentando e ci mette un eternità a registrare i dati sul foglio excel,   

      perchè la tabella così come è strutturata fa i calcoli e si aggiorna volta volta che inserisco una riga di dati. 

      e  quaindi vorrei far fare i calcoli in userform e poi copiarli nel foglio excel. quindi procedimento inverso. 

       

      poi avrei un altro problema. ma non so se devo aprire un'altra discussione o meno. il problema e legato sempre alla stessa userfom e allo stesso codice di calcolo, utilizzando il tasto "calcola".

      ma questo lo vediamo magari dopo. 

      resto in attesa di vostro prezioso aiuto. 

      ringrazio anticipatamente. 

       

       

       

      Allegati:
      You must be logged in to view attached files.
      #26400 Risposta
      albatros54
      albatros54
      Moderatore
        51 pts

        se ho capito, ti posto questi spezzoni di codice, modifica il codice del tasto "calcola"

        con questi spezzoni, se abbiamo raggiunuto  lo scopo fai le modifiche al restante codice.

        If Me.ListBox1.List(scorri2, 6) = "Manodopera" Then
                    Tot1 = Tot1 + CDbl(Me.ListBox1.List(scorri2, 23))
                    If Me.ListBox1.List(scorri2, 7) = "diretto" Then
                        Tot1dir = Tot1dir + CDbl(Me.ListBox1.List(scorri2, 23))
                    ElseIf Me.ListBox1.List(scorri2, 7) = "indiretto" Then
                        Tot1ind = Tot1ind + CDbl(Me.ListBox1.List(scorri2, 23))
                    End If
        Me.TextBox219.Value = Tot1
            TextBox219 = Format(TextBox219, "€  #,##0.00")
            Me.TextBox234.Value = Tot1dir
            TextBox234 = Format(TextBox234, "€  #,##0.00")
            Me.TextBox242.Value = Tot1ind
            TextBox242 = Format(TextBox242, "€  #,##0.00")
            Me.TextBox220.Value = Tot2
            TextBox220 = Format(TextBox220, "€  #,##0.00")

         


        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #26403 Risposta
        Dodi
        dodi

          Albatros 

          grazie per la risposta, 

          ora avrei il secondo problema, 

          se una text box e vuota e non contiene nessun numero e devo fare il totale nella texbox 245

          mi va in errore. 

           

          se vedi il file che ti ho inviato c'e  la TextBox1 che la uso per filtrare i dati dalla ListBox. 

          se scrivi ad esempio "Muggia"  e poi clicchi sul tasto calcola va in errore perchè alcune textbox non contengono valori, come posso risolvere questo problema? 

          tornerebbe comodo che se non ci sono valori nella textbox scrive il valore zero "0"

           

          e fattibile?

           

          grazie

          #26405 Risposta
          albatros54
          albatros54
          Moderatore
            51 pts

            modifica il codice come quello che ti posto.

            Me.TextBox219.Value = IIf(Tot1 > 0, Tot1, 0)
                TextBox219 = Format(TextBox219, "€  #,##0.00")
                Me.TextBox234.Value = Tot1dir
                TextBox234 = Format(TextBox234, "€  #,##0.00")
                Me.TextBox242.Value = Tot1ind
                TextBox242 = Format(TextBox242, "€  #,##0.00")
                Me.TextBox220.Value = IIf(Tot2 > 0, Tot2, 0)
                TextBox220 = Format(TextBox220, "€  #,##0.00")
            
                Me.TextBox221.Value = IIf(Tot3 > 0, Tot3, 0)
                TextBox221 = Format(TextBox221, "€  #,##0.00")
            
                Me.TextBox222.Value = IIf(Tot4 > 0, Tot4, 0)
                TextBox222 = Format(TextBox222, "€  #,##0.00")
            
                Me.TextBox223.Value = IIf(Tot5 > 0, Tot5, 0)
                TextBox223 = Format(TextBox223, "€  #,##0.00")
            
                Me.TextBox224.Value = IIf(Tot6 > 0, Tot6, 0)
                TextBox224 = Format(TextBox224, "€  #,##0.00")
            
                Me.TextBox225.Value = IIf(Tot7 > 0, Tot7, 0)
                TextBox225 = Format(TextBox225, "€  #,##0.00")
            
                Me.TextBox226.Value = IIf(Tot8 > 0, Tot8, 0)
                TextBox226 = Format(TextBox226, "€  #,##0.00")    '<<<=======AGGIUNGI sotto
            

             

             


            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
            Sempre il mare, uomo libero, amerai!
            ( Charles Baudelaire )
            #26406 Risposta
            Dodi
            dodi

              Grazie mille 

              ho applicato la stessa formattazione anche alle textBox dei costi diretti e indiretti. 

               

              grazie mille. 

              e come sempre mi aiuti moltissimo. ma ringrazio tutti voi del forum. 

               

               

              #26407 Risposta
              Dodi
              dodi

                Ciao Albatros. 

                nella stessa userform mi son imbattuto in un altro problema. 

                 

                sotto o postato la formula ma mi va in errore. 

                 

                in pratica nella textbox 263 dovrei avere la somma delle percentuali presenti nelle textBox 254-255-256-257-258-259-260-261.

                come detto la formattazione ein percentuale. 

                ma quando devo fare il totale mi va in errore, come mai? dove sbaflio?

                 

                te ne sarei grato per quest'ulteriore aiuto. 

                 

                 

                 

                '----------------------------------------------------------------------
                'Formula per calcolo incidenda e percentuale tra Valori nelle TextBox
                '----------------------------------------------------------------------

                TextBox261 = CLng(TextBox219) / CLng(TextBox245)
                TextBox261 = Format(TextBox261, " #,##0 %")

                TextBox260 = CLng(TextBox220) / CLng(TextBox245)
                TextBox260 = Format(TextBox260, " #,##0 %")

                TextBox259 = CLng(TextBox221) / CLng(TextBox245)
                TextBox259 = Format(TextBox259, " #,##0 %")

                TextBox258 = CLng(TextBox222) / CLng(TextBox245)
                TextBox258 = Format(TextBox258, " #,##0 %")

                TextBox257 = CLng(TextBox223) / CLng(TextBox245)
                TextBox257 = Format(TextBox257, " #,##0 %")

                TextBox256 = CLng(TextBox224) / CLng(TextBox245)
                TextBox256 = Format(TextBox256, " #,##0 %")

                TextBox255 = CLng(TextBox225) / CLng(TextBox245)
                TextBox255 = Format(TextBox255, " #,##0 %")

                TextBox254 = CLng(TextBox226) / CLng(TextBox245)
                TextBox254 = Format(TextBox254, " #,##0 %")
                '----------------------------------------------------------------------------------------
                'Formula per calcolare il totale delle percentuali dei costi indiretti nella TextBox 263
                '----------------------------------------------------------------------------------------
                TextBox263 = CDbl(TextBox261) + CDbl(TextBox260) + CDbl(TextBox259) + CDbl(TextBox258) + CDbl(TextBox257) + CDbl(TextBox256) + CDbl(TextBox255) + CDbl(TextBox254)
                TextBox263 = Format(TextBox263, " #,##0 %")

                #26408 Risposta
                albatros54
                albatros54
                Moderatore
                  51 pts

                  nel file che hai allegato precedentemente, nella userform non vedo nessuna "TextBox 263"

                   


                  Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                  Sempre il mare, uomo libero, amerai!
                  ( Charles Baudelaire )
                  #26409 Risposta
                  Dodi
                  Dodi
                  Partecipante

                    si scusami e vero, 

                    non ci avevo fatto caso che l'avevo inserita successivamente all'invio del file. 

                    in pratica la textbox 263 si trova sotto tutte le tesxtbox dell'incidenza della percentuale sui costi indiretti. 

                    riallego il file per far capire dove e situato, 

                    chiedo scusa. ma cosa sbaglio nella formula che avevo postato? 

                     

                    grazie. 

                    Allegati:
                    You must be logged in to view attached files.
                    #26411 Risposta
                    albatros54
                    albatros54
                    Moderatore
                      51 pts

                      Dodi ha scritto:

                      in pratica la textbox 263 si trova sotto tutte le tesxtbox dell'incidenza della percentuale sui costi indiretti. 

                      ho visto , pero tu dovresti allegare il file con le modifiche che ti ho suggerito, perchè altrimenti debbo ricreare lo scenrio per intero.....e mi scoccia un pochettino, per quanto riguarda la formula , avrei bisogno di capire con quali valori si riempiono,se la formula che hai postato non funziona, sicuramente è da riportare aò fatto che le varie textbox sono vuote.

                       

                       


                      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                      Sempre il mare, uomo libero, amerai!
                      ( Charles Baudelaire )
                      #26412 Risposta
                      Dodi
                      Dodi
                      Partecipante

                        eccolo

                        son riuscito a scrivere il codice per fare la somma delle percentuali, 

                        dopo vari tentativi ce l'ho fatta, ma ora ho il problema di formattare la textbox 263 dove mi deve dare il risultato. 

                        che sommando le textbox 254-255-256-257-258-259-260-261, il risultato dovrebbe essere il 100%, 

                        mi dai un occhio a questa cosa?  magari mi consideri gli arrotondamenti? 

                         

                         

                         

                        grazie

                         

                        Allegati:
                        You must be logged in to view attached files.
                        #26414 Risposta
                        albatros54
                        albatros54
                        Moderatore
                          51 pts

                          modifica la riga cosi:

                          Me.TextBox263.Value = Val(Me.TextBox261.Value) + Val(Me.TextBox260.Value) + Val(Me.TextBox259.Value) + Val(Me.TextBox258.Value) + Val(Me.TextBox257.Value) + Val(Me.TextBox256.Value) + Val(Me.TextBox255.Value) + Val(Me.TextBox254.Value)
                          Me.TextBox263.Value = Format(TextBox263 / 100, "# %")

                           

                           


                          Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                          Sempre il mare, uomo libero, amerai!
                          ( Charles Baudelaire )
                          #26415 Risposta
                          Dodi
                          Dodi
                          Partecipante

                            Grazie per la soluzione, 

                            ma riscontro un problema nel totale della percentuale,

                            come puoi ben vedere ce un problema di arrotondamento, 

                            in pratica se clicchi sul tasto calcola il risultato nella textBox 263 da come risultato 101%

                             

                            se faccio la somma con la calcolatrice da 101%

                            mentre se guardi nel foglio excel, e più precisamente nella cella "G23" il risultato e 100% quindi giusto. 

                            probabilmente nella formula Vba andrà preso in considerazione l'arrotondamento. 

                             

                            potresti gentilmente vedere dove sbaglio? 

                            allego il file 

                            grazie

                            e scusa per l'ammattimento

                            Allegati:
                            You must be logged in to view attached files.
                            #26424 Risposta
                            Dodi
                            Dodi

                              Buon giorno Albatros,

                              Da ieri sera che provo ma mi sono arrenato nel problema degli arrotondamenti, perché la somma delle texbox dovrebbe darmi 100% e non 101% o 99% 

                              D9ve sbaglio? Potresti darmi una mano gentilmente?  Non so più dove battere la testa, sicuramente e una sciocchezza ma avvolte le cose semplici sono sotto il naso e mi perdo chi sa in quale soluzione. 

                              Te ne sarei grato se riprendi la discussione e potresti aiutarmi. Ieri sera avevo allegato il file con il codice rivisto, ma se vedi al cliccare sul tasto calcola dell'userfom mi da come totale 101% 

                               

                              Grazie mille 

                              #26435 Risposta
                              albatros54
                              albatros54
                              Moderatore
                                51 pts

                                Dodi ha scritto:

                                Te ne sarei grato se riprendi la discussione e potresti aiutarmi. Ieri sera avevo allegato il file con il codice rivisto, ma se vedi al cliccare sul tasto calcola dell'userfom mi da come totale 101% 

                                il problema degli arrotondamenti , in Excel , è stato sempre un problema.

                                Il totale di 101 è matematicamente giusto, pero tu fai notare , che nella cella del foglio di excel il totale è 100.Ho provato a estrapolare i valore delle varie celle che fanno il totale nella cella"G23" pero mi sono arreso, perche la formuòa fa dei confronti con altre celle e mi sono perso.A questo punto non so che dirti, pero ripeto il totale 101 è matematicamente GIUSTO.

                                Puoi fare una verifica: apri il file di excel, vaisul menu "File" e scegli "opzioni",seleziona "impostazioni Avanzate", scorri la barra laterale fino ad evidenziare "Formule",metti la spunta su"Imposta approssimazione come visualizzata" esci e salva il file, ore se riapri il file nella cella"G23" trovera 101 come valore

                                 


                                Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                Sempre il mare, uomo libero, amerai!
                                ( Charles Baudelaire )
                                #26437 Risposta
                                Dodi
                                Dodi

                                  Capisco. 

                                  In effetti avevo provato già a cambiare le impostazioni di Excel e mi dava anche a me 101, 

                                  E ho cercato per mari e monti su internet per capire se vi era un modo in vba per fare gli arrotondamenti. 

                                  Ma a quando sembra mi dai conferma anche te che sei un esperto che non ce un modo. Avevo provato anche a formattare con modo diverso le techno che entravano in gioco per la somma, ma cambiando la formattazione alla 3 cifra decimale dopo la virgola mi dava 99, 

                                  Quindi presumevo che c'era un modo per far arrotondare i risultati e avere 100% come somma. 

                                   

                                  Cmq grazie mille, ma se ti viene in mente un modo, sarei lieto di poter apprendere anche una cosa nuova. Che da ieri mi fa ammattire. 

                                  #26440 Risposta
                                  Dodi
                                  Dodi
                                  Partecipante

                                    Ciao Albatros. 

                                    Volevo inviarti il file perchè ho trovato un espediente che funziona. ti può tornare utile magari per aiutare e suggerire  se qualche  utente del forum  ti chiede una cosa simile. 

                                    in pratica nelle  TextBox ho tolto la formattazione che faceva comparire il simbolo "%", perchè a quando sembra non riconoscendo il simbolo, il calcolo non prendeva in considerazione i numeri decimali dopo la virgola. 

                                    ho optato per far comparire nelle textBox solo i numeri approssimati alla terza cifra decimale, mentre il simbolo "%" l'ho messo come Label al lato della TextBox. 

                                    ti allego il file per vedere  come ho fatto.

                                    Mentre nella textBox Totale Percentuale ora  mi da il 100%.  ho sbattuto un pò la testa ma son riuscito ad optare per questa soluzione; che a quando sembra funziona,  (Ti può tornare utile per suggerire a qualcun altro la soluzione) ammesso che qualcuno non conosca modo diverso per far il calcolo giusto con il simbolo %).

                                    Poi nell'occasione volevo chiederti come mai se filtro utilizzando la textBox1 e scrivo dentro Muggia, e poi clicco sul tasto calcola mi va in errore, 

                                    il codice è  giusto, puoi dirmi ora dove sbaglio? 

                                    probabilmente il codice quando si trova a fare (Zero diviso zero) oppure un Numero diviso Zero va in errore, cosa posso fare?.  mentre se provi a filtrare  (MUGGIA) sul foglio excel  e prendi in esame ad esempio la cella "N9"  avevo optato per utilizzare questa funzione, che controlla se il valore della cella M9 e maggiore di Zero allora divide il valore della cella M9 con il valore  della cella I9, altrimenti se la condizione non soddisfa scrivi zero.    

                                    =SE(M9>0;M9/$I$9;0)

                                     

                                    ma in VBA non so come si possa replicare una cosa del genere, 

                                    Potresti essere così gentile ad aiutarmi? 

                                    come puoi vedere ci metto molto impegno ad imparare e provo a cercare soluzioni, ma in certe cose ho bisogno di aiuto, perchè sono un autodidatta, ma molto curioso di imparare e apprendere cose nuove.  

                                    saluti e grazie mille per il tuo prezioso aiuto. 

                                    Allegati:
                                    You must be logged in to view attached files.
                                    #26442 Risposta
                                    albatros54
                                    albatros54
                                    Moderatore
                                      51 pts

                                      Dodi ha scritto:

                                      ho optato per far comparire nelle textBox solo i numeri approssimati alla terza cifra decimale, mentre il simbolo "%" l'ho messo come Label al lato della TextBox

                                      questa soluzione l'avevo provato pure io, ma non te l'ho proposta per non mischiare le carte, bene questo problema è stato risolto.

                                      Dodi ha scritto:

                                      =SE(M9>0;M9/$I$9;0)

                                       

                                      ma in VBA non so come si possa replicare una cosa del genere

                                      certo, ti posto il codice:

                                      If CLng(TextBox267) = 0 Then
                                      TextBox264 = 0
                                      TextBox264 = Format(TextBox264 / 100, "#%")
                                      Else
                                      TextBox264 = (CLng(TextBox265) / CLng(TextBox267) * 100)
                                      TextBox264 = Format(TextBox264 / 100, "#%")
                                      End If

                                      pero ora sorge un'altro grosso problema con questo Routine,quando tu fai la selezione, il codice ti va in overflow perche lui continua a fare i calcoli delle varie celle , che sono con valore "0", quindi  ti da errore, bisognerebbe trovare il modo da dirgli " controlla il valore delle textbox dove debbo effettuare il calcolo, se queste sono uguale a "0" non effettuare il calcolo".

                                       

                                       


                                      Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                      Sempre il mare, uomo libero, amerai!
                                      ( Charles Baudelaire )
                                      #26443 Risposta
                                      albatros54
                                      albatros54
                                      Moderatore
                                        51 pts

                                        per superare l'errore overflow, ho buttato giu due righe di codice, studiale comprendile e ripetile per le altre textbox

                                        if CLng(TextBox219) = 0 Then
                                                TextBox253 = 0
                                                TextBox253 = Format(TextBox253 / 100, "#%")
                                            Else
                                                TextBox253 = CLng(TextBox242) / CLng(TextBox219)
                                                TextBox253 = Format(TextBox253, " #,##0.00000") * 100
                                            End If
                                            If CLng(TextBox220) = 0 Then
                                                TextBox252 = 0
                                                TextBox252 = Format(TextBox252, " #,##0.00000") * 100
                                            Else
                                                TextBox252 = CLng(TextBox241) / CLng(TextBox220)
                                                TextBox252 = Format(TextBox252, " #,##0.00000") * 100
                                            End If

                                         


                                        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                        Sempre il mare, uomo libero, amerai!
                                        ( Charles Baudelaire )
                                        #26444 Risposta
                                        Dodi
                                        Dodi

                                          Bhe e quello che mi capitava prima, perché avevo provato a mettere l'apice davanti alla formula per renderla nulla, e mi trovava l'errore sulla riga successiva.

                                          E per quello mi ero rivolto a te. Sperando di avere una Routine o una formattazione affinché non mi va in errore, 

                                          Cmq le test box che vanno in errore con il calcolo sono: 246-247-248-249-250-251-252-253- 262- insomma tutte le test box sotto la percentuale incidenza dei costi indiretti. 

                                          E poi la textbox 265 mattina e la box 264 Ricavi.

                                           

                                          Sono quelle che entrano in calcolo con valori che possono esser zero. 

                                           

                                          Domanda se sostituisco a tutte queste textbox la soluzione che mi hai postato pensi che risolvo? 

                                          Te lo chiedo perché al momento non ho modo di verificare e provare. 

                                          Intanto grazie. Magari domani non appena posso provare, ti faccio sapere. 

                                          E invece se a te ti viene in mente come risolvere il problema sarei contento di ricevere la tua soluzione. 

                                           

                                          Saluti 

                                           

                                          #26446 Risposta
                                          Dodi
                                          dodi

                                            Grazie per la seconda soluzione che mi hai postato. 

                                             

                                            domani non appena ho modo di provare ti faccio sapere. 

                                             

                                            grazie mille e intanto buona serata. 

                                             

                                            #26464 Risposta
                                            Dodi
                                            Dodi
                                            Partecipante

                                              Albatros Buon giorno

                                              Obiettivo centrato. 

                                              grazie mille, ho letto e capito molto bene la tua soluzione. 

                                                 

                                               

                                              ti saluto.

                                            LoginRegistrati
                                            Stai vedendo 21 articoli - dal 1 a 21 (di 21 totali)
                                            Rispondi a: Calcoli in userform con doppia condizione
                                            Gli allegati sono permessi solo ad utenti REGISTRATI
                                            Le tue informazioni:



                                            vecchio frac - 2750 risposte

                                            albatros54
                                            albatros54 - 1009 risposte

                                            patel
                                            patel - 908 risposte

                                            Marius44
                                            Marius44 - 786 risposte

                                            Luca73
                                            Luca73 - 675 risposte