Excel Forum Per condividere esperienze su Microsoft Excel

ESTRAPOLAZIONE INFORMAZIONI DA FOGLI XLSX PER CREAZIONE DATA BASE

  • Messaggi
  • OFFLINE
    Mazzottina
    Post: 7
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 28/03/2022 13:59
    Gentilissimi buongiorno,
    avrei bisogno del Vs. aiuto per recuperare tutte le informazioni utili contenute in diversi fogli.xlsx al fine di creare un unico DB. In allegato file di esempio ed in giallo le informazioni che avrei bisogno di estrapolare da ogni singolo foglio e riepilogare in un foglio di recap.
    Vi ringrazio anticipatamente per l'attenzione e l'aiuto.
    Lorenza
    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    alfrimpa
    Post: 4.816
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 28/03/2022 14:14
    Ciao

    Puoi indicare da quali celle degli altri fogli provengono i dati riportati su Riepilogo?

    Alfredo
  • OFFLINE
    Mazzottina
    Post: 7
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 28/03/2022 14:58
    Gentile Alfredo,
    ho provato ad indicare meglio con i colori i diversi campi.
    Spero che sia di più facile lettura.
    Grazie
    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    alfrimpa
    Post: 4.817
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 28/03/2022 17:45
    Ciao Lorenza

    Prova questa macro

    vb
    Sub riporta()
    Dim ur As Long
    Dim rng As Range
    Dim cel As Range
    ur = Foglio1.Cells(Rows.Count, 1).End(xlUp).Row
    Set rng = Foglio1.Range("A2:A" & ur)
    For Each cel In rng
        Cells(cel.Row, 2).Value = Sheets(cel.Value).Cells(21, 3).Value
        Cells(cel.Row, 3).Value = Sheets(cel.Value).Cells(21, 4).Value
        Cells(cel.Row, 4).Value = Sheets(cel.Value).Cells(8, 3).Value
        Cells(cel.Row, 5).Value = Sheets(cel.Value).Cells(16, 3).Value
        Cells(cel.Row, 6).Value = Sheets(cel.Value).Cells(10, 3).Value
        Cells(cel.Row, 7).Value = Sheets(cel.Value).Cells(12, 3).Value
        Cells(cel.Row, 8).Value = Sheets(cel.Value).Cells(14, 3).Value
        Cells(cel.Row, 9).Value = Sheets(cel.Value).Cells(22, 3).Value
        Cells(cel.Row, 10).Value = Sheets(cel.Value).Cells(22, 4).Value
        Cells(cel.Row, 11).Value = Sheets(cel.Value).Cells(9, 3).Value
        Cells(cel.Row, 12).Value = Sheets(cel.Value).Cells(17, 3).Value
        Cells(cel.Row, 13).Value = Sheets(cel.Value).Cells(11, 3).Value
        Cells(cel.Row, 14).Value = Sheets(cel.Value).Cells(13, 3).Value
        Cells(cel.Row, 15).Value = Sheets(cel.Value).Cells(15, 3).Value
        Cells(cel.Row, 16).Value = Sheets(cel.Value).Cells(25, 3).Value
        Cells(cel.Row, 17).Value = Sheets(cel.Value).Cells(25, 4).Value
        Cells(cel.Row, 18).Value = Sheets(cel.Value).Cells(26, 3).Value
        Cells(cel.Row, 19).Value = Sheets(cel.Value).Cells(26, 4).Value
        Cells(cel.Row, 20).Value = Sheets(cel.Value).Cells(27, 3).Value
        Cells(cel.Row, 21).Value = Sheets(cel.Value).Cells(27, 4).Value
        Cells(cel.Row, 22).Value = Sheets(cel.Value).Cells(28, 3).Value
        Cells(cel.Row, 23).Value = Sheets(cel.Value).Cells(28, 4).Value
        Cells(cel.Row, 24).Value = Sheets(cel.Value).Cells(29, 3).Value
        Cells(cel.Row, 25).Value = Sheets(cel.Value).Cells(29, 4).Value
        Cells(cel.Row, 26).Value = Sheets(cel.Value).Cells(30, 3).Value
        Cells(cel.Row, 27).Value = Sheets(cel.Value).Cells(30, 4).Value
        Cells(cel.Row, 28).Value = Sheets(cel.Value).Cells(31, 3).Value
        Cells(cel.Row, 29).Value = Sheets(cel.Value).Cells(31, 4).Value
        Cells(cel.Row, 30).Value = Sheets(cel.Value).Cells(33, 3).Value
        Cells(cel.Row, 31).Value = Sheets(cel.Value).Cells(33, 4).Value
        Cells(cel.Row, 32).Value = Sheets(cel.Value).Cells(42, 4).Value
        Cells(cel.Row, 33).Value = Sheets(cel.Value).Cells(42, 5).Value
        Cells(cel.Row, 34).Value = Sheets(cel.Value).Cells(43, 4).Value
        Cells(cel.Row, 35).Value = Sheets(cel.Value).Cells(43, 5).Value
        Cells(cel.Row, 36).Value = Sheets(cel.Value).Cells(44, 4).Value
        Cells(cel.Row, 37).Value = Sheets(cel.Value).Cells(44, 5).Value
    Next cel
    End Sub
    

    Alfredo
  • OFFLINE
    by sal
    Post: 6.725
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 28/03/2022 20:17
    Ciao Lorenza secondo il mio parere, l'impostazione che hai scelto non è ottimale, per un database meglio una scelta verticale per le voci ed una scelta orizzontale per i codici, molto più rapida la cousultazione e confronto.

    però ho notato che non hai uno standard per il modulo dei codici, questo non va bene, in quanto il riepilogo deve trovare le voci sempre nella stessa posizione per riportarli nelle voci corrispondenti altrimenti Excel ti riporterà un dato errato o non relativo alla voce.

    per cui ho scelto come base il foglio del 1° codice "AAAA AAA" se gli altri fogli non rispecchiano l'impostazione riporterà dati errati.

    a questo punto prendi il foglio del codice che ho detto ed usalo come base quando devi inserire un nuovo codice fai copia del foglio e cambi il nome del foglio mettendo il nome del codice.

    ho aggiunto un nuovo foglio "Riepilogo2" in cui ho estrapolato i dati, le intestazioni delle colonne sono i codici e la colonna "A" sono le voci che hai indicato in orizzontale.

    logicamente se aggiungi un nuovo codice dovrai anche aggiungerlo nelle intestazioni del foglio riepilogo, altrimenti non ti riporta il codice che hai aggiunto.

    questo il risultato



    per un aggiornamento basta cliccare l'icona cerchio verde freccia rossa, riporterà tutte le variazioni effettuate sui fogli dei codici, relativamente alle voci indicate.

    ti allego anche il file.

    Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    Mazzottina
    Post: 8
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 29/03/2022 10:17
    Buongiorno Sal,
    il problema è proprio quello che hai individuato.
    Le schede non sono identiche, la difficoltà sta proprio lì. Per questo ho estrapolato tre schede tipo, in modo tale capire se fosse prossibile creare un progetto VBA che consentisse di estrarre le informazioni contenute nei tre diversi form che rappresentano la stragrande maggioranza delle schede presenti. Putroppo, si tratta di un migliaio di schede e sarebbe un lavoro troppo oneroso standardizzarle.
    Grazie
    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    by sal
    Post: 6.726
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 29/03/2022 10:28
    Ciao Lorenza, ma almeno le voci sono identiche da quelle che hai indicato, anche se sono posizionate diversamente nella scheda.

    cioè esempio

    Materiale componente 1

    lasciando perdere il maiuscolo o minuscolo la voce non sia indicata come

    Materiale componente1
    Materiale componente 1

    come vedi anche se sembrano identiche non lo sono.
    se sono identiche allora vedo come posso fare.

    nel frattempo per i nuovi codici cerca di usare una base come ti ho detto.

    fai sapere, Ciao By Sal (8-D


    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    Mazzottina
    Post: 9
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 29/03/2022 10:33
    Buongiorno Alfredo,
    grazie per l'aiuto, tuttavia, la MACRO non funziona, temo che dovrei adattarla. Attualmente utilizzo la seguente macro per individuare all'interno dei fogli e riportare i valori "prezzi":

    Sub ricerca()
    Dim ws As Worksheet
    Dim Nome1 As String, Nome2 As String, RigaA As Object, Area As Range
    Dim RR As Long, R As Long, Uriga As Long, X As Long
    Application.ScreenUpdating = False
    Uriga = Sheets("RIEPILOGO").Range("A" & Rows.Count).End(xlUp).Row
         If Uriga > 1 Then
             Sheets("RIEPILOGO").Range("A2:C" & Uriga).ClearContents
         End If
    R = 2
    Nome1 = "PZ.X100"
    Nome2 = "PZ.X100 (+25%)"
       For Each ws In ActiveWorkbook.Worksheets
         If ws.Name <> "RIEPILOGO" Then
           ws.Activate
             Sheets("RIEPILOGO").Cells(R, 1) = ws.Name
             Uriga = ws.Range("E" & Rows.Count).End(xlUp).Row
             Set Area = ws.Range(ws.Cells(1, 5), ws.Cells(Uriga, 5))
             Set RigaA = Area.Find(Nome1, LookIn:=xlValues, LookAt:=xlWhole)
                 If Not RigaA Is Nothing Then
                     RR = RigaA.Row
                     Sheets("RIEPILOGO").Cells(R, 2) = ws.Cells(RR, 6)
                 End If
             Set RigaA = Area.Find(Nome2, LookIn:=xlValues, LookAt:=xlWhole)
                 If Not RigaA Is Nothing Then
                     RR = RigaA.Row
                     Sheets("RIEPILOGO").Cells(R, 3) = ws.Cells(RR, 6)
                 End If
             R = R + 1
         End If
       Next ws
       Sheets("RIEPILOGO").Activate
       Application.ScreenUpdating = True
       MsgBox "Fatto"
    End Sub


    Si riuscirebbe a adattare questa macro per riportare le informazioni che avevo evidenziato nel file?
    Grazie
    [Modificato da by sal 29/03/2022 15:36]
    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    alfrimpa
    Post: 4.818
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 29/03/2022 11:31
    Ciao Lorenza

    La macro l'ho scritta tenendo presente il risultato da te inserito sul foglio riepilogo ed eseguendola si ottiene lo stesso risultato.

    Cosa c'è che non va?

    Se il risultato è diverso da quello che hai postato allora devi dirlo e riallega il file mettendo sul foglio Riepilogo il risultato che vuoi ottenere (basta un solo rigo)
    [Modificato da alfrimpa 29/03/2022 11:32]

    Alfredo
  • OFFLINE
    Mazzottina
    Post: 10
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 29/03/2022 11:34
    Grazie Sal!
    L'idea è proprio quella di abbandonare il file e creare un DB che parta dalle informazioni collezionate ed implementare un programma più user friendly e facile da aggiornare.
    Le diciture sono identiche in tutte le schede (tranne le voci altri componenti che di solito sono dalla riga 38).
    Riallego il file esempio modificato con i suggerimenti che mi ha fornito.
    Grazie
    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    by sal
    Post: 6.727
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 29/03/2022 13:00
    Ciao Lorenza, il primo passo, è riportare tutti i tuoi dati dalle schede al database che hai impostato.

    Controllare se è coerente con i dati e non ci siano salti oppure dati errati, poi creare una tabella di riepilogo come un foglio scheda Standard, nel quale si possa richiamare il codice, visualizzare i dati relativi, nel caso modificarli e riportarli nel database, ed anche avere la possiiblità di aggiungere nuovi codici.

    la difficoltà al momento è far combaciare i dati delle singole schede con le voci del database anche perche se pur raggruppate hanno voci identiche e non è facile far discernere, del tipo "Tipo pressa" ce ne sono 4

    Tipo Pressa Pressa1
    Tipo Pressa 3,28
    Tipo Pressa Pressa2
    Tipo Pressa 3,58

    vedo che posso combinare, Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    alfrimpa
    Post: 4.819
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 29/03/2022 13:19
    Lorenza io sono in attesa di sapere perchè hai detto che la mia macro non funziona

    Alfredo
  • OFFLINE
    Mazzottina
    Post: 11
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 29/03/2022 14:20
    Eccomi Alfredo.
    Se faccio girare la MACRO sia sul file di esempio che sul file di produzione esce l'errore che allego, ma non avendo molta dimestichezza con linguaggio VBA non sono in grado di capire il perché.
    Per questa ragione Le ho risposto postando l'attuale MACRO per capire se si potesse adattare al nuovo obiettivo.

    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    Mazzottina
    Post: 12
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 29/03/2022 14:27
    Gentile Sal,
    purtroppo non ho modo di standardizzare le schede (sono migliaia).
    Data la griglia di esempio che ho inoltrato (ESEMPIO-1) non si riesce proprio a costruire una macro che riporti i dati evidenziati?
    Qualche post fa ho riportato l'attuale MACRO "ricerca" che utilizzo per collezionare i dati "prezzi" e, come scrivevo al Sig. Alfredo, si può adattare?
    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    alfrimpa
    Post: 4.820
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 29/03/2022 15:05
    L'errore che hai segnalato deriva quasi certamente dal fatto che in colonna A del foglio Riepilogo c'è qualche stringa che non c'è come foglio.

    Se c'è esatta corrispondenza l'errore non si verifica.

    Alfredo
  • OFFLINE
    by sal
    Post: 6.728
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 30/03/2022 09:37
    Ciao Cerchiamo di fare una cosa alla volta, prima un controllo preventivo, poi si potrà procedere al resto

    la prima cosa dobbiamo trovare tutti i codici che hanno la stessa impostazione della scheda, ti ho preparato un foglio che fa questo tipo di passaggio, al momento è soltanto un modello, però potrai sviluppare tu sulla base di questo le impostazioni delle altre schede.

    visto che i quadri della scheda sono 3, Scheda, Costo e Distinta base, o preso le voci iniziali e l'indirizzo della cella, poi ho fatto un controllo con i fogli codici e mi sono fatto riportare tutti i nomi dei codici che corrispondono con il modello, a questo punto i codici trovati possono già passare al Database con questa impostazione, facendo un altro modello possiamo trovare altri codici che corrispondono al modello, fino a che alla fine avremo tutti i codici ognuno relativi a diversi modelli di scheda, poi sulla base di questo possiamo sviluppare il database.

    non ho considerato i dati della riga 38 in poi che si possono fare con una macro dedicata, l'importante è l'impostazione dei dati del codice

    ti metto un file con il foglio 1 e la macro che seleziona i codici uguali al modello, il primo modello e quello relativo al tuo codice "AAAA AA" del tuo file.

    copia il "Foglio1" nel tuo file originale e lancia la macro questa per conoscere una prima "trance" di codici

    Sub controllo()
    Dim sh1 As Worksheet, fg As Worksheet
    Dim r, c, d, x, y, t, n, rng
    
    Set sh1 = Worksheets("Foglio1")
    sh1.Activate
    Application.ScreenUpdating = False
    rng = Range("A2:B44")
    Columns("D:D").ClearContents
    sh1.Cells(1, 4) = "Codici"
    r = 2: c = 4
    For x = 1 To Sheets.Count
      Set fg = Worksheets(Sheets(x).Name)
      If fg.Name = "Foglio1" Or fg.Name = "Base" Or fg.Name = "Riepilogo" Then GoTo 1 'fogli da escludere
      fg.Activate
      t = 0: n = 0
      For y = 1 To UBound(rng)
        If fg.Range(rng(y, 2)) = rng(y, 1) Then n = n + 1
      Next y
      If n = 43 Then sh1.Cells(r, c) = fg.Name: r = r + 1
    1 Next x
    sh1.Activate
    End Sub


    inserisci i nomi dei fogli da escudere allungando nel caso o sostituire "Base" e "Riepilogo" che sicuramente non ci sono nel tuo file

    questo un abbozzo del database, come vedi le differenze maggiori sono nel quadro "Distinta base" ultima immagine, che i dati non vengono riportati nella voce giusta, in quanto il modello è differente, ti allego le immagini, per i quadri ma è un unico foglio.





    Come vedi fino a "sacchetto nylon" i dati sono coerenti dopo si ingarbugliano, come mai alcuni hanno la "tappatrice" ed altri no sarà un modello diverso senza tappatrice

    ti allego il file, fai sapere, Ciao By Sal
    [Modificato da by sal 30/03/2022 09:54]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    Mazzottina
    Post: 13
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 30/03/2022 12:03
    Grazie Sal!
    Appena ho un attimo mi applico e mando feedback.
    Buona giornata
    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    by sal
    Post: 6.729
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 30/03/2022 16:40
    Ciao Lorenza, dimmi queste 2 voci sono identiche oppure sono diverse, nel senso che sono modelli che hanno funzioni diverse, occupano la stessa posizione devo capire se devo creare nel database voci differenti

    Voci simili Confez. Automatico Confez. Interno
    stessa Posiz. Confez. Astucciatrice Confez. Esterno


    fai sapere, ciao By sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    Mazzottina
    Post: 14
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 30/03/2022 17:27
    Buonasera Sal,
    ho provato ad applicare la MACRO al file di esempio-1 e, l'unico codice articolo che ha riportato è il codice A, in quanto è l'unico con il modello presentato. E' così che doveva andare? Oppure la MACRO avrebbe dovuto riportare anche per gli altri codici le informazioni contenute nelle celle se identiche?
    Mi scuso, perché queste domande le sembreranno banali, ma la mia conoscenza del linguaggio VBA è davvero limitata ed è difficile per me codificare le istruzioni.
    Alla luce di quanto sopra, se io modificassi il foglio1 prendendo come riferimento la scheda G (struttura molto più comune tra le schede), la MACRO dovrebbe funzionare e riportarmi tutti i codici che hanno questo modello senza modificarne le istruzioni, corretto?
    Nell'attesa La ringrazio.


    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    by sal
    Post: 6.730
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 30/03/2022 17:33
    Ciao Lorenza si, la macro trova tutti i codici che hanno la stessa struttura e fa un elenco dei codici, o meglio del nome del foglio del codice.

    in questo modo si incominciano a filtrare i codici con la stessa struttura,

    se mi mandi i codici che hanno maggiormente la stessa struttura ti preparo una macro che faccia gli elenchi,

    mi rispondi al mio post precedente, devo vedere come posso impostare la basa per il database, scusa l'impiccio delle parole.

    Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    Mazzottina
    Post: 15
    Registrato il: 23/01/2014
    Età: 43
    Utente Junior
    97-2003
    00 31/03/2022 10:38
    Buongiorno Sal,
    ho verificato le casistiche presenti in diverse altre schede e, purtroppo, le voci sono diverse.
    Purtroppo le celle sono state customizzate dall'operatore al bisogno in funzione della tipologia di articolo, non considerando di tenere standard il modello.
    Per recuperare le informazioni, devo confrontarmi con il referente, in modo tale da individuare tutte le possibili casistiche e fornire questa informazione più precisa.
    Per quanto riguarda adattare la MACRO per individuare le schede con lo stesso modello, ho capito come funziona e la sto adattando per individuare i vari formati.
    Credo che ci impiegherò tempo, appena ho una situazione, La aggiorno.
    Grazie!


    Lorenza
    Excel 97-2003
    Excel 2007
  • OFFLINE
    by sal
    Post: 6.732
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 31/03/2022 11:54
    Ciao Lorenza, fai un elenco o tabella per ogni formato che riesci a trovare, in questo modo contando i codici trovati, riesci a sapere quanti sono fuori formato, e puoi anche estrapolare i codici rimasti

    apetto notizie. Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui