Condividi:        

COPIARE FILE e RICHIUDERLO

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

COPIARE FILE e RICHIUDERLO

Postdi scanacc » 17/02/24 14:19

Salute a tutti.
Ho una cartella dove ci sono tantissimi FILE excel (che si chiamano con Cognome e Nome) che hanno nel foglio 1 delle informazioni che dovrò copiare nel foglio 1 del file Programma.xlsx per poi far partire una serie di analisi.
Cosa vorrei fare?
Vorrei aprire il file Programma.xlsx, vorrei scrivere nella cella a1 del foglio2, uno dei cognome e nome presente nella cartella sopramenzionata e a quel punto vorrei che partisse una macro che copia quel che c'è nel foglio 1 di Mario Rossi e la incolla nel foglio 1 del file Programma dopo ovviamente aver cancellato quel che c'era prima.

Se il file cercato non fosse presente avrei piacere mi si fornisse un messaggio di "FIle non trovato"
Grazie tantissime per il sicuro aiuto
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Sponsor
 

Re: COPIARE FILE e RICHIUDERLO

Postdi Anthony47 » 17/02/24 16:31

Puoi usare una macro di WorksheetChange:
Sul modulo vba di Foglio2 di Programma.xlsm (il file deve essere "macro enabled", quindi xlsm), inserisci questo codice:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TGWb As Workbook, Desh As String, bPath As String
'
Desh = "Foglio10"                       '<<< Su quale foglio caricare i risultati
bPath = ThisWorkbook.Path               '<<< Se i file sono invece altrove, mettere il Percorso
'
If Target.Address = "$A$1" Then
    On Error Resume Next
    Set TGWb = Workbooks.Open(Filename:=bPath & "\" & Range("A1").Value, ReadOnly:=True)
    If Err.Number <> 0 Or TGWb Is Nothing Then
        MsgBox (bPath & "\" & Range("A1").Value & vbCrLf _
          & "Il file non e' stato aperto correttamente")
        TGWb.Close , False
        Exit Sub
    End If
    On Error GoTo 0
    ThisWorkbook.Sheets(Desh).Cells.ClearContents
    Call GetFrom(TGWb)
    Application.EnableEvents = False
    ThisWorkbook.Sheets(Desh).Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
    TGWb.Close , False
    Application.EnableEvents = True
End If
End Sub

(per inserire il codice nella posizione giusta: tasto dx sul tab col nome foglio Foglio2, scegli Visualizza codice)
Le righe marcate <<< devono essere personalizzate come da commento

In un Modulo standard del vba di Programma.xlsm metti invece:
Codice: Seleziona tutto
Sub GetFrom(TGBw As Workbook)
    With TGBw.Sheets("Foglio1")
        .Range(.Range("A1"), .UsedRange).Copy
    End With
End Sub


Poi scrivi in A1 di Foglio2 un nome file e vedi che succede

Ho detto "scrivi in A1 di Foglio2 un nome file" e non "scrivi un nome e cognome" perche' non hai detto come, nel tuo standard, Nome+Cognome diventano poi nome file
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 17/02/24 21:11

Anthony grazie per la veloce risposta. Provo subito appena posso e poi ti faccio comunque sapere.
Grazie di nuovo
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 19/02/24 12:29

Mi sembra tutto perfetto ... come sempre.
Se possibile due cose ancora.
1) Il file aperto non si chiude automaticamente perchè mi si dice che
"GLI APPUNTI CONTENGONO UNA GRANDE QUANTITA' DI INFORMAZIONI". Vorrei rispondere automaticamente NO
2) E' possibile nel momento del copia e incolla mantenere la formattazione originale?
Tante, tante , tante Grazie Antony
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 19/02/24 14:55

e un'altra cosa ancora Anthony ...
Ho scritto che vorrei far partire la macro scrivendo nella cella a1 del foglio2.
Se invece volessi farla partire scrivendo nella cella D14 del foglio 2 ... cosa dovrei cambiare?
Grazie per la pazienza
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi Anthony47 » 19/02/24 16:42

Per la formattazione, invece di xlPasteValuesAndNumberFormats usa xlPasteAll

Per la chiusura del file, aggiungi queste righe in queste posizioni:
Codice: Seleziona tutto
    ThisWorkbook.Sheets(Desh).Range("A1").PasteSpecial xlPasteAll      'RIGA APPENA MODIFICATA
    Application.DisplayAlerts = False       'ADD
    TGWb.Close , False
    Application.DisplayAlerts = True        'ADD


Per farla partire da D1 allora invece di If Target.Address = "$A$1" Then userai If Target.Address = "$D$14" Then
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 19/02/24 18:05

Quando uso D14, mi dice che il file non e' stato aperto correttamente.
L'altra comando invece è ok
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi Anthony47 » 20/02/24 00:16

Devi modificare anche da A1 a D14 in questa istruzione:
Codice: Seleziona tutto
Set TGWb = Workbooks.Open(Filename:=bPath & "\" & Range("A1").Value, ReadOnly:=True)
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 21/02/24 10:57

Perfetto
Grazie 1000
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 25/02/24 18:33

Anthony, dopo che ho lavorato questo FILE, vorrei poter salvare le prime 2 pagine (da A1 a AQ115) in formato excel chiamandolo con il nome che ho inserito in D14.
Come potrei fare?
PS
Lo salverei in una cartella chiamata ANALISI SVOLTE
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi Anthony47 » 25/02/24 20:42

Registra una macro mentre diligentemente esegui queste operazioni:
-tasto dx sul tab col nome del foglio; scegli Sposta o copia; scegli "Nella cartella"=Nuova cartlella, spunta Crea una copia; Ok. Ora una copia del tuo foglio e' in una nuova cartella
-seleziona da A116 ad AQ1000 e cancella
-salva il file nel percorso che preferisci e col nome che preferisci
-chiudi il file
-interrompi la registrazione

Ora esamina il codice della macro e vedi se da solo riesci a modificarlo per prendere il nome del file dalla cella D14; se dopo 2 ore di tentativi ancora non ci sei allora pubblica il codice della macro registrata e vedremo...
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 25/02/24 23:09

Anthony se cortesemente me lo controlli tutto mi fai una grande cortesia. Te lo chiedo perchè non vorrei aver sbagliato qualcosa subito all'inizio. Quando apro il file (la prima volta) i tempi si allungano a dismisura (20/30 secondi per aprirsi). Dalla seconda volta in poi invece funziona veloce.
Questo è il codice iniziale
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TGWb As Workbook, Desh As String, bPath As String
'
Desh = "cc"                       '<<< Su quale foglio caricare i risultati
bPath = ThisWorkbook.Path               '<<< Se i file sono invece altrove, mettere il Percorso
'
    Application.ScreenUpdating = False
If Target.Address = "$D$13" Then
    On Error Resume Next
    Set TGWb = Workbooks.Open(Filename:=bPath & "\" & Range("D13").Value, ReadOnly:=True)
    If Err.Number <> 0 Or TGWb Is Nothing Then
        MsgBox (bPath & "\" & Range("A1").Value & vbCrLf _
          & "Il file non e' stato aperto correttamente")
        TGWb.Close , False
        Exit Sub
    End If
    On Error GoTo 0
    ThisWorkbook.Sheets(Desh).Cells.ClearContents
    Call GetFrom(TGWb)
    Application.EnableEvents = False
   ThisWorkbook.Sheets(Desh).Range("A1").PasteSpecial xlPasteAll      'RIGA APPENA MODIFICATA
    Application.DisplayAlerts = False       'ADD
    TGWb.Close , False
    Application.DisplayAlerts = True        'ADD
    Application.EnableEvents = True
        Sheets("SCHEDA LINO").Select
    Application.ScreenUpdating = True
End If
End Sub


questa sotto invece non riesco a trovarla (!!!!) ... ma come mai? come faccio a vederla? sarà mica che non l'ho messa?
Codice: Seleziona tutto
Sub GetFrom(TGBw As Workbook)
    With TGBw.Sheets("Foglio1")
        .Range(.Range("A1"), .UsedRange).Copy
    End With
End Sub


e questa invece è quella che ho fatto ora dietro le tue indicazione
Codice: Seleziona tutto
Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("SCHEDA LINO").Select
    Sheets("SCHEDA LINO").Copy
    ChDir "C:\FOCUS FB\a ANALISI SVOLTE"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\FOCUS FB\a ANALISI SVOLTE\Cognome Nome.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False

End Sub

Su quest'ultimo codice però ho 2 problemi. Il primo che dopo aver lanciato il codice alla fine mi chiede di salvarlo e vorrei che avvenisse in automatico e il secondo che effettivamente non riesco a dirgli di mettere il nome e cognome che si trova i d14
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 25/02/24 23:37

Forse sono riuscito a dirgli dove prendere il nome cognome.
Codice: Seleziona tutto
Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("SCHEDA LINO").Select
    Sheets("SCHEDA LINO").Copy
    ChDir "C:\FOCUS FB\a ANALISI SVOLTE"
       
           NomeFile = Range("D14").Value
           
               With ActiveWorkbook

        .SaveAs Filename:=MyDir & "" & NomeFile
        .Close savechanges:=False
           Application.DisplayAlerts = True
           End With
End Sub


Ma non riesco a dirgli di salvare il file in automatico
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 25/02/24 23:53

No ho trovato ehehehehehe
Codice: Seleziona tutto
Sub Macro1()
'
' Macro1 Macro
'
    Application.DisplayAlerts = False
'
    Sheets("SCHEDA LINO").Select
    Sheets("SCHEDA LINO").Copy
    ChDir "C:\FOCUS FB\a ANALISI SVOLTE"
       
           NomeFile = Range("D13").Value
           
               With ActiveWorkbook

        .SaveAs Filename:=MyDir & "" & NomeFile
        .Close savechanges:=False
           Application.DisplayAlerts = True
           End With
End Sub


Ma cortesemente controllami tutto.
Grazie Anthony ....
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi Anthony47 » 26/02/24 02:24

Eravamo arrivati a
Perfetto
Grazie 1000

Oggi ti ho suggerito di registrare una macro

Quindi che cosa dovrei controllare? Fai il punto e vediamo
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 26/02/24 13:32

Mi accade una cosa strana. Quando inserisco (solo la prima volta) nome1 e cognome1, il file si "impalla" e riesce a darmi il risultato voluto solo dopo 30/40 secondi. La seconda volta (quando inserisco nome2 cognome2) non si ripete più. E questa cosa penso sia strana in quando si parla solo del comando di 1 macro per di più piccola.
Per questo motivo quindi penso quindi di aver sbagliato a fare una delle due macro iniziali che mi avevi suggerito.
Questa sotto che è una delle due, addirittura non riesco più a trovarla ... e lo cerco perchè vorrei ricontrollarla.
Dove devo cercarla?
Codice: Seleziona tutto
Sub GetFrom(TGBw As Workbook)
    With TGBw.Sheets("Foglio1")
        .Range(.Range("A1"), .UsedRange).Copy
    End With
End Sub


l'altra invece è questa
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TGWb As Workbook, Desh As String, bPath As String
'
Desh = "cc"                       '<<< Su quale foglio caricare i risultati
bPath = ThisWorkbook.Path               '<<< Se i file sono invece altrove, mettere il Percorso
'
    Application.ScreenUpdating = False
If Target.Address = "$D$13" Then
    On Error Resume Next
    Set TGWb = Workbooks.Open(Filename:=bPath & "\" & Range("D13").Value, ReadOnly:=True)
    If Err.Number <> 0 Or TGWb Is Nothing Then
        MsgBox (bPath & "\" & Range("A1").Value & vbCrLf _
          & "Il file non e' stato aperto correttamente")
        TGWb.Close , False
        Exit Sub
    End If
    On Error GoTo 0
    ThisWorkbook.Sheets(Desh).Cells.ClearContents
    Call GetFrom(TGWb)
    Application.EnableEvents = False
   ThisWorkbook.Sheets(Desh).Range("A1").PasteSpecial xlPasteAll      'RIGA APPENA MODIFICATA
    Application.DisplayAlerts = False       'ADD
    TGWb.Close , False
    Application.DisplayAlerts = True        'ADD
    Application.EnableEvents = True
        Sheets("SCHEDA LINO").Select
    Application.ScreenUpdating = True
End If
End Sub


Trovi qualche incongruenza?
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi Anthony47 » 27/02/24 00:16

La Sub GetFrom devi cercarla su un modulo standard del tuo vba; oppure usi Cerca:
-dal modulo dove vedi la WorksheetChange, premi Contr-f; scrivi Sub Get nella casella del Cerca, spunta la voce Cerca in=Progetto corrente, premi Trova successivo

Quanto alla strana velocita' della macro, il tuo file e' su un'area di storage non locale, tipo Sharepoint, Onedrive, Google drive, ...??
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 27/02/24 12:51

Ok grazie trovato.
per quanto riguarda la tua domanda ti rispondo che il file è sul mio disco fisso.
Comunque niente di grave era solo per capire
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi scanacc » 28/02/24 18:33

Anthony47 ha scritto:Registra una macro mentre diligentemente esegui queste operazioni:
-tasto dx sul tab col nome del foglio; scegli Sposta o copia; scegli "Nella cartella"=Nuova cartlella, spunta Crea una copia; Ok. Ora una copia del tuo foglio e' in una nuova cartella
-seleziona da A116 ad AQ1000 e cancella
-salva il file nel percorso che preferisci e col nome che preferisci
-chiudi il file
-interrompi la registrazione

Ora esamina il codice della macro e vedi se da solo riesci a modificarlo per prendere il nome del file dalla cella D14; se dopo 2 ore di tentativi ancora non ci sei allora pubblica il codice della macro registrata e vedremo...

Buonasera Anthony, ho visto che quando salva il FILE, questo viene salvato con le formule che sono dentro la pagina copiata.
Sarebbe possibile evitarlo e quindi salvare il file senza che ci siano collegamenti/formule etc?
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: COPIARE FILE e RICHIUDERLO

Postdi Anthony47 » 28/02/24 19:36

Allora aggiungi queste 3 righe nel tuo codice:
Codice: Seleziona tutto
'
Sheets("SCHEDA LINO").Copy
'3 righe per Copia Valori:
ActiveSheet.UsedRange.Copy
ActiveSheet.UsedRange.Cells(1, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
'
ChDir "C:\FOCUS FB\a ANALISI SVOLTE"
'etc etc
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "COPIARE FILE e RICHIUDERLO":


Chi c’è in linea

Visitano il forum: Nessuno e 62 ospiti