Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Copiare colonne non contigue tra 2 files

  • Messaggi
  • OFFLINE
    BG66
    Post: 268
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Junior
    2010
    00 19/05/2019 11:05
    Ciao a tutti,
    nel foglio di lavoro "Appoggio" del file "Colonne non contigue_VForum.xls vorrei copiare i dati di alcune colonne del file: "INTERROGAZIONEDOCUMENTI_FORUM.xlsb" e precisamente:
    colonna A (consegna confermata): prelevo i dati della colonna D
    colonna B (articolo): prelevo i dati della colonna G
    colonna C (descrizione): prelevo i dati della colonna H
    etc, etc

    I dati nel file "INTERROGAZIONEDOCUMENTI_FORUM.xls" andrebbero presi fino all'ultima riga non vuota.

    Quello che ho fatto è, purtroppo, poco dinamico:
      
    Public Sub cercacopia()      
       Dim wk1 As Workbook 'dichiaro le variabili     
       Dim wk2 As Workbook     
       Dim sh1 As Worksheet     
       Dim sh2 As Worksheet     
       Dim strFile As String, strPath As String  
    On Error GoTo RigaErrore 'gestione errori
           Application.ScreenUpdating = False          
           Set wk1 = ThisWorkbook 'metto i riferimenti ai files
           cartellainiziale = "C:\Users\Microsoft\Desktop\Imballi"
           With Application.FileDialog(msoFileDialogOpen) 
           .InitialFileName = cartellainiziale     
           .Title = "Seleziona cartella e File"     
           .AllowMultiSelect = False     
           .Show         
                If .SelectedItems.Count = 0 Then Exit Sub         
                strFile = .SelectedItems(1)     
           End With     
           Set wk2 = Workbooks.Open(strFile)     
           Set sh1 = wk1.Worksheets("Appoggio") 'metto i riferimenti ai fogli    
           Set sh2 = wk2.Worksheets("WGT21SFL")           
    
            With sh2         
            sh1.Range("A2:E70").ClearContents         
            .Range("A2:Y70").Copy 'copio i dati da un file all'altro 
            sh1.Range("A2").PasteSpecial xlPasteValues     
            End With
       
             Application.CutCopyMode = False
             Application.DisplayAlerts = False 'inibisco avviso  salvataggio del file sorgente     
            wk2.Close 'chiudo il file sorgente  
           Application.DisplayAlerts = True     
           Application.ScreenUpdating = True  'riga sempre eseguita RigaChiusura:     
        'Set a Nothing delle variabili oggetto     
           Set sh2 = Nothing     
           Set sh1 = Nothing     
           Set wk1 = Nothing     
           Set wk2 = Nothing     
           Exit Sub  
           'in caso di errore 
      RigaErrore:     
    MsgBox Err.Number & vbNewLine & Err.Description     
    Resume RigaChiusura       
    End Sub
    [Modificato da BG66 19/05/2019 11:16]
    BG66
    Excel 2010
  • OFFLINE
    LeoFar
    Post: 11
    Registrato il: 04/03/2019
    Utente Junior
    2019
    00 21/05/2019 10:35
    Cosa significa 'poco dinamico' ?
    A Me non dice niente.
  • OFFLINE
    by sal
    Post: 5.676
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 21/05/2019 11:08
    Copia dati
    Ciao BG, premesso che devi lanciare la macro per ogni file dal quale devi fare la copia, cancellando i dati precedenti, inoltre inserisci un range fisso da copiare

    .Range("A2:Y70").Copy


    questo dovresti renderlo dinamico in modo da copiare i dati che ti interessano

    ed anche il foglio da copiare, tu lo chiami "Generale" ma nel file si chiama "WGT21SFL" quindi ti va in errore la macro.

    In poche parole che dati devi riportare dal file, quali colonne tutte oppure solo alcune, nel foglio Appoggio vedo solo alcune colonne.

    i dati devono accodarsi a quelli precedenti?

    Fai sapere, Ciao By Sal [SM=x423051]

    [Modificato da by sal 21/05/2019 11:10]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    BG66
    Post: 268
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Junior
    2010
    00 21/05/2019 11:52
    Ciao a tutti.

    @giuliano72
    Per poco dinamico intendo questa parte del codice:
     With sh2
          sh1.Range("A2:E70").ClearContents  
         .Range("A2:Y70").Copy 'copio i dati da un file all'altro 


    @by Sal
    a) I dati (fino all'ultima riga compilata) da prendere dal foglio"WGT21SFL" del file sorgente sono 5 e precisamente:
    Consegna conf (colonna D)
    Articolo (colonna G)
    Descrizione (colonna H)
    Q.tà saldo (colonna K)
    Articolo (colonna Y)

    b) I dati vanno sempre a cancellare quelli esistenti.

    Grazie per l'aiuto

    [Modificato da BG66 21/05/2019 11:55]
    BG66
    Excel 2010
  • OFFLINE
    by sal
    Post: 5.677
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 21/05/2019 16:17
    Copia dati
    Ciao BG66 ecco la macro che fa il lavoro.

    Sub Copia()
    Dim r As Long, c As Long, Ur As Long, x As Long
    Dim Sh1 As Worksheet, Sh2 As Worksheet, Risp, Wkb As Workbook, strFile, ind As String, rng
    
    ind = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    Set Sh1 = Worksheets("Appoggio")
    Sh1.Activate
    
    If Sh1.Cells(2, 1) = "" Then Ur = 2 Else Ur = Cells(Rows.Count, 1).End(xlUp).Row
    Risp = MsgBox("Attenzione! elimino i dati presenti?", vbYesNo, "Pulizia dati")
    If Risp = 6 Then Sh1.Range("A2:E" & Ur).ClearContents: r = Ur Else r = Ur + 1
    Application.ScreenUpdating = False
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = cartellainiziale
        .Title = "Seleziona cartella e File"
        .AllowMultiSelect = False
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        strFile = .SelectedItems(1) 'seleziono il file
    End With
    Application.DisplayAlerts = False
    Workbooks.Open Filename:=strFile
    Set Sh2 = Worksheets(1) 'seleziono il primo foglio
    Ur = Sh2.Cells(Rows.Count, 4).End(xlUp).Row
    rng = Sh2.Range("A2:Y" & Ur)
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    For x = 1 To UBound(rng)
        Sh1.Cells(r, 1) = rng(x, 4)
        Sh1.Cells(r, 2) = rng(x, 7)
        Sh1.Cells(r, 3) = rng(x, 8)
        Sh1.Cells(r, 4) = rng(x, 11)
        Sh1.Cells(r, 5) = rng(x, 25)
        r = r + 1
    Next x
    Sh1.Cells(1, 1).Select
    Application.ScreenUpdating = True
    Set Sh1 = Nothing
    Set Sh2 = Nothing
    
    End Sub


    ti chiede se cancellare i dati precedenti, ho messo un pulsante per lanciare la macro

    Ciao By Sal [SM=x423051]


    [Modificato da by sal 21/05/2019 17:21]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    BG66
    Post: 269
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Junior
    2010
    00 22/05/2019 20:30
    [RISOLTO]

    Cia by SAl,
    è superOK.
    Grazie ancora.

    Alla prossima.
    BG66
    Excel 2010