Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Creare file di excel da un unico foglio di lavoro Excel

  1. #1
    serpico74 non  in linea Novello
    Ciao a tutti,
    ho un file di Excel così costituito:
    Colonne
    EAN, Descrizione, produttore, quantità
    con dentro una mole di dati ricevuti dall'esterno.
    Avrei la necessità di creare un foglio di lavoro per ogni produttore diverso e poi creare tanti file excel per ogni produttore.
    Esempio:
    ho nella colonna produttori:
    ESP
    TOL
    RAM
    dovrei creare nuovi fogli di lavoro per ogni produttore (ESP, TOL, RAM) e poi file Excel chiamati ESP.xls, TOL.xls, RAM.xls.
    qualcuno mi può aiutare?
    grazie in anticipo

  2. #2
    L'avatar di TheTruster
    TheTruster ora  in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    se vuoi una procedura automatizzata devi fare ricorso a VBA.

    se sai già che i produttori sono solo 3 apri, da codice, 3 nuovi files di Excel, assegnandoli ad altrettante variabili oggetto, ovvero:

    Dim xlBook_ESP As Excel.Workbook
    Dim xlBook_TOL As Excel.Workbook
    Dim xlBook_RAM As Excel.Workbook
    
    Set xlBook_ESP = Application.Workbooks.Add
    Set xlBook_TOL = Application.Workbooks.Add
    Set xlBook_RAM = Application.Workbooks.Add
    
    in questo modo ti ritrovi 3 riferimenti ad altrettanti workbook di Excel che puoi utilizzare per scrivervi dentro i dati provenienti dal tuo file "base"

    ti basterà, quindi, fare un ciclo per analizzare le celle del produttore, e in base al loro contenuto, indirizzare i valori corripondenti sul relativo file.

    dopo aver finito potrai salvare i 3 files.

    TheTruster
    ℹ️ Leggi di pi su TheTruster ...

  3. #3
    serpico74 non  in linea Novello
    Grazie TheTruster,
    purtroppo non so se i produttori saranno 3 oppure 50...
    Altra cosa:
    il ciclo lo faresti su ogni singola riga analizzando il valore PRODUTTORE oppure prima riordineresti la colonna e poi selezioneresti i vari cambiamenti nella colonna produttori?
    Grazie

  4. #4
    L'avatar di TheTruster
    TheTruster ora  in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    considerato che non sai a priori quanti sono i produttori quella di ordinare la lista in base al produttore può essere una buona idea.

    in questo modo, ogni volta che trovi un produttore diverso puoi chiudere il file di excel creato per contenere i dati del produttore precedente, e riutilizzare la variabile oggetto per creare un nuovo foglio relativo al nuovo produttore.

    in sostanza, ordinando l'elenco le cose si semplificano, e puoi rendere il codice "scalabile" nel senso che puo' essere utilizzato a prescindere dal numero di produttori...

    TheTruster
    ℹ️ Leggi di pi su TheTruster ...

  5. #5
    serpico74 non  in linea Novello
    Mi puoi dare una mano con qualche riga di codice?
    Il ragionamento l'ho capito, vorrei evitare di fare pasticci...
    grazie

  6. #6
    L'avatar di TheTruster
    TheTruster ora  in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    per evitare di fare pasticci, procedi con ordine...

    innanzi tutto crea una copia di backup del file che dovrai elaborare, lavorerai così su una copia evitando di creare danni irreparabili.

    la prima cosa da fare è creare la routine che ti consenta l'ordinamento delle varie righe da suddividere poi nei vari files.

    il sistema più semplice è quello di registrare una macro, realizzando l'ordinamento che serve, e andare a guardare il codice prodotto da Excel stesso per cercare di capirne il funzionamento "ripulendolo" un po'.

    una volta ottenute le righe ordinate, bisogna fare il ciclo, (For...Next) con all'interno una condizione If...Then, per discriminare i vari produttori.

    prova a scrivere qualcosa, se hai problemi chiedi

    TheTruster
    ℹ️ Leggi di pi su TheTruster ...

  7. #7
    serpico74 non  in linea Novello
    Ciao The Truster,
    scusa se sono passati un pò di giorni ma ho deciso di cambiare metodo.

    Applico un filtro sui Produttori passando già il valore che cerco (APP).
    Copio le celle così ottenute e apro il file con il nome "valore_cercato.xls" incollandole.
    Purtroppo non funziona molto bene:
    1. Funziona la prima volta che lo lancio poi mi dice che non trova più il file
    2. il file lo cerca in "c:\documents and
    settings\...\microsoft\excel\xlstart\app.xls" e non nella mia cartella in
    documenti dove ho il file con il codice.
    3. mi lascia aperto il file "app.xls"; come lo posso far chiudere in
    automatico?
    Ti allego il codice:

    -------------------------------------------------------------
        Range("A1").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Name = "Dati"
    
    On Error GoTo ErrHandler
    Dim DestWB As Workbook
    Dim strFullFileName As String
    Dim strCriteria As String
    strCriteria = "APP"
    strFullFileName = ThisWorkbook.Path & "\" & strCriteria & ".xls"
        Range("Dati").AutoFilter
        Range("Dati").AutoFilter Field:=2, Criteria1:=strCriteria
        If Range("Dati").Offset(1).Resize(Range("Dati").Rows.Count - 1) _
            .Cells.SpecialCells(xlCellTypeVisible).Count = 0 Then
            
        Exit Sub
        End If
        Range("Dati").Offset(1).Resize(Range("Dati").Rows.Count - 1).Copy
        If IsOpenWB(strCriteria & ".xls") = False Then
        Set DestWB = Workbooks.Open(strFullFileName)
        Else
        Set DestWB = Workbooks(strCriteria & ".xls")
        End If
        DestWB.Sheets("Foglio1").Range("a2").PasteSpecial (xlValue)
        Application.CutCopyMode = False
    ErrHandler_Exit:
    Exit Sub
    ErrHandler:
    If Err.Number = 1004 Then
    MsgBox "Il file di destinazione dati " & strFullFileName & _
      " non esiste, oppure non vi sono dati restituiti dal filtro"
    
      Resume ErrHandler_Exit
    
    Else
    MsgBox Err.Description
    Resume ErrHandler_Exit
    End If
    
    
    End Sub
    
    
    Private Function IsOpenWB(strFileName) As Boolean
    Dim WB As Workbook
    On Error Resume Next
    Set WB = Workbooks(strFileName)
    If Err.Number <> 0 Then
    IsOpenWB = False
    Else
    IsOpenWB = True
    End If
    End Function
    
    -------------------------------------

    Se tutto funziona per un produttore, vorrei creare un ciclo dove inserire i vari produttori che voglio esportare e poi un "tutti gli altri" per quelli che voglio spostare insieme.
    Spero di essermi spiegato
    Grazie

  8. #8
    L'avatar di TheTruster
    TheTruster ora  in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    a quanto vedo, apri un DestWB, ma non lo chiudi mai... dovresti chiuderlo salvandolo una volta esportati su di esso i dati, quindi:

    DestWB.Close (True) ' Chiude salvando i dati
    
    TheTruster
    ℹ️ Leggi di pi su TheTruster ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Copiare un file excel con macro su un foglio di lavoro
    Da Roberto52 nel forum Presentati
    Risposte: 1
    Ultimo Post: 29-12-2014, 17:36
  2. Risposte: 2
    Ultimo Post: 08-07-2014, 08:49
  3. Risposte: 5
    Ultimo Post: 20-10-2012, 11:20
  4. Risposte: 0
    Ultimo Post: 20-06-2011, 12:04
  5. Aiuto x creare fogli di lavoro in un file excel vba excel
    Da Giusy84 nel forum Microsoft Excel
    Risposte: 1
    Ultimo Post: 01-06-2009, 21:21