Calcoli in textbox



  • Calcoli in textbox
    di Dodi (utente non iscritto) data: 16/12/2017 10:20:41

    Buongiorno a tutti
    Qualcuno può darmi una mano gentilmente s risolvere un mio problema?
    Mi ritrovo a riscrivere in qsto social per cercar di risolvere un problema con una userform.
    Sto riadattando una mia userform per un altro programmino che mi sto creando.
    Espongo cosa mi serve.
    In pratica ho una userfom che si popola in alcuni campi cliccando sulla combobox cod. Art.
    E fin  qui tutto ok. Ora arrivo al punto.
    In pratica vorrei che nella textbox 10 (quantita') il risultato si aggiorna man mano che inserisco numeri nella textbox 6-7-8-9 (n. , lunghezza, larghezza, altezza) i valori si devono moltiplicare e non sommare.
    Una volta che ottengo quanto appena esposto vorrei che nella textbox importo ottengo il risultato con il valore in euro che deve venir fuori moltiplicando la quantità con il prezzo unitario. Anche nella textbox importo deve aggiornarsi man mano che cambia il valore nella textbox quantità. Chiedo qsto perché non e detto che tutte le textbox ( n, lunghezza, Larghezza, altezza)  sono tutte popolate da numero, ma magari ;
    esempio solo N. e  lunghezza o altre combinazioni. Altresì e da considerare che puoi devo archiviare il tutto nel foglio computo, a qsto codice poi ci penso io. Perché devo ancora completare la maschera con i campi che mi occorrono.


    Spero di essermi spiegato. Allego un file esempio. 

    Qualcuno può darmi una mano? Grazie



  • di oregon (utente non iscritto) data: 16/12/2017 10:55:20

    Quale formula devi applicare per calcolare il valore nelle textbox10 ?



  • di oregon (utente non iscritto) data: 16/12/2017 11:05:00

    Se è una semplice moltiplicazione allora
     
    Private Sub Calcolo()
        TextBox10.Text = Val(Replace(TextBox6.Text, ",", ".")) * Val(Replace(TextBox7.Text, ",", ".")) * Val(Replace(TextBox8.Text, ",", ".")) * Val(Replace(TextBox9.Text, ",", "."))
    End Sub
    
    Private Sub TextBox6_Change()
        Calcolo
    End Sub
    
    Private Sub TextBox7_Change()
        Calcolo
    End Sub
    
    Private Sub TextBox8_Change()
        Calcolo
    End Sub
    
    Private Sub TextBox9_Change()
        Calcolo
    End Sub
    



  • di Dodi (utente non iscritto) data: 16/12/2017 11:08:53

    In che senso? Convalidare?
    Nella textbox 10 in pratica il risultato dovrebbe essere il prodotto n*(lunghezza*larghezza*altezza)



  • di oregon (utente non iscritto) data: 16/12/2017 11:13:59

    Chi ha mai detto convalidare?

    Guarda il codice.



  • di Dodi (utente non iscritto) data: 16/12/2017 11:35:04

    Scusa o letto male io ero in coda al semaforo. Non appena ho modo ti testarlo ti faccio sapere se e tutto ok. Ti ringrazio per ora



  • di Dodi (utente non iscritto) data: 16/12/2017 13:17:38

    Ciao Oregon
    Ho avuto modo di testare il tuo codice. Non funziona.
    E mi spiego.
    Se inizio ad inserire numeri nelle textbox di appartenenza nella textbox 10 (quantità) non si aggiorna man mano. E poi nella textbox importo.(textbox2) non vedo il calcoloche vien fuori dalla moltiplicazione prezzo unitario (textbox4) che moltiplica textbox10 (quantita). Ho allegato il file. Puoi dargli in occhio?
    Grazie per l'attenzione



  • di oergon (utente non iscritto) data: 16/12/2017 13:46:42

    Il risultato va nella textbox10 ma devi inserire tutti i valori in textbox6 7 8 e 9

    Finche' tutte le textbox non sono compilate non puoi avere un valore diverso da zero perché quelle vuote valgono 0

    Ho già visto il tuo file ma tu non hai visto il codice che ti ho proposto. Capisco che non sai nulla di VBA ma è codice elementare, dovresti arrivare a capirlo ...



  • di Dodi (utente non iscritto) data: 16/12/2017 14:10:33

    Io il tuo codice l'ho visto.
    E vero di vba ne capisco relativamente.
    Ma quello che chiedevo era diverso.
    E Cioè non necessariamente tutti i campi devono essere occupati da un numero che sia diverso da zero. Quello che vorrei ottenere e la seguente funzione che ottengo nel foglio Excel.
    Se vai nel foglio computo e nella cella P6 scrivi il seguente codice
    =prodotto(k6:N6)
    Vedi come funziona. E Cioè basta iniziare a mettere numeri nelle celle sottostanti a n,lunghezza, Larghezza, altezza, vedi che nella cella P6 il valore si modifica man mano. E nella cella Q6 se scrivi
    =PRODOTTO(P6;H6) si modifica come modifico i fattori.
    Resto in attesa di un tuo riscontro. E spero di essermi spiegato meglio qsta volta.
    E ancora grazie per l'attenzione



  • di oregon (utente non iscritto) data: 16/12/2017 14:19:50

    Quindi tu vorresti che tutti i fattori mancanti siano considerati uguali a 1.
    Se è così, il codice lo potevi facilmente modificare ... In questo modo
     
    Private Function ToVal(txt As Object) As Double
        ToVal = IIf(Len(Trim(txt.Text)), Val(Replace(txt.Text, ",", ".")), 1)
    End Function
        
    Private Sub Calcolo()
        TextBox10.Text = ToVal(TextBox6) * ToVal(TextBox7) * ToVal(TextBox8) * ToVal(TextBox9)
    End Sub
    
    Private Sub TextBox6_Change()
        Calcolo
    End Sub
    
    Private Sub TextBox7_Change()
        Calcolo
    End Sub
    
    Private Sub TextBox8_Change()
        Calcolo
    End Sub
    
    Private Sub TextBox9_Change()
        Calcolo
    End Sub
    



  • di Dodi (utente non iscritto) data: 16/12/2017 14:43:33

    Si funziona e quello che mi serviva. Grazieeeeee
    Ora però il punto successivo e che nella textbox2 (importo) vorrei avere il seguente risultato.
    E Cioè
    Textbox2= textbox4 (Prezzo unitario) che moltiplica textbox10 (quantita)
    Ed il risultato deve contenere il simbolo dell'euro. Chiedo qsto ulteriore aiuto.



  • di oregon (utente non iscritto) data: 16/12/2017 14:50:47

    Beh, andiamo ... provaci tu ... mi sembra che tu abbia tutto quello che ti serve, basta solo volerci provare invece di avere la pappa pronta ... Almeno impari qualcosa ...



  • di Dodi (utente non iscritto) data: 16/12/2017 14:53:25

    Ok
    Grazie x tutto
    Ti faccio sapere se ci don riuscito



  • di Dodi (utente non iscritto) data: 16/12/2017 15:38:33

    Dove sbaglio?
    Ho provato i tutti i modi
    Ma non ci riesco
    Uno dei tanti modi e qsto .
    Oramai dammi anche qsta dritta e non se parla più
    Te ne sarò grato. Son sicuro che alla fine e di una semplicità estrema. Ma non vi arrivo.
     
    Private sub calcolo1()
    Textbox2.text=totval(textbox10)*val(textbox2.value)
    End sub
    Private sub textbox2_change()
    Calcolo1
    End sub
    



  • di oregon (utente non iscritto) data: 16/12/2017 17:23:32

    Ma scusa, tu hai scritto che quello che devi fare è

    Textbox2= textbox4 (Prezzo unitario) che moltiplica textbox10 (quantita)

    quindi ...



  • di Dodi (utente non iscritto) data: 16/12/2017 17:33:38

    Appunto. Non capisco xché non mi compare il valore nella textbox2
    Mi perdo in qualcosa.
    Dove?. Ti prego oramai dammi una mano. Intanto sto continuando a costruire la userform e scrivere il codice per archiviare i dati.
    Dirai scrivi il codice per archiviare e non sai come completare questo?
    Già più delle volte chiedo aiuto ai forum proprio perché mi perdo in qualcosa che poi risulta sempre essere una cazzata. Devo imparare tantissimo ci metto impegno credimi.
    E a qsto punto ti sarei davvero grato se mi dai la dritta x risolvere



  • di oregon (utente non iscritto) data: 16/12/2017 20:41:05

    Ma appunto cosa ... ?

    Scrivi che deve essere

    Textbox2= textbox4 (Prezzo unitario) che moltiplica textbox10 (quantita)

    e poi scrivi nel codice

    Textbox2.text=totval(textbox10)*val(textbox2.value)

    Perché non controlli i numeri delle textbox che hai usato nel codice? Ti sembrano quelle che hai indicato nella formula?



  • di Dodi (utente non iscritto) data: 16/12/2017 21:44:46

    Ancora niente. Ho corretto la textbox2 con textbox4
    Ma ancora niente.
    Sto ringrullendo.



  • di oregon (utente non iscritto) data: 16/12/2017 21:53:56

    La funzione si chiama ToVal e non totval ... un po' di attenzione non guasterebbe ... del resto devi praticamente copiare ed adattare del codice esistente. Non ci credo che tu non sappia farlo ...



  • di Dodi (utente non iscritto) data: 16/12/2017 22:59:56

    Beh ci ho davvero provato e di quel errore mi ero accorto e stato un errore di digitazione qui sul forum.
    Ti chiedo davvero di scrivermi il codice perché non riesco a venirne a capo. Avrò tirato anche un moccolo. Ti sarei davvero grato ho provato anche a copiare il tuo codice della seconda soluzione con toval1
    Insomma ci ho davvero provato ma non riesco a venirne a capo.
    Ti sarei davvero lieto e ti ringrazio per avermi incoraggiato a provare. Ma davvero ci ho provato in tutti i modi e non capisco cosa casso sbaglio o dove sbaglio.
     
    Private fiction Toval1(tot as object) as double 
    Toval1=IIf(len(trim(tot.text)), val(replace (tot.text,",",".")),1
    End fiction
    
    Private sub calcolo1()
    Textbox2.text=toval1(textbox10) * toval1(textbox4)
    End sub
    
    Private sub textbox2_change()
    Calcolo1
    End sub
    



  • di oregon (utente non iscritto) data: 17/12/2017 02:32:25

    Non è necessaria la funzione toval1 ma basta usare la toval.

    Il change non deve essere del textbox2 ma di textbox6 e textbox10



  • di Dodi (utente non iscritto) data: 17/12/2017 12:20:24

    Buon giorno Oregon
    Stamani a mente fredda e riposata son riuscito a far fare il calcolo nella textbox2.
    L'ho anche formattata con il simbolo dell'euro.
    E fin qui tutto ok.
    Ora però nasce il problema.
    Il calcolo nella textbox avviene solo se riscrivo a mano il prezzo unitario nella textbox4 oppure tolgo la formattazione.
    E risolvibile qsta Cosa?
    Mi sa che viene riconosciuto come testo e non come numero.
    Se non è risolvibile allora tolgo la formattazione e chi se ne frega.
    Sarebbe stato e più professionale con simbolo euro. Almeno si capisce che si parla di soldi e non di caramelle.
    Puoi dargli un occhio.
    Cmq tengo a ringraziarti molto per avermi dato le dritte e spronarmi a cercar la soluzione da me. Ma sempre dietro alle tue dritte. Grazieeerr



  • di oregon (utente non iscritto) data: 17/12/2017 12:39:20

    Non ho capito il problema.

    Mostra tutto il codice che utilizzi adesso e spiega nuovamente cosa non va.



  • di Dodi (utente non iscritto) data: 17/12/2017 13:01:59

    Ho risolto togliendo la formattazione nella textbox4 (Prezzo unitario)
    Perché con il simbolo dell'euro lo riconosce come testo e non come numero. Quindi non effettuava la moltiplicazione tra textbox4(prezzo unitario) e tra textbox10(quantita)


    Grazie infinitamente.



  • di oregon (utente non iscritto) data: 17/12/2017 13:12:43

    Se mostri il codice come ti ho detto, si può vedere di risolvere senza togliere la formattazione.



  • di Dodi (utente non iscritto) data: 17/12/2017 19:22:43

    Ciao Oregon ero fuori ho letto ora il tuo messaggio.
    Il codice e il seguente. Ti faccio notare che la textbox2 e diventata 13 nel riorganizzare la user.
    Così com'è funziona. Se invece provi a usare la formattazione nella textbox23 con il simbolo euro vedi il problema che ti ponevo stamani.
    Il codice ha l'apice davanti . Resto in attesa di tua soluzione.
     
    '*************************************************************************
    'Codice per moltiplicare tra textbox e avere il risultato nella textbox10-textBox13
    '*********************************************************
    Private Function ToVal(txt As Object) As Double
        ToVal = IIf(Len(Trim(txt.Text)), Val(Replace(txt.Text, ",", ".")), 1)
    End Function    
    Private Sub Calcolo1()
        TextBox10.Text = ToVal(TextBox6) * ToVal(TextBox7) * ToVal(TextBox8) * ToVal(TextBox9)
        TextBox10 = Format(TextBox10, "  #,##0.00")
    End Sub   
    Private Sub Calcolo()
        TextBox13.Text = ToVal(TextBox10) * ToVal(TextBox4)
        TextBox13 = Format(TextBox13, "€  #,##0.00")
    End Sub
    Private Sub TextBox10_Change()
        Calcolo
    End Sub
    Private Sub TextBox4_Change()
        Calcolo
          
    End Sub
    Private Sub TextBox6_Change()
        Calcolo1
    End Sub
    
    Private Sub TextBox7_Change()
        Calcolo1
    End Sub
    
    Private Sub TextBox8_Change()
        Calcolo1
    End Sub
    
    Private Sub TextBox9_Change()
        Calcolo1
    End Sub
    '**********************************************************************************************Fine codice
    



  • di Dodi (utente non iscritto) data: 17/12/2017 19:24:57

    Correggo la textbox con formattazione euro e la 10
     
    TextBox10 = Format(TextBox10, "€ #,##0.00") End Sub 



  • di Dodi (utente non iscritto) data: 17/12/2017 19:32:38

    Accidenti sto facendo un casino a scrivere con il Tel a scrivere. Ti invio ora il codice corretto
    Ricordandosi che la textbox2 e diventata 13



  • di Dodi (utente non iscritto) data: 17/12/2017 19:36:31

    Ecco quello giusto
     
    '*************************************************************************
    'Codice per moltiplicare tra textbox e avere il risultato nella textbox10-textBox13
    '*************************************************************************
    
    Private Function ToVal(txt As Object) As Double
        ToVal = IIf(Len(Trim(txt.Text)), Val(Replace(txt.Text, ",", ".")), 1)
    End Function
        
    Private Sub Calcolo1()
        TextBox10.Text = ToVal(TextBox6) * ToVal(TextBox7) * ToVal(TextBox8) * ToVal(TextBox9)
        TextBox4 = Format(TextBox4, "  #,##0.00")
      'TextBox4 = Format(TextBox4, "  #,##0.00")
    End Sub
       
    Private Sub Calcolo()
        TextBox13.Text = ToVal(TextBox10) * ToVal(TextBox4)
        TextBox13 = Format(TextBox13, "€  #,##0.00")
    End Sub
    
    
    
    Private Sub TextBox10_Change()
        Calcolo
    End Sub
    Private Sub TextBox4_Change()
        Calcolo
          
    End Sub
    Private Sub TextBox6_Change()
        Calcolo1
    End Sub
    
    Private Sub TextBox7_Change()
        Calcolo1
    End Sub
    
    Private Sub TextBox8_Change()
        Calcolo1
    End Sub
    
    Private Sub TextBox9_Change()
        Calcolo1
    End Sub
    '**********************************************************************************************Fine codice
    



  • di oregon (utente non iscritto) data: 17/12/2017 20:12:44

    Visto che è cambiato tutto, allega il nuovo file, così si fa prima.



  • di Dodi (utente non iscritto) data: 17/12/2017 21:23:41

    Ho allegato il file cont
    In pratica così com' L'ho inviato non funziona. Ma se vedi nel codice ci sono i formati della textbox4 disattivati con l'apice. E se togli l'apice e metti l'apice ai formati con l'euro vedi che funziona.
    Fammi sapere se e risolvibile altrimenti proseguo con la soluzione senza simbolo



  • di oregon (utente non iscritto) data: 17/12/2017 22:21:05

    Dovrebbe essere sufficiente sostituire questa linea

     
    ToVal = IIf(Len(Trim(txt.Text)), Val(Replace(Replace(txt.Text, ",", "."), "€", "")), 1)



  • di Dodi (utente non iscritto) data: 18/12/2017 20:17:55

    Ciao Oregon
    Ho avuto modo solo ora di provare il tuo ultimo codice.
    Mi da errore. Mi evidenzia l'ultima virgola. Com'è mai?



  • di Dodi (utente non iscritto) data: 18/12/2017 20:26:00

    Risolto. Funziona benissimo.



  • di Dodi (utente non iscritto) data: 18/12/2017 22:21:26

    Ciao Oregon
    Ti ringrazio ancora per tutte le dritte. Ho da imparare tantissimo.
    Ti volevo porti un altro quesito.
    Nel file che ti ho inviato. La textbox1(descrizione articolo)
    Se vedi e formattato con il multiline.
    Nella user e una funzione che mi torna comoda per leggere bene un articolo lungo.invece Qquando archivio sul foglio vorrei che non lo archivia con la formattazione "testo a capo
    Ma vorrei che ritornasse tutto su una riga senza testo a capo. Ce modo? Ti allego il codice che uso per archiviare.



  • di Dodi (utente non iscritto) data: 18/12/2017 22:25:07

    Per provare seleziona nella combobox1 (cod. Art)
    L'art. 1
     
    '*********************************************
    'Inserimento dati in una tabella prestabilita'
    '*********************************************
    Private Sub CommandButton1_Click()
    Dim RowCount As Long
    Dim ctl As Control
    Dim new_can As String
    'Inserimento in tabella
    
    RowCount = Worksheets("Computo").Range("B" & Rows.Count).End(xlUp).Row
    With Worksheets("Computo").Range("B6")
        .Offset(RowCount, 7).Value = TextBox1.Value
        
        '****************************************************************
        'Codice da utilizzare se in qualce textbox ci sono valori in euro  ”Formattazione”
        '*****************************************************************
        On Error Resume Next
      
        .Offset(RowCount, 8) = CDbl(Replace(TextBox4, "€ ", ""))
       
        On Error GoTo 0
    End With
    
    new_can = ComboBox1.Value
    
    
    
    'CaricaDati
    
    
    End Sub
    



  • di Dodi (utente non iscritto) data: 20/12/2017 18:07:19

    Ciao Oregon
    Avevo gentilmente chiesto se si riusciva a risolvere il fatto che quando si archiviano i dato nel foglio Excel. Il formato multiline diventi riga singola senza testo a capo



  • di oregon (utente non iscritto) data: 20/12/2017 21:17:24

    Ma questo è un altro problema che non c'entra con i calcoli

    Dovresti creare un nuovo thread e attendere risposte da tutti, perché chiedi a me?



  • di Dodi (utente non iscritto) data: 20/12/2017 21:49:04

    Scusa pensavo che potevo chiedere a te visto che è sempre inerente al programmino che sto creando e visto che avevi cmq il file. Dimmi te se devo creare una nuova discussione o puoi aiutarmi te.