Copia e incolla tra cartelle di lavoro con il VBA Excel

Поділитися
Вставка
  • Опубліковано 1 лют 2025

КОМЕНТАРІ • 24

  • @eliagrosso420
    @eliagrosso420 2 місяці тому +1

    Ottimo video! Sarebbe possibile fare una cosa simile ma con un file word come destinazione?

    • @excelpertutti
      @excelpertutti  2 місяці тому

      Grazie! Si può fare con un po' più di codice...
      Lo metto in lista tra i prossimi video

    • @eliagrosso420
      @eliagrosso420 2 місяці тому

      @excelpertutti grazie mille!

  • @daviderenzulli3790
    @daviderenzulli3790 3 місяці тому

    Buon pomeriggio Damiano, spero risponderai ancora a questo post, io neofito di VBA. Il mio caso: in sharepoint (Teams di microsoft, cartella condivisa), ho un file di dati grezzi xlsx (origine) sempre chiuso che viene alimentato in continuo con API dal web. Ho un secondo file di analisi xlsm (destinazione) che apro per consultare i risultati aggiornati, attualmente il copia incolla tra file è manuale. La macro che ti chiedo nel file di analisi xlsm, ossia il file di destinazione, dovrebbe all'apertura importare i dati grezzi presenti in xlsx, ossia il file di origine. Nel foglio del file di destinazione xlsm è presente una tabella che mi estende le formule per tutte le righe necessarie nelle colonne adiacenti alle colonne necessarie per incollare i dati grezzi. Come dovrei procedere? e grazie della disponibilità.

    • @excelpertutti
      @excelpertutti  3 місяці тому

      Buongiorno Davide,
      in questo caso al posto del VBA potresti utilizzare Power Query.
      Effettui l'importazione da Sharepoint una volta e le volte successive ti limiti ad utilizzare il pulsante aggiorna.
      Con le macro è più complicato mentre con Power Query puoi utilizzare i comandi dell'interfaccia.

    • @daviderenzulli3790
      @daviderenzulli3790 3 місяці тому +1

      @@excelpertutti mi hai dato una dritta che lavorandoci un po' per trovare la via giusta a sharepoint mi ha risolto TKS

  • @giuseppetramonta6252
    @giuseppetramonta6252 2 роки тому

    Salve se io invece vorrei fare il contenuto di una cella copiarlo su un altra cella di un foglio diverso dovrei mettere tutte le celle di partenza e poi mettere tutte le celle di destinazione? La cartella di destinazione la devo mettere tra parentesi al posto del numero 1 ? Ciao grazie mille

    • @excelpertutti
      @excelpertutti  2 роки тому

      Salve Giuseppe, per far riferimento ai fogli di lavoro puoi utilizzare i numeri tra parentesi o in alternativa i nomi tra parentesi. Ecco un esempio di codice per fare il copia incolla tra fogli di lavoro
      Worksheets(1).Range("A1:B10").Copy Worksheets(2).Range("A1")
      oppure
      Worksheets("Origine").Range("A1:B10").Copy Worksheets("Destinazione").Range("A1")

  • @kmarraff
    @kmarraff Рік тому

    Da quel che ho capito questa formula è valida solo se entrambi i file sono aperti, è possibile avere una formula dove il file di origine è aperto e l'altro file è chiuso? Grazie per la disponibilità

    • @excelpertutti
      @excelpertutti  Рік тому +1

      Ciao Gabriele,
      puoi utilizzare la seguente porzione di codice per aprire un file e renderlo invisibile.
      Workbooks.Open Filename:="C:\Prova\Prova.xlsx"
      ActiveWindow.Visible = False
      Workbooks("Prova.xlsx").Close True
      L'ultima riga di codice ti permette di chiudere il file e salvare le modifiche.
      Devi adattare il codice alle tue esigenze cambiando i riferimenti al file da aprire.

    • @kmarraff
      @kmarraff Рік тому

      Grazie per la risposta. il tuo codice funziona bene solo che mi fa sparire definitivamente il foglio aperto e non riesco a renderlo visibile nemmeno modificando il codice con "ActiveWindow.visibile=true". Avresti una soluzione. Grazie della disponibilità

    • @excelpertutti
      @excelpertutti  Рік тому

      Rimuovi la riga di codice relativa a ActiveWindow.Visible...

    • @kmarraff
      @kmarraff Рік тому

      @@excelpertutti ho già fatto, volevo comunque aprirlo in modo non visibile.

    • @excelpertutti
      @excelpertutti  Рік тому

      Prova ad eseguire il codice passo dopo passo utilizzando il tasto funzione F8
      In questo modo riesci a capire i singoli passaggi.
      Dai un occhiata a questo articolo: www.excelpertutti.com/eseguire-macro-passo-a-passo-excel/

  • @felicedp49
    @felicedp49 2 роки тому +1

    La prossima volta potresti zumare un po' per far capire meglio quello che fai grazie

    • @excelpertutti
      @excelpertutti  2 роки тому +2

      Salve Felice,
      la prossima volta presterò più attenzione per lo zoom.
      Ti scrivo di seguito il codice utilizzato qualora non fosse chiaro:
      Sub CopiaDatiTraCartelle
      ThisWorkbook.Worksheets(1).Range("A1:B13").Copy _
      Workbooks(2).Worksheets(1).Range("A1")
      End Sub
      Saluti
      Damiano

    • @felicedp49
      @felicedp49 2 роки тому +1

      @@excelpertutti ok sei stato molto gentile

  • @HotelVillaggioEurolido
    @HotelVillaggioEurolido 3 місяці тому

    Ciao Damiano, utilizzo questa macro in un foglio xlsm per copiare dei dati di vari file xlsx in una cartella specifica. Tutto bene nel senso che il file funziona correttamente prelevando da tutti i file i dati dalla cella B1 alla cella B10 creando un database. L'unico dato che salta è quello della cella B11 che nonostante le mille prove non riesco a far copiare correttamente: posto il codice nella speranza che tu possa capire l'errore:
    Riepilogo cosa fa la macro:
    1. da una macro nel file xlsm preleva da ogni file xlsx presente nella cartella i dati dalla cella B1 alla cella B11 creando per ognuno una riga di database nel file xlsm
    2. prende tutti i file di cui ha copiato i dati e li sposta in un altra cartella
    Cosa non funziona:
    1. L'unico dato che non viene prelevato nel file xlsm è la cella B11 dei file xlsx (per il resto funziona tutto)
    Questa la Macro che uso:
    Option Explicit
    Sub esporta_e_muovi()
    Const folder_from = "Z:\Altri computer\Il mio computer\Archivio\UFFICO BOOKING\1 PREVENTIVI E VOUCHER\PREVENTIVI EXCEL\*.xlsx"
    Const folder_to = "Z:\Altri computer\Il mio computer\Archivio\UFFICO BOOKING\1 PREVENTIVI E VOUCHER\PREVENTIVI EXCEL\excel esportati"
    Dim percorso As String
    Dim nomeFile As String
    Dim wbDatabase As Workbook
    Dim WB As Workbook
    Dim sh As Worksheet
    Dim s As String
    Dim data_preventivo As String
    Dim uR As Long
    Dim arr() As Variant
    Dim j As Long
    Dim k As Integer
    Dim g As Integer
    Dim ei As Object

    With Application
    .Cursor = xlWait
    .DisplayAlerts = False
    .ScreenUpdating = False
    End With
    Set ei = CreateObject("Scripting.FileSystemObject")
    Set wbDatabase = ThisWorkbook 'file database
    percorso = "Z:\Altri computer\Il mio computer\Archivio\UFFICO BOOKING\1 PREVENTIVI E VOUCHER\PREVENTIVI EXCEL\"
    '''percorso = ThisWorkbook.Path & "\preventivi excel\" '''debug franz
    nomeFile = Dir(percorso)

    Do While nomeFile ""
    k = ei.GetFolder(percorso).Files.Count
    g = g + 1
    Application.StatusBar = "Avanzamento ... file " & g & "/" & k
    If nomeFile wbDatabase.Name Then
    Set WB = Application.Workbooks.Open(percorso & nomeFile)
    Set sh = WB.Worksheets(1)
    data_preventivo = Split(sh.Range("N46"))(3)
    With wbDatabase.Sheets(1)
    .AutoFilterMode = False
    uR = .Range("A65535").End(xlUp).Row + 1
    .Cells(uR, 1) = IIf(uR = 2, 1, Val(.Cells(uR - 1, 1)) + 1)
    arr = Application.Transpose(sh.Range("B1:B11"))
    For j = 11 To 5 Step -1
    arr(j) = arr(j - 1)
    Next
    arr(4) = Format(data_preventivo, "dd/mm/yyyy")
    .Range(.Cells(uR, 2), .Cells(uR, 12)) = arr
    .Cells(uR, "E") = "'" & arr(4)
    .Cells(uR, "F").NumberFormat = "General"
    .Cells(uR, "E").HorizontalAlignment = xlRight
    End With
    WB.Close False
    End If
    nomeFile = Dir
    Loop
    'prepara la stringa di comando per lo spostamento da un folder all'altro
    s = "cmd.exe /c move /Y ""%1"" ""%2"""
    s = Replace(s, "%1", folder_from)
    s = Replace(s, "%2", folder_to)

    'questa istruzione esegue il comando di spostamento.
    Shell s
    wbDatabase.Save

    With Application
    .Cursor = xlDefault
    .DisplayAlerts = True
    .ScreenUpdating = True
    End With

    MsgBox "Dati Importati e File Spostati. File database salvato.", vbInformation, "OK"
    Application.StatusBar = ""
    End Sub
    Spero tu riesca a darmi una mano. Grazie mille

    • @excelpertutti
      @excelpertutti  3 місяці тому

      Buongiorno, ti suggerisco un modo per capire il punto di "errore".
      Nell'interfaccia dell'Editor VBA ... fai un clic all'interno della macro e poi premi il tasto F8.
      Questo pulsante ti permette di eseguire la macro passo dopo passo.
      Le scritte del codice vengono evidenziate in giallo. Inoltre se avvicini il puntatore sul testo vedrai il valore assunto dalle variabili.
      Questo è il metodo che utilizzo per analizzare le macro alla ricerca di errori.
      Guardando il tuo codice capisco cosa fa ma purtroppo ... non riesco a capire completamente in quanto non ho davanti il file.
      Spero il mio suggerimento possa essere utile.
      Saluti
      Damiano Causale

    • @HotelVillaggioEurolido
      @HotelVillaggioEurolido 3 місяці тому

      @@excelpertutti il problema è che errori con f8 non ne rileva perchè la macro va a completamento in modo corretto ma nell'eseguire la macro salta questo dato e non capisco perchè. Nel codice inoltre l'intervallo è corretto B1:B11. Se c'è un modo per mandarti i file e darmi una mano te ne sarei davvero grato

    • @excelpertutti
      @excelpertutti  3 місяці тому

      Il tasto F8 è utile anche per capire i valori assunti dalle variabili dichiarate ad inizio codice. Mentre la riga gialla viene evidenziata puoi capire il valore attribuito alla variabile.

    • @HotelVillaggioEurolido
      @HotelVillaggioEurolido 3 місяці тому

      @@excelpertutti provato ma nulla, anche perchè non riesco a leggere perfettamente il codice per mancanza di conoscenza su vba