You are here:Home-Domande su Excel VBA e MACRO-fare una azione tramite macro in tutti i file excel di una cartella
fare una azione tramite macro in tutti i file excel di una cartella2021-07-01T17:49:10+02:00

Home Forum Domande su Excel VBA e MACRO fare una azione tramite macro in tutti i file excel di una cartella

Visualizzazione 14 filoni di risposte
  • Autore
    Post
    • Avatarteto21162
      Partecipante
        Post totali: 100

        Salve Ragazzi,

        Avrei 2 necessità alle quali non sono riuscito ancora a dare risposta.

        vorrei un codice vba che mi permetta di togliere\ cancellare  un dato da una o più celle di tutti i file excel di una stessa cartella.

        E un codice che mi permetta di cambiare  un dato da una o più celle di tutti i file excel di una stessa cartella.

        Grazie anticipatamente a tutti

        Teto

         

      • BySalvBySalv
        Amministratore del forum
          Post totali: 884

          In primis occorre un esempio, la seconda cosa il dato nelle altre cartelle si trova sempre allo stesso punto(range)

          Ciao By Sal (8-D

          Ciao By Sal (8-)
          se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

          • Avatarteto21162
            Partecipante
              Post totali: 100

              Ciao By Sal grazie della risposta.

              Considera che i dati sono sempre nelle celle a10 e b20 e tuti i file della cartella archivio hanno queste 2 celle piene.

              Il contenuto delle celle non è un risultato di formula ma semplicemente testo e numeri con formato generale tipo pippo123 in a10 e pluto456 in b20

              Quello che mi servirebbe è cancellare pippo123 e pluto456 in tutti i file della cartella archivio.

              Poi mi sarebbe utile un secondo codice ma non legato al primo che sempre nelle stesse celle a10 e b20 cambiasse il contenuto tipo:

              In cella a10 che ora contiene pippo123 metto topolino12 e in cella b20 che ora contiene pluto 456 metto paperina28

              Spero di essere stato più chiaro ma se così non fosse chiedi pure ulteriori chiarimenti

              Grazie

              teto

          • AvatarKris_9951
            Partecipante
              Post totali: 226

              Ciao testo21162,

              prova questo.
              Scarica tutta la cartella e fai la prova con il file Master.xlsm
              Fai sapere (se vuoi) :bye: :bye:

              https://www.dropbox.com/sh/8qre63vh8munmaj/AACKMpbtDIcRQaPJSaZDmO3ya?dl=0

              Sub cancella()
              Dim percorso As String
              Dim Libreria As Object
              Dim Cartella As Object
              Dim File As Object
              Dim ws As Worksheet
              Dim wk As Workbook
              Dim twk As Workbook
              Dim domanda As String
              
              percorso = ThisWorkbook.Path
              
              Set Libreria = CreateObject("Scripting.FileSystemObject")
              Set Cartella = Libreria.GetFolder(percorso)
              Set File = Cartella.Files
              Set twk = ThisWorkbook
              
              domanda = MsgBox("Vuoi procedere?", vbQuestion + vbYesNo, "Richiesta di conferma")
              If domanda = vbYes Then
              Application.ScreenUpdating = False
              For Each File In File
              If (Right(File.Name, Len(File.Name) - (InStrRev(File.Name, ".", , vbTextCompare)))) Like "xls*" _
              And File.Name <> ThisWorkbook.Name And Left(File.Name, 1) <> "~" Then
              Set wk = Workbooks.Open(percorso & "/" & File.Name)
              For Each ws In wk.Worksheets
              ws.Range("A10,B20").ClearContents
              Next ws
              wk.Close (True)
              Set wk = Nothing
              End If
              Next
              Application.ScreenUpdating = True
              twk.Activate
              End If
              Set twk = Nothing
              Set Libreria = Nothing
              Set Cartella = Nothing
              Set File = Nothing
              End Sub
              
              Sub popola()
              Dim percorso As String
              Dim Libreria As Object
              Dim Cartella As Object
              Dim File As Object
              Dim ws As Worksheet
              Dim wk As Workbook
              Dim twk As Workbook
              Dim A10 As Variant
              Dim B20 As Variant
              Dim domanda As String
              
              domanda = MsgBox("Vuoi procedere?", vbQuestion + vbYesNo, "Richiesta di conferma")
              If domanda = vbYes Then
              A10 = InputBox("Cosa vuoi scrivere in A10?", "Scrivi un valore")
              B20 = InputBox("Cosa vuoi scrivere in B20?", "Scrivi un valore")
              
              If A10 <> vbNullString And B20 <> vbNullString Then
              percorso = ThisWorkbook.Path
              
              Set Libreria = CreateObject("Scripting.FileSystemObject")
              Set Cartella = Libreria.GetFolder(percorso)
              Set File = Cartella.Files
              Set twk = ThisWorkbook
              
              Application.ScreenUpdating = False
              For Each File In File
              If (Right(File.Name, Len(File.Name) - (InStrRev(File.Name, ".", , vbTextCompare)))) Like "xls*" _
              And File.Name <> ThisWorkbook.Name And Left(File.Name, 1) <> "~" Then
              Set wk = Workbooks.Open(percorso & "/" & File.Name)
              For Each ws In wk.Worksheets
              With ws
              .Range("A10").Value = A10
              .Range("B20").Value = B20
              End With
              Next ws
              wk.Close (True)
              Set wk = Nothing
              End If
              Next
              Application.ScreenUpdating = True
              twk.Activate
              Else
              MsgBox "Operazione annullata! I dati non sono stati inseriti correttamente", vbCritical, "Errore!"
              End If
              End If
              Set twk = Nothing
              Set Libreria = Nothing
              Set Cartella = Nothing
              Set File = Nothing
              End Sub
              
            • Avatarteto21162
              Partecipante
                Post totali: 100

                Ciao Kris,grazie della tua risposta,

                appena mi è possibile la provo e ti faccio sapere

                :bye:

              • Avatarteto21162
                Partecipante
                  Post totali: 100

                  Ciao Kris,

                  ho scaricato e provato il tuo esempio ed è esattamente quello che mi serve.

                  ora provo ad inserirlo nel mio lavoro e poi ti dico come va comunque sono ottimista.

                  Grazie mille del tuo aiuto, proverò a sdebitarmi con un aiuto al sito :good:

                  • AvatarKris_9951
                    Partecipante
                      Post totali: 226

                      Ciao Teto!

                      È stato un piacere :-)

                      Fammi sapere se hai problemi oppure se ti serve altro 👍👍

                      Alla prox 👌 :bye:

                  • Avatarteto21162
                    Partecipante
                      Post totali: 100

                      Ciao Kris,

                      sono riuscito ad adattare il tuo lavoro al mio e funziona molto bene però c’è un piccolo grande problema.

                      Nella mia richiesta di aiuto non ho evidenziato che i file da modificare hanno delle macro che in apertura attivano delle richieste di codice. Questo mi obbliga ad inserire il codice in ogni file che la tua macro di modifica apre

                      Credi sia possibile fare in modo che il tuo codice apra i file da modificare disattivando le macro?

                      Grazie ancora

                      • AvatarKris_9951
                        Partecipante
                          Post totali: 226

                          Ciao Teto!

                          BySal (che saluto :bye: :bye: ) ti ha dato un’alternativa.
                          Io ti aggiorno il codice per risolvere (spero) il tuo problema, così potrai scegliere quale opzione fa per te.

                          Sempre al solito link ho aggionato i file da modificare, ovvero ho inserito dei file .xlsm che hanno delle macro che si avviano all’apertura del Workbook.

                          https://www.dropbox.com/sh/8qre63vh8munmaj/AACKMpbtDIcRQaPJSaZDmO3ya?dl=0

                          Ecco il codice aggiornato, fai sapere se vatutto bene e per qualsiasi altra cosa io sono qui :bye: :bye:

                          Sub cancella()
                              Dim percorso As String
                              Dim Libreria As Object
                              Dim Cartella As Object
                              Dim File As Object
                              Dim ws As Worksheet
                              Dim wk As Workbook
                              Dim twk As Workbook
                              Dim domanda As String
                              
                              percorso = ThisWorkbook.Path
                              
                              Set Libreria = CreateObject("Scripting.FileSystemObject")
                              Set Cartella = Libreria.GetFolder(percorso)
                              Set File = Cartella.Files
                              Set twk = ThisWorkbook
                              
                              domanda = MsgBox("Vuoi procedere?", vbQuestion + vbYesNo, "Richiesta di conferma")
                              If domanda = vbYes Then
                                      With Application
                                          .Calculation = xlCalculationManual
                                          .EnableEvents = False
                                          .ScreenUpdating = False
                                      End With
                                  For Each File In File
                                      If (Right(File.Name, Len(File.Name) - (InStrRev(File.Name, ".", , vbTextCompare)))) Like "xls*" _
                                          And File.Name <> ThisWorkbook.Name And Left(File.Name, 1) <> "~" Then
                                              Set wk = Workbooks.Open(percorso & "/" & File.Name)
                                              For Each ws In wk.Worksheets
                                                  With ws
                                                      .Unprotect
                                                      .Range("A10,B20").ClearContents
                                                  End With
                                              Next ws
                                              wk.Close (True)
                                              Set wk = Nothing
                                      End If
                                  Next
                                  With Application
                                      .Calculation = xlCalculationAutomatic
                                      .EnableEvents = True
                                      .ScreenUpdating = True
                                  End With
                                  twk.Activate
                              End If
                              Set twk = Nothing
                              Set Libreria = Nothing
                              Set Cartella = Nothing
                              Set File = Nothing
                          End Sub
                          
                          Sub popola()
                              Dim percorso As String
                              Dim Libreria As Object
                              Dim Cartella As Object
                              Dim File As Object
                              Dim ws As Worksheet
                              Dim wk As Workbook
                              Dim twk As Workbook
                              Dim A10 As Variant
                              Dim B20 As Variant
                              Dim domanda As String
                              
                              domanda = MsgBox("Vuoi procedere?", vbQuestion + vbYesNo, "Richiesta di conferma")
                              If domanda = vbYes Then
                                  A10 = InputBox("Cosa vuoi scrivere in A10?", "Scrivi un valore")
                                  B20 = InputBox("Cosa vuoi scrivere in B20?", "Scrivi un valore")
                                  
                                  If A10 <> vbNullString And B20 <> vbNullString Then
                                      percorso = ThisWorkbook.Path
                                      
                                      Set Libreria = CreateObject("Scripting.FileSystemObject")
                                      Set Cartella = Libreria.GetFolder(percorso)
                                      Set File = Cartella.Files
                                      Set twk = ThisWorkbook
                                      
                                      With Application
                                          .Calculation = xlCalculationManual
                                          .EnableEvents = False
                                          .ScreenUpdating = False
                                      End With
                                      For Each File In File
                                          If (Right(File.Name, Len(File.Name) - (InStrRev(File.Name, ".", , vbTextCompare)))) Like "xls*" _
                                              And File.Name <> ThisWorkbook.Name And Left(File.Name, 1) <> "~" Then
                                                  Set wk = Workbooks.Open(percorso & "/" & File.Name)
                                                  For Each ws In wk.Worksheets
                                                      With ws
                                                          .Unprotect
                                                          .Range("A10").Value = A10
                                                          .Range("B20").Value = B20
                                                      End With
                                                  Next ws
                                                  wk.Close (True)
                                                  Set wk = Nothing
                                          End If
                                      Next
                                      With Application
                                          .Calculation = xlCalculationAutomatic
                                          .EnableEvents = True
                                          .ScreenUpdating = True
                                      End With
                                      twk.Activate
                                  Else
                                      MsgBox "Operazione annullata! I dati non sono stati inseriti correttamente", vbCritical, "Errore!"
                                  End If
                              End If
                              Set twk = Nothing
                              Set Libreria = Nothing
                              Set Cartella = Nothing
                              Set File = Nothing
                          End Sub
                      • BySalvBySalv
                        Amministratore del forum
                          Post totali: 884

                          Ciao Teto, potresti usare anche un altro escamotage, che non comporta macro ma solo un poco di lavoro da parte tua una sola volta.

                          apri il file master individua le celle che vuoi riportare negli altri file non necessariamente devono essere le stesse.

                          adesso apri un file alla volta, seleziona dove vuoi il valore del file Master poi scrivi “=” nella cella ti sposti nel file master e selezioni la cella interessata tutto qui, dovrebbe venire una formula del genere

                          =’C:\Users\Salvatore\Desktop\Archivio\Nuova cartella\[Master.xlsm]Foglio1′!$A$12

                          logicamente riporta il mio percorso, ripeti il discorso delle altre celle da riportare, poi della formula puoi fare copia incolla anche sugli altri file.

                          una volta fatto questo quando sul file master cambi i valori anche su tutti gli altri file verranno riportati gli stessi valori.

                          non lanci nessuna macro e non apri nessun file, quando apri un file satellite avrai i dati cambiati, logicamente se vuoi cancellare i dati basta che nel file Master cancelli i dati.

                          ho usato i file di Kris che saluto, ecco un immagine

                          [/url]

                          come ti ho detto solo un poco di lavoro da parte tua, ma una sola volta, se hai paura che qualche altro cancelli le formule puoi bloccare le celle con le formule cosi nessuno potrà modificarle.

                          Ciao By Sal (8-D

                          Ciao By Sal (8-)
                          se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

                        • Avatarteto21162
                          Partecipante
                            Post totali: 100

                            Ciao By Salv grazie della tuo consiglio.

                            Non ti nascondo che in un’altro lavoro uso questo escamotage che naturalmente lega i file alle celle del file di riferimento ( master ).

                            In questo caso preferirei non avere questo legame, e se fosse possibile preferirei risolverlo con la macro di kris che funziona perfettamente ma devo trovare il modo, nel codice, di escludere le macro di apertura, altrimenti ogni file che apre mi chiede di eseguire l’operazione prevista per quei file in apertura.

                            :bye:

                          • Avatarteto21162
                            Partecipante
                              Post totali: 100

                              Credete che questo comando         Application.EnableEvents = False

                              inserito in modo opportuno nel codice possa fare al caso?

                              • AvatarKris_9951
                                Partecipante
                                  Post totali: 226

                                  Teto, hai visto la mia risposta al tuo problema? 😉👍

                                  Guarda sopra 👆

                              • Avatarteto21162
                                Partecipante
                                  Post totali: 100

                                  Ciao Kris, ho provato il tuo lavoro aggiornato con file che in apertura attivano la macro.

                                  Purtroppo in questo caso il codice popola non funziona, pur non dando errore non inserisce quello che scrivo nelle imputbox.

                                  Infatti ad una verifica sui file interessati nelle celle A10 e B20 non c’è nulla :unsure:

                                • Avatarteto21162
                                  Partecipante
                                    Post totali: 100

                                    Scusa Kris la fretta è sempre cattiva consigliera, è tutto ok il tuo lavoro funziona alla grande.

                                    Pensa che volevo far funzionare il file master a cartella ancora zippata :wacko:

                                    Ora appena mi sarà possibile lo inserisco nei miei file, ma già da ora sono certo che funzionerà.

                                    Grazie ancora e scusami per il messaggio di prima.

                                    Teto :good:

                                  • Avatarteto21162
                                    Partecipante
                                      Post totali: 100

                                      Allora ho provato nella cartella dei miei file e funziona bene ma ci sarebbe ancora una cosa.

                                      I file che modifica sono protetti infatti tu probabilmente l’hai previsto con:    ”   .Unprotect  ” che mi chiede di inserire la password nel box.

                                      Capita una cosa particolare se decido di cancellare i dati delle celle dei file la password viene chiesta tante volte quanti sono i file.

                                      Se decido di modificare il dato la password la devo digitare 2 volte nel box

                                      Considera che i file sono protetti tutti con la stessa password e che la prova è stata fatta con 12 file ma nella realtà la cartella potrebbe contenerne anche 100.

                                      Credi sia possibile fare in modo di inserire la password dei file direttamente nel codice così non c’è la necessità di digitarla nel box?

                                       

                                      • AvatarKris_9951
                                        Partecipante
                                          Post totali: 226

                                          Ciao Teto!

                                          Certo che è possibile.

                                          Appena ho modo proteggerò i file di prova con Password (me la invento e poi tu la cambierai nel codice)

                                          Ci aggiorniamo presto 👍

                                          :bye: :bye:

                                      • AvatarKris_9951
                                        Partecipante
                                          Post totali: 226

                                          Ciao Teto!

                                          Sempre al solito link puoi scaricare la nuova versione che comprende anche la protezione dei fogli con relativa password.

                                          Nell’esempio ho messo la password “pippo” ma tu cambiala con la tua.

                                          Fai sapere se è tutto Ok (se vuoi) :bye: :bye:

                                          https://www.dropbox.com/sh/8qre63vh8munmaj/AACKMpbtDIcRQaPJSaZDmO3ya?dl=0

                                        • Avatarteto21162
                                          Partecipante
                                            Post totali: 100

                                            Ciao Kris, il tuo lavoro è semplicemente fantastico funziona a meraviglia e potrei dire di aver risolto ma…..

                                            Se ho ben capito il funzionamento del codice, il file master, inserito in una qualsiasi cartella che contenga file .xls, modifica le celle di riferimento in quei file.

                                            Questo è esattamente quello che mi serve ma mi sono accorto che il codice non deve funzionare per un solo file contenuto in cartella che per comodità indico con nome pippo.xls.

                                            Pensi ci sia un modo che determini una di queste 2 cose che ti chiedo sotto?

                                            a) il codice se si accorge che in cartella c’è pippo.xls esegue le operazioni su tutti i file xls presenti tranne pippo.xls

                                            oppure

                                            b) il codice si accorge della presenza del file pippo.xls in cartella e chiude il codice, mandando un messaggio che avverte di rimuovere il file pippo dalla cartella. Confermata la lettura del messaggio anche il file master si chiude.

                                            Grazie ancora del tuo lavoro e della tua pazienza.

                                            :bye:

                                             

                                            • AvatarKris_9951
                                              Partecipante
                                                Post totali: 226

                                                Ciao Teto!

                                                Sempre al solito link trovi la solita cartella con il file Master aggiornato con la modifica richiesta.

                                                Il codice eseguirà l’operazione su tutti i file Excel ad eccezione del file che si chiama “pippo” (poi il nome lo cambierai in base a tue esigenze).

                                                Fai sapere se è tutto Ok (se vuoi) :bye: :bye:

                                            • Avatarteto21162
                                              Partecipante
                                                Post totali: 100

                                                Ciao Kris,

                                                ho finito tutte le prove del tuo file nel mio lavoro è posso dirti che è semplicemente fantastico.

                                                Funziona a meraviglia facendo esattamente quello che mi serve.

                                                Possiamo quindi mettere RISOLTO nel titolo.

                                                Un enorme grazie per la tua pazienza e competenza.

                                                 

                                                Un caro saluto :bye:

                                                Teto :good:

                                                Ps. non mancherò di dare il mio contributo alla comunità per il preziosissimo lavoro di supporto che fornisce a noi utilizzatori di excel. Grazie a tutti

                                                • AvatarKris_9951
                                                  Partecipante
                                                    Post totali: 226

                                                    Ciao Teto!

                                                    Felice di esserti stato utile.

                                                    Per qualsiasi altra cosa resto a disposizione.

                                                    Saluti, Kris

                                              Visualizzazione 14 filoni di risposte
                                              • Devi essere connesso per rispondere a questo topic.