Controllare i decimali inseriti

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
aletomas
00lunedì 26 settembre 2016 11:45
Buongiorno a tutti/e, mi chiamo Tomas e mi sono appena iscritto al forum.
Vorrei un vostro aiuto se possibile.
In un foglio di lavoro Excel, nell'intervallo B1:B400 voglio che gli utilizzatori possano inserire solo numeri con 2 cifre decimali, in caso contrario vorrei far comparire un messaggio pop up che spieghi l'errore fatto.
E' possibile?
Grazie a chi mi vorrà aiutare.

PS: uso excel 2010
federico460
00lunedì 26 settembre 2016 12:10
Ciao
ma se formatti la colonna a due decimali
possono scrivere anche migliaia di decimali il risultato sarà sempre di due decimali
o vuoi con il vba limitarli
aletomas
00lunedì 26 settembre 2016 12:49
Ciao,
formattando le celle ciò si limita alla visualizzazione mentre i decimali in più o in meno vengono comunque utilizzati per eventuali calcoli.
Per esempio:
se inserisco 21,134 visualizzo 21,13 ma se moltiplico tale valore per due ottengo 42,268 e non 42,26 (21,13*2) come voglio.
patel45
00lunedì 26 settembre 2016 12:58
è ammesso scrivere 1 o nessun decimale ?
aletomas
00lunedì 26 settembre 2016 14:13
Ciao,
devono immettere DUE cifre decimali.
Se inseriscono 21, diventerà 21,00
Se inseriscono 21,1 diventerà 21,10
Se inseriscono 21,136, diventerà 21,14.
Grazie.
Marius44
00lunedì 26 settembre 2016 15:42
Ciao
Puoi farlo SOLO con VBA inserendo il codice sottostante nel Modulo del Foglio interessato.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
    ActiveCell = Round(Target.Value, 2)
End If
End Sub


Fai sapere. Ciao,
Mario

PS - Dimenticavo: la colonna va formattata come numero con due decimali
aletomas
00lunedì 26 settembre 2016 16:03
Ciao,
ho provato ma non funziona....
Ho semplicemente aperto VBA, inserisci - modulo e copiato quanto scritto e dopo aver formattato la colonna ho salvato.
Sbaglio qualcosa io?
dodo47
00lunedì 26 settembre 2016 16:27
Ciao

se ti accontenti di una cella che segnala l'errore:
=SE(LUNGHEZZA(STRINGA.ESTRAI(A1;TROVA(",";A1)+1;LUNGHEZZA(A1)))=2=FALSO;"Inserire 2 decimali";"Ok")


Saluti
dodo47
00lunedì 26 settembre 2016 16:37
...oppure da inserire nel VBA DEL FOGLIO INTERESSATO:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
    N = Target.Value
    If Len(Split(N, ",")(1)) <> 2 Then
        MsgBox "Inserire 2 decimali"
        Target.Select
    End If
End If
End Sub


Saluti

Marius44
00lunedì 26 settembre 2016 16:39
Ciao
Oltre all'ottimo consiglio di dodo47 (ciao Domenico) devi fare attenzione a quello che ti si dice:


nel Modulo del Foglio interessato



Io non ho detto apri VBA e inserisci Modulo!
Devi aprire VBA, fare doppioclick, nella parte sinistra della finestra, sul Foglio che ti interessa e nel riquadro di destra menu a tendina di sinistra cliccare su Worksheet. A questo punto cancella tutto quello che c'è scritto e copia/incolla la mia macro.

Ciao,
Mario

PS. scusa dodo, ci siamo accavallati.
dodo47
00lunedì 26 settembre 2016 16:40
Ciao Mario....io l'ho interpretato diversamente, cioè l'obbligo di inserire 2 decimali, no l'arrotondamento....vediamo

cari saluti
aletomas
00lunedì 26 settembre 2016 17:38
Grazie a tutti per la velocità di risposta ma:
- la macro di Marius funziona ma crea il giusto numero con due cifre decimali sotto all'eventuale numero inserito in maniera scorretta
- la macro di Dodo non mi funziona come anche la sua formula

Cerco di spiegarmi in modo più chiaro possibile.
Voglio che i miei colleghi inseriscano nell'intervallo B6:B400 solo numeri con due cifre decimali ergo:
- se inseriscono 21 devo ottenere 21,00
- se inseriscono 21,1 devo ottenere 21,10
- se inseriscono 21,124 devo ottenere 21,12
- se inseriscono 21,126 devo ottenere 21,13 (quindi arrotondando in modo corretto)
Nel file in questione ho aggirato il problema con la funzione ARROTONDA nella colonna adiacente ma preferirei evitare tale soluzione.
Allego file.

Grazie a tutti e scusate se sono un po' "duro" [SM=g27819]
dodo47
00lunedì 26 settembre 2016 18:15
Re:
aletomas, 26/09/2016 11.45:

In un foglio di lavoro Excel, nell'intervallo B1:B400 voglio che gli utilizzatori possano inserire solo numeri con 2 cifre decimali, in caso contrario vorrei far comparire un messaggio pop up che spieghi l'errore fatto.
E' possibile?
Grazie a chi mi vorrà aiutare.

PS: uso excel 2010



Ciao
io ho interpretato che l'utente deve inserire 2 decimali, e la mia formula e la macro funzionano in tal senso.

Poi se quanto chiedi è diverso, cioè vuoi l'arrotondamento a 2 cifre decimali, il discorso cambia.

saluti

Marius44
00lunedì 26 settembre 2016 18:16
Ciao
probabilmente hai il PC che quando clicchi su Invio la cella attiva diventa quella sotto.
Ecco la macro corretta (non "dovrebbe" dare più quel problema)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then

    ApplicationEnableEvetnts = False    '<== riga aggiunta

    ActiveCell = Round(Target.Value, 2)

    ApplicationEnableEvetnts = True     '<== riga aggiunta

End If
End Sub

Fai sapere. Ciao,
Mario
dodo47
00lunedì 26 settembre 2016 18:26
Ciao Mario
forse sarebbe il caso di scrivere: target=... al posto di activecell evitando di disabilitare gli eventi che non credo funzioni con l'evento change.

cari saluti
federico460
00lunedì 26 settembre 2016 19:16
Ciao

non mi torna qualcosa


se inserisco 21,134 visualizzo 21,13 ma se moltiplico tale valore per due ottengo 42,268 e non 42,26 (21,13*2) come voglio.



ergo non vuoi un arrotonda ma un tronca


- se inseriscono 21,126 devo ottenere 21,13 (quindi arrotondando in modo corretto)



non corrisponde a quanto chiesto sopra e ti basterebbe la formattazione

o non capisco

in qualsiasi caso
la macro di Dodo mi sembra quella che fa il caso tuo

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
N = Target.Value
If Len(Split(N, ",")(1)) <> 2 Then
MsgBox "Inserire 2 decimali"
Target.Select
End If
End If
End Sub



obbliga l'operatore a scrivere solo due decimali


aletomas
00martedì 27 settembre 2016 09:36
@ Federico460: io voglio che il numero abbia due decimali ed in caso di inserimento di tre o quattro decimali , la cifra sia arrotondata al secondo decimale:
es. 21,126 diventa 21,13 e non 21,12.
21,2 diventa 21,20
21 diventa 21,00

@Marius44: il problema mi si ripresenta anche con la macro nuova

Se può essere di aiuto, nel messaggio precedente ho allegato il file in questione.

Thanks!
dodo47
00martedì 27 settembre 2016 10:19
Ti ho già detto che devi usare target=... e non activecell=....




aletomas
00martedì 27 settembre 2016 11:24
Re:
dodo47, 27/09/2016 10.19:

Ti ho già detto che devi usare target=... e non activecell=....




Perfetto, grazie mille Marius!!!
Quando provo a cancellare i dati inseriti nella colonna B, per inserirne altri, mi appare il seguente pop up:

Errore di run time '13':
Tipo non corrispondente


Perchè?

dodo47
00martedì 27 settembre 2016 16:52
Ciao
sostituisci con:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B400")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Target = Round(Target.Value, 2)
End If
Application.EnableEvents = True
End Sub


saluti
aletomas
00martedì 27 settembre 2016 17:57
Grazie mille, siete eccezionali!!
Vorrei la ciliegina sulla torta.... all'apertura del file ho scritto un codice per visualizzare un messaggio pop up. Funziona tutto ma vorrei formattare il carattere del messaggio in modo da renderli più grandi e magari in grassetto.
Ho provato andando in Strumenti - opzioni - Formato editor dove ho impostato la voce "testo normale" con una dimensione maggiore ma poi non cambia nulla.
Dove sbaglio? [SM=g27818]
Grazie in anticipo.
rollis13
00martedì 27 settembre 2016 19:35
Non mi risulta che si può formattare il testo di un MsgBox, solo aggiungere il ritorno a capo.
Ti conviene creare ed utilizzare una UserForm.
aletomas
00martedì 27 settembre 2016 20:31
Re:
rollis13, 27/09/2016 19.35:

Non mi risulta che si può formattare il testo di un MsgBox, solo aggiungere il ritorno a capo.
Ti conviene creare ed utilizzare una UserForm.



...e qui casca l'asino ovvero io [SM=g27833]

rollis13
00martedì 27 settembre 2016 21:45
Quando sei nel VBA clicca il menu "Inserisci" e scegli "Userform" e ne regoli le dimensioni. Si è creata la "UserForm1" e tramite i "Controlli" della "Casella degli Strumenti" (se non compare da sola la trovi nel menu "Visualizza") ci metti dentro una "Casella di Testo" (terza icona). Nella casella di testo ci scrivi il messaggio e poi nella proprietà (se non compare trovi nel menu "Visualizza / Finestra Proprietà") della casella (TextBox1) cambi i valori della formattazione del testo (Font), dello sfondo (BackColor), dei bordi (BorderColor), il titolo (Caption) ed altro ancora.
Per visualizzarla all'avvio del file ti basta aggiungere nel modulo "Questa_cartella_di_lavoro"(ThisWorkBook) il seguente codice:
Option Explicit
Private Sub Workbook_Open()
    UserForm1.Show
End Sub
aletomas
00mercoledì 28 settembre 2016 09:55
Ho mostrato il file ai colleghi/superiori ed è piaciuto molto, grazie mille!
Visto che i dati dovranno essere inseriti anche da persone che hanno poca/nulla dimestichezza con excel, ci sarebbero tre cose da aggiungere:
1- ad ogni salvataggio, bisogna specificare che il file è un modello con attivazione macro di excel e poi si deve specificare il percorso che nel nostro caso sarebbe
\\CONSAMB-SRV5\UFF-Laboratorio\Carte di controllo
Non si può fare tutto ciò in automatico?
2- salvando il file, in automatico viene aggiunto un "1" al nome del file, perchè?
3- il file funziona alla grande ma, se cancello più dati inseriti contemporaneamente non ho nessun problema mentre se ne elimino una alla volta, la cella non rimane vuota ma visualizza "0,00" e questo non va bene.
Ho visto che basterebbe cancellare una cella vicina vuota per aggirare il problema ma preferirei evitare.
Grazie mille!!
aletomas
00lunedì 3 ottobre 2016 16:26
Grazie mille Rollis!!!
Sono riuscito a creare la user form con un bottone di comando che però non riesco a gestire.... come faccio a fare in modo che ci debba cliccare sopra per poter inserire i dati?
rollis13
00lunedì 3 ottobre 2016 22:44
Quando sei nel vba con la visualizzazione dell'userform, con il Pulsante di Comando se ci clicchi sopra si apre il Pannello del Codice e ci troverai generato automaticamente la relativa macro del tipo:
Private Sub CommandButton1_Click()

End Sub
nella quale andrai a scrivere quello che vuoi far fare:
Private Sub CommandButton1_Click()

  UserForm1.Hide    'questo ti servirà per nascondere l'userform

  'e qui dovrai scrivere il codice per indicare
  'cosa intendi far fare una volta cliccato il
  'pulsante. Nel tuo caso andare nel foglio del-
  'l'inserimento dei dati. Esempio:
  Sheets("Foglio1").Select
  'o richiamare una macro o quant'altro.

End Sub
aletomas
00martedì 4 ottobre 2016 10:03
Grazie mille, in questi giorni provo.
Sfrutto la tua gentilezza per chiederti un chiarimento.
Grazie all'aiuto di Marius e Dodo ho creato il foglio di lavoro che volevo ma, mi sono accorto che c'è un piccolo problema.
Nelle colonne non interessate dalla macro avevo inserito varie formule che persistono nel foglio, e fin qui tutto ok, tuttavia se ora provo a modificarle, nella cella visualizzo si il risultato aggiornato ma tale formula non rimane "agganciata" alla cella, sparisce...come se non l'avessi mai scritta.
Hai una spiegazione in merito?
Grazie mille
rollis13
00martedì 4 ottobre 2016 16:39
Ehm, non ho la palla di cristallo. Forse è il caso di allegare il tuo file attuale (senza eventuali dati sensibili) e magari con evidenziata la zona/le zone delle formule (monelle [SM=g27824] ).
aletomas
00giovedì 1 dicembre 2016 12:00
Scusate se non ho più risposto ma ho avuto alcuni problemi.
Comunque ho risolto, salvavo il file come "modello"....che p***a.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 03:34.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com