| | Post: 268 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
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 |
|
| | Post: 11 | Registrato il: 04/03/2019
| Utente Junior | 2019 | | OFFLINE | |
|
21/05/2019 10:35 | |
Cosa significa 'poco dinamico' ?
A Me non dice niente. |
| | Post: 5.676 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
21/05/2019 11:08 | |
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
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
[Modificato da by sal 21/05/2019 11:10] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 268 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
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 |
| | Post: 5.677 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
21/05/2019 16:17 | |
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
[Modificato da by sal 21/05/2019 17:21] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 269 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
22/05/2019 20:30 | |
[RISOLTO]
Cia by SAl,
è superOK.
Grazie ancora.
Alla prossima. BG66
Excel 2010 |
|
|