› Sviluppare funzionalita su Microsoft Office con VBA › Calcoli in userform con doppia condizione
-
AutoreArticoli
-
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.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 IfMe.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 )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
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 )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.
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 %")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 )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.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 )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.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 )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.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
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 )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.
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.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.
=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 ThenTextBox264 = 0TextBox264 = Format(TextBox264 / 100, "#%")ElseTextBox264 = (CLng(TextBox265) / CLng(TextBox267) * 100)TextBox264 = Format(TextBox264 / 100, "#%")End Ifpero 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 )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 )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
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.
-
AutoreArticoli
