Incremento num Fattura



  • Incremento num. Fattura
    di alessia (utente non iscritto) data: 22/04/2014 19:34:44

    Buonasera a tutti,
    sono qui per chiederVi un aiuto su un programma di Fatturazione che sto realizzando. Arrivo al dunque.
    Faccio un esempio: ho un file con n.20 fogli (soggetto ad incremento) chiamati "Dati Fattura, Matrice, Archivio Fatture, 1, 2, 3 ecc..."
    Nel foglio chiamato "Dati Fattura" cella E5, ho un numero ad es. 300.
    Ciò che avrei bisogno è una macro che prenda il valore della cella E5 del foglio "Dati Fatture" (n.300) e lo inserisca dal foglio 3 nella Cella i3 ( cella i3 è una cella fissa per tutti i fogli) fino all'ultimo foglio presente nel progetto, incrementando di 1.
    Così avrò come risultato: nel Foglio chiamato 1 alla cella i3 numero 300, nel foglio 2 numero 301, foglio 3 numero 302 e così via.
    I fogli nel file sono così sistemati: Dati Fattura, Matrice, Archivio Fatture, 1,2,3 e così via...
    Ringrazio i quanti vorranno aiutarmi.
    Ciao a tutti



  • di alessia (utente non iscritto) data: 22/04/2014 19:42:18

    P.S. per spiegarmi meglio; nell'userform ho una textbox ed un pulsante con il seguente codice:
    Sheets("Dati Fattura").Range("E5") = TextBox5.Value
    Quindi, da qui inserisco il numero 300 e sempre da qui l'incremento di 1 su tutti i fogli.
    Grazie



  • di Lucas87 data: 22/04/2014 20:42:38

    Ciao
    Questo può andare?
     
    For i = 3 To Sheets.Count
        Sheets(i).Range("i3") = textbox5.Text + n
        n = n + 1
    Next



  • di alessia (utente non iscritto) data: 22/04/2014 20:50:52

    Grazie per la risposta. Ora provo. Ti faccio sapere



  • di alessia (utente non iscritto) data: 22/04/2014 21:09:32

    Non saprei come ringraziarti, funziona. Era la cella g3.
    Se posso chiederti un'altra cosa. Con il codice sotto riportato mi riporta nell'userform in una textbox, l'ultimo numero di fatturazione.
    TextBox6.Value = Sheets("Dati Fattura").Range("F5")
    Io nel foglio " Dati Fattura" cella F5 o la seguente formula =15!g3
    Il problema qulal è che se aggiungo nuove fatture, devo cambiare la formula esempio =20!g3. C'è un modo per dire ad excel: riportami il valore della cella g3 dell'ultimo foglio presente nel progetto, dentro la cella F5 del foglio Dati Fatture?
    Grazie davvero per ciò che hai già fatto



  • di Lucas87 data: 22/04/2014 21:26:49

    Cercando rapidamente mi sembra si possa fare.
    Però c'erano formule in inglese quindi ci vuole un po' di pazienza.
    domani....
    In alternativa, con VBA diventa
     
    sheets(sheets.count).range("g3")



  • di alessia (utente non iscritto) data: 22/04/2014 21:31:40

    Ci sentiamo domani mattina se ci sei. Io sarò online verso le 8:30. Grazie per il tempo che mi hai dedicato è il problema che mi hai risolto.
    Un abbraccio. Buonanotte
    By Alessia



  • di Lucas87 data: 23/04/2014 08:26:45

    Ciao
    l'unica cosa che ho trovato è questa formula che restituisce il nome del foglio.
    Bisognerebbe trovare il sistema di fare riferimento all'ultimo foglio, ma non ho trovato formule a riguardo....
    Magari qualcun'altro avrà più fortuna.
     
    =DESTRA(CELLA("nomefile");LUNGHEZZA(CELLA("nomefile"))-TROVA("]";CELLA("nomefile");1))



  • di alessia (utente non iscritto) data: 23/04/2014 08:46:26

    Ciao Lucas,
    Grazie. Anch'io ho fatto e sto facendo ricerche in rete, ma con scarso risultato. Penso anch'io come te che ci deve essere un metodo. Sarebbe davvero utile ed istruttivo imparare una soluzione di questo tipo. Nella sua semplicità è abbastanza complicato. Resto in attesa per un'eventuale soluzione. Grazie a tutti.
    Grazie Lucas



  • di lepat (utente non iscritto) data: 23/04/2014 09:18:11

    mi sembra di aver capito che il documento contiene anche macro (non sarebbe male allegare un file di esempio), quindi che problema c'è ad usare una function in vba invece che formule ?



  • di alessia (utente non iscritto) data: 23/04/2014 09:29:39

    Grazie Lepat,
    sembra che abbia trovato una soluzione. Il codice è questo:
    Sheets(Worksheets.Count).Select ' seleziono 'l'ultimo foglio
    TextBox1.Value = Range("i3") ' riporto in textbox1 il valore trovato in i3
    Che ne dite Ragazzi del mio codice? può andare o potrebbero manifestarsi dei problemi? Può essere migliorato?

    P.S. x il file dammi un pò di tempo " è ancora in costruzione" cancello dei dati pers. e lo metto online subito.



  • di Lucas87 data: 23/04/2014 09:49:54

    Non serve selezionare il foglio
     
    TextBox1.Value =sheets(sheets.count).range("i3")



  • di Textomb data: 23/04/2014 10:06:17

    questo metodo non è esente da errori.
    Infatti, se Alessia aggiunge un foglio che non è una fattura, ecco che potrebbe sorgere un errore.
    Per esempio un foglio di Riepilogo oppure un foglio per sviluppare conteggi vari che chiama "UltimoTrimestre"
    In questo caso l'istruzione TextBox1.Value =sheets(sheets.count).range("i3") andrebbe a prelevare il valore della cella i3 di quest'ultimo foglio.
    Mi pare che la cosa migliore sia una funzione VBA che analizza tutti i nomi dei fogli e prende solo quelli che hanno un valore numerico. Quindi estrae il valore max e da qui si può prendere il valore della cella i3.
    Una cosa del genere... Da adattare al caso di Alessia.
     
    Function maxSheet() As Integer
    Dim vArr(), v As Worksheet, i As Integer
    ReDim vArr(1 To Worksheets.Count)
    
    For Each v In Worksheets
        i = i + 1
        vArr(i) = Val(v.Name)
    Next
    
    maxSheet = WorksheetFunction.Max(vArr)
    
    End Function
    



  • di alessia (utente non iscritto) data: 23/04/2014 10:40:45

    Allego il File in costruzione.
    Grazie a tutti.
    P.S. Per TextTomb, infatti hai ragione. Le fatture saranno anche Bimestrali, trimestrali e odccasionali. Io per ovviare a questo problema, ho pensato di richiamare dei File esterni uno per ogni tipologia di Fatturazione. Chiaramente l'archivio Fatture oltre ad essere inserito nel File singolo per tipologia "mensile, Bimestrale ecc.." dovranno essere archiviate anche in un un'unico Archivio che chiamerò generale. Che ne pensate?
    Grazie tante a tutti per il Vostro sostegno.



  • di Textomb data: 23/04/2014 12:18:29

    ciao Alessia.
    ho visto il tuo file allegato. Purtroppo non ho molto tempo per verificare tutti i passaggi che sviluppa.
    Se non ho capito male la tua esigenza, nella cella F5 del foglio Fatturazione inserisci la seguente funzione
    =INDIRETTO(maxSheet() & "!g3")
    Questa va a prendere il valore della cella g3 del max valore delle fatture di tutti i fogli riportati.
    Ovviamente devi prima ricopiare, in un modulo, la funzione che avevo scritto prima maxSheet()



  • di Textomb data: 23/04/2014 12:23:51

    a proposito della funzione maxSheet() puoi inserire anche questa che è leggermente rivisitata e dovrebbe funzionare lo stesso.

     
    Function maxSheet() As Integer
    Dim vArr(), i As Integer
    ReDim vArr(1 To Worksheets.Count)
    
    For i = 1 To Worksheets.Count
        vArr(i) = Val(Worksheets(i).Name)
    Next
    
    maxSheet = WorksheetFunction.Max(vArr)
    
    End Function



  • di alessia (utente non iscritto) data: 23/04/2014 12:32:09

    Ciao Texttomb,sono andata in panico. Non è proprio cosa facile costruirsi un prog. Fatturazione. Ma sono testarda e cercherò di realizzarlo.
    Al momento sto usando questo codice:
    TextBox7.Value = Sheets(Sheets.Count).Range("g3") ' visualizzo in textbox7 la cella G3 dell'ultimo foglio
    Sheets("Dati Fattura").Range("F5") = TextBox7.Value ' Nel foglio Dati Fattura in F5 copio il valore trovato nell'ultimo foglio cella G3



  • di alessia (utente non iscritto) data: 23/04/2014 12:33:13

    Texttomb,
    non avevo visto il tuo codice adesso lo provo. Yi faccio sapere



  • di alessia (utente non iscritto) data: 23/04/2014 16:50:19

    Textomb,
    no riesco a far funzionare il tuo codice....



  • di Textomb data: 23/04/2014 17:30:45

    cosa c'è che non va?
    Dovresti semplicemente incollare il codice della funzione maxSheet() all'interno di un modulo.
    Successivamente vai nella cella F5 del foglio Fatturazione ed inserisci la funzione nel modo in cui ti avevo scritto prima
    =INDIRETTO(maxSheet() & "!g3")
    Questa ti restituisce il numero della fattura riferita al foglio che ha il numero più alto. Che mi è parso fosse il tuo problema.



  • di alessia (utente non iscritto) data: 23/04/2014 18:04:17

    Ciao Textomb,
    Ho provato il tuo codice ci sono riuscita. Mi dà il valore della cella g3 dell'ultimo foglio.
    Questo problema l'ho superato così facendo:
    Private Sub CommandButton21_Click()
    If TextBox5 = "" Then Exit Sub ' Se la textbox sarà vuota, allora esci dalla sub

    Sheets("Dati Fattura").Range("E5") = TextBox5.Value ' Se il valore della textbox2 è un valore
    For i = 4 To Sheets.Count
    Sheets(i).Range("g3") = TextBox5.Text + n
    n = n + 1
    Next
    CommandButton21.BackColor = 65535 '<--- di colore giallo
    MsgBox "Il numero iniziale per la nuova Fatturazione" & Chr(13) & "è stato inserito correttamente.", vbInformation, "Numero Fattura inserito !"
    TextBox6 = ""
    CommandButton21.BackColor = 65535 '<--- di colore giallo
    TextBox7.Value = Sheets(Sheets.Count).Range("g3")
    Sheets("Dati Fattura").Range("F5") = TextBox7.Value
    TextBox7.Value = Sheets("Dati Fattura").Range("f5")
    end sub
    Grazie per ilVostro aiuto



  • di alessia (utente non iscritto) data: 23/04/2014 18:09:04

    P.s. il tuo codice lo messo in F7.... Ti allego il secondo file n.2 se ti va dai un'occhiata come ho risolto io.
    Ciao



  • di Textomb data: 23/04/2014 18:28:25

    ok. Ho visto il tuo secondo file.
    mi pare che hai ben inserito il codice che ti avevo suggerito.
    Ben fatto.



  • di alessia (utente non iscritto) data: 23/04/2014 18:39:04

    Grazie a tutti per il vostro grande contributo che mi avete dato. Ora posso andare avanti col mio progetto....
    Possiamo mettere RISOLTO
    Grazie a tutti un abbraccio