Calcolare provvigioni a scalare con il Vba.     (04/04/03)

Ancora un esercizio con un calcolo provvigionale, con utilizzo di una Funzione Utente oppure di una routine.

A differenza del paragrafo precedente "Provvigioni differenziate" dove le provvigioni si modificavano in funzione dell'importo della fattura e dello sconto concesso al cliente, restando computate per intero con l'aliquota provvigionale prevista (in toto), questa volta ci occupiamo di provvigioni a scalare in funzione dello scaglione di importo fattura (al di là dello sconto concesso, che considereremo comunque a parte).

Ma riassumiamo le diversità:

  • nell'esempio precedente, se variava l'importo fattura (5000=8% - 25000=4% - oltre 25000=2,5%) si assegnava la provvigione prevista su tutto l'importo fattura. per cui la provvigione spettante su una fattura di € 10000, sarebbe stata del 4% e cioè di 400 €. (ripeto, senza tenere conto dello sconto cliente che comunque avrebbe poi contribuito a variare l'aliquota in questo caso del 4%).

  • In questo esercizio invece useremo il concetto che troviamo anche nella sezione "Formule", paragrafo "tabella calcolo IRPEF", dove le aliquote vengono applicate secondo il sistema fiscale: fino ad una certa cifra, una certa aliquota, da questa cifra fino ad un'altra, un'altra aliquota sulla cifra eccedente la prima cifra, e così via. Tutti conosciamo il sistema di tassazione attualmente in vigore.

  • Applicheremo quindi una provvigione dell'8% fino a 5000, del 4% sulla cifra tra 5000 e 25000, e del 2,5% sulle cifre oltre 25000. Sommeremo poi le tre provvigioni, nel caso presenti, in modo da ottenere un totale provvigioni da assegnare all'agente. Per rendere il tutto il più simile all'esercizio precedente, anche qui valuteremo lo sconto concesso al cliente, in modo da ridurre la provvigione assegnata allo scaglione di pertinenza. Non ripeto queste condizioni che sono leggibili nel paragrafo su citato.

Per meglio presentare questo esercizio, presento due soluzioni, entrambe portano allo stesso risultato. La prima è una macro, la seconda l'ho impostata come Funzione, in modo da poterla usare direttamente sul foglio di lavoro. Vediamo la macro: nelle istruzioni esemplifico identificando l'origine del campo importo fattura e sconto concesso, ipotizzando che i due valori si trovino il primo in A1 (importo) e il secondo in B1(sconto). Uso ancora due variabili per assegnare le due costanti relative agli scaglioni che determinano l'assegnazione delle aliquote provvigionali, base (per lo scaglione fino a 5000) e basedue (per lo scaglione da 5000  25000) e oltre. L'identificazione degli scaglioni di pertinenza delle provvigioni le identifico con dei cicli If..Then...Else. Una volta assegnato alle variabili b - c - d gli importi degli scaglioni, uso Select Case per diversificare le due condizioni degli sconti ( fino a 5% o maggiore di 5%). All'interno di questi due casi, eseguo i conteggi di assegnazione delle provvigioni. Il risultato lo riporto in una messagebox, ma può essere tranquillamente assegnata una cella dove restituire il risultato.

Sub ProvvScalare()

'assegnazione alle variabili sconto e importo dei valori contenuti nelle due celle
sconto = Range("B1").Value
importo = Range("A1").Value

'assegnazione alle variab. base e basedue delle costanti dei valori degli scaglioni
base = 5000
basedue = 25000

'controllo se base (5000) è maggiore o uguale a importo (Range("A1"))
If base >= importo Then

'nel qual caso assegno alla variab. minimo lo stesso valore di importo
minimo = importo
Else

'in caso contrario rendo la variab. minimo uguale a base (5000)
minimo = base
End If

'inizio l'assegnazione alle variab, b - c - d dei valori che corrisponderanno agli importi 'relativi ai vari scaglioni
b = minimo
If basedue >= importo Then
c = importo - b
Else
c = basedue - b
End If
d = importo - (c + b)

'si controlla che esistano gli importi relativi ai tre scaglioni, altrimenti si assegna zero alla 'variabile dello scaglione. Se il valore fosse nullo (non esistesse), si genererebbe un errore 'nelle istruzioni successive dove si eseguono i calcoli su questi valori.
If b < 0 Then b = 0
If c < 0 Then c = 0
If d < 0 Then d = 0


'inizio il controllo sugli sconti, usando Select Case, il primo caso è che lo sconto sia 5 o 'inferiore a 5
Select Case sconto
Case Is <=5

'si assegnano le aliquote provvigionali i % a tre variabili: pp=prima provv - sp=seconda provv. - tp=terza provvigione
pp = 8 / 100
sp = 4 / 100
tp = 2.5 / 100
'indi si assegnano a tre variabili (F-G-H) i valori che si ottengono dalla moltiplicazione degli scaglioni di importi per le aliquote provv.
F = b * pp
G = c * sp
H = d * tp

'poi restituisco il totale delle provvigioni così ottenute attraverso un messaggio, ma il risultato lo potremmo tranquillamente inviare ad una cella, esempio: 'Range("D1")=F+G+H
MsgBox F + G + H
'ora iniziamo i conteggi nel secondo caso, cioè che lo sconto sia maggiore del 5
Case Is > 5

'assegnazione alle variabili delle aliquote derivanti dalla differenza dello sconto maggiore con lo sconto 5, diviso per 1/3, e sottratto alla provvigione normalmente prevista
pp = 8 - ((sconto - 5) / 3)
sp = 4 - ((sconto - 5) / 3)
tp = 2.5 - ((sconto - 5) / 3)

'controlliamo che il valore ora assegnato ad ogni provvigione non sia inferiore a 1,5, nel qual caso lo rendiamo uguale a 1,5
If pp < 1.5 Then pp = 1.5
If sp < 1.5 Then sp = 1.5
If tp < 1.5 Then tp = 1.5

'e poi anche qui otteniamo l'assegnazione alle tre variabili (F-G-H) dei valori scaturiti dalla moltiplicazione degli importi per le aliquote rese in % ( diviso 100 )
F = b * pp / 100
G = c * sp / 100
H = d * tp / 100

'e si finisce come nel caso precedente
MsgBox F + G + H
'questa istruzione sotto è necessaria quando si usa il costrutto della selezione dei casi (Select Case), alla fine delle istruzioni si deve inserire: fine delle selezioni (End Select)
End Select

'fine della routine
End Sub

Bene, questa routine è finita, e potrà essere associata ad un pulsante per averla funzionante sul foglio di lavoro. Va da se che se il conteggio provvigionale dovesse interessare un elenco di dati, sarà necessario inserire nella routine le istruzioni necessarie a reperire gli importi, gli sconti, e restituire le provvigioni spettanti con, per esempio, un'istruzione come quella presentata alla fine del paragrafo precedente.

Ora vediamo le stesse istruzioni della macro ProvvScalare() trasformate in Funzione Utente, cioè personalizzata; in questo caso sconto e importo diventeranno argomenti della funzione stessa che quindi ci permetterà o di essere richiamata direttamente sul foglio di lavoro, come una qualsiasi funzione di Excel, oppure di poter essere richiamata in un'altra macro come nell'esempio della pagina precedente. Ma vediamo la funzione. Non sto ad inserire commenti perchè sono gli stessi della macro:

Function ProvvScalare(importo, sconto) As Double
base = 5000
basedue = 25000
If base >= importo Then
minimo = importo
Else
minimo = base
End If
b = minimo
If basedue >= importo Then
c = importo - b
Else
c = basedue - b
End If
d = importo - (c + b)
If b < 0 Then b = 0
If c < 0 Then c = 0
If d < 0 Then d = 0

Select Case sconto

Case Is <= 5
pp = 8 / 100
sp = 4 / 100
tp = 2.5 / 100
F = b * pp
G = c * sp
H = d * tp
ProvvScalare = F + G + H

Case Is > 5
pp = 8 - ((sconto - 5) / 3)
sp = 4 - ((sconto - 5) / 3)
tp = 2.5 - ((sconto - 5) / 3)
If pp < 1.5 Then pp = 1.5
If sp < 1.5 Then sp = 1.5
If tp < 1.5 Then tp = 1.5
F = b * pp / 100
G = c * sp / 100
H = d * tp / 100
ProvvScalare = F + G + H
End Select

End Function

Gli argomenti della funzione: importo e sconto non saranno altro che il riferimento alla cella che contiene l'importo fattura il primo, e una cella che destineremo a contenere il valore dello sconto concesso, il secondo. Questa funzione potrà essere inserita in una cella, esempio la C1, visto che nel problema in esempio si citava la A1 e la B1, e sarà : =ProvvScalare(A1;B1) ed in C1 avremo il risultato della formula. Se l'elenco fosse su più righe, sarà sufficiente usare il "trascinamento" per copiare la formula dalla C1 nelle celle sottostanti, ed il bravo Excel provvederà ad aggiornare i riferimenti alle celle di pertinenza.

Due precisazioni: nel campo "sconto"  (colonna B) dovrà essere inserito lo sconto in formato numero e NON percentuale ( 5 e non 5%); i campi importo fattura (colonna A) e provvigioni (colonna C) dovranno avere il formato celle a numero con 2 decimali.

 

Buon lavoro.

prelevato sul sito http://ennius.interfree.it