Condividi:        

Inserire un dato in 2pag. dello stesso file

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

Inserire un dato in 2pag. dello stesso file

Postdi salatony » 20/06/22 10:17

Buongiorno,
sono ancora a chiedere un aiuto, spiego..
Avrei bisogno di agg.re molti file della stessa cartella: PIPPO, in ogniuno di questi devo inserire: in Pagina1 cella AB4 la descrizione test3, lo stesso dato in Pagina2 ma in cella V4.
Dopo io controllo e chiudo questo file, e così x tutti i file contenuti nella cartella PIPPO.
Si potrebbe mod.re tutti i file della cartella PIPPO contemporaneamente, oppure manmano che li apro con il tasto Scelta Rapida faccio partire la macro.
Ringrazio Saluti
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Sponsor
 

Re: Inserire un dato in 2pag. dello stesso file

Postdi Anthony47 » 20/06/22 11:20

Vuoi quindi fare una modifica massiva ai file contenuti in una specifica cartella.
Si puo' andare da (1) una cosa "fa tutto la macro" (in questo caso sarebbe meglio avere qualche elemento per essere certi che stiamo per modificare uno dei file giusti, tipo un pezzo di NomeFile; se sono xls, xlsx, xlsm, o che cosa; il nome dei fogli). Oppure (2) la macro apre i file che trova uno dopo l'altro; tu fai quel che serve, chiudi il file, ripeti la macro.
Se sono meno di 10 file invece e' piu' semplice che (3) fai tutto a mano.

Dimmi tu quale e' la scelta tra 1 e 2; o se e' 3 così non ci penso piu' :D
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserire un dato in 2pag. dello stesso file

Postdi salatony » 20/06/22 17:59

Grazie Anthony47, potrebbe andare bene la soluzione 2, la macro apre i file e inserisce nella Pagina1 e Pagina2 il dato: test3, nelle due celle, poi io verifico e chiudo, i file + di 1000 sono misti .xls - .xlsx
Grazie
Saluti
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: Inserire un dato in 2pag. dello stesso file

Postdi Anthony47 » 21/06/22 02:07

Allora ho voluto proporti una cosa piu’ complessa di come la chiedevi perche’... non si sa mai.

Parti da un nuovo file Excel, con tre fogli: Foglio1, Foglio2, Foglio3

Su Foglio1 crea la descrizione delle modifiche da apportare ai file, come da figura:
Immagine

In pratica devi indicare quale foglio, quale range, il nuovo valore
Ogni riga descrive una modifica, e puoi creare quante righe vuoi.

Foglio2 lo riserviamo per creare l’elenco dei file da modificare; in proposito ho ipotizzato che i file da modificare siano in una specifica cartella ed eventuali sottocartelle.

Foglio3 lo riserviamo per creare un “log” delle modifiche apportate; in particolare per ogni modifica scriveremo:
-il percorso del file
-il nome del file, il foglio, il range, il vecchio valore in quel range, il valore nuovo assegnato
Teoricamente questo dovrebbe aiutarti a recuperare (senza il mio aiuto) eventuali casini fatti.

Inserisci in questo file un Modulo standard del vba e copiavi il seguente codice:

Codice: Seleziona tutto
Dim myFso As Object, ccAll As Long    'RIGOROSAMENTE IN TESTA AL MODULO
Function RecurDir(ByVal ccDir As String, myExt As Variant, ByRef cStore As Variant) As String
Dim myItm, mySplit, myInd
'
If myFso Is Nothing Then Set myFso = CreateObject("Scripting.FileSystemObject")
If myFso Is Nothing Then Beep
DoEvents
On Error GoTo Mahh
For Each myItm In myFso.GetFolder(ccDir).Files
ccAll = ccAll + 1
    mySplit = Split(" " & myItm, ".", , vbTextCompare)
    If Not IsError(Application.Match(mySplit(UBound(mySplit)), myExt, 0)) Then
        myInd = UBound(cStore)
        ReDim Preserve cStore(1 To myInd + 1)
        cStore(myInd) = myItm
    End If
Mahh:
Resume Bohh
Bohh:
Next myItm
For Each myItm In myFso.GetFolder(ccDir).SubFolders
    Call RecurDir(myItm, myExt, cStore)
Next myItm
End Function



Sub MakeList()
Dim strFile As String, ShIndex As Worksheet
''    Dim stdPic As StdPicture
''    Dim lngWidth As Long
''    Dim lngHeight As Long
    Dim strPath As String, mySplit
    Dim intRow As Long, AllPics, StrDir As String, I As Long
'
Sheets("Foglio2").Select
Dim FArr() As String
ReDim FArr(1 To 1)
AllPics = Array("xls", "xlsx", "xlsm", "xlsb")   '<<< Altri formati?       '***
StrDir = "C:\PROVA\NUOVA"                        '<<< Il Percorso iniziale
Call RecurDir(StrDir, AllPics, FArr)

Range("A2").Resize(UBound(FArr), 1).Value = Application.WorksheetFunction.Transpose(FArr)

On Error Resume Next
Set myFso = Nothing
On Error GoTo 0
MsgBox ("Indice creato, " & UBound(FArr))
Debug.Print "Indice creato, " & UBound(FArr)
End Sub


Sub GodSaveTony()
Dim ShIndex As Worksheet, ModSh As Worksheet, LogSh As Worksheet
Dim lIndex As Long, I As Long, J As Long

Set ShIndex = ThisWorkbook.Sheets("Foglio2")
Set ModSh = ThisWorkbook.Sheets("Foglio1")
Set LogSh = ThisWorkbook.Sheets("Foglio3")

ShIndex.Select
Application.EnableEvents = False
For I = 1 To ShIndex.Cells(Rows.Count, 1).End(xlUp).Row
    If ShIndex.Cells(I, 1) <> "" Then
        lIndex = LogSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Workbooks.Open ShIndex.Cells(I, 1).Value
        LogSh.Cells(lIndex, 1) = ShIndex.Cells(I, 1).Value
        LogSh.Cells(lIndex, 2) = ActiveWorkbook.Name
        If ActiveWorkbook.Name <> ThisWorkbook.Name Then
            For J = 2 To ModSh.Cells(Rows.Count, 1).End(xlUp).Row
                If LogSh.Cells(lIndex, 1) = "" Then LogSh.Cells(lIndex, 1) = Chr(34)
                LogSh.Cells(lIndex, 3) = ModSh.Cells(J, 1)
                LogSh.Cells(lIndex, 4) = ModSh.Cells(J, 2)
                LogSh.Cells(lIndex, 5) = Sheets(ModSh.Cells(J, 1).Value).Range(ModSh.Cells(J, 2).Value).Value
                LogSh.Cells(lIndex, 6) = ModSh.Cells(J, 3)
                Sheets(ModSh.Cells(J, 1).Value).Range(ModSh.Cells(J, 2).Value).Value = ModSh.Cells(J, 3)
                lIndex = lIndex + 1
            Next J
        End If
        ShIndex.Cells(I, 2).Value = ShIndex.Cells(I, 1).Value
        ShIndex.Cells(I, 1).ClearContents
        Exit For
    End If
Next I
Application.EnableEvents = True
Beep
End Sub


Il codice include:
-una funzione (Function RecurDir) in grado di ispezionare Cartelle e sottocartelle
-una Sub MakeList, che crea su Foglio2 l’elenco dei file presenti nella Cartella di partenza e le sue sottocartelle; la cartella di partenza va scritta in una delle due istruzioni marcate <<<
-una Sub GodSaveTony, che e’ quella che legge l’elenco dei file creati su Foglio2, apre il primo della lista, vi applica le modifiche descritte su Foglio1 e scrive “il diario” su Foglio3

Dopo che hai preparato il file con il codice, salvalo per prudenza. Poi avvia la Sub MakeList.
Controlla che l’elenco su Foglio2 sia verosimile (meglio se controlli che sia anche veritiero)

Quando sei pronto lancia la Sub GodSaveTony; come detto il primo file sara’ aperto e vi saranno applicate le modifiche; la macro termina lasciando questo file aperto, tocca a te controllare e chiudere.
Rilanciando la Sub GodSaveTony lo stesso lavoro sara’ fatto sul secondo file, e cosi’ via fintanto che l’elenco di Colonna A di Foglio2 non sara’ vuoto (infatti man mano che i file vengono lavorati il suo nome si sposta su colonna B).
Ovviamente puoi interrompere il lavoro e riprenderlo dopo una pausa ristoratrice di 1 minuto (ma funziona anche con una pausa di una notte)

Questo e’ quanto... Mi raccomando, fai le prove su un elenco di file di prova...
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserire un dato in 2pag. dello stesso file

Postdi salatony » 21/06/22 08:49

Grazie moltissimo, x la cordialità, mi serve un po di tempo (bellissima macro anche se x me un po complicata) e ti faccio sapere, Saluti
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: Inserire un dato in 2pag. dello stesso file

Postdi salatony » 22/06/22 09:40

Ci siamo quasi, mi spiego, l'indice creato in Foglio2 mi fa vedere in testa alla colonna anche il file dove ho creato la macro (che cancello), quando eseguo la G.S.Tony mi apre e copia solo un file per volta.
Chiedo é possibile far aprire tutti i file della cartella Archivio e modificarli contemporaneamente, xché seno dovrei aprire la macro G.S.Tony molte volte.
Inoltre, cerco di inserire nella cartella Archivio es.50 file x volta da agg.re
Grazie
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: Inserire un dato in 2pag. dello stesso file

Postdi Anthony47 » 22/06/22 13:57

Non mettere il file con la macro (il file “gestore”) nello stesso folder dei file da gestire; poi lo apri (il file "gestore") e parti con il processo (crea l’elenco, processa uno a uno). Il file “gestore” lo chiudi quando vuoi tu, salvando il contenuto, così la prossima volta che lo apri puoi continuare con GSTony (senza ricreare l’elenco) partendo dai file ancora da elaborare.

Per avviare rapidamente una macro ci sono vari metodi (combinazione Contr-tasto, pulsante, icona nella barra di accesso rapido); vedi viewtopic.php?f=26&t=103893&p=647678#p647678

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserire un dato in 2pag. dello stesso file

Postdi salatony » 24/06/22 14:36

Funziona ed é Perfetto, però devo stare per molto tempo davanti al pc e far partire la macro per molti file, come ti chiedevo prima.. si potrebbe aprire/modificare i 2 fogli/salvare in automatico? Oppure qualcosa di più semplice.. grazie
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: Inserire un dato in 2pag. dello stesso file

Postdi Anthony47 » 24/06/22 16:12

Ma io ti avevo proposto o una cosa tutta automatica o una cosa guidata:
Si puo' andare da (1) una cosa "fa tutto la macro" (in questo caso sarebbe meglio avere qualche elemento per essere certi che stiamo per modificare uno dei file giusti, tipo un pezzo di NomeFile; se sono xls, xlsx, xlsm, o che cosa; il nome dei fogli). Oppure (2) la macro apre i file che trova uno dopo l'altro; tu fai quel che serve, chiudi il file, ripeti la macro.
Se sono meno di 10 file invece e' piu' semplice che (3) fai tutto a mano.

E tu avevi optato per “la soluzione 2, la macro apre i file e inserisce nella Pagina1 e Pagina2 il dato: test3, nelle due celle, poi io verifico e chiudo”

Ora mi pare che ti sei accorto che guardare 1000 file ti si incrociano gli occhi molto prima...

Torno a proporti la cosa tutta automatica: tu avvii la macro, che modifica uno dopo l’altro i 1000 file facendo tutto da sola. Ma in questo caso secondo me sarebbe piu’ opportuno inserire delle verifiche ulteriori prima delle modifiche massive: ci sono delle cose che la macro puo’ controllare che siano vere o che siano false sul singolo file prima di modificare? Situazioni cioe’ che potrebbero suggerire di non modificare automaticamente il file ma saltarlo e lasciarlo magari all’operatore?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserire un dato in 2pag. dello stesso file

Postdi salatony » 25/06/22 15:44

Anthony, verissimo quello che dici, cmq non ci sono dati importanti nelle celle di Pagina1 AD4 e Pagina2 V4
Grazie
Buon week end
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: Inserire un dato in 2pag. dello stesso file

Postdi Anthony47 » 26/06/22 11:18

La macro che modifica TUTTI i file presenti su Foglio2 colonna A (elenco creabile con la Sub MakeList) dovrebbe essere questa:
Codice: Seleziona tutto
Sub GodSaveTonyLoop()
Dim ShIndex As Worksheet, ModSh As Worksheet, LogSh As Worksheet
Dim lIndex As Long, I As Long, J As Long
Dim cWb As Workbook, wCnt As Long               '+++ Loop
'
Set ShIndex = ThisWorkbook.Sheets("Foglio2")
Set ModSh = ThisWorkbook.Sheets("Foglio1")
Set LogSh = ThisWorkbook.Sheets("Foglio3")
'
ShIndex.Select
Application.EnableEvents = False
For I = 1 To ShIndex.Cells(Rows.Count, 1).End(xlUp).Row
    If ShIndex.Cells(I, 1) <> "" Then
        lIndex = LogSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Workbooks.Open ShIndex.Cells(I, 1).Value
        Set cWb = ActiveWorkbook                '+++ Loop
        LogSh.Cells(lIndex, 1) = ShIndex.Cells(I, 1).Value
        LogSh.Cells(lIndex, 2) = ActiveWorkbook.Name
        If ActiveWorkbook.Name <> ThisWorkbook.Name Then
            For J = 2 To ModSh.Cells(Rows.Count, 1).End(xlUp).Row
                If LogSh.Cells(lIndex, 1) = "" Then LogSh.Cells(lIndex, 1) = Chr(34)
                LogSh.Cells(lIndex, 3) = ModSh.Cells(J, 1)
                LogSh.Cells(lIndex, 4) = ModSh.Cells(J, 2)
                LogSh.Cells(lIndex, 5) = Sheets(ModSh.Cells(J, 1).Value).Range(ModSh.Cells(J, 2).Value).Value
                LogSh.Cells(lIndex, 6) = ModSh.Cells(J, 3)
                Sheets(ModSh.Cells(J, 1).Value).Range(ModSh.Cells(J, 2).Value).Value = ModSh.Cells(J, 3)
                lIndex = lIndex + 1
            Next J
        End If
        ShIndex.Cells(I, 2).Value = ShIndex.Cells(I, 1).Value
        ShIndex.Cells(I, 1).ClearContents
'        Exit For                                   '--- Loop
        cWb.Close True                              '+++ Loop
        wCnt = wCnt + 1                             '+++ Loop
    End If
Next I
Application.EnableEvents = True
Beep
MsgBox ("Completato, " & wCnt & " File")
End Sub

Serviranno alcuni secondi per ogni file, per farti un'idea conviene partire con una cinquantina di file (creato l'elenco con MakeList, sposta in Foglio2 tutti i file eccetto i primi 50 da colonna A a colonna C. Poi sposti il blocco di file che vuoi "lavorare" da colonna C a colonna A, sulla stessa riga. I file che vengono lavorati sono spostati in colonna B)

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserire un dato in 2pag. dello stesso file

Postdi salatony » 26/06/22 14:06

Anthony,
ho sostituito la GodSaveTony....
E' PERFETTISSIMAAAAAA
Grazie TANTO
ciao e alla prossima :) :) :)
salatony
Utente Junior
 
Post: 68
Iscritto il: 08/11/13 21:16

Re: Inserire un dato in 2pag. dello stesso file

Postdi Anthony47 » 26/06/22 14:14

Non buttare subito il file che hai usato, in particolare il contenuto di Foglio3 (il log delle modifiche; non si sa mai!)
Alla prossima
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Inserire un dato in 2pag. dello stesso file":


Chi c’è in linea

Visitano il forum: Marius44 e 28 ospiti