Ciao rikygio,
Volevo chiedervi gentilmente aiuto a risolvere questo quesito:
Io ho due colonne di numeri, la prima si riferisce al codice identificativo di un determinato prodotto (nel mio caso la colonna A), la seconda alla quantità di prodotti che ho (nel mio caso la colonna E). Esempio: colonna A 01 (che so che sono le pere); colonna E 3. Vuol dire che in magazzino ho 3 pere.
Vorrei che se digito in una cella al di fuori di queste due colonne (sempre e solo la stessa cella- nel mio caso K3), il codice identificativo del prodotto, il programma diminuisca di un'unità la seconda colonna delle quantità, corrispondente al prodotto inserito. Esempio: se nella cella K3 inserisco 01 vorrei che nella cella E affianco al codice articolo 01, non ho più 3 pere ma 2.
Sono riuscito ad ottenere ciò che ho in mente con questa funzione: =CERCA(K3;A3:A15;E3:E15-1); il problema è che riesco ad ottenerlo solamente al di fuori delle due colonne in questione, e non riesco a sostituire il nuovo numero di quantità al vecchio. Vorrei anche che questo metodo fosse iterativo, quindi se io inserisco per una seconda volta il numero del prodotto nella cella di immissione, la quantità di prodotto corrispondente diminuisca ancora un'altra volta. Esempio: quindi se inserisco nuovamente nella cella K3 il codice 01 vorrei che nella cella E affianco al codice articolo 01, non ho più 2 pere ma 1.
Spero di essere stato sufficentemente chiaro,
Una soluzione sarebbe sfruttare VBA.
Quindi, prova qualcosa del genere:
- Fai clic dx sulla linguetta del foglio di interesse
- Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
- Incolla il seguente codice:
'========>>
Option Explicit
'-------->>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, rngTabella As Range, rngProdotto As Range
Dim rngFind As Range
Const sTabella As String = **"A3: E16" '<<=== Modifica**
Const sCella\_Prodotto As String = **"K3" '<<=== Modifica**
With Me
Set rngTabella = .Range(sTabella)
Set rngProdotto = .Range(sCella\_Prodotto)
End With
If Not Intersect(rngProdotto, Target) Is Nothing Then
Set rngFind = rngTabella.Columns(1).Find(What:=rngProdotto.Value, After:=rngTabella.Cells(1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not rngFind Is Nothing Then
On Error GoTo XIT
Application.EnableEvents = False
With rngFind.Offset(0, 4)
.Value = .Value - 1
End With
Else
Call MsgBox(Prompt:="il prodotto " & rngProdotto.Value & " non trovato!", \_
Buttons:=vbCritical, \_
Title:="REPORT")
End If
XIT:
Application.EnableEvents = True
End If
End Sub
'<<========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel.
- Salva il file con l'estensione xlsm.
Ora, inserendo il codice di un prodotto nella cella K3, la quantità del prodotto corrispondente nella tabella viene ridotta di 1.
Potresti svcaricare il mio file di prova Rikygio20220706.xlsm
===
Regards,
Norman
