COMPILAZIONE AUTOMATICA DI UNA TABELLA

Anonimo
2017-10-30T07:19:26+00:00

Buongiorno,

avrei bisogno di un aiuto da parte vostra per autocompilare alcune celle di "Tabella 2", prendendo come sorgente di dati, alcune celle di "Tabella 1" presente in un altro file Excel.

Vorrei riuscire a fare autocompilare la "Tabella 1", ogni volta che compilo una nuova riga in "Tabella 2" in qualche modo, o con delle funzioni o tramite un pulsante di comando. Non sono molto pratico di macro o VBA, per cui non saprei quale sia la migliore soluzione in questo caso.

Ditemi pure se non sono stato abbastanza chiaro.

Grazie per l'attenzione

Andrea Todeschi

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

5 risposte

Ordina per: Più utili
  1. Anonimo
    2017-10-31T17:05:22+00:00

    Ciao Andrea,

    l'esecuzione è proprio quello che stavo cercando :) Grazie mille!

    Bene! 

    Ho però due problemi:

    • non riesco a capire come generare la compilazione di un nuovo foglio

    Non capisco quello che intendi! Com'è stato scritto il codice, il modulo sul foglio Sheet1 del file PROTOTIPO 2.xlsx  viene riempito con i dati di interesse dall'ultima riga del foglio SORGENTE & COMPILAZIONE DATI del file in cui si trova il codice, ovvero, in questo caso, il file  PROTOTIPO 1.xlsm.

    quando compilo una nuova riga

    • mi si verifica il seguente errore:

    [...]

    Avevo sviluppato il codice nel file che hai caricato il qiale non utilizzava Option Explicit come impostazione predefinita, ho trascurato di definire la variabile iCtr.

    Quindi, sostituisci il codice con la versione qui sotto, nella quale ho approfittato per fare due piccole modifiche analoghe:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim srcWB As Workbook, destWb As Workbook

        Dim srcSH As Worksheet, destSH As Worksheet

        Dim srcRng As Range, destRng As Range, rCell As Range

        Dim arrColonne As Variant

        Dim sPercorso As String, sFileName As String, sCol As String

        Dim i As Long, uCtr As Long, LRow As Long

        Dim ictr As Long

        Dim CalcMode As Long

        Const sDestFile As String = "PROTOTIPO 2.xlsx"

        Const sFoglioSorgente As String = _

                      "SORGENTE & COMPILAZIONE DATI"

        Const sFoglioDestinazione As String = "Sheet1"

        Const sColonneSorgente As String = _

                                                      "A,B,E,F,G,H,I,J"

        Const sIntervalloDestinazione As String = _

                             "J14,A23,E7,K7,K9,J12,J13,E11"

        Set srcWB = ThisWorkbook

        sPercorso = srcWB.Path & Application.PathSeparator

        sFileName = sPercorso & sDestFile

        If Not IsWorkBookOpen(sDestFile) Then

            Workbooks.Open sFileName

        End If

        Set destWb = Workbooks(sDestFile)

        Set srcSH = srcWB.Sheets(sFoglioSorgente)

        Set destSH = destWb.Sheets(sFoglioDestinazione)

        arrColonne = Split(sColonneSorgente, ",")

        With srcSH

            LRow = LastRow(srcSH, .Columns("A:A"))

            Set srcRng = .Rows(2)

        End With

        Set destRng = destSH.Range(sIntervalloDestinazione)

        With Application

            CalcMode = .Calculation

            .Calculation = xlCalculationManual

            .ScreenUpdating = False

        End With

        For Each rCell In destRng.Cells

            ictr = ictr + 1

            sCol = arrColonne(ictr - 1)

            rCell.Value = srcSH.Cells(LRow, sCol).Value

        Next rCell

    XIT:

        With Application

            .Calculation = CalcMode

            .ScreenUpdating = True

        End With

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range, _

                            Optional minRow As Long = 1, _

                            Optional sPassword As String)

        Dim bProtected As Boolean

        With SH

            If Rng Is Nothing Then

                Set Rng = .Cells

            End If

            bProtected = .ProtectContents = True

            If bProtected Then

                .Unprotect Password:=sPassword

            End If

        End With

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

        If LastRow < minRow Then

            LastRow = minRow

        End If

        If bProtected Then

            SH.Protect Password:=sPassword, _

                       UserInterfaceOnly:=True

        End If

    End Function

    '--------->>

    Public Function IsWorkBookOpen( _

                                ByRef sWbName As String) As Boolean

        On Error Resume Next

        IsWorkBookOpen = Not (Application.Workbooks(sWbName) Is Nothing)

    End Function

    '<<=========

    Ho aggionato i miei file di prova Andrea20171030,zip

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-10-31T08:42:14+00:00

    Ciao Norman,

    l'esecuzione è proprio quello che stavo cercando :) Grazie mille!

    Ho però due problemi:

    • non riesco a capire come generare la compilazione di un nuovo foglio quando compilo una nuova riga
    • mi si verifica il seguente errore:

    Mi dice variabile non definita, poi quando provo a chiudere il programma:

    Come mai succede anche qui?

    Grazie

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-10-30T22:31:19+00:00

    Ciao Andrea,

    all'interno del file chiamato "PROTOTIPO 1" voglio compilare i dati che poi, magari cliccando col bottone aggiunto in una colonna, si autocompilino le celle indicate nel file "PROTOTIPO 2". All'interno del file "PROTOTIPO 2" sono indicati i riferimenti da dove voglio che vengano ricopiati i dati da inserire.

    Di seguito il link dei file Excel:

    https://1drv.ms/f/s!AhhSzduj1yxMgQm7nt\_ZJ7BUe8O3

    Ho scaricato i tuoi due file e sono convinto che senza di loro il compito sarebbe stato completamente impossibile :-)

    Per copiare i valori di interesse dall'ultima riga del foglio SORGENTE & COMPILAZIONE DATI del file PROTOTIPO 1 nelle celle di interesse del foglio Sheet1 del file PROTOTIPO 2.xlsx, prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim srcWB As Workbook, destWb As Workbook

        Dim srcSH As Worksheet, destSH As Worksheet

        Dim srcRng As Range, destRng As Range, rCell As Range

        Dim arrColonne As Variant

        Dim sPercorso As String, sFileName As String, sCol As String

        Dim i As Long, uCtr As Long, LRow As Long

        Dim CalcMode As Long

        Const sDestFile As String = "PROTOTIPO 2.xlsx"            '<<=== Modifica

        Const sFoglioSorgente As String = _

                       "SORGENTE & COMPILAZIONE DATI"            '<<=== Modifica

        Const sFoglioDestinazione As String = "Sheet1"             '<<=== Modifica

        Const sColonneSorgente As String = _

                                                       "A,B,E,F,G,H,I,J"             '<<=== Modifica

        Const sIntervalloDestinazione As String = _

                              "J14,A23,E7,K7,K9,J12,J13,E11"             '<<=== Modifica

        Set srcWB = ThisWorkbook

        sPercorso = srcWB.Path & Application.PathSeparator

        sFileName = sPercorso & sDestFile

        If Not IsWorkBookOpen(sDestFile) Then

            Workbooks.Open sFileName

        End If

        Set destWb = Workbooks(sDestFile)

        Set srcSH = srcWB.Sheets(sFoglioSorgente)

        Set destSH = destWb.Sheets(sFoglioDestinazione)

        arrColonne = Split(sColonneSorgente, ",")

        With srcSH

            LRow = LastRow(srcSH, .Columns("A:A"))

            Set srcRng = .Rows(2)

        End With

        Set destRng = destSH.Range(sIntervalloDestinazione)

        With Application

            CalcMode = .Calculation

            .Calculation = xlCalculationManual

            .ScreenUpdating = False

        End With

        For Each rCell In destRng.Cells

            ictr = ictr + 1

            sCol = arrColonne(ictr - 1)

            rCell.Select

            rCell.Value = srcSH.Cells(LRow, sCol).Value

        Next rCell

    XIT:

        With Application

            .Calculation = CalcMode

            .ScreenUpdating = True

        End With

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

                            Optional Rng As Range, _

                            Optional minRow As Long = 1, _

                            Optional strPassword As String)

        Dim bProtected As Boolean

        With SH

            If Rng Is Nothing Then

                Set Rng = .Cells

            End If

            bProtected = .ProtectContents = True

            If bProtected Then

                .Unprotect Password:=sPassword

            End If

        End With

        On Error Resume Next

        LastRow = Rng.Find(What:="*", _

                           after:=Rng.Cells(1), _

                           Lookat:=xlPart, _

                           LookIn:=xlFormulas, _

                           SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious, _

                           MatchCase:=False).Row

        On Error GoTo 0

        If LastRow < minRow Then

            LastRow = minRow

        End If

        If bProtected Then

            SH.Protect Password:=sPassword, _

                       UserInterfaceOnly:=True

        End If

    End Function

    '--------->>

    Public Function IsWorkBookOpen( _

                                ByRef sWbName As String) As Boolean

        On Error Resume Next

        bIsBookOpen = Not (Application.Workbooks(sWbName) Is Nothing)

    End Function

    '<<========= 

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester
    • Esegui

    Per facilitare l'uso del codice, ho allegato la macro Tester ad un pulsante:

       

    Eseguendo il codice, ottengo i seguenti risultati:

    Potresti scaricare i miei file di prova Andrea20171030,zip

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-10-30T11:13:32+00:00

    Ciao Norman,

    all'interno del file chiamato "PROTOTIPO 1" voglio compilare i dati che poi, magari cliccando col bottone aggiunto in una colonna, si autocompilino le celle indicate nel file "PROTOTIPO 2". All'interno del file "PROTOTIPO 2" sono indicati i riferimenti da dove voglio che vengano ricopiati i dati da inserire.

    Di seguito il link dei file Excel:

    https://1drv.ms/f/s!AhhSzduj1yxMgQm7nt\_ZJ7BUe8O3

    Grazie

    Andrea Todeschi

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-10-30T10:05:21+00:00

    Ciao Andrea,

    avrei bisogno di un aiuto da parte vostra per autocompilare alcune celle di "Tabella 2", prendendo come sorgente di dati, alcune celle di "Tabella 1" presente in un altro file Excel.

    Vorrei riuscire a fare autocompilare la "Tabella 1", ogni volta che compilo una nuova riga in "Tabella 2" in qualche modo, o con delle funzioni o tramite un pulsante di comando. Non sono molto pratico di macro o VBA, per cui non saprei quale sia la migliore soluzione in questo caso.

    Credo che sarebbe utile che tu caricassi un esempio delle due tabelle, per dimostrare sia la struttura delle tabelle che le celle di interesse,

    Ti chiederei gentilmente di caricare il file problematico, dopo averlo depurato dei dati sensibili, su un servizio di condivisione di file, per esempio Microsoft OneDrive o DropBox, e postare un link al file in una risposta qui.

    Per caricare il file su Microsoft OneDrive, vedi:

    https://support.office.com/it-it/article/Condividere-file-e-cartelle-di-OneDrive-9fcc2f7d-de0c-4cec-93b0-a82024800c07

    Nel caso di DropBox, vedi:

    https://www.dropbox.com/it/help/topics/sharing_files_and_folders

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento