Ciao, dove inserisco le tue due macro?
Nel file (quello che ti ho girato e riallego) vedo solo la ShutForm con scritto questo:
Sub ShutForm()
Unload UserForm1
End Sub
Le parti di codice che ho pubblicato si riferiscono alla Sub Worksheet_Change del foglio Movimenti; la trovi sul modulo vba del foglio Movimenti; per arrivarci rapidamente: tasto dx sul tab col nome del foglio, scegli Visualizza codice.
Comunque ho ulteriormente modificato il codice, lascia stare le modifiche di ieri
Inoltre vedo ancora presenti i due comandi delle macro del vecchio file generato quest'estate (le posso cancellare oppure generano errori?)
A me non servono; visto che non servono neanche a te le ho eliminate anche dal mio file
Quindi se rispetto le posizioni i alcune intestazioni da te indicate posso cambiare il nome di alcune o inserirne di nuocve, giusto?
Giusto, ma per aggiungere /rimuovere colonne bisogna usare la procedura di "ignora"; vedi prosieguo del messaggio.
Ho visto che il riporto ora compare vedi (riga 5) ma non va oltre in quanto (te l'ho segnalato) quando crea questo riporto colloca la quantità residuale in una cella errata...
Me ne sono reso conto; vedi prosieguo del messaggio
Allora, effettivamente mi sono reso conto che la qt del riporto poteva essere scritta nella colonna sbagliata; quindi invece che fare affidamento sullo "scarto" con la colonna "Uscita" ora ne vado a calcolare la colonna effettiva usando l'intestazione
Q.tà BancaliHo inoltre modificato la gestione di "Ignora", che VA USATO per aggiungere o togliere colonne alla tabella:
-si scrive 123 nella cella il cui nome e' "ignora" (P1, nel file da me rilasciato; cambia se si aggiungono o tolgono colonne)
-si aggiungono o tolgono colonne
Ho anche eliminato i moduli vba Modulo1 e Modulo2 che contenevano delle macro di vecchi progetti, che mi confermi non servono in questo.
Il mio file byDANIBY_Gestione Magazzino D_C20730_C21229.xlsm scaricabile da dropbox al solito link,
https://www.dropbox.com/s/q0gyhfz43l3sr ... .xlsm?dl=0 e' allineato a queste modifiche.
Riporto comunque qui il codice della Sub WorkSheet_Change:
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cTRow As Long, ccVal, oVal, Caso1 As Boolean, ShutOn
Dim myC As Range, dtCol As Long
Dim qtBanc As Long
'
On Error GoTo ExErr '++ Per evitare blocco degli "eventi" (1)
epos = 1
Application.EnableEvents = False
If Target.Address <> Range("ignora").Address Then 'C30110
If Range("ignora").Value = 123 Then
Range("ignora").Value = "Consenti?"
GoTo ExErr
End If
End If
'Riporto non modificabile>
epos = 2
dtCol = Range("Movimenti").Cells(1, 1).Column
For Each myC In Target
If Cells(myC.Row, dtCol).Value > 55000 Then
epos = 21
If myC.Column >= dtCol And myC.Column < (dtCol + 6) And myC.Row <> Range("Movimenti[#All]").Cells(1, 1).Row Then 'C30110
myca = myC.Address 'C30110
Application.Undo
ShutOn = Now + TimeSerial(0, 0, 3)
Application.OnTime ShutOn, "ShutForm"
UserForm1.Label1.Caption = "La riga " & Range(myca).Row & " è un ""Riporto"", i valori non possono essere modificati"
UserForm1.Show
GoTo ExErr
End If
End If
Next myC
'< Riporto non modificabile
epos = 3
With Target.Cells(1, 1)
'Calcola colonna di Qta Bancali (C30110)
qtBanc = Application.WorksheetFunction.Match("Q.tà Bancali", Application.WorksheetFunction.Index(Range("Movimenti[#All]"), 1, 0), False)
If .Column = Me.Range("Movimenti[Uscita]").Column And .Value <> "zczc" Then
ccVal = Target.Cells(1, 1).Value
Application.Undo
oVal = Target.Cells(1, 1).Value
Application.Undo
cTRow = .Row - Me.Range("Movimenti").Cells(1, 1).Row + 2
If Year(Me.Range("Movimenti").Cells(cTRow, 1)) - Year(Date) > 50 And oVal > 0 Then
MsgBox ("Hai modificato l'Uscita di una riga che ha un ""Riporto"" alla riga successiva" & vbCrLf _
& "Probabilmente e' necessario modificare manualmente la Quantità del ""Riporto""")
Caso1 = True
End If
' If .Value < .Offset(0, -3).Value Then
If .Value < Cells(.Row, qtBanc).Value Then '(C30110)
If Caso1 = False Then
epos = 31
Selection.ListObject.ListRows.Add (cTRow)
Me.Range("Movimenti").Cells(cTRow - 1, 1).Resize(1, 8).Copy Me.Range("Movimenti").Cells(cTRow, 1)
Me.Range("Movimenti").Cells(cTRow, 1) = Application.WorksheetFunction.EDate(Me.Range("Movimenti").Cells(cTRow, 1).Value, 1200)
Me.Range("Movimenti").Cells(cTRow, qtBanc) = Cells(.Row, qtBanc).Value - .Value '(C30110)
ShutOn = Now + TimeSerial(0, 0, 4)
'msg>
Application.OnTime ShutOn, "ShutForm"
UserForm1.Label1.Caption = "Aggiunta riga " & cTRow + 1 & " con il residuo da spedire"
UserForm1.Show
'<msg
End If
End If
End If
End With
epos = 4
ExErr:
Application.EnableEvents = True
'++ Per evitare blocco degli "eventi" (2)
If Err.Number <> 0 Then
MsgBox ("Errore num. " & Str(Err.Number) & " EPos=" & epos & Chr(13) & Err.Description) 'C30110
Err.Clear
End If
End Sub
Quanto ai dati di fatturazione, perdona ma non capisco se quello che hai scritto indica una situazione corretta o sbagliata.
Ripeto quello che ho capito io:
-fatturi un tot all'entrata di un lotto sia per retribuire l'entrata che per l'uscita
-fatturi un tot sulle giacenze di fine mese
Ad esempio, lavorando sulla tabella presente in colonne R:V del mio file:
-a Nov sono entrati 33 colli; addebiterai le quote Entrata/Uscita per 33 colli
-a fine novembre erano giacenti 33 colli; addebiterai le quote per giacenza di 33 colli
-a Dic entrano 25 colli; addebiterai le quote Entrata/Uscita per 25 colli
-a fine dicembre erano giacenti 22 colli; addebiterai le quote per giacenza di 22 colli
E così via
Se per esempio i 33 colli entrati a Nov fossero tutti usciti nello stesso mese allora a fine novembre la giacenza sarebbe stata Zero e non avresti fatturato la seconda quota (4€) ma solo la quote per E/U (6€)
Questo e' quanto ho capito; se ho capito male allora prova a spiegare nuovamente, magari ci arrivo
Ciao