Salva su flle esterno



  • Salva su flle esterno
    di alessia (utente non iscritto) data: 05/05/2014 16:11:06

    Ciao a tutti,
    ho un altro piccolo problema che se si potesse risolvere sarebbe l'ideale. Io proprio non ci riesco. Arrivo al dunque. Con il codice sotto riportato, mi registra le fatture nel foglio chiamato "Archivio Fatture".
    Per stare tranquilli vorrei "se si potesse" registrare anche su un file esterno chiamato "Fatturazione" sul foglio "Archivio Generale".

    Questo è il codice:

    Label12 = "Attendere prego....."
    Dim msg, Style, title, response, MyString
    msg = "Vuoi Registrare in archivio tutte le Fatture ? "
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    title = "ATTENZIONE !"
    response = MsgBox(msg, Style, title)
    If response = vbYes Then
    MyString = "Yes"
    For Each sh In Sheets ' seleziona dal foglio 4 fino all'ultimo foglio
    With sh
    If .Index > 2 Then
    irow = 4 ' inizia a scrivere dalla riga 4
    While Sheets("Archivio Fatture").Cells(irow, 1) <> ""
    irow = irow + 1 '+ 1

    Wend

    Sheets("Archivio Fatture").Cells(irow, 1) = .[C13] 'Cod. cliente
    Sheets("Archivio Fatture").Cells(irow, 2) = .[F6] 'Rag. Sociale
    Sheets("Archivio Fatture").Cells(irow, 3) = .[F7] 'Indirizzo cliente
    Sheets("Archivio Fatture").Cells(irow, 4) = .[F8] 'Cap
    Sheets("Archivio Fatture").Cells(irow, 5) = .[G8] 'Città
    Sheets("Archivio Fatture").Cells(irow, 6) = .[G9] 'P. Iva
    Sheets("Archivio Fatture").Cells(irow, 7) = .[G10] 'Codice Fiscale
    Sheets("Archivio Fatture").Cells(irow, 8) = .[I3] 'Data Emissione Fattura
    Sheets("Archivio Fatture").Cells(irow, 9) = .[G3] 'N. Fattura
    Sheets("Archivio Fatture").Cells(irow, 10) = .[C15] 'Periodo dal
    Sheets("Archivio Fatture").Cells(irow, 11) = .[E15] 'Periodo al
    Sheets("Archivio Fatture").Cells(irow, 12) = .[B18] 'Descrizione
    Sheets("Archivio Fatture").Cells(irow, 13) = .[B20] 'Indirizzo
    Sheets("Archivio Fatture").Cells(irow, 14) = .[B21] 'Cap
    Sheets("Archivio Fatture").Cells(irow, 15) = .[C21] 'Città
    Sheets("Archivio Fatture").Cells(irow, 16) = .[E41] 'Imponibile
    Sheets("Archivio Fatture").Cells(irow, 17) = .[G41] 'Iva
    Sheets("Archivio Fatture").Cells(irow, 18) = .[I41] 'Totale
    Sheets("Archivio Fatture").Cells(irow, 19) = .[H40] 'Percentuale iva %
    Sheets("Archivio Fatture").Cells(irow, 20) = .[B22] 'Descrizione 2
    Sheets("Archivio Fatture").Cells(irow, 21) = .[B24] 'Indirizzo 2
    Sheets("Archivio Fatture").Cells(irow, 22) = .[B25] ' Cap 2
    Sheets("Archivio Fatture").Cells(irow, 23) = .[C25] 'Città 2
    Sheets("Archivio Fatture").Cells(irow, 24) = .[B26] 'Descrizione 3
    Sheets("Archivio Fatture").Cells(irow, 25) = .[B28] 'Indirizzo 3
    Sheets("Archivio Fatture").Cells(irow, 26) = .[B29] 'Cap 3
    Sheets("Archivio Fatture").Cells(irow, 27) = .[C29] 'Città 3
    Sheets("Archivio Fatture").Cells(irow, 28) = .[B30] 'Descrizione 4
    Sheets("Archivio Fatture").Cells(irow, 29) = .[B32] 'Indirizzo 4
    Sheets("Archivio Fatture").Cells(irow, 30) = .[B33] 'Cap 4
    Sheets("Archivio Fatture").Cells(irow, 31) = .[C33] 'Città 4
    Sheets("Archivio Fatture").Cells(irow, 32) = .[B34] 'Descrizione 5
    Sheets("Archivio Fatture").Cells(irow, 33) = .[B36] 'Indirizzo 5
    Sheets("Archivio Fatture").Cells(irow, 34) = .[B37] 'Cap 5
    Sheets("Archivio Fatture").Cells(irow, 35) = .[C37] 'Città 5
    Sheets("Archivio Fatture").Cells(irow, 36) = .[B38] 'Descrizione 6
    Sheets("Archivio Fatture").Cells(irow, 37) = .[C14] 'Codice Esattore

    End If
    End With
    Next
    Label12 = ""
    MsgBox "Tutte le Fatture sono state registrate...", vbInformation, ("Fatture Registrate...")
    CommandButton28.BackColor = 65535 '<--- di colore giallo
    Else
    MyString = "No"
    Label12 = ""
    End If

    La domanda è questa: con un pulsante si potrebbe salvare gli stessi dati (come sopra) in un file esterno chiamato "Fatturazione" foglio " Archivio Generale". Chiaramente questo file è chiuso. Il file si trova nella stessa cartella dle desktop.
    Grazie



  • di alessia (utente non iscritto) data: 06/05/2014 13:26:43

    Ciao a tutti,
    Sto facendo tante prove ma con esito negativo. Da sola proprio non ci riesco. Ho bisogno di un Vostro aiuto.
    Ciò che riesco a fare è: aprire il file con:
    Workbooks.Open Filename:=ActiveWorkbook.Path & "fatturazione.xlsm"

    e chiudere il file principale con
    Unload Me ' chiudo userform
    Workbooks("fatture occasionali").Close SaveChanges:=False ' chiudo il file senza salvare.
    Ma non riesco a salvare i dati nel file esterno chiamato "fatturazione" sul foglio "Archivio Generale".
    Potete darmi qualche dritta?
    Grazie a tutti





  • di nichicanta (utente non iscritto) data: 06/05/2014 14:21:19

    Ciao alessia prova con questo codice, l'ho testato e copia i dati del file ( foglio attivo sul quale tu hai i dati di aprtenza) di origine in un fiel che ho chiamato come tu hai segnalato e funziona.
    Ciao, provalo e facci sapere.
     
    Option Explicit
    
    Sub Copia()
    Dim oFil1
    Dim oFil2
    Dim trovato As Boolean
    Dim nom As String
    Dim nFgl As Long
    Dim Risp As Long
    Dim dat As Variant
    Dim x As Long
    On Error Resume Next
    
    Application.ScreenUpdating = False
    oFil1 = ActiveWorkbook.Name
    oFil2 = "FATTURAZIONE.xlsm"
    
    dat = Range("B2")
    ActiveSheet.Select
    Cells.Copy
    
    Workbooks.Open ThisWorkbook.Path & "" & oFil2
    nFgl = Sheets.Count
    trovato = False
    For x = 1 To nFgl
      Sheets(x).Activate
      If Range("B2") = dat Then
        Risp = MsgBox("Attenzione esistono dei dati, si deve Riscrivere?.", vbYesNo, "Scrittura dati")
        trovato = True
        Exit For
      End If
    Next x
      If trovato = True Then
        If Risp = 7 Then Exit Sub
        If Risp = 6 Then
          Windows(oFil2).Activate
          Sheets(x).Activate
          Cells(1, 1).Select
          ActiveSheet.Paste
          Cells(1, 1).Select
        End If
      End If
      If trovato = False Then
        Windows(oFil2).Activate
        Sheets("ARCHIVIO GENERALE").Select
        'Sheets.Add After:=Sheets(Sheets.Count)' QUESTO CODICE SERVE PER COPIARE I DATI DI ORIGINE IN UN FOGLIO CHE SI AGGIUNGE "COME NUOVO"
        'A QUELLI GIA' ESISTENTI
        Cells(1, 1).Select
        ActiveSheet.Paste
        Cells(1, 1).Select
      End If
    
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    
    Windows(oFil1).Activate
    Cells(1, 1).Select
    Application.ScreenUpdating = True
    End Sub
    



  • di lepat (utente non iscritto) data: 06/05/2014 14:41:42

    non sarebbe più semplice copiare il file in un'altra cartella di backup ?



  • di alessia (utente non iscritto) data: 06/05/2014 14:43:37

    Grazie Niki, vedendo il codice che hai scirtto, io non ci sarei mai arrivata.
    lo provo. ti faccio sapere.
    Grazie



  • di alessia (utente non iscritto) data: 06/05/2014 15:22:27

    Niki non va, mi combina un macello ad esempio i pulsanti diventato giganti. Ti allego i due File quello di
    partenza si chiama "Fatturazione".
    Nel file allegato "Fatturazione Occasionale" troverai un pulsante "Registra tutte le Fatture" non fa altro che registrarmi tutti
    i dati sul Foglio "Archivio Fatture" del medesimo File. Ti informo che i file sono n.4 File chiamati: Fatture Mensili, Fatture Bimestrali,
    Fatture Trimestrali e Fatture Occasionali. Ognuno di esso ha un archivio. Fin qui va bene.
    Quello che vorrei è, inserire su ogni File: Mensile,Bimestrale,trimestrale e occasionale, un pulsante che mi consenta
    di registrare i dati nel file " Fatturazione" foglio "Archivio Generale".
    Cioè, in poche parole deve copiarmi il valore delle celle C13, F6, F8, G8, G9, G10, i3,G3,C15,E15,B18,B20,B21,C21,E41,
    G41,i41,H40,B22,B24,B25,C25,B26,B28,B29,C29,B30,B32,B33,C33,B34,B36,B37,C37,B38,C14, dal foglio 4 fino all'ultimo
    foglio presente nella cartella, su un file chiuso che sarebbe "Fatturazione" foglio "Archivio Generale".
    Naturalmente quando salvo, non deve soprascrivere i dati ma aggiungere.
    Lo so è difficile. Almeno per me.
    Grazie



  • di alessia (utente non iscritto) data: 06/05/2014 17:08:26

    Qualche idea?



  • di Raffaele_53 (utente non iscritto) data: 06/05/2014 18:53:50

    Rispondo solo per la copia, altre cose non ho capito molto.
    >>>Ti informo che i file sono n.4

    Nota bene devi modificare riga 3 e 4 casomai
     
    Private Sub CommandButton28_Click()
    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    Workbooks.Open ("C:UsersLelloDesktopfatturazione.xlsm") ' da cambiare
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")
    uriga = sh2.Range("A" & Rows.Count).End(xlUp).Row + 1
    
    wk1.Activate
    Label12 = "Attendere prego....."
    Dim msg, Style, title, response, MyString, rr As Long
    msg = "Vuoi Registrare in archivio tutte le Fatture ? "
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    title = "ATTENZIONE !"
    response = MsgBox(msg, Style, title)
    If response = vbYes Then
        MyString = "Yes"
    
    For Each sh In wk1.Sheets
    With sh
    If .Index > 2 Then
    irow = 4  ' inizia a scrivere dalla riga 4
    While Sheets("Archivio Fatture").Cells(irow, 1) <> ""
    irow = irow + 1  '+ 1
    Wend
    
    Sheets("Archivio Fatture").Cells(irow, 1) = .[C13]  'Cod. cliente
    sh2.Cells(uriga, 1) = .[C13]
    Sheets("Archivio Fatture").Cells(irow, 2) = .[F6]   'Rag. Sociale
    sh2.Cells(uriga, 2) = .[F6]
    Sheets("Archivio Fatture").Cells(irow, 3) = .[F7]   'Indirizzo cliente
    sh2.Cells(uriga, 3) = .[F7]
    Sheets("Archivio Fatture").Cells(irow, 4) = .[F8]   'Cap
    sh2.Cells(uriga, 2) = .[F8]
    Sheets("Archivio Fatture").Cells(irow, 5) = .[G8]   'Città
    sh2.Cells(uriga, 2) = .[G8]
    Sheets("Archivio Fatture").Cells(irow, 6) = .[G9]   'P. Iva
    sh2.Cells(uriga, 2) = .[G9]
    Sheets("Archivio Fatture").Cells(irow, 7) = .[G10]  'Codice Fiscale
    sh2.Cells(uriga, 2) = .[G10]
    Sheets("Archivio Fatture").Cells(irow, 8) = .[I3]   'Data Emissione Fattura
    sh2.Cells(uriga, 2) = .[I3]
    Sheets("Archivio Fatture").Cells(irow, 9) = .[G3]   'N. Fattura
    sh2.Cells(uriga, 2) = .[G3]
    Sheets("Archivio Fatture").Cells(irow, 10) = .[C15] 'Periodo dal
    sh2.Cells(uriga, 2) = .[C15]
    Sheets("Archivio Fatture").Cells(irow, 11) = .[E15] 'Periodo al
    sh2.Cells(uriga, 2) = .[E15]
    Sheets("Archivio Fatture").Cells(irow, 12) = .[B18] 'Descrizione
    sh2.Cells(uriga, 2) = .[B18]
    Sheets("Archivio Fatture").Cells(irow, 13) = .[B20] 'Indirizzo
    sh2.Cells(uriga, 2) = .[B20]
    Sheets("Archivio Fatture").Cells(irow, 14) = .[B21] 'Cap
    sh2.Cells(uriga, 2) = .[B21]
    Sheets("Archivio Fatture").Cells(irow, 15) = .[C21] 'Città
    sh2.Cells(uriga, 2) = .[C21]
    Sheets("Archivio Fatture").Cells(irow, 16) = .[E41] 'Imponibile
    sh2.Cells(uriga, 2) = .[E41]
    Sheets("Archivio Fatture").Cells(irow, 17) = .[G41] 'Iva
    sh2.Cells(uriga, 2) = .[G41]
    Sheets("Archivio Fatture").Cells(irow, 18) = .[I41] 'Totale
    sh2.Cells(uriga, 2) = .[I41]
    Sheets("Archivio Fatture").Cells(irow, 19) = .[H40] 'Percentuale iva %
    sh2.Cells(uriga, 2) = .[H40]
    Sheets("Archivio Fatture").Cells(irow, 20) = .[B22] 'Descrizione 2
    sh2.Cells(uriga, 2) = .[B22]
    Sheets("Archivio Fatture").Cells(irow, 21) = .[B24] 'Indirizzo 2
    sh2.Cells(uriga, 2) = .[B24]
    Sheets("Archivio Fatture").Cells(irow, 22) = .[B25] ' Cap 2
    sh2.Cells(uriga, 2) = .[B25]
    Sheets("Archivio Fatture").Cells(irow, 23) = .[C25] 'Città 2
    sh2.Cells(uriga, 2) = .[C25]
    Sheets("Archivio Fatture").Cells(irow, 24) = .[B26] 'Descrizione 3
    sh2.Cells(uriga, 2) = .[B26]
    Sheets("Archivio Fatture").Cells(irow, 25) = .[B28] 'Indirizzo 3
    sh2.Cells(uriga, 2) = .[B28]
    Sheets("Archivio Fatture").Cells(irow, 26) = .[B29] 'Cap 3
    sh2.Cells(uriga, 2) = .[B29]
    Sheets("Archivio Fatture").Cells(irow, 27) = .[C29] 'Città 3
    sh2.Cells(uriga, 2) = .[C29]
    Sheets("Archivio Fatture").Cells(irow, 28) = .[B30] 'Descrizione 4
    sh2.Cells(uriga, 2) = .[B30]
    Sheets("Archivio Fatture").Cells(irow, 29) = .[B32] 'Indirizzo 4
    sh2.Cells(uriga, 2) = .[B32]
    Sheets("Archivio Fatture").Cells(irow, 30) = .[B33] 'Cap 4
    sh2.Cells(uriga, 2) = .[B33]
    Sheets("Archivio Fatture").Cells(irow, 31) = .[C33] 'Città 4
    sh2.Cells(uriga, 2) = .[C33]
    Sheets("Archivio Fatture").Cells(irow, 32) = .[B34] 'Descrizione 5
    sh2.Cells(uriga, 2) = .[B34]
    Sheets("Archivio Fatture").Cells(irow, 33) = .[B36] 'Indirizzo 5
    sh2.Cells(uriga, 2) = .[B36]
    Sheets("Archivio Fatture").Cells(irow, 34) = .[B37] 'Cap 5
    sh2.Cells(uriga, 2) = .[B37]
    Sheets("Archivio Fatture").Cells(irow, 35) = .[C37] 'Città 5
    sh2.Cells(uriga, 2) = .[C37]
    Sheets("Archivio Fatture").Cells(irow, 36) = .[B38] 'Descrizione 6
    sh2.Cells(uriga, 2) = .[B38]
    Sheets("Archivio Fatture").Cells(irow, 37) = .[C14] 'Codice Esattore
    sh2.Cells(uriga, 2) = .[C14]
    uriga = uriga + 1
    End If
    End With
    Next
            wk2.Save
            wk2.Close
    Label12 = ""
    MsgBox "Tutte le Fatture sono state registrate...", vbInformation, ("Fatture Registrate...")
    CommandButton28.BackColor = 65535 '<--- di colore giallo
     Else
     MyString = "No"
     Label12 = ""
     End If
     Set wk1 = Nothing
      Set wk2 = Nothing
       Set sh2 = Nothing
    End Sub



  • di Raffaele_53 (utente non iscritto) data: 06/05/2014 18:56:18

    Vedo un errore in tante righe, non ho modificato il
    >>>sh2.Cells(uriga, 2) ....il due deve aumentare ogni volta come hai fatto Tu



  • di alessia (utente non iscritto) data: 06/05/2014 19:34:59

    Grazie Raffaele,
    lo provo e ti faccio sapere. Io sto impazzendo nel provare e riprovare. Ritengo che non sia una cosa del tutto facile. Almeno per me è difficilissimo.mhmhmhmh
    Ti faccio saperee



  • di alessia (utente non iscritto) data: 06/05/2014 20:41:08

    Grazie tante Raffaele obbiettivo raggiunto. Ho solo modificato:

    sh2.Cells(uriga, 1) = .[C13] numerandole 1,2,3, ecccc come avevi già segnalato in più ho modificato l'indice

    For Each sh In wk1.Sheets
    With sh
    ' gli ho dato l'indece 3 invece che 2 perchè c'è un foglio nascosto nel progetto sarebbe la Matrice della fattura _
    altrimenti mi copia anche questo nel file esterno.
    If .Index > 3 Then
    irow = 4 ' inizia a scrivere dalla riga 4
    While Sheets("Archivio Fatture").Cells(irow, 1) <> ""
    irow = irow + 1 '+ 1
    Wend

    Non era così facile risolvere questo problema. Non so come tu abbia fatto, ma hai risolto un problema per me molto grande.
    Adesso posso andare avanti col lavoro che era fermo con le quattro freccie nel tentar di risolvere questo enigma.
    Non so se hai dato un'occhiata nei file allegati. Piacerebbe avere un parere sul progetto in questione così com'è.
    Sicuramente tutto si può migliorare.
    Riconosco la mia poca conoscenza del VBA, ma che mi appassiona sempre più, SI.
    Detto questo carissimo Raffaele, voglio ringranziarti di vero cuore. Che dirti di più?
    Grazie,
    Bye alessia



  • di alessia (utente non iscritto) data: 06/05/2014 20:42:26

    P.s. Risolto



  • di alessia (utente non iscritto) data: 06/05/2014 20:49:06

    P.s. Un consiglio. E' il caso di spegnere lo schermo con Application.ScreenUpdating = False
    visto la macro per poi accenderlo alla fine?
    grazie



  • di Raffaele_53 (utente non iscritto) data: 06/05/2014 21:17:02

    Non serve (se desideri metterlo fai pure)

    Il files è difficile da capire tutto, forse solo Tu lo sai usare bene
    Il codice andrebbe snellito e dichiarare tutte le variabili se sono..Long,string,range ecc ecc

    Non ho capito cosa fai con Function maxSheet =INDIRETTO(maxSheet() & "!g3")
    A me interveniva ogni volta che cambiavo foglio e alcune volte mi mandava in errore il files (dovevo chiudere e riaprirlo)



  • di alessia (utente non iscritto) data: 06/05/2014 21:33:15

    Ti rispodo subito Raffaele.
    cit. Non ho capito cosa fai con Function maxSheet =INDIRETTO(maxSheet() & "!g3")
    A me interveniva ogni volta che cambiavo foglio e alcune volte mi mandava in errore il files (dovevo chiudere e riaprirlo).

    Per il primo problema non fa altro che una verifica del Numero di Fattura. Questo perchè se commettessi involontariamente un errore nell'ordine di fatture, questo lo potrai notare nella textbox " Verifica Fatture" che deve essere uguale all'altra textbox. Dovrebbe non succedere. Quella formula "indiretto" funziona con il codice del modulo2:

    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

    Per il secondo Problema, potrai notare che se entri dal file principale " Fatturazione" nel file Fatturazione Occasionale, devi uscire per forza ritornando al menù, tramite i pulsanti esci & salva oppure esci e non salvare. Vedrai che funziona. Talmente sto rinc.... che non ricordo come ho fatto. Però il risultato è questo. Il codice dei file è aperto. Dacci un'occhiata.
    Se non mi sono incasinata è così.
    P.s. Fai come ti ho detto, vedrai che non andrà in errore.

    Fammi sapere.
    Ciao Raffaele



  • di alessia (utente non iscritto) data: 06/05/2014 21:45:59

    Raffaele, io vado. Ci sentiamo domani se ti va. Appena sono online, ti avviso tramite un nuovo msg in questa discussione. Se devi dirmi qualcosa, scrivi pure io leggerò domani.
    Grazie e buonanotte a tutti...



  • di alessia (utente non iscritto) data: 07/05/2014 13:11:40

    Ciao a tutti,
    X Raffaele. Dal tuo codice ho spostato giù queste righe all'interno dell'intero codice.

    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    Workbooks.Open ("C:Userscameldesktopfiorefatturazione.xlsm") ' da cambiare
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")
    uriga = sh2.Range("A" & Rows.Count).End(xlUp).Row + 1

    wk1.Activate
    Label12 = "Attendere prego....."

    Questo perchè se rispondovo Si "Salva in Archivio" tutto va bene. Se invece rispondevo di No ed uscivo dall'userform per poi rientrarci, anndava in errore VBA. Precisamente questa digitura. Cosa che tu hai trovato sicuramente. Lo stesso succede se apri il file Fatturazione mentre è aperto il file Fatturazione Occasionale. Così comè ti permette di avere un solo file aperto per volta. Onestamente non ricordo cosa ho fatto ho inserito,. Però riflettendoci su, potrebbe essere anche un problema. Mistero del VBA? Di certo qualche casino che ho combinato io.

    Errore di Run Time - 2147352571
    Impossibile impostare la proprietà Value.
    Incompatibile tra i tipi.

    Ciao



  • di Raffaele_53 (utente non iscritto) data: 07/05/2014 13:39:10

    Come Ti ho detto ieri, proprio l'errore che faceva e dovevo riaprirlo (non credo che sia mio).
    Il tutto dipende dal fatto che Function maxSheet() ad ogni foglio aperto, qualche volta manda in errore la cella F7 in "dati fattura"

    A riguardo lo spostamento, io rimmeterei come prima (l'unico particolare da spostare)
    wk2.Save
    wk2.Close da mettere qualche riga sotto prima di Set wk1 = Nothing

    >>>mentre è aperto il file Fatturazione Occasionale
    Certo doveva essere chiuso. Devi integrare questo codice

     
    Dim Book As Workbook,trovato As Boolean
    trovato = False
    For Each Book In Workbooks
     If Book.Name = "fatturazione.xlsm" Then trovato = True
    Next Book
    If Not trovato Then
     Workbooks.Open Filename:="C:UsersLelloDesktopfatturazione.xlsm"
    End if



  • di alessia (utente non iscritto) data: 07/05/2014 14:18:48

    Grazie Raffaele, sto usando i tuoi consigli. Asp. ti faccio sapere.



  • di alessia (utente non iscritto) data: 07/05/2014 14:47:56

    Avevi ragione Raffaele, e da ieri che me lo stai a dì.
    Su di te non avevo dubbi. Si vede che sei una persona molto preparata.
    Cmq ho eliminato la verifica del Num. fattura e va molto bene, meglio di prima.
    Per il secondo punto non ho capito il codice.

    >>Certo doveva essere chiuso. Devi integrare questo codice

    Dim Book As Workbook,trovato As Boolean
    trovato = False
    For Each Book In Workbooks
    If Book.Name = "fatturazione.xlsm" Then trovato = True
    Next Book
    If Not trovato Then
    Workbooks.Open Filename:="C:UsersLelloDesktopfatturazione.xlsm"
    End if
    Cosa fa ? E dove va messo?
    Dovrebbe non consentirti l'apertura del file se è già aperto un'altro?
    Grazie



  • di Grograman (utente non iscritto) data: 07/05/2014 15:27:22

    Su questo posso forse esserti utile anche io

    Leggere commenti per spiegazioni:
     
    Dim Book As Workbook, trovato As Boolean
    ''''''trovato = False 'di default le booleane sono istanziate a false ;)
    For Each Book In Application.Workbooks 'per ogni cartella di lavoro aperta nell'excel
      If Book.Name = "fatturazione.xlsm" Then trovato = True 'se il nome del file è "fatturazione.xlsm" allora "accendo" la booleana
    Next Book 'passo al prossimo file aperto
    If Not trovato Then 'se NON ho acceso trovato, quindi è falsa
      Workbooks.Open Filename:="C:UsersLelloDesktopfatturazione.xlsm" 'allora apro il file
    End If



  • di alessia (utente non iscritto) data: 07/05/2014 15:36:04

    Grazie Grograman,
    Non ho capito dove metterlo.



  • di Raffaele_53 (utente non iscritto) data: 07/05/2014 16:14:26

    Lo devi mettere in alto, a riguardo la Function maxSheet()

    Secondo me è strutturata male (lei si attiva in ogni foglio aperto), invece dovrebbe funzionare dal 4 in poi.
    Qui con i primi tre files che non deve valutare, in uno di questi va in errore sicuramente perché non trova il valore in g3 (credo)

    Chiedo hai più esperti, perché con le Function non sono bravo
     
    Private Sub CommandButton28_Click()
    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    Dim Book As Workbook, trovato As Boolean
    ''''''trovato = False 'di default le booleane sono istanziate a false ;)
    For Each Book In Application.Workbooks 'per ogni cartella di lavoro aperta nell'excel
      If Book.Name = "fatturazione.xlsm" Then trovato = True 'se il nome del file è "fatturazione.xlsm" allora "accendo" la booleana
    Next Book 'passo al prossimo file aperto
    If Not trovato Then 'se NON ho acceso trovato, quindi è falsa
      Workbooks.Open Filename:="C:UsersLelloDesktopfatturazione.xlsm" 'allora apro il file
    End If
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")
    uriga = sh2.Range("A" & Rows.Count).End(xlUp).Row + 1
    wk1.Activate
    Label12 = "Attendere prego....."ecc ecc



  • di alessia (utente non iscritto) data: 07/05/2014 16:34:19

    Raffaele grazie tante ma diventa troppo complicato per me. Ho risolto così. Ho tolto maxsheet e indiretto e il problema lo risolto con ordina fatture. In modo tale che avrò sempre nella textbox7 l'ultimo Num di Fattura, senza il bisogno di una verifica del numero più alto. Perchè come ti sto dicendo, il Num. più alto sarà sempre l'ultimo foglio.
    grazie



  • di Grograman (utente non iscritto) data: 07/05/2014 17:08:42

    Scusate ma io non ho seguito proprio tutta la discussione....

    quindi potrei dire una castroneria, ma se si volesse trovare l'ultimo foglio di una cartella di lavoro tramite una function farei come segue:
     
    Option Explicit
    Public Function maxSheet(ByVal wb As Workbook) As Long
      maxSheet = wb.Worksheets.Count
    End Function
    
    Sub Num_Fogli()
      Dim x As Long
      x = maxSheet(ThisWorkbook)
    End Sub
    
    
    OPPURE
    Option Explicit
    Public Function maxSheet(ByVal wb As Workbook) As String
      maxSheet = wb.Worksheets(wb.Worksheets.Count).Name
    End Function
    
    Sub Num_Fogli()
      Dim sName  As String
      sName = maxSheet(ThisWorkbook)
    End Sub



  • di alessia (utente non iscritto) data: 07/05/2014 18:05:31

    Scusate se rispondo con ritardo. Sono appena tornata a casa. Ormai è diventata una sfida tra me e il VBa. eh.
    Grograman, ora vedo il tuo codice vediamo se sono capace a farlo girare.



  • di alessia (utente non iscritto) data: 07/05/2014 18:48:48

    x Grograman,
    ho inserito il tuo codice in un modulo. Ma non succede nulla. Nella cella f7 del foglio Dati Fattura, ho la seguente formula:
    =INDIRETTO(maxSheet() & "!g3")
    Ma esci: #valore! nella cella.
    Il codice che usavo mi è stato dato da qualcuno di qui, che al momento non ricordo il nome, ma ne sono grata per il tempo a me dedicato. Funzionava bene. Solo che aveva un piccolo problema, avvolte andava in errore vba. Raffaele (persona gentilissima) non solo ha scoperto l'errore, ma mi ha dato spiegazione del perchè "fondamentale" per me. Allora come scritto su non avendo idee su come fare, mi sono limitata ad ordinare i fogli. Quindi, ho eliminato la verifica del numero fattura.
    La funzione indiretto funziona se all'interno di un modulo è presente::
    Dim vArr(), I As Integer
    ReDim vArr(1 To Worksheets.Count)

    For I = 4 To Worksheets.Count
    vArr(I) = Val(Worksheets(I).Name)
    Next

    maxSheet = WorksheetFunction.Max(vArr)

    End Function



     
    '



  • di raffaele_53 (utente non iscritto) data: 07/05/2014 22:30:15

    Forse.....
    >>>If ws.Name = "ILNOMECHENONVOGLIOTOCCARE1" Then exit sub
    >>>If ws.Name = "ILNOMECHENONVOGLIOTOCCARE2" Then exit sub
    >>>If ws.Name = "ILNOMECHENONVOGLIOTOCCARE3" Then exit sub

    Onestamente non saprei.....?
    Ps. Credo che Function maxSheet(), debba funzionare dal 4° foglio in avanti.



  • di affaele_53 (utente non iscritto) data: 07/05/2014 22:42:52

    E non in altri files.



  • di alessia (utente non iscritto) data: 08/05/2014 11:20:50

    Ciao a tutti.
    >>>Onestamente non saprei.....?
    >>>Ps. Credo che Function maxSheet(), debba funzionare dal 4° foglio in avanti.
    Esatto Raffaele,
    Infatti la lettura della cella G3 è dal 4 Foglio in poi. I primi tre sono Dati Fattura, Archivio Fattura e il Foglio Matrice che quest'ultimo è un foglio nascosto. Con il tuo parere (forse) escudendo i fogli che non interessano, non va in quanto End function non riconosce End sub.
    Sto facend delle prove ma niente di che. Mannaggià a me. Cmq provo ancora un pò e se non dovessi riuscire; pazienza.
    Grazie Raffaele



  • di Textomb data: 08/05/2014 12:04:44

    la function MaxSheet() funzionava bene fin quando l'esigenza era di reperire l'ultimo numero di fattura che era memorizzato nella cella G3 del foglio il cui nome era il numero più alto.
    Quindi non è detto che questo coincideva con l'ultimo foglio aggiunto cronologicamente...
    Per questo la function analizzava tutti i nomi dei fogli e poi prendeva quello il cui nome era il valore più alto per l'appunto.
    Per questo non poteva farsi semplicemente maxSheet = wb.Worksheets.Count...
    Se poi le esigenze nel tempo cambiano è ovvio che le decisioni assunte nel passato possono rivelarsi non adatte.



  • di Raffaele_53 (utente non iscritto) data: 08/05/2014 12:31:53

    Non si tratta d'aggiungere altri fogli, solo che si attiva ad ogni foglio.

    Penso d'avere capito, si tratta di un mio errore di valutazione.
    Quando tramite VBA si apre il files fatturazione.xlsm, la Function maxSheet si attiva e va a inserire l'errore in cella F7

    Ho provato a mettere....
    If Not trovato Then 'se NON ho acceso trovato, quindi è falsa
    Application.EnableEvents = False
    Workbooks.Open Filename:="C:UsersLelloDesktopfatturazione.xlsm" 'allora apro il file
    Application.EnableEvents = True
    End If

    Mà la Function rimane attiva. Non sò come bloccarla, sicuramente scossa oppure Textomb (ciao) sà come fare



  • di alessia (utente non iscritto) data: 08/05/2014 12:43:17

    Grazie Textomb,
    La spiegazione è molto importante almeno per me che voglio imparare sempre più.
    Infatti, il progetto a cui sto lavorando è cambiato un pochino durante le varie fasi. Quel pochino ha fatto si che alcune cose, come tra l'altro altre cose che avevo fatto io, non andavano più bene ed alcune invece andavano modificate.
    Deto questo è doveroso da parte mia ringranziarVi tutti per l'aiuto e sostegno che mi state dando. Infatti, mi sono impantanata all'incirca 3/4 volte ma grazie al vostro prezioso aiuto posso continuare.
    Grazie



  • di alessia (utente non iscritto) data: 08/05/2014 12:45:22

    Grazie Raffaele.



  • di Textomb data: 08/05/2014 12:52:06

    Purtroppo ho perso un pò di passaggi e non ho ben capito l'esigenza ed il problema residuo (ammesso che non sia già stato risolto...).



  • di alessia (utente non iscritto) data: 08/05/2014 13:14:51

    Ciao Textomb,
    cerco di spiegarmi. Allora nella cella f7 del foglio Dati Fattura avevo il famoso indiretto con il codice all'interno di un modulo. Io ho risolto cosi:
    Ordina Fatture
    Dim msg, Style, title, response, MyString
    msg = "Vuoi ordinare tutte le Fatture in ordine Alfabetico e Numerico ? "
    Style = vbYesNo + vbInformation + vbDefaultButton2
    title = "Metti in ordine Alfabetico e Numerico tutte le Fatture ..."

    response = MsgBox(msg, Style, title)

    If response = vbYes Then
    MyString = "Yes"

    Application.ScreenUpdating = False

    Dim wb As Workbook
    Dim shs As Sheets
    Dim ws As Worksheet
    Dim foglio As Worksheet
    Dim area As Range
    Dim riga As Long
    Dim X As Integer
    Dim sName As String

    Set wb = ThisWorkbook
    Set shs = wb.Sheets
    riga = 1

    With shs
    .Add after:=.Item(.Count)
    End With
    Set ws = ActiveSheet
    sName = "___zzz"
    On Error Resume Next
    ws.Name = sName
    Do While Err.Number <> 0
    sName = sName & "z"
    Err.Clear
    ws.Name = sName
    Loop
    On Error GoTo 0

    For Each foglio In shs
    ws.Range("A" & riga) = foglio.Name
    riga = riga + 1
    Next foglio
    riga = riga - 1
    Set area = ws.Range("A1:A" & riga)
    area.Sort Key1:=ws.Range("A1"), Order1:=xlAscending
    For X = 1 To riga
    shs(area(X).Text).Move before:=shs(X)
    Next X
    With Application
    .DisplayAlerts = False
    ws.Delete
    .DisplayAlerts = True
    .ScreenUpdating = True
    End With
    Set area = Nothing
    Set ws = Nothing
    Set shs = Nothing
    Set wb = Nothing
    ' poichè questo codice mette in ordine numerico tutti i fogli, se la cartella dovesse contenere anche dei fogli/o alfabetici _
    questi vengono spostati alla fine della cartella. Se si vuole tenerli per primo/i usare il comando array per portarli _
    in prima posizione.


    Sheets(Array("Archivio Fatture", "Dati fattura", "matrice")).Move before:=Sheets(1) ' questi fogli selezionati, verranno disposti all'inizio della cartella in ordine alfabetico

    MsgBox "Tutte le Fatture sono state Ordinate", vbInformation, ("Ordina tutte le Fatture . . .")
    Sheets("Dati Fattura").Select ' ritorna nel foglio selezionato
    CommandButton29.BackColor = 65535 '<--- di colore giallo
    Label12 = ""
    Application.ScreenUpdating = True
    Else
    MyString = "No"
    End If

    Così all'interno della Textbox7 avrò sempre l'ultimo risultato.
    TextBox7.Value = Sheets(Sheets.Count).Range("g3") ' questo legge la G3 dell'ultimo foglio
    Sheets("Dati Fattura").Range("F5") = TextBox7.Value ' registra sul foglio il valore della text

    Però con il codice riportato nella discussione, non faceva altro una verifica. Cerco di spiegarmi. Se io erroneamente dovessi spostare i fogli e non facessi l'ordine delle fatture, nella textbox5 riporta il valore della cella g3 dell'ultimo foglio. Mentre nella textbox7 prende il valore della cella f7 (Maxscheet) e se il valore più alto non è nell'ultimo foglio, darà in textbox7 valore 0. Quindi capisco che cè qualcosa che non va. Il perchè il valore della textbox5 e della textbox7 devono essere uguali. Allora solo in questo caso posso procedere con la fatturazione. Sarebbe una sicurezza inpiù, diciamo una sorta di verificaa.Se non mi sono incasinata, questo e quanto.
    Grazie



  • di Textomb data: 08/05/2014 13:26:43

    più tardi ci metto un pò di testa. Per ora non mi è possibile. Mamma mia!
    Speriamo che Raffaele (ricambio i saluti) mi batta sul tempo.



  • di alessia (utente non iscritto) data: 08/05/2014 13:32:14

    Grazie Textomb,
    per me è impossibile risolverlo. Però se Vi impegna molto, ragazzi non fa niente mi arrangio.
    Grazie per l'impegno..a dopo



  • di alessia (utente non iscritto) data: 08/05/2014 15:35:56

    Raffaele come mai il codice sotto riportato ( che in parte e il tuo) mi cancella solo sul file principale nell'Archivio Fatture e non su file esterno chiamato Fatturazione "Archivio Generale? Cosa sto sbagliando?
    questo è il codice:
    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    On Error Resume Next ' se non dovesse trovare il file non va in errore
    Workbooks.Open Filename:=ActiveWorkbook.Path & "fatturazione.xlsm" ' apre il file nella stessa cartella
    'Workbooks.Open ("C:UserslellodesktopFatturazionefatturazione.xlsm") ' da cambiare
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")


    wk1.Activate
    Dim msg, Style, title, response, MyString, rr As Long
    msg = "Vuoi Eliminare dall' archivio le ultime Fatture Registrate ? "
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    title = "ATTENZIONE !"
    response = MsgBox(msg, Style, title)
    If response = vbYes Then
    MyString = "Yes"

    wk1.Activate

    wk1("Archivio Fatture").Select
    numfatt = Sheets.Count - 3
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    If LR > numfatt Then
    Rows(LR - numfatt + 1 & ":" & LR).Delete
    End If
    ' mi deve eliminare tante righe per quanti sono i fogli
    'wk2.Activate
    wk2("Archivio Generale").Select
    numfatt = Sheets.Count - 3
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    If LR > numfatt Then
    Rows(LR - numfatt + 1 & ":" & LR).Delete
    End If


    MsgBox "Tutte le Fatture sono state registrate...", vbInformation, ("Fatture Registrate...")
    CommandButton28.BackColor = 65535 '<--- di colore giallo
    Else
    MyString = "No"

    End If
    Set wk1 = Nothing
    wk2.Save
    wk2.Close
    Set wk2 = Nothing
    Set sh2 = Nothing

    Ps. ho cambiato
    'Workbooks.Open ("C:UserslellodesktopFatturazionefatturazione.xlsm") ' da cambiare
    in
    Workbooks.Open Filename:=ActiveWorkbook.Path & "fatturazione.xlsm" ' apre il file nella stessa cartella
    Così se devo usarlo su un'altro pc non mi da problemi.
    Grazie



  • di Raffaele_53 (utente non iscritto) data: 08/05/2014 16:31:46

    Il Vero problema che solo Tu conosci come si usa questo files.
    Qualsiasi modifica crei può accadere alcune discordanze con altri codici scritti.

    Vedo diversi errori nel Tuo modo di scrivere il codice (caotico/inutile e non dichiarare variabili)
    Ex wk2("Archivio Generale").Select, dimmi che significato abbia se ho già dichiarato le variabili sopra.
    Metti come prima riga in ogni pagina Option Explicit e vedrai cosa Ti succede.

    Sposta l'allegato che lo vedo (fammi un preciso esempio di come usare l'userform per eliminare), secondo me questo files è tutto da riscrivere.

    Faccio un esempio --> A cosa servono i tredici fogli?
    La function si poteva evitarla scrivendo in ogni foglio il numero di fattura attuale?
    >>>Prima Fattura Ultima Fattura
    >>>1643----------1655 (sapendo che sono 13, posso conoscere l'inizio,la fine e le future 13 da scrivere in G3)
    Perchè scrivere 13 fatture ogni volta, se solo 1/2/3 sono validatamente scritte?
    Eliminare fatture che io sappia non si deve fare (casomai modificarle)

    Mà come detto, solo Tu sei in grado di gestire questo files



  • di alessia (utente non iscritto) data: 08/05/2014 17:08:39

    Lo so Raffaele,
    ci sto mettendo tutta me stessa. Ho da imparare e sono qui per farlo.
    Ti allego il file: Fatture Occasionali_2
    Grazie



  • di alessia (utente non iscritto) data: 08/05/2014 17:14:28

    P.s. In sintesi questo pulsante a me serve in quanto se io dovessi sbagliare a registrare i dati delle fatture nell'archivio del file principale più su quello secondario "Fatturazione", devo poter cancellare. Il file Registra, non fa altro contare i fogli, che poi sono le fatture, prende i dati e li mette in archivio. Quindi se io ho 10 Fatture, mi registrerà su 10 righe tuttii dati. Ecco il bisogno di cancellare qual'ora sbagliassi.



  • di alessia (utente non iscritto) data: 08/05/2014 17:35:11

    X Raffaele,
    Cit.Faccio un esempio --> A cosa servono i tredici fogli?
    Risp. Ci sono attualmente 13 fogli solo per prova poi saranno molti di più.

    La function si poteva evitarla scrivendo in ogni foglio il numero di fattura attuale?
    Risp. No. Il numero di fattura una volta messo il primo, va in automatico +1 su tutte le fatture presenti.

    >>>Prima Fattura Ultima Fattura
    >>>1643----------1655 (sapendo che sono 13, posso conoscere l'inizio,la fine e le future 13 da scrivere in G3)
    Perchè scrivere 13 fatture ogni volta, se solo 1/2/3 sono validatamente scritte?
    Risp. Tutto è in prova.
    >>>Eliminare fatture che io sappia non si deve fare (casomai modificarle)

    Risp. Ti spiego come deve funzionare questa progetto. Questo tipo di Fatturazione prevede vari tipi di Fatture. Es. Mensile, bimestrale ecc. Se su mensile io ho 200 clienti, il mese successivo se non ci sono state disdette, oppure, l'arrivo di nuovi cliente, io cambio il periodo fatturazione e l'emissione Fattura. Questi dati me li porta su tutte le faatture presenti.
    Per quanto riguarda la cancellazione delle fatture, questo avverrà spesso con quelle Occasionali non con le altre. Anche perchè verranno salvate non solo in archivio, ma anche come pdf e una copia cartacea nello schedario. Se non mi sono persa è così.
    grazie



  • di Textomb (utente non iscritto) data: 08/05/2014 18:50:42

    Allora Alessia ti informo che se prima ero confuso adesso sono perso. Vorrei aiutarti e vediamo come si può fare.
    In linea generale non mi piace molto mettere le mani nel codice scritto da altri perchè devi sapere perfettamente cosa fai altrimenti il rischio di fare danni è altissimo.
    Allora per venirti incontro, senza postare codice, ti chiedo di descrivere a parole quello che vuoi ottenere. Considera che parli con persone che fanno altri mestieri e quindi non dare nulla per scontato.
    In estrema sintesi:
    Io ho capito che vorresti trasferire su un altro file che si chiama Fatturazione una copia dei dati principali delle fatture registrate nel file principale che si chiama FattureOccasionali.
    Inoltre i dati che vuoi trasferire di ogni fattura sono i medesimi che vengono registrati nel foglio ArchivioFatture che si trova nel file principale FattureOccasionali. Giusto?
    Ma, se è così, mi chiedo, non sarebbe più semplice duplicare i dati contenuti nel foglio Archivio Fatture in un file diverso? Magari rendere automatico e trasparente questa operazione e quindi ogni sacrosanta volta che registri una fattura viene integrato il file con la copia dei dati senza che tu debba chiedere conferma... O no?



  • di Raffaele_53 (utente non iscritto) data: 08/05/2014 20:19:04

    La soluzione è molto facile, visto che i due file sono XLSM e sono legati tramite codice. Basta dire a quell'altro che ad ogni chiusura copy il foglio Archivio_Fatture in se stesso, potrebbe avere i suoi pro e contro.

    Non mi hai ancora spiegato cosa servono/funzionano i vari fogli numerati. Tanti in più...? intendi dire che hai intenzione di farne uno per ogni cliente (cosi sarebbe spiegato il motivo del Mensile/bimestrale)

    Ps. Secondo me la struttura è totalmente sbagliata e se desideri Ti dico il perchè.



  • di Raffaele_53 (utente non iscritto) data: 08/05/2014 20:34:53

    In questo modo non serviva tutto il codice sopra, tranne dichiarare le variabili del secondo files (magari solo alla fine dell'userform) e quando lo chiudevi gli dicevi di salvare in se stesso l'Archivio Fatture salvandosi.



  • di alessia (utente non iscritto) data: 09/05/2014 14:47:31

    Ciao ragazzi,
    oggi avrò poco tempo per impegni di lavoro. Vediamo cosa riesco a fare. Per primis: grazie 1000 per l'impegno, ora risp. in ordiene.

    Risp. Textomb

    >>In linea generale non mi piace molto mettere le mani nel codice scritto da altri eccc....

    Su questo puoi stare tranquillo siamo tutti qui per imparare, "io più di voi". Poi non abbiamo un contratto dove eventualmente si possano richiedere dei danni.
    Voglio Farti una piccola premessa.
    Io uso excel da circa una 10na d'anni. L'uso è stato limitato su fogli Excel semplici preimpostati >tipo "Fattura".
    Poi, qualche mese fa ho scoperto il Vba, che a dirla tutta non sapevo e conoscevo. Allora nel fare ricerche in rete, ho visto è trovato
    interessante il cd. Vba, per le tante cosa che può fare.
    Detto questo veniamo a noi.

    >>Allora per venirti incontro, senza postare codice, ti chiedo di descrivere a parole quello che vuoi ottenere.

    Provo a spiegarmi. E' difficile anche per me sotto alcuni aspetti.
    Io ho un pulsante dove quando lo pigio, lui mi registra sul file principale (dove mi trovo) "Fatture Occasionali"
    nel foglio "Archivio Fatture" tutti i dati presenti in fattura. Allo stesso tempo va a registrarmi su un File esterno chiamato "Fatturazione"
    nel Foglio "Archivio Generale" . In questo modo io ho per una mia comidità, un' Archivio parziale ed un Archivio Generale.
    Stessa cosa dovrà accadere quando mi trovo sul File es. Bimestrale. Anche qui, verranno registrati su un Archivio parziale e
    sull'Archivio generale.
    Se tu hai visto il file allegato, avrai notato che prima di Registrare il codice conta le Fatture partendo dalla Fattura 4 in poi.
    Faccio un Es. ipotizzando che nel file in questione io ho n. 200 Fatture, in totale avrò n. 203 fogli di cui "uno dei tre" la matrice è un foglio nascosto.
    Il codice non fa altro che riportare nell'Archivio Fatture tutte le fatture presenti nel file su 200 righe. Cmq se non ti chiedo troppo vedi i due
    File il principale "Fatturazione" e Fatturazione Occasionale. Alla fine il progetto lavorerà con in tutto n.5 file.
    Questi file saranno suddivisi in: principale Fatturazione i successivi Mensile, Bimestrale, trimestrale e Occasionale.
    Spiegato il primo passo auspicando di essere stata chiara, vorrei che allo stesso modo mi cancellasse l'ultima registrazione avvenuta.
    Nel senso che vada a cancellarmi n.200 righe sul file principale "Archivio Fatture" e su quello esterno "Fatturazione" foglio "archivio generale"
    naturalmente prendendo come riferimento dall'ultima riga piena a salire di 200.

    >>Considera che parli con persone che fanno altri mestieri e quindi non dare nulla per scontato.

    Non devi preoccuparti è già tanto ciò che state facendo per me.

    >> In estrema sintesi:
    >>Io ho capito che vorresti trasferire su un altro file che si chiama Fatturazione una copia dei dati principali delle fatture registrate nel
    >> file principale che si chiama FattureOccasionali.

    No. Questo già lo faccio. Mi deve solo cancellare. Questo mi serve che se sbagliassi a registrare io possa cancellare.

    >> Inoltre i dati che vuoi trasferire di ogni fattura sono i medesimi che vengono registrati nel foglio ArchivioFatture che si trova nel
    file principale FattureOccasionali. Giusto?

    Esatto.

    >>Ma, se è così, mi chiedo, non sarebbe più semplice duplicare i dati contenuti nel foglio Archivio Fatture in un file diverso?

    No. Perchè i dati nell'archivio Fatture rimangono sempre. Altresì, nell'archivio Generale. Quindi, se duplicassi ogni volta avrei dei doppioni
    nell'archivio Generale e questo non va bene.

    >>Magari rendere automatico e trasparente questa operazione e quindi ogni sacrosanta volta che registri una fattura viene integrato
    >>il file con la copia dei dati senza che tu debba chiedere conferma... O no?

    No. Voglio prima lavorarci su, una volta finito il lavoro Salvo in Pdf, Stampo n.3 copie ed allora Registro.
    Per non dimenticare la Registrazione, metterò all'uscita del fiile un avviso in modo da non dimenticare.
    -----------------------------------------------------------------------------------------------------------------------------------------------------

    Risp. Raffaele
    >>La soluzione è molto facile, visto che i due file sono XLSM e sono legati tramite codice. Basta dire a quell'altro che ad ogni chiusura
    >>copy il foglio Archivio_Fatture in se stesso, potrebbe avere i suoi pro e contro.

    Infatti. Preferisco farlo manualmente.

    >>Non mi hai ancora spiegato cosa servono/funzionano i vari fogli numerati. Tanti in più...? intendi dire che hai intenzione di farne
    >>uno per ogni cliente (cosi sarebbe spiegato il motivo del Mensile/bimestrale)

    Hia centrato in pieno Raffaele. I clienti vengono identificati per codice cliente. Questo perchè in caso di omonimia sarebbe un grosso problema sia
    per rettifiche,incrementi o cancellazione.
    Infatti, io ho una rubrica cliente inseriti per codice cliente. Potrai notare dal file allegato, che quando Creo una nuova Fattura mi copia
    dentro la cella c13 del medesimo, il nome del foglio. Se creo un nuovo cliente es. Rossi Mario, io gli assegno ad es. codice cliente n.100,
    troverò in automatico nel suo foglio "100" nella cella C13 il num. 100.



    >>Ps. Secondo me la struttura è totalmente sbagliata e se desideri Ti dico il perchè.

    Immagino che è da migliorare per non dire tutto da rifare. Infatti se dovessi inserire come da te suggerito "Option Explicit "
    il programma non và più dandomi degli errori. Ho letto qualcosa in rete. Ad es. migliora le prestazioni e velocità.
    Purtroppo Raffaele questa sono io. Queste sono le mie capacità.
    Comunque dimmi pure.

    >>In questo modo non serviva tutto il codice sopra, tranne dichiarare le variabili del secondo files (magari solo alla fine dell'userform) e quando
    >>lo chiudevi gli dicevi di salvare in se stesso l'Archivio Fatture salvandosi.

    No. Preferisco farlo manualmente e non automatizzato. Voglio prima lavorarci ed a lavoro finito procedere con l'archiviazione.

    Grazie a tutti per l'impegno e dedizione nel risolvere i miei "problemi".
    Appena posso vi rispondo...
    Grazie di tutto.......









  • di alessia (utente non iscritto) data: 09/05/2014 19:29:41

    Grazie a Voi ho risolto un gran problema. Ho cambiato un pò di cose.
    Io ho fatto così:

    Ho creato due Fogli chiamati: AB0 e AB999 e gli ho nascosti.


    ho inserito sul foglio "Dati Fatture" cellaF7
    =MAX('AB0:AB999'!G3)


    nascondo i fogli
    Private Sub UserForm_Activate()
    On Error Resume Next
    Sheets("matrice").Visible = False
    Sheets("ab0").Visible = False
    Sheets("ab999").Visible = False
    End Sub


    Nel codice "ordina fatture" ho effettuato delle modifiche
    prima
    Sheets(Array("Archivio Fatture", "Dati fattura", "matrice"")).Move before:=Sheets(1)
    dopo
    Sheets(Array("Archivio Fatture", "Dati fattura", "matrice", "AB0")).Move before:=Sheets(1)
    Sheets(Array("Archivio Fatture", "Dati fattura", "matrice", "1")).Move before:=Sheets(1)
    ottengo tutti i file in ordine alfabetico e numerico.
    es. Archivio Fatture, Dati Fattura e 1,2,3 ecc....


    Nel codice "Nuova Fattura" ho cambiato
    prima
    Sheets(X).Move after:=Sheets(Worksheets.Count + 0)

    dopo
    Sheets(X).Move after:=Sheets(Worksheets.Count - 1)


    Riportami il valore della cella f7 in textbox
    Sheets("Dati Fattura").Range("f7") = TextBox8.Value


    prima
    ' Pulsante Dimmi l'ultimo cliente
    MsgBox "L'ultimo Cliente inserito è: " & Worksheets(Worksheets.Count ).Name, vbInformation, "Ultimo Cliente"

    dopo
    MsgBox "L'ultimo Cliente inserito è: " & Worksheets(Worksheets.Count - 1).Name, vbInformation, "Ultimo Cliente"

    Il tutto sembra funzionare correttamente. Grazie a Voi chiaramente...
    Ora continuo nel cercare la soluzione del problema riportato nel precedente post.
    Grazie



  • di alessia (utente non iscritto) data: 13/05/2014 13:08:41

    Ciao a tutti,
    ho fatto tante prove ma con esito negativo. Non riesco a cancellare l'avvenuta registrazione effettuata in precedenza.
    Con questo codice mi registra sul file corrente Fatturazione Occasionali, foglio "Archivio Fatture" e su un file esterno chiamato Fatturazione foglio "Archivio Generale" tutte le fatture. Avendo così un archivio parziale ed uno Generale.


    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    On Error Resume Next
    'Workbooks.Open ("C:UserslellodesktopFatturazionefatturazione.xlsm") ' da cambiare
    Workbooks.Open Filename:=ActiveWorkbook.Path & "fatturazione.xlsm"
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm") ' da cambiare casomai
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")
    uriga = sh2.Range("A" & Rows.Count).End(xlUp).Row + 1

    wk1.Activate
    Label12 = "Attendere prego....."
    Dim msg, Style, title, response, MyString, rr As Long
    msg = "Vuoi Registrare in archivio tutte le Fatture ? "
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    title = "ATTENZIONE !"
    response = MsgBox(msg, Style, title)
    If response = vbYes Then
    MyString = "Yes"

    wk1.Activate
    Label12 = "Attendere prego....."

    Application.ScreenUpdating = False 'Conviene spegnere lo schermo

    For Each Sh In wk1.Sheets
    With Sh
    ' gli ho dato l'indece dal 3 foglio il perchè c'è un foglio nascosto nel progetto sarebbe la Matrice della fattura _
    altrimenti mi copia anche questo nel file esterno
    If .Index > 4 Then
    irow = 4 ' inizia a scrivere dalla riga 4
    While Sheets("Archivio Fatture").Cells(irow, 1) <> ""
    irow = irow + 1 '+ 1
    Wend

    Sheets("Archivio Fatture").Cells(irow, 1) = .[C13] 'Cod. cliente
    sh2.Cells(uriga, 1) = .[C13]
    Sheets("Archivio Fatture").Cells(irow, 2) = .[f6] 'Rag. Sociale
    sh2.Cells(uriga, 2) = .[f6]
    Sheets("Archivio Fatture").Cells(irow, 3) = .[f7] 'Indirizzo cliente
    sh2.Cells(uriga, 3) = .[f7]
    Sheets("Archivio Fatture").Cells(irow, 4) = .[f8] 'Cap
    sh2.Cells(uriga, 4) = .[f8]
    Sheets("Archivio Fatture").Cells(irow, 5) = .[g8] 'Città
    sh2.Cells(uriga, 5) = .[g8]
    Sheets("Archivio Fatture").Cells(irow, 6) = .[g9] 'P. Iva
    sh2.Cells(uriga, 6) = .[g9]
    Sheets("Archivio Fatture").Cells(irow, 7) = .[g10] 'Codice Fiscale
    sh2.Cells(uriga, 7) = .[g10]
    Sheets("Archivio Fatture").Cells(irow, 8) = .[i3] 'Data Emissione Fattura
    sh2.Cells(uriga, 8) = .[i3]
    Sheets("Archivio Fatture").Cells(irow, 9) = .[g3] 'N. Fattura
    sh2.Cells(uriga, 9) = .[g3]
    Sheets("Archivio Fatture").Cells(irow, 10) = .[c15] 'Periodo dal
    sh2.Cells(uriga, 10) = .[c15]
    Sheets("Archivio Fatture").Cells(irow, 11) = .[e15] 'Periodo al
    sh2.Cells(uriga, 11) = .[e15]
    Sheets("Archivio Fatture").Cells(irow, 12) = .[b18] 'Descrizione
    sh2.Cells(uriga, 12) = .[b18]
    Sheets("Archivio Fatture").Cells(irow, 13) = .[b20] 'Indirizzo
    sh2.Cells(uriga, 13) = .[b20]
    Sheets("Archivio Fatture").Cells(irow, 14) = .[b21] 'Cap
    sh2.Cells(uriga, 14) = .[b21]
    Sheets("Archivio Fatture").Cells(irow, 15) = .[c21] 'Città
    sh2.Cells(uriga, 15) = .[c21]
    Sheets("Archivio Fatture").Cells(irow, 16) = .[e41] 'Imponibile
    sh2.Cells(uriga, 16) = .[e41]
    Sheets("Archivio Fatture").Cells(irow, 17) = .[g41] 'Iva
    sh2.Cells(uriga, 17) = .[g41]
    Sheets("Archivio Fatture").Cells(irow, 18) = .[i41] 'Totale
    sh2.Cells(uriga, 18) = .[i41]
    Sheets("Archivio Fatture").Cells(irow, 19) = .[h40] 'Percentuale iva %
    sh2.Cells(uriga, 19) = .[h40]
    Sheets("Archivio Fatture").Cells(irow, 20) = .[b22] 'Descrizione 2
    sh2.Cells(uriga, 20) = .[b22]
    Sheets("Archivio Fatture").Cells(irow, 21) = .[b24] 'Indirizzo 2
    sh2.Cells(uriga, 21) = .[b24]
    Sheets("Archivio Fatture").Cells(irow, 22) = .[b25] ' Cap 2
    sh2.Cells(uriga, 22) = .[b25]
    Sheets("Archivio Fatture").Cells(irow, 23) = .[c25] 'Città 2
    sh2.Cells(uriga, 23) = .[c25]
    Sheets("Archivio Fatture").Cells(irow, 24) = .[b26] 'Descrizione 3
    sh2.Cells(uriga, 24) = .[b26]
    Sheets("Archivio Fatture").Cells(irow, 25) = .[b28] 'Indirizzo 3
    sh2.Cells(uriga, 25) = .[b28]
    Sheets("Archivio Fatture").Cells(irow, 26) = .[b29] 'Cap 3
    sh2.Cells(uriga, 26) = .[b29]
    Sheets("Archivio Fatture").Cells(irow, 27) = .[c29] 'Città 3
    sh2.Cells(uriga, 27) = .[c29]
    Sheets("Archivio Fatture").Cells(irow, 28) = .[b30] 'Descrizione 4
    sh2.Cells(uriga, 28) = .[b30]
    Sheets("Archivio Fatture").Cells(irow, 29) = .[b32] 'Indirizzo 4
    sh2.Cells(uriga, 29) = .[b32]
    Sheets("Archivio Fatture").Cells(irow, 30) = .[b33] 'Cap 4
    sh2.Cells(uriga, 30) = .[b33]
    Sheets("Archivio Fatture").Cells(irow, 31) = .[c33] 'Città 4
    sh2.Cells(uriga, 31) = .[c33]
    Sheets("Archivio Fatture").Cells(irow, 32) = .[b34] 'Descrizione 5
    sh2.Cells(uriga, 32) = .[b34]
    Sheets("Archivio Fatture").Cells(irow, 33) = .[b36] 'Indirizzo 5
    sh2.Cells(uriga, 33) = .[b36]
    Sheets("Archivio Fatture").Cells(irow, 34) = .[b37] 'Cap 5
    sh2.Cells(uriga, 34) = .[b37]
    Sheets("Archivio Fatture").Cells(irow, 35) = .[c37] 'Città 5
    sh2.Cells(uriga, 35) = .[c37]
    Sheets("Archivio Fatture").Cells(irow, 36) = .[b38] 'Descrizione 6
    sh2.Cells(uriga, 36) = .[b38]
    Sheets("Archivio Fatture").Cells(irow, 37) = .[c14] 'Codice Esattore
    sh2.Cells(uriga, 37) = .[c14]
    uriga = uriga + 1
    End If
    End With
    Next


    Label12 = ""
    Application.ScreenUpdating = True 'Riaccendo lo schermo
    MsgBox "Tutte le Fatture sono state registrate...", vbInformation, ("Fatture Registrate...")
    CommandButton41.BackColor = 65535 '<--- di colore giallo
    Else
    MyString = "No"
    Label12 = ""
    End If
    Set wk1 = Nothing
    wk2.Save
    wk2.Close
    Set wk2 = Nothing
    Set sh2 = Nothing

    Quello che non riesco a fare e come cancellare se erroneamente ho registrato i dati in archivio. Il codice deve poter cancellare sia sul file Fatture Occasionali, foglio Archivio Fatture, che sul file esterno chiamato Fatturazione "Archivio Generale".
    Come posso risolvere?
    Aiuto!!!
    Grazie



  • di alessia (utente non iscritto) data: 13/05/2014 20:25:31

    Ciao a tutti,
    sono riuscita ad effettuare con il codice sotto riportato la cancellazione dei dati sia nel file principale foglio "Archivio Fatture" che nel file esterno chiuso chiamato "Fatturazione" - foglio "Archivio Generale". (non so se ho fatto un casino)
    L'unico problema è che nel file principale "Fatturazione Occasionali" foglio "Archivio Fatture" mi cancella dall'ultima riga piena a salire per quante sono i fogli escludendo le prime due righe. Mentre nel file esterno "Fatturazione" foglio "Archivio Generale"
    mi cancella anche le prime due righe. Invece le prime due righe non deve cancellarle. Cosa sto sbagliando?
    Es. se io ho un file con 204 fogli (che sarebbero 200 Fatture), mi deve cancellare sia dal file principale chiamato "Fatture Occasionali" foglio "Archivio Fatture" che dal file esterno chiuso chiamato "Fatturazione" foglio "Archivio Generale" tante righe per quanti sono le Fatture (200). Ciòè, deve contare quanti fogli ci sono nel file escludendo i primi 4 che sono dati.
    Sto impazzendo e non riuscendo con sto cavolo di problema.
    Potete illuminarmi?
    Grazie
    questo è il codice:

    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    On Error Resume Next

    Workbooks.Open Filename:=ActiveWorkbook.Path & "fatturazione.xlsm"
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm")
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")

    wk1.Activate

    Dim msg, Style, title, response, MyString, rr As Long
    msg = "Vuoi Registrare in archivio tutte le Fatture ? "
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    title = "ATTENZIONE !"
    response = MsgBox(msg, Style, title)
    If response = vbYes Then
    MyString = "Yes"




    Application.ScreenUpdating = False

    For Each Sh In wk1.Sheets
    Sheets("Archivio Fatture").Select

    numfatt = Sheets.Count - 5
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    If LR > numfatt Then
    Rows(LR - numfatt + 1 & ":" & LR).Delete

    End If
    wk2.Activate

    Next


    Application.ScreenUpdating = True 'Riaccendo lo schermo
    MsgBox "Tutte le Fatture sono state registrate...", vbInformation, ("Fatture Registrate...")

    Else
    MyString = "No"

    End If
    Set wk1 = Nothing
    wk2.Save
    wk2.Close
    Set wk2 = Nothing
    Set sh2 = Nothing



  • di alessia (utente non iscritto) data: 14/05/2014 12:26:28

    Dopo vari tentativi sono riuscita a cancellare tante righe per quanti sono i fogli (es. 15) -5 dal file principale in Archivio Fatture e anche nel file esterno Archivio Generale. L'unico problema che nel file esterno nel foglio Archivio Generale mi cancella le ultime 14 righe. Invece deve cancellarne 10 righe. Cosa sbaglio? Potete aiutarmi?
    Lo so è difficile ma credo non impossibile.
    Grazie
    P.s. allego il codice
    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    On Error Resume Next
    Workbooks.Open Filename:=ActiveWorkbook.Path & "fatturazione.xlsm"
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm")
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")

    wk1.Activate

    Dim msg, Style, title, response, MyString, rr As Long
    msg = "Vuoi Registrare in archivio tutte le Fatture ? "
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    title = "ATTENZIONE !"
    response = MsgBox(msg, Style, title)
    If response = vbYes Then
    MyString = "Yes"

    Application.ScreenUpdating = False

    For Each Sh In wk1.Sheets
    Sheets("Archivio Fatture").Select

    numfatt = Sheets.Count - 5
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    If LR > 2 Then
    Rows(LR - numfatt + 1 & ":" & LR).Delete

    End If
    wk2.Activate

    Next
    Application.ScreenUpdating = True 'Riaccendo lo schermo
    MsgBox "Tutte le Fatture sono state registrate...", vbInformation, ("Fatture Registrate...")

    Else
    MyString = "No"

    End If
    Set wk1 = Nothing
    wk2.Save
    wk2.Close
    Set wk2 = Nothing
    Set sh2 = Nothing



  • di Raffaele_53 (utente non iscritto) data: 15/05/2014 00:18:51

    Il codice va scritto in......
    NON dove scrivi, mà nella finestra appena sotto.
    Ecco perchè "POI" apparirà in giallo il codice. Se rimanesse nella prima finestra diventa illegibile

    >>>For Each Sh In wk1.Sheets
    Sh dovè è stato dichiarato...?
    Se non disponi la domanda in modo corretto, potrebbe essere che nessuno TI risponda.
    Viste le Mie risposte..., forse potrei, mà sono titubante nel rispondere, prima di entrare in altri errori.



  • di alessia (utente non iscritto) data: 15/05/2014 08:53:51

    Gentilissimo Raffaele,
    già il fatto che tu mi abbia risposto per me è un segno positivo.
    Il silenzio non l'adoro. Capisco ed hai ragione che forse nel spiegarmi
    sono distratta e poco chiara. Questo è dovuto alla mia poca esperienza .
    Però, se non vi chiedo troppo abbiate pazienza con me. Chiaramente non siete obbligati e solo una
    cortesia in più che vi chiedo, come tra l'altro avete già fatto.
    Ritornando al progetto "a dirla tutta" non immaginavo di poter arrivare così avanti essendo consapevole
    delle mie piccole capacità.
    Inoltre, vedendo la tua discussione con Scossa, ho seguito il suo consiglio. Sarebbe evitare di nascondere i fogli.
    Naturalmente se sono andata oltre le mie aspettative, devo ringraziare: Lepat, Nichicanta, Grograman, Texttomb, Scossa e te Raffaele53
    per l'aiuto che ni avete dato.
    Detto questo, prova ancora con il codice ascoltando il tuo consiglio. Vediamo se sono capace. Mannaggià a me.
    Farò sapere.
    Grazie a tutti.



  • di alessia (utente non iscritto) data: 15/05/2014 10:44:16

    Niente da fare. Non ci riesco e sono nel panico totale.
    Ho fatto tante prove ma non riesco ad ottenere il risultato voluto. uffufffufufuf
    Con questo codice sotto riportato, mi cancella nel file principale le 10 righe.
    Mentre nel file esterno n. 14 righe, 4 in più.
    Questo dato "10 righe" sono il numero delle fatture presenti nel file principale.
    Insomma, non riesco a far cancellare tante righe per quanti sono i fogli "Fatture" nel file principale in entrambi
    i file.

    Codice usato:

    Dim wk1 As ThisWorkbook: Set wk1 = ThisWorkbook
    On Error Resume Next
    Workbooks.Open Filename:=ActiveWorkbook.Path & "fatturazione.xlsm"
    Dim wk2 As Workbook: Set wk2 = Workbooks("fatturazione.xlsm")
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Archivio Generale")

    wk1.Activate
    'wk2.Activate
    Dim msg, Style, title, response, MyString, rr As Long
    msg = "Vuoi eliminare dall'Archivio Fatture e da quello esterno Archivio Generale le ultime Fatture registrate ? "
    Style = vbYesNo + vbExclamation + vbDefaultButton2
    title = "ATTENZIONE !"
    response = MsgBox(msg, Style, title)
    If response = vbYes Then
    MyString = "Yes"

    Application.ScreenUpdating = False

    For Each Sh In wk1.Sheets
    'sh2.Select
    'Sh = wk2.Sheets
    'Sheets("Archivio Fatture").Select

    numfatt = Sheets.Count - 5
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    If LR > 2 Then
    Rows(LR - numfatt + 1 & ":" & LR).Delete
    wk2.Activate

    'wk1.Activate
    End If
    'sh2.Activate
    wk2.Activate
    Next

    Application.ScreenUpdating = True 'Riaccendo lo schermo
    MsgBox "Tutte le Fatture sono state registrate...", vbInformation, ("Fatture Registrate...")
    Else
    MyString = "No"
    End If
    Set wk1 = Nothing
    wk2.Save
    wk2.Close
    Set wk2 = Nothing
    Set sh2 = Nothing

    Se volete e potete aiutarmi io sono qui.
    Grazie a tutti...



  • di Raffaele_53 (utente non iscritto) data: 15/05/2014 12:54:21

    Il mio "silenzio" è dovuto (ad impegni) e al Workbook_NewSheet, che non ho ancora capito bene.

    Ps. riallega l'ultimo files dell'errore (cerchero di capire il motivo).

    Pps. Apri un nuovo post, con H T T P://www.excelvba.it/Forum/reply.php?f=1&t=6451
    Questo è diventato illeggibile, mi raccomando metti sempre il codice nella finestra sotto (dove stai scrivendo, appena più sotto c'è un'altra finestra che si chiama Codice VBA, bella che non esiste in tutti i forum), poi diventa giallo per chi lo vede.



  • di alessia (utente non iscritto) data: 15/05/2014 13:25:27

    Grazie Raffaele provvedo subito.