Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

ESTRAPOLAZIONE INFORMAZIONI DA FOGLI XLSX PER CREAZIONE DATA BASE

Ultimo Aggiornamento: 31/03/2022 11:54
Post: 7
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 4.816
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
28/03/2022 14:14

Ciao

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

Alfredo
Post: 7
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 4.817
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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
Post: 6.725
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 8
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 6.726
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 9
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 4.818
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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
Post: 10
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 6.727
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 4.819
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
29/03/2022 13:19

Lorenza io sono in attesa di sapere perchè hai detto che la mia macro non funziona

Alfredo
Post: 11
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 12
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 4.820
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
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
Post: 6.728
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 13
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
30/03/2022 12:03

Grazie Sal!
Appena ho un attimo mi applico e mando feedback.
Buona giornata
Lorenza
Excel 97-2003
Excel 2007
Post: 6.729
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 14
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 6.730
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Post: 15
Registrato il: 23/01/2014
Età: 43
Utente Junior
97-2003
OFFLINE
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
Post: 6.732
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
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
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 08:56. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com