Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-07-2015, 10:34   #1
diamante.picci
Senior Member
 
L'Avatar di diamante.picci
 
Iscritto dal: Oct 2006
Città: Monza
Messaggi: 302
VBA + Excel Inserimento riga e dati da inputbox

Ciao a tutti ragazzi dovrei realizzare un file excel dove l'utente che inserirà i dati dovrà avere a disposizione un command button da cui partire.

Una volta cliccato sul tasto il codice dovrebbe ricercare l'ultima riga occupata e da li inserirne una nuova alla quale assegnare in 3 celle diverse (xA, xB, xC - la x è il numero di riga vuota trovata in precedenza) i dati che l'utente inserirà tramite inputbox.

L'input box dovrà accettare i seguenti dati: in A un codice interno, in B un codice fornitore, in C il prezzo di acquisto dell'articolo.

Un quarto inputbox invece dovrà richiedere la percentuale di ricarica desiderata.
Quest'ultimo dato dovrà essere solo di appoggio in quanto necessario al calcolo di un prezzo di listino (dato da prezzo di acquisto + la percentuale immessa con un arrotondamento ad 1 cifra).

La percentuale reale sarà calcolata in automatico tramite formule partendo dal prezzo di listino meno la percentuale di sconto (cosa che già viene effettuata tramite formule)

Quello che mi serve quindi è il codice VBA da poter assegnare al command button. Sono riuscito ad implementare gli inputbox ma non riesco a trovare una funzione che ricerchi una riga vuota ed assegni il focus.

Spero di essere stato chiaro, in caso contrario cercherò di spiegarmi meglio. Grazie a tutti

edit: dimenticavo, il command button posizionato a qualche riga sotto dovrà scendere automaticamente ogni volta che si inseriscono le righe.
__________________
Vendite OK: Eurocomputer - eliano - VirtualT. - Gemstone86
Acquisti OK: VaGioxp - white.devils - ParadiseEagle87 - Jack 85 - Dark Slayer - pioss~s4n - Ciccillover - Parappaman - BloodFlowers
Acquisti KO: Kir@

Ultima modifica di diamante.picci : 08-07-2015 alle 10:36.
diamante.picci è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2015, 09:18   #2
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 21813
secondo me fai prima a gestire tutta la fase di inserimento da un form con le caselle di testo per i 3 dati che ti servono

per la ricerca guarda cicla usando il comando range
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2015, 10:16   #3
diamante.picci
Senior Member
 
L'Avatar di diamante.picci
 
Iscritto dal: Oct 2006
Città: Monza
Messaggi: 302
Quote:
Originariamente inviato da !fazz Guarda i messaggi
secondo me fai prima a gestire tutta la fase di inserimento da un form con le caselle di testo per i 3 dati che ti servono

per la ricerca guarda cicla usando il comando range
Ciao Fazz e grazie della risposta. Diciamo che tentando sono riuscito a trovare i vari comandi che mi servivano.
Scrivo il codice qui così se qualche volenteroso vuole analizzarlo ed eventualmente correggerlo:

Quote:
Private Sub Inserisci_Click()

Dim codice_interno
Dim codice_fornitore
Dim prezzo
Dim percentuale
Dim listino
Dim minimo

Riga = Cells(Rows.Count, 1).End(xlUp).Row
Cells(Riga, 1).Select
Rows(Riga).EntireRow.Copy
ActiveCell.EntireRow.Insert

codice_interno = InputBox("Inserisci il codice interno dell'articolo", "Inserisci Articolo")
If Trim(codice_interno <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
ActiveCell.Value = codice_interno
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente il codice", vbCritical, "Inserisci Articolo" ' Avviso di dato inesistente
End If

codice_fornitore = InputBox("Inserisci il codice fornitore dell'articolo", "Inserisci Articolo")
If Trim(codice_fornitore <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Selection.Offset(0, 1).Value = codice_fornitore 'allora copia il testo
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente il codice", vbCritical, "Inserisci Articolo" ' Avviso di dato inesistente
End If

prezzo = InputBox("Inserisci il prezzo di acquisto", "Inserisci Prezzo")
If Trim(prezzo <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Selection.Offset(0, 2).Value = prezzo 'allora copia il testo
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente il prezzo", vbCritical, "Inserisci Articolo" ' Avviso di dato inesistente
End If

percentuale = InputBox("Inserisci la percentuale di ricarica minima dell'ultima scontistica", "Inserisci Percentuale")
If Trim(percentuale <> "") Then
MsgBox "Prodotto inserito correttamente", vbOKOnly 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente la percentuale", vbCritical, "Inserisci Percentuale" ' Avviso di dato inesistente
End If

minimo = (prezzo * percentuale / 100) + prezzo
listino = minimo * 2.8
Selection.Offset(0, 15).Value = listino

End Sub


In breve spiego cosa fa questa funzione: prima di tutto trova l'ultima riga con i dati, duplica quella riga (per non perdere i dati) e nella successiva va ad inserire i 3 dati richiesti all'utente; infine chiede che percentuale di ricarica vuole praticare sull'ultima scontistica (questo è un dato indicativo, in quanto la percentuale reale sarà calcolata dal prezzo di listino il quale viene arrotondato per semplicità).

L'unico problema che riscontro è che la funzione va in loop, dato che una volta terminato l'inserimento devo forzare la chiusura. Inoltre se all'inserimento non inserisco nessun dato viene visualizzato l'avviso ma mi fa andare avanti, mentre vorrei che l'utente fosse obbligato ad inserire quel determinato dato.

Infine volevo chiedere un'altra cosa più matematica che di programmazione. Avendo il prezzo di acquisto e volendo calcolare un ricarico ad esempio del 30% sull'ultima scontistica, come faccio a sviluppare un prezzo di listino considerando che lo sconto massimo è del 50% + 20% dal prezzo di listino? Io ho calcolato per 2.8 ma non credo sia la formula esatta.

Grazie
__________________
Vendite OK: Eurocomputer - eliano - VirtualT. - Gemstone86
Acquisti OK: VaGioxp - white.devils - ParadiseEagle87 - Jack 85 - Dark Slayer - pioss~s4n - Ciccillover - Parappaman - BloodFlowers
Acquisti KO: Kir@

Ultima modifica di diamante.picci : 10-07-2015 alle 10:19.
diamante.picci è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2015, 16:26   #4
xp2400
Senior Member
 
Iscritto dal: Mar 2004
Città: RoMaNoVeNeTo
Messaggi: 756
il loop è causato da questo
If Trim(codice_fornitore <> "") Then '

perchè un controllo del tipo

if codice_fornitore = false
dovrebbe essere sufficiente, ma in questo caso codice_fornitore è un variant con type boolean

ma perchè non fai cosi?

TestVal = Application.InputBox("codice fornitore", "Cancel Test")
If TestVal = False Then..

è più veloce
__________________
Acer m5500 (Q6600,4MB) Sapphire Ati 3850, Logitech Performance MX, Tastiera Logitech G15, Epson bx 310 FN, QNAP 419p+, WDTVLIVE, Harmony One
xp2400 è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2015, 23:31   #5
diamante.picci
Senior Member
 
L'Avatar di diamante.picci
 
Iscritto dal: Oct 2006
Città: Monza
Messaggi: 302
Quote:
Originariamente inviato da xp2400 Guarda i messaggi
il loop è causato da questo
If Trim(codice_fornitore <> "") Then '

perchè un controllo del tipo

if codice_fornitore = false
dovrebbe essere sufficiente, ma in questo caso codice_fornitore è un variant con type boolean

ma perchè non fai cosi?

TestVal = Application.InputBox("codice fornitore", "Cancel Test")
If TestVal = False Then..

è più veloce
Grazie, alla fine ho risolto un po' per tutte le mie richieste. Ora la funzione ricerca l'ultima riga occupata, la copia e la duplica. Dopo questo sulla riga copiata vengono inseriti i dati che immette l'utente tramite msgbox.
Ora non va più in loop, credo che c'era un'istruzione sbagliata.

Se c'è qualcuno che ha bisogno del codice, eccolo:

Quote:
Sub Pulsante8_Clic()

Dim codice_interno
Dim codice_fornitore
Dim prezzo
Dim percentuale
Dim listino
Dim minimo

If Range("A6").Value = "" Then
Range("A6").Select

codice_interno = InputBox("Inserisci il codice interno dell'articolo", "Inserisci Articolo")
If Trim(codice_interno <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
ActiveCell.Value = codice_interno
Else
End Sub
End If

codice_fornitore = InputBox("Inserisci il codice dell'articolo", "Inserisci Articolo")
If Trim(codice_fornitore <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Selection.Offset(0, 1).Value = codice_fornitore 'allora copia il testo
Else
End Sub
End If

prezzo = InputBox("Inserisci il prezzo di acquisto", "Inserisci Prezzo")
If Trim(prezzo <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Selection.Offset(0, 2).Value = prezzo 'allora copia il testo
Else
End Sub
End If

percentuale = InputBox("Inserisci la percentuale di ricarica minima dell'ultima scontistica 50% + 20% + 10%", "Inserisci Percentuale")
If Trim(percentuale <> "") Then
MsgBox "Prodotto inserito correttamente", vbOKOnly 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente la percentuale", vbCritical, "Inserisci Percentuale" ' Avviso di dato inesistente
End If

Selection.Offset(0, 15).Value = percentuale / 100
Selection.Offset(0, 16).FormulaR1C1 = "=(RC[-14]*RC[-1]+RC[-14])*2.8"

Else

Riga = Cells(Rows.Count, 1).End(xlUp).Row
Cells(Riga, 1).Select
Rows(Riga).EntireRow.Copy
ActiveCell.EntireRow.Insert

codice_interno = InputBox("Inserisci il codice interno dell'articolo", "Inserisci Articolo")
If Trim(codice_interno <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
ActiveCell.Value = codice_interno
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente il codice", vbCritical, "Inserisci Articolo" ' Avviso di dato inesistente
End If

codice_fornitore = InputBox("Inserisci il codice fornitore dell'articolo", "Inserisci Articolo")
If Trim(codice_fornitore <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Selection.Offset(0, 1).Value = codice_fornitore 'allora copia il testo
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente il codice", vbCritical, "Inserisci Articolo" ' Avviso di dato inesistente
End If

prezzo = InputBox("Inserisci il prezzo di acquisto", "Inserisci Prezzo")
If Trim(prezzo <> "") Then 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Selection.Offset(0, 2).Value = prezzo 'allora copia il testo
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente il prezzo", vbCritical, "Inserisci Articolo" ' Avviso di dato inesistente
End If

percentuale = InputBox("Inserisci la percentuale di ricarica minima dell'ultima scontistica 50% + 20% + 10%", "Inserisci Percentuale")
If Trim(percentuale <> "") Then
MsgBox "Prodotto inserito correttamente", vbOKOnly 'se l'inputbox è diverso da vuoto, con trim sei sicuro che il testo e'vuoto
Else
MsgBox " Attenzione casella Vuota! Inserire correttamente la percentuale", vbCritical, "Inserisci Percentuale" ' Avviso di dato inesistente
End If

Selection.Offset(0, 15).Value = percentuale / 100
Selection.Offset(0, 16).FormulaR1C1 = "=(RC[-14]*RC[-1]+RC[-14])*2.8"
End If

Application.CutCopyMode = False

End Sub
__________________
Vendite OK: Eurocomputer - eliano - VirtualT. - Gemstone86
Acquisti OK: VaGioxp - white.devils - ParadiseEagle87 - Jack 85 - Dark Slayer - pioss~s4n - Ciccillover - Parappaman - BloodFlowers
Acquisti KO: Kir@

Ultima modifica di diamante.picci : 17-07-2015 alle 23:34.
diamante.picci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Alcune partite NBA saranno trasmesse in ...
Intel Core 13000 e 14000 aumentano uffic...
Gemini sta per arrivare in Google Maps: ...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Il Motorola Edge 70 non ha più se...
Alcuni Galaxy S26 utilizzeranno il chip ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v