› Varie ed Eventuali (Off Topic) › CICLI, no Grazie
-
AutoreArticoli
-
Abbiamo una tabella
Codice Pezzo Commisssione
1 2.100
2 12.500
3 3.980Vogliamo sapere in base al numero di codice del pezzo(n),da noi introdotto, e alla loro quantita (s),introdotto da noi, la commissione totale.
Non sono AMMESSI
CICLI DI QUALSIASI GENERE
COSTRUTTI SELECT ..CASE
IF...THEN
FOR...NEXT
SONO BANDITE LE FORMULE, SOLO VBA.
Buon Lavoro
NB.il controllo della variabile n deve essere su una riga di codice
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 )Ciao
Se ho capito bene vuoi la somma. Se così è prova questa macro
Option Explicit Sub comm() Dim ur As Long, tot As Long ur = Cells(Rows.Count, 1).End(xlUp).Row tot = Application.WorksheetFunction.Sum(Range(Cells(2, 2), Cells(ur, 2))) Cells(ur + 1, 2) = tot End SubCiao,
Mario
ciao Marius
se l'hai preso sei un genio
io ho capito
in base al codice e alla quantità
cioè loro mettono il codice la quantità
e tu gli devi trovare il prezzo in base al codice e moltiplicarlo per il numero di pezzi
un cerca verticale e un moltiplicazione
ma forse sbaglio
Non sono AMMESSI
CICLI DI QUALSIASI GENERE
COSTRUTTI SELECT ..CASE
IF...THEN
FOR...NEXT
SONO BANDITE LE FORMULE, SOLO VBA
il pallottoliere/abaco è ammesso?
Ciao, no non chiedo la somma , ma come dice bene @gianfranco(saluto), in base all'articolo e al numero dei pezzi, voglio sapere il costo.
il pallottoliere/abaco è ammesso?
se fornisce la soluzione ben venga
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 )ciao
però dovresti dire dove inserisci i dati
perchè se in A1 scrivi il prezzo e in B1 i pezzi per avere il dato in C1
teoricamente basta
`Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B1:B1000")) Is Nothing Then Target.Offset(0, 1).Value = Target * Target.Offset(0, -1).Value End If End Sub`ma non ho capito se devi fare una ricerca dei codici o altro
però dovresti dire dove inserisci i dati
i dati possono essere inseriti anche da una inputBox ed in uscita avere una MsgBox con il valore.
Il codice postato non rispecchia la clausola
Non sono AMMESSI
IF....THEN
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 )a sto punto fai una form
tre caselle di testo e sulla terza calcoli il totale
il problema è il prezzo dov'è

Private Sub TextBox2_Change() TextBox3.Value = TextBox1.Value * TextBox2.Value End Subnella tua userform io debbo inserire solamente il Codice Pezzo e la Quantità, e mi deve ritornare il costo totale
che poi Occhio perchè quello che introduci nella textbox viene visto come STRINGQual è 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 )ciao
non mi hai risposto però
dove diavolo lo prendo il prezzo al pezzo?
mica l'hai detto....ergo il famoso cerca verticale come diavolo lo imposto?
i Occhio perchè quello che introduci nella textbox viene visto come STRING
secondo te l'immagine e il codice non li ho provati?
funziona anche senza dover formattare la textbox come vedi il risultato c'è nella terza text
dove diavolo lo prendo il prezzo al pezzo?
dalla tabella che ho inserito nella colonna "commissione"
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 )ma come mai non l'ho capito da subito
sono proprio sbadato
pensavo fosse la commissione totale.
bene niente cicli niente formule niente iF
For Each neanche a vederlo
puoi usare almeno ........Range("D2").FormulaLocal = "=CERCA.VERT($C$2;$A$2:$B$5;2;0)"
ma lascio a Marius non è il mio campo e potre fare danni
SONO BANDITE LE FORMULE, SOLO VBA.
Range("D2").FormulaLocal = "=CERCA.VERT($C$2;$A$2:$B$5;2;0)"
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
Range("D2").FormulaLocal = "=CERCA.VERT($C$2;$A$2:$B$5;2;0)"
è vba mica bruscolini eh!
si deve adeguare alle tue esigenze ma è VBA
il controllo della variabile n deve essere su una riga di codice
giusto, ma non è riga di codice VBA
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 )Ciao a tutti
Avevo capito tutt'altra cosa. Mi scuso per il precedente post. Visto che, noncuranti della mia età, mi chiamate in causa (
) vi allego quel che ho fatto.Questo il codice:
in Questa cartella di lavoro
`Option Explicit Private Sub Workbook_Open() Dim ur As Long ur = Cells(Rows.Count, 1).End(xlUp).Row UF.ComboBox1.RowSource = Sheets(1).Range("A2:A" & ur).Address UF.Show End Sub</code></pre><p>nella UserForm (UF)</p><pre class="language-c"><code>Option Explicit Private Sub ComboBox1_Change() Application.EnableEvents = False UF.TextBox2 = "" UF.Label3 = "" Application.EnableEvents = True End Sub Private Sub TextBox2_Change() Dim n As Integer, s As Integer Dim ur As Long, p As Long ur = Cells(Rows.Count, 1).End(xlUp).Row n = CInt(ComboBox1.Value) If n = 0 Then Exit Sub p = Application.WorksheetFunction.VLookup(n, Range(Cells(2, 1), Cells(ur, 2)), 2, 0) If TextBox2 <> "" And TextBox2 <> 0 Then s = TextBox2.Value Label3 = s * p End If End Sub`"Dovrebbe" funzionare (ma può essere migliorato).
Ciao,
Mario
PS - Mi sono accorto adesso che vi sono DUE IF ... THEN.
Provo ad eliminarli.
Allegati:
You must be logged in to view attached files.Ciao
Sostituire la precedente con la seguente macro
Private Sub TextBox2_Change() Dim n As Integer, s As Integer Dim ur As Long, p As Long ur = Cells(Rows.Count, 1).End(xlUp).Row n = CInt(ComboBox1.Value) p = Application.WorksheetFunction.VLookup(n, Range(Cells(2, 1), Cells(ur, 2)), 2, 0) s = CVar(TextBox2 + "0") * 1 Label3 = s * p / 10 End SubIl condizionale vale sempre. Riprovare, Ciao,
Mario
Vedo solo adesso, per favore datemi un giorno o due prima di postare soluzione 🙂
E' da tanto che non giochiamo.
Io ho pensato a una cosa così.
In un modulo:
Option Explicit Function totale() Dim ce As Range Dim quantita As Integer Dim commissione As Single Application.Volatile Set ce = Application.ThisCell commissione = ce.Offset(, -1) quantita = ce.Offset(, -2) totale = quantita * commissione End FunctionIl foglio prevede le tre colonne, io scrivo nelle celle in giallo, il risultato è nelle celle in azzurro.

In D2, D3 e D4 scrivo la formula =totale().
Quando inserisco un valore per esempio in B2, ottengo il prodotto di B2 per C2 nella cella D2.
Ciao a tutti
Altro modo (che a me non piace ma fa il suo lavoro): inserire questo codice in altro Foglio (nel quale sono stati riportati i dati) all'Evento .Activate
Option Explicit Private Sub Worksheet_Activate() Dim msg As String, tit1 As String, tit2 As String, cod As Integer, qtà As Long Dim mv1 As Long, mv2 As Long, ur As Long Range("D2:F2").ClearContents ur = Cells(Rows.Count, 1).End(xlUp).Row tit1 = "Inserire il Codice del pezzo" mv1 = InputBox(msg, tit1) tit2 = "Inserire la Quantità" mv2 = InputBox(msg, tit2) Cells(2, 4) = mv1 Cells(2, 5) = mv2 Cells(2, 6) = Application.WorksheetFunction.VLookup(mv1, Range("A2:B" & ur), 2, 0) * mv2 End SubAll'attivazione del Foglio mostra due InputBox in cui bisogna inserire il Codice e la Quantità. Ovviamente ho omesso la trappola per eventuali errori (codice non trovato, quantità non inserita o pari a zero, ecc).
Ciao,
Mario
Qualcuno storcera il naso....ma ho riesumato dalla mia collezione un vecchio libro d'informatica
ed ho estratto queste righe di codice un po.....obsolento, che fa il suo dovere.
Ho inserito in un foglio il codice pezzo dalle cella(a1) alla cella (a3), mentre nelle celle(b1..b3)il costo della commissione.
Nel foglio ho inserito queato codice:Sub ongotocelle() Dim n As Integer Dim s As Integer n = CInt(InputBox("Introduci il codice Articolo")) s = CInt(InputBox("Introdici numero pezzi")) On n GoTo Primo, Secondo, terzo Primo: c = s * Range("b1") MsgBox "La Commissione Globale è " & c Exit Sub Secondo: c = s * Range("b2") MsgBox "La Commissione Globale è " & c Exit Sub terzo: c = s * Range("b3") MsgBox "La Commissione Globale è " & c Exit Sub End Subche rispecchi le clausole inserite nel post precedente.
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 )Ciao,
non ho capito se infrange qualche regola, ma propongo questa udf che prevede 3 argomenti (il range della tabella, il codice del prodotto, la quantità) e restituisce il costo:
Function uProfit(ByRef rng As Range, ByVal nCode As Long, ByVal nQty As Long) As Variant uProfit = rng(Application.Match(nCode, rng.Columns(1), 0), 2) * nQty End Function
bellissimo! il mio Maestro è ancora tra noi <3Da quel che ho capito io, la soluzione di scossa non infrange alcuna regola ed è concisa ed elegante anche se utilizza una funzione del foglio di lavoro mascherata da VBA
Ah Albatros... ti supplico... adesso che l'hai riesumata cancella subito col bianchetto ogni ricorrenza di On ... Goto + label dal tuo patrimonio culturale
anche se utilizza una funzione del foglio di lavoro mascherata da VBA
Eccoti accontentato:
Function uProfitSwt(ByRef rng As Range, ByVal nCode As Long, ByVal nQty As Long) As Variant uProfitSwt = rng(nCode, 2) * nQty End Functioncosì è VBA d.o.c.g.
Buongiorno a tutti
Scusa Marco ma nell'ultima UDF credo (ho paura quasi a dirlo) ci sia un piccolo errore.
Visto che la tabella proposta ha delle intestazioni di colonna, nell'indicare rng(nCode, 2) mi pare ci voglia un +1, cioè rng(nCode + 1, 2).
Grazie per l'attenzione. Ciao,
Mario
-
AutoreArticoli
