Fattura excel



  • Fattura excel
    di nox__ (utente non iscritto) data: 06/06/2016 16:38:43

    Ciao ragazzi,
    ho creato con excel e visual basic un modello di fatturazione.
    Gli articoli vengono richiamati in fattura da un file excel con gli articoli appunto tramite combobox, ma ho un piccolo problema, non riesco a trovare una funzione che cerca gli articoli che sono in fattura nel file dove sono registrati e ne scala le quantità.
    Qualcuno può aiutarmi?


  • Fattura excel
    di nox__ (utente non iscritto) data: 06/06/2016 16:38:52

    Ciao ragazzi,
    ho creato con excel e visual basic un modello di fatturazione.
    Gli articoli vengono richiamati in fattura da un file excel con gli articoli appunto tramite combobox, ma ho un piccolo problema, non riesco a trovare una funzione che cerca gli articoli che sono in fattura nel file dove sono registrati e ne scala le quantità.
    Qualcuno può aiutarmi?



  • di alfrimpa data: 06/06/2016 17:00:22

    Ciao

    Per avere una qualche speranza di risposta devi allegare un file di esempio coerente con la tua situazione e dove mostri il risultato desiderato (anche se dalla descrizione sembra abbastanza intuibil).

    Alfredo





  • di nox__ (utente non iscritto) data: 07/06/2016 09:47:13

    Ciao,
    grazie della risposta.
    File allegati.



  • di alfrimpa data: 07/06/2016 14:14:27

    Ciao Nox

    Premesso che il mio è solo uno spunto/un'imbeccata ti allego file (nox.xlsm) dove, per semplicità, ho anche inserito in altro foglio l'elenco delle giacenze e la macro che vedi sotto che ogni volta che scegli un valore nelle combo ed inserisci la quantità va a sottrarre questa alla giacenza dell'articolo selezionato

    Ho anche scritto un function (che pure vedi sotto) che serve a determinare la posizione (il n. della riga)dell'articolo selezionato nella combo.

    E' chiaro che il tutto andrà "tarato" a quelle che sono le tue esigenze; io mi sono limitato all'esempio che hai allegato.

    Prova e fai sapere.

    Alfredo
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim val As String
    Dim giacenza As Long
    Dim riga As Long
    Dim nuovoval As Long
    If Not Intersect(Target, Worksheets("Foglio1").Range("g5:g7")) Is Nothing Then
        val = Target.Offset(0, -6).Value
        riga = Trovariga(Worksheets("Foglio2").Range("a2:a4"), val)
        giacenza = Worksheets("Foglio2").Range("c" & riga)
        Worksheets("Foglio2").Range("c" & riga).Value = giacenza - Target.Value
    End If
    End Sub
    
    Function Trovariga(Tabella_Dati As Range, parola As Variant) As Variant
        If parola = "" Then
            Trovariga = ""
         Exit Function
        End If
        Trovariga = Tabella_Dati.Find(parola, LookAt:=xlWhole).Row
    End Function
    






  • di nox__ (utente non iscritto) data: 07/06/2016 18:32:25

    Ciao Alfrimpa,
    il mio problema è che le giacenze sono nel file elenco articoli, quindi un altro file.
    e dovrei assegnare una macro dove premendo quel tasto in fattura mi va a scalare le quantità in fattura a quelle in giacenza nel file elenco articoli.
    Come posso risolvere?
    Grazie



  • di alfrimpa data: 07/06/2016 23:06:27

    Scusa Nox ma se hai capito come funziona la mia macro ed hai un po' di conoscenza di VBA non dovresti avere eccessive difficoltà a replicare il meccanismo anche con l'elenco articoli su un altro file.

    Comunque provaci e se hai difficoltà vediamo quel che si può fare; personalmente non ho mai affrontato una cosa del genere.

    Alfredo





  • di alfrimpa data: 08/06/2016 12:15:37

    Ciao Nox

    Visto che l'ho fatta ti propongo la macro che vedi sotto che dovrebbe fare quello che hai chiesto.

    E' ovvio che va poi modificata per adattarla alla tua situazione; sei in grado di farlo?

    Attenzione: affinché il tutto funzioni è necessario che i due file (fattura e elenco articoli siano entrambi aperti).

    Non ho capito poi perché hai utilizzato delle combobox invece di una più semplice convalida dati?

    Tieni presente che, al momento, la cosa funziona solo per i tre articoli presenti in elenco articoli per cui la macro va modificata per consentire la gestione anche di articoli aggiunti successivamente.

    Prova un po' il file nox_1.xlsm e fai sapere.

    Alfredo

     
    Sub ScaricaGiacenza()
    Dim val As String
    Dim giacenza As Long
    Dim riga As Long
    Dim wbk As Workbook
    Dim rng As Range
    Dim cel As Range
    Dim ur As Long
    On Error Resume Next
    ur = Cells(Rows.Count, "G").End(xlUp).Row
    Set wbk = Workbooks("Nox_elenco_articoli.xlsx")
    Set rng = Range("G5:G" & ur)
    For Each cel In rng
        val = cel.Offset(0, -6).Value
        riga = Trovariga(wbk.Worksheets("Foglio1").Range("a2:a4"), val)
        giacenza = wbk.Worksheets("Foglio1").Range("c" & riga)
        wbk.Worksheets("Foglio1").Range("c" & riga).Value = giacenza - cel.Value
    Next cel
    MsgBox "Scarico Effettuato"
    End Sub






  • di nox__ (utente non iscritto) data: 10/06/2016 09:11:32

    Ciao Alfredo,
    Ho provato come hai detto tu ma ancora non scarica le giacenze.
    Ho effettuato le modifiche in base alla posizione dei fogli di prova, li apre ma nulla.
    Ti allego il file con le modifiche.
    Vedi un po' tu se riesci, forse sbaglio ancora qualcosa.
    Grazie



  • di nox__ (utente non iscritto) data: 10/06/2016 10:08:43

    Dimenticavo, il file si chiama nox2



  • di alfrimpa data: 10/06/2016 12:52:49

    Ciao Nox

    Prova con la macro qui sotto che a me funziona.

    Alfredo
     
    Sub ScaricaGiacenza()
    Dim val As String
    Dim giacenza As Long
    Dim riga As Long
    Dim wbk As Workbook
    Dim rng As Range
    Dim cel As Range
    Dim ur As Long
    Application.ScreenUpdating = False
    Workbooks.Open ("C:Excelelenco_articoli.xlsx")  ' <== Cambiare percorso e nome file
    ur = Workbooks("nox_1.xlsm").Worksheets("Foglio1").Cells(Rows.Count, "G").End(xlUp).Row ' <== Cambiare nome file
    Set wbk = Workbooks("elenco_articoli.xlsx")
    Windows("nox_1.xlsm").Activate ' <== Cambiare nome file
    Set rng = ActiveWorkbook.Worksheets("Foglio1").Range("G5:G" & ur)
    For Each cel In rng
        val = cel.Offset(0, -6).Value
        riga = Trovariga(wbk.Worksheets("Foglio1").Range("a2:a4"), val)
        giacenza = wbk.Worksheets("Foglio1").Range("c" & riga)
        wbk.Worksheets("Foglio1").Range("c" & riga).Value = giacenza - cel.Value
    Next cel
    Application.ScreenUpdating = True
    MsgBox "Scarico Effettuato"
    End Sub






  • di nox__ (utente non iscritto) data: 11/06/2016 17:15:39

    Ciao Alfredo,
    Ho provato come hai detto tu ma si blocca su trova riga e mi dice:
    Errore di compilazione
    Sub o function non definita

    Ma a te funziona?
    Forse sono io che non capisco.
    Io ho tutti e 2 i file sul desktop, uno si chiama nox_2 e l'altro elenco_articoli.
    Grazie



  • di nox__ (utente non iscritto) data: 11/06/2016 17:21:00

    Alfredo scusa funziona.
    Perfetto finalmente.
    L'unica cosa che non scarica i pezzi ma solo le quantità.
    Dobbiamo inserire di scaricare anche i pezzi.
    Grazie



  • di alfrimpa data: 11/06/2016 17:30:52

    Ah ecco mi sembrava strano.

    Per i pezzi devo rivedere il codice perchè tu inizialmente hai parlato dello scarico delle sole quantità.

    Ci dobbiamo risentire lunedì.

    Buona domenica.

    Alfredo





  • di nox__ (utente non iscritto) data: 11/06/2016 17:48:28

    Ok Alfredo,
    io nel frattempo provo e se ci riesco ti faccio sapere.
    Grazie come sempre per il momento.
    Ciao
    Buona domenica



  • di alfrimpa data: 11/06/2016 17:58:25

    Se ci riesci da solo sarebbe meglio perché vorrebbe dire che hai capito cosa fa il codice ed, a mio avviso, un forum dovrebbe - oltre a risolvere i problemi degli utenti - contribuire alla loro "crescita culturale" in materia, in questo caso, di Excel e del VBA.

    Alfredo





  • di nox__ (utente non iscritto) data: 11/06/2016 18:11:54

    Alfredo ho risolto.
    Ecco come:


     
    Option Explicit
    Function Trovariga(Tabella_Dati As Range, parola As Variant) As Variant
        If parola = "" Then
            Trovariga = ""
         Exit Function
        End If
        Trovariga = Tabella_Dati.Find(parola, LookAt:=xlWhole).Row
    End Function
    Sub ScaricaGiacenza()
    Dim val As String
    Dim val2 As String
    Dim giacenza As Long
    Dim giacenza2 As Long
    Dim riga As Long
    Dim riga2 As Long
    Dim wbk As Workbook
    Dim rng As Range
    Dim rng2 As Range
    Dim cel As Range
    Dim cel2 As Range
    Dim ur As Long
    Dim ur2 As Long
    Application.ScreenUpdating = False
    Workbooks.Open ("C:Users
    ox__Desktopelenco_articoli.xlsx") 
    ur = Workbooks("nox_2.xlsm").Worksheets("Foglio1").Cells(Rows.Count, "G").End(xlUp).Row
    ur2 = Workbooks("nox_2.xlsm").Worksheets("Foglio1").Cells(Rows.Count, "F").End(xlUp).Row
    Set wbk = Workbooks("elenco_articoli.xlsx")
    
    Windows("nox_2.xlsm").Activate
    Set rng = ActiveWorkbook.Worksheets("Foglio1").Range("G5:G" & ur)
    Set rng2 = ActiveWorkbook.Worksheets("Foglio1").Range("F5:F" & ur2)
    For Each cel In rng
        val = cel.Offset(0, -6).Value
        riga = Trovariga(wbk.Worksheets("Foglio1").Range("a2:a4"), val)
        giacenza = wbk.Worksheets("Foglio1").Range("c" & riga)
        wbk.Worksheets("Foglio1").Range("c" & riga).Value = giacenza - cel.Value
        riga2 = Trovariga(wbk.Worksheets("Foglio1").Range("a2:a4"), val)
        giacenza2 = wbk.Worksheets("Foglio1").Range("b" & riga2)
        wbk.Worksheets("Foglio1").Range("b" & riga).Value = giacenza2 - cel.Value
        Next cel
        
      Application.ScreenUpdating = True
    MsgBox "Scarico Effettuato"
    End Sub



  • di nox__ (utente non iscritto) data: 11/06/2016 18:14:54

    Alfredo poi lunedì o martedì appena hai tempo ti devo chiedere un'ultima cosa.
    Quando hai tempo fammi sapere tu.
    Grazie



  • di alfrimpa data: 11/06/2016 18:15:37

    Sono contento per te non era difficile basta impegnarsi un po'

    Chiedi pure

    Alfredo





  • di nox__ (utente non iscritto) data: 16/06/2016 08:02:29

    Ciao Alfredo,
    un'ultima domanda:
    Avrei bisogno di passare col tasto tab da una cella alla combobox.
    Mi spiego meglio:
    Nel modello che uso, (ovviamente con celle bloccate) inserisco l'articolo nella combobox, tab pezzi, tab quantità, tab prezzi e poi dovrei fare tab combobox.
    Conosco la funzione che mi fa passare col tasto tab dalla combobox alla cella, ma non riesco a passare dalla cella alla combobox successiva.
    Tu sai come fare?
    Grazie



  • di nox__ (utente non iscritto) data: 16/06/2016 10:34:39

    Alfredo quando inserisco la funzione nel modello "originale" mi dice errore di runtime e non mi scala gli articoli.
    Come mai?



  • di alfrimpa data: 16/06/2016 10:43:55

    E come faccio a saperlo se non ho il file originale?

    Che errore di run-time ti da?

    Non ho ben capito la domanda che hai fatto nel post precedente.

    Alfredo





  • di nox__ (utente non iscritto) data: 16/06/2016 10:54:42

    Mi da errore di runtime 1004.
    Errore definito dall'applicazione o dall'oggetto.



  • di nox__ (utente non iscritto) data: 16/06/2016 11:06:21

    Alfredo ho inserito la funzione nel modulo e nel debug dell'errore mi evidenzia:

    val = cel.Offset(0, -6).Value

    Non capisco perchè



  • di alfrimpa data: 16/06/2016 11:06:51

    Per poter cercare di risponderti dovrei vedere il file e fare delle prove.

    Puoi allegarlo eliminando eventuali dati sensibili?

    Alfredo





  • di nox__ (utente non iscritto) data: 16/06/2016 11:20:10

    Mi si blocca sempre su val....
    Ma non capisco il perchè



  • di alfrimpa data: 16/06/2016 11:48:00

    Ciao Nox

    Con la mia precedente macro che vedi sotto e che ho incollato nel tuo file funziona (ovviamente devi cambiare il percorso.

    La tua macro va in errore su val (e non ho capito ancora il perché) perché questa non è valorizzata.

    Alfredo
     
    Sub ScaricaGiacenza()
    Dim val As String
    Dim giacenza As Long
    Dim riga As Long
    Dim wbk As Workbook
    Dim rng As Range
    Dim cel As Range
    Dim ur As Long
    Workbooks.Open ("C:Excelelenco_articoli.xlsx")
    On Error Resume Next
    ur = Workbooks("nox_2.xlsm").Worksheets("Foglio1").Cells(Rows.Count, "G").End(xlUp).Row
    Set wbk = Workbooks("elenco_articoli.xlsx")
    Set rng = Workbooks("nox_2.xlsm").Worksheets("Foglio1").Range("G3:G" & ur)
    For Each cel In rng
        val = cel.Offset(0, -6).Value
        riga = Trovariga(wbk.Worksheets("Foglio1").Range("a2:a4"), val)
        giacenza = wbk.Worksheets("Foglio1").Range("c" & riga)
        wbk.Worksheets("Foglio1").Range("c" & riga).Value = giacenza - cel.Value
    Next cel
    MsgBox "Scarico Effettuato"
    End Sub
    






  • di nox__ (utente non iscritto) data: 16/06/2016 12:38:52

    Ciao Alfredo,
    ora mi dice scarico effettuato ma non scarica nulla.
    Come mai?



  • di alfrimpa data: 16/06/2016 12:47:23

    Perché la macro vai in errore ed il comando On Error Resume Next passa all'istruzione successiva.

    Prova a cancellare On Error Resume Next e vedi che errore ti da.

    Ma, ripeto, se non alleghi il file "originale" è difficile che ne veniamo a capo e ribadisco che a me funziona.

    Alfredo





  • di nox__ (utente non iscritto) data: 16/06/2016 16:57:52

    Ciao Alfredo,
    non è che non voglio mandarti il file originale, anzi.
    Ma il problema è che ci sono un mucchio di dati da eliminare compresi collegamenti, pass che si riferiscono all'attività ecc., e oltre al tempo che mi ci vuole per eliminarli non so se poi sono proprio quelli a bloccarlo.
    Non riusciamo ad arrivarci diversamente?
    Grazie



  • di alfrimpa data: 16/06/2016 21:57:36

    Ma se a me il file funziona mi dici cosa posso fare?

    Alfredo





  • di nox__ (utente non iscritto) data: 21/06/2016 08:27:33

    Hai ragione, ma non so come fare.



  • di alfrimpa data: 21/06/2016 11:57:36

    Purtroppo non so che dire.

    Tu hai il mio file funzionante ed il tuo "originale" che non lo è.

    Devi studiarteli entrambi per cercare di capire cosa non va; io di più non credo possa fare.

    Alfredo