Condividi:        

Info macro database in Excel

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

Info macro database in Excel

Postdi osvaldino70 » 17/02/08 14:01

Salve a tutti, lavoro come grafico, sono nuovo del forum e cerco di imparare Excel!
Con delle funzioni sono riuscito a combinare qualcosa, ma mi sono reso conto che c'è un limite e che per realizzare quello che voglio in modo affidabile devo ripartire da capo utilizzando delle macro!
Finora quel che so di VB si limita a registrare una macro per poi studiarne il codice... ma spero che qualcuno mi possa dare una mano e ringrazio in anticipo.

Da un gestionale mi arriva un file .xls con 5 colonne, A=Cod.Articolo B=Produttore C=breve descrizione D=giacenze E=prezzo... le righe e quindi i prodotti saranno circa 2000. A questi campi devo aggiungere a mano anche una descrizione dettagliata, pesi, misure e altri dati questi ultimi però riesco a estrapolarli dalla prime 5 colonne.

Mi servirebbe una macro che mi copi in un nuovo file (Foglio1; A:E) queste 5 colonne ma mi verifichi che non siano gia presenti (Cod. Articolo che è univoco)... se si, mi sovrascriva i campi (così da aggionare giacenze e prezzi) e se non, mi accodi gli articoli nuovi alle righe già scritte.

Spero di essermi spiegato decentemente...

Ciao a tutti e buona domenica
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Sponsor
 

Re: Info macro database in Excel

Postdi Anthony47 » 17/02/08 20:16

Ciao osvaldino e benvenuto nel forum.

Puoi ottenere quasi tutto da solo, vediamo come.
Salva il file che ricevi dal gestionale con un nome fisso, diciamo PIPPO.xls
Supponiamo che il secondo file si chiami Riepilogo.xls
Nel file Riepilogo, occupa la riga 1 con i titoli di colonna, poi in una colonna libera (diciamo la N), inserisci questa formula in N1 (partire da N1 serve per la macro successiva):
Codice: Seleziona tutto
=SE(A1="";"";CONTA.SE('[PIPPO.xls]Foglio1'!$A:$A;A1))

copia poi questa formula verso il basso per tutte le righe gia’ presenti in Riepilogo.

In questo modo potrai contare quante volte quel Cod. Articolo e’ presente nel file Pippo.
Applica il filtro automatico alla colonna N (Seleziona tutta la colonna, poi Menu /Dati /Filtro /Filtro automatico); clicca sulla freccina che compare su N1, scegli Personalizza, come criterio scegli “diverso da” e come valore scrivi 0 (se sei sicuro che nel file PIPPO non sia possibile avere 2 volte lo stesso Cod Articolo puoi anche scegliere “Uguale a” 1); completa con Ok.
A questo punto vedi tutte le righe di Riepilogo che esistono nel file Pippo, e da quello che hai detto le devi eliminare: seleziona tutte le righe, poi Menu /Modifica /Elimina righe.
Togli il filtro (Menu /Dati /Filtro /Mostra tutto.
Vai sul foglio Pippo, seleziona e copia le celle dei dati; vai sul foglio Riepilogo in coda ai dati presenti, e fai Menu /Modifica /Incolla speciale, spunta “Valori” completi con Ok; infine copia la formula di colonna N dall’ ultima riga che la contiene fino alla fine dei nuovi dati.

Quando riceverai il prossimo file dal gestionale, lo salvi col nome PIPPO (sovrascrivendo il vecchio) e ripeti l’ operazione, dall’ applicazione del filto in avanti.

Se vuoi automatizzare, lo fai con una macro autoregistrata:
- file Riepilogo e Pippo gia’ aperti; Pippo foglio attivo
- formula in col N gia’ inserita
-avvii la registrazione di una macro tramite Menu /Strumenti /Macro /Registra nuova macro; lasci il nome che ti propone, imposti come “tasto di scelta rapida” R (maiuscolo, R come Riepilogo), avvii con Ok.
-a questo punto:
--selezioni Riepilogo
--esegui passo dopo passo le istruzioni date, e cioe’
---imposti il filtro su N1
---selezioni tutte le righe con dati piu’ la successiva bianca
---elimini le righe
---togli il filtro
---vai sul foglio Pippo
---selezioni tutte le celle con dati e le copi
---vai sul foglio Riepilogo
---selezioni la prima cella libera di col A, dopo i dati presenti
---fai Incolla-speciale/valori, premi Escare
--fermi la registrazione con Menu /Strumenti /Macro /Interrompi registrazione

A questo punto devi fare alcune modifiche al codice della macro:
-fai Menu /Strumenti /Macro /Macro; scegli il nome della macro registrata e premi Modifica; ti si apre l’ editor delle macro.
-cerca l’ istruzione Windows("pippo.xls").Activate; l’ istruzione successiva dovrebbe essere qualcosa tipo Range("A1:G36").Select, dove A1:G36 sono il tuo range selezionato, da incollare su Riepilogo.
-sostituisci questa istruzione con
Codice: Seleziona tutto
Range(Range("A1"), Range("G65536").End(xlUp)).Select

--se riga 1 contiene i titoli (da non portare su Riepilogo), il range iniziale sarebbe stato A2:G36, e nella formula da sostituire userai analogamente A2 al posto di A1; se l’ ultima colonna non e’ G, usa il suo vero valore al posto di G65536 (es “F65536” per colonna F)
- cerca l’ istruzione Windows("Riepilogo.xls").Activate; l’ istruzione successiva dovrebbe essere qualcosa tipo Range("A1000").Select, dove A1000 e’ la cella libera su cui hai incollato i dati provenienti da Pippo
-sostituisci l’ istruzione Range("A1000").Select con
Codice: Seleziona tutto
Range("A65536").End(xlUp)).offset(1,0).Select

-vai in fondo, e subito prima di End Sub inserici queste:
Codice: Seleziona tutto
LR = Range("A65536").End(xlUp).Row
Range("N1").Copy Destination:=Range(Range("N2"), Range("N2").Offset(LR, 0))


That’s all
Puoi subito collaudare la procedura, tornado su excel e premendo Contr-Maiusc-r, che dovrebbe far partire la macro.

Come sempre, prima di fare esperimenti fai 2 COPIE di BACKUP dei tuoi file.

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Info macro database in Excel

Postdi osvaldino70 » 17/02/08 21:50

Beh intanto grazie... ma se io cancello quello che mi mostra il filtro, cancello quello che mi serve, cioè io voglio mantenere la posizione di riga che ho dei prodotti in Riepilogo ed è esattamente il contrario dio quello che voglio.
Voglio mantenere la posizione perchè nella stessa riga (tutto riportato nel foglio2 con le modifiche che mi occorrono esportare il tutto) ho anche la descrizione e altri dati che ho inserito a mano e quindi mi si sfalserebbero.
Forse mi spiego meglio così:

Mettiamo che nel mio file esterno (Pippo) ho circa 1000 righe in 5 colonne (A:E), mentre nel mio foglio1(Riepilogo) di un nuovo file ho circa già 200 righe compilate a mano in 5 colonne(A:E).

Vorrei realizzare una macro che con un ciclo mi controlla se A1 del mio file esterno è gia presente nella colonna A di Foglio1 e:

- se è già presente mi copia il range A1:E1 del file esterno in Foglio1 nella posizione in cui e si trova in questo ultimo foglio, quindi lo sovrascrive.

- se non è già presente mi copia sempre il range A1:E1 del file esterno nella prima riga libera sotto nel Foglio1.

Poi il ciclo continua fino all'ultima riga scritta del file esterno (circa A1000).

Ciao a tutti e mi spiace non essermi chiarito prima.
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi osvaldino70 » 17/02/08 21:56

Anzi prima di questo ciclo dovrei fare il contrario per verificare che dal file esterno che mi arriva dal gestionale abbiano eliminato dei prodotti.
Controllare che i prodotti che sono già inseriti in Riepilogo siano ancora presenti in Pippo:

- Se si lascia tutto com'è.

- Se non sono più presenti elimina la riga dove si trova spostando le celle in alto in Pippo, Foglio2 e Foglio3 così da cancella re completamente l'articolo.

Ma credo mi basti sapere come fare la prima parte... poi ci dovrei riuscire da solo no?
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi osvaldino70 » 17/02/08 22:01

Ho sbagliato intendevo:
- Se non sono più presenti elimina la riga dove si trova spostando le celle in alto in Riepilogo, Foglio2 e Foglio3 così da cancella re completamente l'articolo.
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi Anthony47 » 18/02/08 02:29

Non ho ancora capito bene, e anche la terminologia aiuta a confondermi.
Parliamo di file per intendere una “cartella di lavoro” fatta di uno o piu' “fogli”; quindi se usi una volta “file esterno (Pippo)” e lo contrapponi a “foglio1 (Riepilogo)” io non sono certo di quello che dici (vedi la frase “Mettiamo che nel mio file esterno (Pippo) ho circa 1000 righe in 5 colonne (A:E), mentre nel mio foglio1(Riepilogo) di un nuovo file ho circa già 200 righe. . .”). Per me Pippo.xls e Riepilogo.xls sono due file excel distinti, il primo proveniente dal gestionale, il secondo costruito da te, e che vogliamo aggiornare di tanto in tanto.
Come pure non capisco la frase (continuazione di quella citata) “nel mio foglio1(Riepilogo) di un nuovo file ho circa già 200 righe compilate a mano in 5 colonne(A:E).”; questo perche’ nel tuo primo messaggio si dice che le colone A:E sono quelle esportate dal gestionale (A=Cod.Articolo B=Produttore C=breve descrizione D=giacenze E=prezzo)
Parli anche di un “foglio2/Foglio2”; qui mi pare che il riferimento sia a un foglio del file Riepilogo contenente le informazioni aggiunte a mano. Ma parli anche di un Foglio3 di cui non descrivi niente.

La stessa frase (“Mettiamo che nel mio file esterno (Pippo) ho circa 1000 righe in 5 colonne (A:E), mentre nel mio foglio1(Riepilogo) di un nuovo file ho circa già 200 righe”) confonde anche su un altro fronte; cioe’ quando fai riferimento alla verifica da fare “per verificare che dal file esterno che mi arriva dal gestionale abbiano eliminato dei prodotti”. A questo punto, infatti, mi aspetterei che il file ricevuto dal gestionale (Pippo) sia di lunghezza uguale o inferiore a quello del Riepilogo, comunque non di dimensione cosi’ drasticamente diversa.

Leggendo i tuoi messaggi l’ interpretazione che mi e’ sembrata piu’ appropriata e’ la seguente: Riepilogo va tenuto aggiornato con solo i codici contenuti in Pippo, ma completando i dati di Pippo (A=Cod.Articolo B=Produttore C=breve descrizione D=giacenze E=prezzo) con altri dati gia’ presenti su Riepilogo; questo pero’ starebbe in piedi solo se da’ per certo che non ci saranno mai codici nuovi, cosa pero' improbabile.

Ti chiederei pertanto una rivisitazione della descrizione del “che cosa” va fatto, tralasciando al momento la descrizione del “come” pensi che vada fatto; puo’ aiutare il tracciato delle colonne dei singoli fogli del file Riepilogo (se come sembra ne hai piu’ di uno), come pure la conferma che il tracciato di Pippo sia come descritto nel tuo primo messaggio (A=Cod.Articolo B=Produttore C=breve descrizione D=giacenze E=prezzo), oppure il suo tracciato corretto.

Ciao, fatti sentire.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Info macro database in Excel

Postdi osvaldino70 » 18/02/08 08:43

Immaginavo di spiegarmi male... ma cosi no!!!

Dal gestionale mi è arrivato, per il momento essendo una prova, un file con solo 200 prodotti.
Più avanti questo file che invece di "pippo.xls" si chiama e si chiamerà sempre "Articoli_Web_1.xls" è avrà circa 1000-2000 prodotti(da vedere), quindi righe e potra essere modificato 3-4 volte al giorno per aggiornare giacenze e prezzi.
Conterrà tutti i prodotti che andranno venduti online, ci potranno essere sia prodotti già inseriti che prodotti nuovi.
Il file dove importare e che ho creato nuovo si chiama "Dati Catalogo.xls", questo file contiene 3 fogli: Filtro (invece di Riepilogo) Catalogo ed Export.
Prima di chiamarsi Filtro il primo foglio lo chiamavo Import perche riportavo esattamente i dati da "Articoli_Web_1.xls" (A2 in A2, B2 in B2 e via dicendo) e con delle formule (SOSTITUISCI) eliminavo certi caratteri che mi davano fastidio.
Nel foglio Catalogo ho 15 colonne dove ricavo i dati che mi servono: I 5 campi da "Articoli_Web_1.xls", 5 derivati dai primi, sito del produttore, nome immagine, categoria 1, categoria 2 e categoria 3. Infine gli altri 5 campi a mano. Ci sono altre colonne ma sono come dire di "servizio" e mi servono per filtrare ulteriormente i dati.
Nel foglio Export invece riporto solo le 15 colonne che mi interessano... salvo solo questo foglio sempre come "Dati Web.txt" per importarlo nel mio programma di e-commerce.
Quando mi arriva il nuovo "Articoli_Web_1.xls" contiene prodotti come già detto sia nuovi che già inseriti... e qui sta il problema: se i prodotti nuovi si inseriscono (molto probabile) tra i prodotti già inseriti, nel foglio Catalogo mi viene sfalsata la descrizione inserita la volta precedente.
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi Anthony47 » 18/02/08 17:13

L’ organizzazione che io darei e’ la seguente.
Ti fai un nuovo file, diciamo WORK.xls; in Foglio1 inserisci su riga 1 le intestazioni e su riga 2 le formule che prelevano i dati da Articoli_Web_1.xls, gia’ inserendo i “sostituisci” per eliminare i caratteri che danno fastidio; questo nelle colonne A-B-C-D-E (cioe’ tutti i campi che ti esporta il gestionale).
Nelle colonne adiacenti (F-G-..) inserisci formule Cerca.vert per prelevare dal file Dati Catalogo.xls i campi aggiuntivi, che mi pare siano spalmati sui fogli Filtro, Catalogo ed Export, usando la chiave Codice Articolo.
Copia le formule di riga 2 sulle righe sottostanti, per quante sono le righe su Articoli_Web_1.xls; per svincolarci da questo controllo potresti usare la formulazione =SE([Articoli_Web_1.xls]Foglio1!$A$2="";"";[ Articoli_Web_1.xls]Foglio1!$A$2) cosi’ puoi mettere le formule su quante righe vuoi; questo anche per le formule con Cerca.Vert.

In questo modo dovresti creare su Foglio1 di Work.xls un riepilogo aggiornato dei tuoi dati, anche se non ancora organizzati come te li sei immaginati.
Su Work.xls, assegna a un foglio il nome “Formule”, poi copia in questo foglio la riga 2 delle formule posizionate su Foglio1; dai alle celle occupate il nome “Formule1” (con la procedura Menu /Inserisci /Nome /Definisci . . . ); queste formule saranno usate dalla macro.

Per controllare che tutti gli articoli abbiano correttamente compilati i campi in col F-G-. . . ., in una cella di Foglio1 (ad esempio in Z1) inserisci la formula =CONTA.SE(F:I;"#N/D") (invece di F:I userai ovviamente le colonne effettivamente usate); un valore diverso da 0 significa che ci sono nuovi Codici Articoli che non esistono ancora nel tuo vecchio “Dati catalogo.xls”, che quindi dovrai riempire a mano o con altre tecniche; opzionalmente puoi usare questo contatore anche per colorare in Rosso le intestazioni del foglio, se il contatore e’ >0, per avere subito l’ evidenza di errori da gestire.

A questo punto, l’ evoluzione piu’ appropriata per Work.xls (e’ sempre la mia opinione...) e’ di creare 3 fogli che, attingendo a Foglio1 visualizzano i dati come li vuoi mantenere su “Dati Catalogo.xls”, che quindi sara’ l’ immagine congelata di Work.xls; per questo bastera’ inserire su Foglio2 formule che replicano le colonne di Foglio1 che ti interessano, idem per Foglio3 e per Foglio4.
Come gia’ fatto per le formule di Foglio1, copia le formule di Foglio2-3-4 sul foglio “Formule” e chiama quei range con i nomi “Formule2”, “Formule3” e “Formule4”.

Le macro.
Se per le formule puoi usare sempre la formulazione =se(Campo di controllo=””;””;Copia o Prendi il dato), e copiare queste formule su un numero di righe sempre superiore al numero di righe che dovrai gestire, allora possiamo fare una unica macro che, quando Work.xls e’ completo e integro, copia i dati dai 3 fogli di Work (Foglio2-3-4) sui fogli di Dati Catalogo.xls; la macro la registri mentre esegui passo passo le dette operazioni, e cioe’:
-attivi il file Work (partendo da altro file attivo)
-attivi Foglio1 (partendo da altro foglio attivo)
-attivi Foglio2
-copi l’ intero foglio
-attivi il file Dati Catalogo
-attivi il primo foglio (partendo da altro foglio)
-selezioni A1
-fai “Incolla speciale/valori” seguito da “Incolla speciale/Formati”
-torni su file Work, e ripeti per gli ulteriori fogli.

All' inizio di questa macro, subito dopo l' istruzione che attiva Foglio1 di Work, inseriamo le istruzioni:
Codice: Seleziona tutto
If Range("Z1").value>0 then
Msgbox("Ci sono delle celle #N/D da gestire")
Exit Sub
End If

Come intuisci, queste hanno lo scopo di segnalare che ci sono condizioni di errore ancora da gestire; pertanto invece di "Z1" dovrai usare l' indirizzo della cella in cui hai effettivamente inserito la formula che conta i #N/D.

Se invece non puoi mettere formule su un numero sufficiente di righe usando la formulazione =se(Campo di controllo=””;””;etc etc (pero’ io mi aspetto che questa rimanga un’ ipotesi puramente teorica), allora avendo accantonato sul foglio Formule le formule dei singoli fogli e’ un attimo inserire sui fogli di Work tutte le formule che servono.

Rimane il dubbio su come gestire voci che sono su Dati Catalogo.xls e che non siano piu’ presenti su un nuovo Articoli_Web_1.xls; la mia proposta e’ di non cancellarli, visto che contegono dati aggiunti a mano, ma di marcarli come Obsoleti e archiviarli su uno o piu’ fogli aggiuntivi di Dati Catalogo.xls; quanto descritto prima non fa questa gestione, decidi tu se ha senso e poi la implementiamo.

Se invece non ti sembra che l’ organizzazione proposta faccia al caso tuo, non disperare perche’ ti daro’ i builging blocks per costruire le macro come te le sei immaginate.

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

Re: Info macro database in Excel

Postdi osvaldino70 » 18/02/08 21:40

Scusa Anthony47, intanto molte grazie, sono sicuro che tu hai già visto oltre, ma non mi bastano una di macro che completi il lavoro che ho già impostato?
Un macro unica che nel foglio Filtro (Dati catalogo.xls) prima mi vada a cercare i cod.articolo della colonna A del foglio Catalogo in Articoli_Web_1.xls (A:A)se non li trova più sigifica che non sono più in vendita e quindi elimina la riga intera in Filtro, Catalogo e in Export. Se non sono momentaneamente disponibili sono le giacenze a 0 che lo determinano.
La parte seguente della macro verifica che i cod.articolo nella colonna A di Articoli_Web_1.xls siano presenti nella colonna A del foglio Filtro, per cominciare ne trova già circa 200 che copierò io per inziare senza valori così da congelarli.
Quelli già presenti, copia il range A:E della riga relativa nella posizione che già hanno in Filtro per non sfalsare le descrizioni negli altri due fogli e così aggiorna prezzi e giacenze.
Quelli invece che non sono presenti li va ad accodare agli esistenti in Filtro (copia sempre A:E e incolla solo valori).
Chiaro che mi devi dare un imput per questa macro, ho visto come trovi l'ultima riga, come eliminare una riga intera, selezionare... ma a creare la macro da solo la vedo dura.

Di nuovo grazie
Ciao
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi Anthony47 » 18/02/08 22:06

Ma infatti io sto' mantenendo il lavoro gia' fatto, essenzialmente l' organizzazione dei dati nel file Dati catalogo.xls.
Quello che ti ho proposto e' il modo di ottenere quel risultato, con un file di lavoro (Work.xls) e poi la semplice copia dei fogli di Work in Dati catalogo; mi pare che cosi' lo potresti fare integralmente con quello che conosci di excel + la macro autoregistrata + l' integrazione di 4 istruzioni che non sono registrabili. E' troppo semplice?

O quello che ti ho proposto porta a un risultato diverso da quello che devi ottenere? (e' una domanda vera, non retorica!).

Ciao, ti aspetto.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Info macro database in Excel

Postdi osvaldino70 » 18/02/08 22:39

Ma per te forse è semplice... ti dico che faccio fatica a seguirti e quindi non riesco a capire tutto il ragionamento dove mi porta!
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi Anthony47 » 19/02/08 01:48

Scusa, dal tono del primo post ho dato per scontato una buona conoscenza di excel e non mi sono preoccupato quindi di rendere piu' semplice il mio discorso...
Il file Work.xls vorrebbe essere al centro tra il file che ricevi periodicamente dal gestionale (Articoli_Web_1.xls) e l' archivio che ti sei costruito (Dati catalogo.xls), ed e' anche la sorgente da cui aggiorni questo archivio.
I dati di Articoli_Web_1 li importi su Foglio1 di Work.xls con delle formule semplici quali
Codice: Seleziona tutto
A2 =[Articoli_Web_1.xls]Foglio1!A2
, che poi copi fino alla colonna E, e poi in vericale fino all' ultima riga presente su Articoli_Web_1.
Volendo, ed e' quello che ho suggerito, puoi fare delle formule un po' piu' articolate per poterle inserire su un numero di righe lungo a piacere, in modo da averne abbastanza per gestire tutte le righe che potrai ricevere dal gestionale; queste sono le formule del tipo
Codice: Seleziona tutto
A2 =SE([Articoli_Web_1.xls]Foglio1!A2="";"";[ Articoli_Web_1.xls]Foglio1!A2)

(avrai notato che tra le formule suggerite nel post precedente e quelle che scrivo adesso mancano i simboli $ nell' indirizzo; questo e' per poterle copiare direttamente sulle colonne adiacenti alla A e nelle righe sottostanti la 2)

Molte informazioni pero' sono presenti sul file Dati catalogo.xls; se, come credo, i fogli di Dati Catalogo.xls hanno in col. A il Cod Articolo allora puoi portare in col F di Foglio1 di Work il contenuto di Col F del foglio Filtro di Dati Catalogo.xls con una formula tipo
Codice: Seleziona tutto
F2 =CERCA.VERT($A2;[DATI CATALOGO.xls]Filtro!$A:$J;6;0)

Oppure, per rendere la formula slegata dal numero di righe che contengono dati e quindi preparare un Work.xls generico,
Codice: Seleziona tutto
F2  =SE($A2="";"";CERCA.VERT($A2;[DATI CATALOGO.xls]Filtro!$A:$J;6;0))

Nota l' uso dei $ sugli indirizzi: $A2 rende fissa la colonna A, che contiene la chiave di ricerca, anche quando copi la formula in col G e successive; invece "2" (di $A2) cambiera' in 3-4-etc man mano che copi sulle righe sottostanti.
Analogamente $A:$J rimane fisso quando copi su col G e successive.
Ma penso che l' uso degli indirizzi "fissi" e "relativi" ti siano familiari.
La formula usa come "indice" il valore 6, cosi' prendera' il valore di col F; dopo che hai copiato la formula sulle colonne successive dovrai cambiare questo indice, per prelevare le colonne che ti servono.

Su Foglio1 di Work.xls porterai, con le formule del Cerca.vert, tutti i dati che hai spalmato sui vari fogli di Dati Catalogo.xls.
Ovviamente invece di $A:$J dovrai usare le colonne effettivamente usate sui fogli da cui estrai i dati.

In questo modo, con semplici formule, hai portato su Foglio1 di Work tutti i dati che servono; il meccanismo di =CONTA.SE(F:I;"#N/D") che ho suggerito di mettere in Z1 serve a dare l' evidenza di codici nuovi, i cui dati mancano in Dati Catalogo.xls, e che andranno gestiti (come d' altra parte fai gia' oggi; solo che io suggerisco di anticiparne la gestione su Work).
Con formule altrettanto semplici vai poi a spezzettare i dati su altri 3 fogli di Work, creandoti quindi il layout dei dati che saranno esportati come aggiornamento di Dati catalogo.xls, che sara' fatto con la macro registrata.

Faccio una domanda a nome tuo: perche' questo metodo e' piu' semplice di una macro che lavora direttamente sui dati di Dati Catalogo.xls senza l' intermediazione di Work.xls? Le risposte sono: 1, perche' e' fatto solo con formule excel che penso ti siano piu' familiari, e quindi sono piu' facili da modificare man mano che ti cambieranno le esigenze; 2, perche' lavorare su una unica banca dati (Foglio1 di Work) e' piu' lineare e garantisce un piu' facile allineamento dei dati e un minor rischio di loro corruzione.

Spero di aver chiarito qualcosa, non aver confuso di piu'.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Info macro database in Excel

Postdi osvaldino70 » 19/02/08 09:16

Avevo notato la presenza del $ ma non pensavo potesse essere un errore e per questo anche non capivo.
Se qualcuno si deve scusare sono io per il tempo che rubo... ma a costo di sembrare più ottuso e presuntuoso di quel che sono, non riesco a vedere il vantaggio del metodo che mi consigli nonostante la spiegazione che mi dai alla fine.
Prima di arrivare a questo ho provato più o meno un metodo simile con formule e macro registrate, ma sinceramente mi sembra più lineare farlo con una macro sul foglio filtro tramite un pulsante, come ho spiegato nei precedenti post. Vero che la macro non so da dove cominciarla ma per questo volevo un imput (magari più di un imput)... credo di essere in grado comunque di capire come funziona se devo variare qualcosa.

Ti ringrazio di nuovo

Ciao

Emanuele
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi Anthony47 » 19/02/08 22:33

Resto della mia opinione, comunque ti avevo assicurato anche il supporto per la soluzione vba.
Puoi partire da questa macro:
Codice: Seleziona tutto
Sub PerOsv()
'vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=70950
'
FileArch = "ArchiviOsv.xls"    '<<< Nomi del file di archiviazione
FileGest = "Da-gestionale.xls"     '<<< Nome del file da gestionale
'
'
Windows(FileArch).Activate
'
'Da qui sono opzionali >>
'>>>> Per generare un Foglio di servizio in cui loggare i record eliminati
Worksheets.Add After:=Worksheets(Worksheets.Count)
NomeSh = Format(Now(), "yy-mm-dd_hh-mm-ss")
ActiveSheet.Name = NomeSh
MsgBox ("Generato foglio di log per record cancellati")
Ctr = 0
'<< a qui
'
'Elimina i record non piu’ presenti nel gestionale  -BLOCCO A-
Sheets("Filtro").Activate
LastRow = Range("A65536").End(xlUp).Row
For I = LastRow To 2 Step -1
Range("A1").Offset(I - 1, 0).Select
Presen = Application.WorksheetFunction.CountIf(Workbooks(FileGest).Sheets("Foglio1").Range("A:A"), ActiveCell.Value)
If Presen = 0 Then
ActiveCell.EntireRow.Copy Destination:=Sheets(NomeSh).Range("A1").Offset(Ctr, 0)  '<<< Opzionale per log record cancellati
ActiveCell.EntireRow.Delete
Ctr = Ctr + 1
'MsgBox ("Cancellato!")
End If
Next I
'
'Ripetere sugli altri Fogli, modificando nome foglio in Sheets("Filtro").Activate
'
'
'Aggiorna foglio Filtro con i valori del file di input –Blocco B-
Windows(FileArch).Activate
Sheets("Filtro").Activate
LastRow = Range("A65536").End(xlUp).Row
For I = LastRow To 2 Step -1
Range("A1").Offset(I - 1, 0).Select
Posit = Application.WorksheetFunction.Match(ActiveCell.Value, Workbooks(FileGest).Sheets("Foglio1").Range("A:A"), 0)
Workbooks(FileGest).Sheets("Foglio1").Range("A1").Offset(Posit - 1, 0).Range("A1:E1").Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next I
'
'Appende su Filtro i nuovi codici     -Blocco C-   
Application.ScreenUpdating = True
Windows(FileGest).Activate
Sheets("Foglio1").Activate
LastRow = Range("A65536").End(xlUp).Row
For I = 1 To LastRow
Range("A1").Offset(I, 0).Select
Presen=Application.WorksheetFunction.CountIf(Workbooks(FileArch).Sheets("Filtro").Range("A:A"), ActiveCell.Value)
If Presen = 0 Then
ActiveCell.Range("A1:E1").Copy Destination:=Workbooks(FileArch).Sheets("Filtro").Range("A65536").End(xlUp).Offset(1, 0)
'MsgBox ("Aggiunto")
End If
Next I
MsgBox ("E' tutto...")
'
End Sub


Guarda le istruzioni in cima marcate <<< e modficale con i veri nomi di file che userai; a seguire c’ e’ un blocco di istruzioni legate al log dei record cancellati dal foglio Filtro, se sei sicuro che non ti interessa cancellale e cancella pure l’ istruzione che trovi marcata “<<< Opzionale per log record cancellati”.
Le istruzioni del BLOCCO A servono per cancellare da Filtro le righe non piu’ presenti nel gestionale; sono da ripetere N volte, per quanti sono i fogli del tuo file su cui vuoi fare la stessa cosa (cioe’ devi riscriverle accodandole alle esistenti, modificando ovviamente il foglio attivato (vedi Sheets("Filtro").Activate)

Le istruzioni del Blocco B sostituiscono i dati su Filtro attingendo al file gestionale.
Le istruzioni del Blocco C servono per appendere su Filtro i Codici non ancora presenti.

Il foglio di log, se creato, puo’ essere utilizzato per verificare che cosa e’ stato tolto da Filtro e dagli altri fogli; finito il lavoro puo’ essere rimosso, per evitare la proliferazione di fogli.

Penso che ci sia tutto quello che ti serve; ho fatto un collaudo decoroso ma non esaustivo, quindi (mi raccomando) fai le classiche due copie di backup dei tuoi file; poi prova e fai sapete.

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

Re: Info macro database in Excel

Postdi osvaldino70 » 19/02/08 22:52

Tii faccio i complimenti per la tua preparazione e pazienza nel seguirmi e ti ringrazio vivamente, ora non riesco ma domani mattina la prima cosa che faccio è provare.

Notte

Emanuele
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi osvaldino70 » 20/02/08 11:04

mmm... se per provare elimino la seconda riga, quindi il primo articolo da Articoli_Web_1 e poi eseguo la macro mi fa un casino. Ci mette un pò di tempo e mi cancella tutti i prodotti.
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi osvaldino70 » 20/02/08 11:20

Pardon! Mi fa questo se ricopio le righe di codice che cancellano per gli atri due fogli e modificando Sheets("nomefoglio").Activate
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi osvaldino70 » 20/02/08 16:14

Sto procedendo comunque in entrambe le direzioni che mi hai indicato.
Con l'uso solo della macro mi da quel tipo di problema... con il primo sistema che mi hai esposto invece credo o di essere io (facile) che non capisco perchè devo reicollare i dati in Dati Catalogo.xls o che non avendo presente cosa ho nei miei fogli abbia interpretato erroneamente tu (difficile)... se in privato mi puoi passare una mail ti invio il file ridotto così puoi capire meglio!
Se non risolvo questa cosa non riesco a procedere in nessuna direzione del mio lavoro ma standoci sopra sono sempre più fuso... ciao!
osvaldino70
Utente Junior
 
Post: 22
Iscritto il: 17/02/08 13:02
Località: Caorle

Re: Info macro database in Excel

Postdi Anthony47 » 20/02/08 20:44

Vedi mp.
Per i record cancellati, la macro assume di lavorare su Cod Articolo in col. A; i codici devono essere assolutamente uguali, se no quelli sull' archivio vengono dichiarati non piu' presenti nel gestionale e rimossi.

Per la domanda sui dati da prelevare da Dati catalogo e mettere su Work: intanto non devi incollarli, ma prelevarli con Cerca.Vert; il motivo e' semplice: Dati catalogo sara' popolato con i dati presenti su Works, se non porti su Works tutte le informazioni che gia' hai le perderesti.

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

Re: Info macro database in Excel

Postdi Anthony47 » 20/02/08 20:57

Dicendo "i codici devono essere assolutamente uguali" volevo intendere "uguali come come stringa del singolo codice", non la posizione in elenco o la sequenza. E' possibile che quelli in archivio siano stati depurati di caratteri spuri, con la SOSTITUISCI di cui avevi scritto nel post del 18 mattina?

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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Info macro database in Excel":


Chi c’è in linea

Visitano il forum: Nessuno e 96 ospiti