Condividi:        

Re: CREAZIONE DI PIU DATABASE

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

Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 11/01/16 20:01

Salve a tutti ,
ho bisogno di una mano per creare un database su più fogli di lavoro nella stessa cartella excel, spiego :


attualmente il mio database funziona cosi :
gira su EXCEL 2010 con VBA su un WIN7

ho un report da compilare che è il mio verbale di prelievo (nomefoglio ORIGINALE). una volta compilato premo il bottone SALVA e la macro ad esso collegato salva il report nel database (nomefoglio DATABASE). Il suddetto report io lo posso richiamare con il bottone ESTRAI e la macro estrae dal database il numero del verbale di prelievo che mi serve per permettermi di modificare o aggiornare i dati in esso contenuti.

fin qui tutto è ok.
Vorrei apportare una miglioria che mi serve per distinguere i dati del database poiche i dati contenuti in esso sono dati relativi a 3 impianti di produzione diversi (A , B , C ) . Io vorrei che ogni qual volta che premo il bottone SALVA in automatico la macro legge l'impianto a cui si riferisce il verbale di prelievo e me lo salva nel relativo database. Ovviamente deve valere lo stesso discorso per l'estrazione del report di riferimento che mi occorre modificare.

es. se mi serve modificare il report 1254 , quando clicco su ESTRAI lui deve cercare il numero del report nei 3 database per trovare quello giusto.

Vi posto qui le macro SALVA e ESTRAI in modo che possiate capirci qualcosa e darmi una mano.

Codice: Seleziona tutto
Sub SALVAinDB()
'
' prova Macro
'
Dim rigaDB
Dim MsgDB As String
rigaDB = 0

If Sheets("ORIGINALE").Range("ei4").Value <> "" Then
MsgDB = MsgBox("Confermi la sovrascrittura della ricetta N° " & Sheets("ORIGINALE").Range("ei4").Value & "?", vbYesNo)
If MsgDB = vbNo Then
End
Else
If Not (MsgDB = MsgBox("Sicuro?", vbYesNo)) Then
End
End If
End If
rigaDB = CercainDB(Sheets("ORIGINALE").Range("ei4").Value)
End If

If rigaDB = 0 Then
rigaDB = 2
Sheets("Database").Select
Range("a2").Select
Selection.EntireRow.Insert
Range("A3:AT3").Select
Selection.Copy
Range("A2").Select
ActiveSheet.Paste
Rows("2").EntireRow.AutoFit
Selection.ClearContents
Range("a2").Value = Range("a3").Value + 1

End If

'copia dati da ORIGINALE a Database
'copia la data
Sheets("database").Cells(rigaDB, 2).Value = Sheets("ORIGINALE").Range("DD4").Value
'copia IL PRELIEVO
Sheets("database").Cells(rigaDB, 3).Value = Sheets("ORIGINALE").Range("CQ4").Value
'copia l'IMPIANTO
Sheets("database").Cells(rigaDB, 4).Value = Sheets("ORIGINALE").Range("AU6").Value
'copia IMPRESA
Sheets("database").Cells(rigaDB, 5).Value = Sheets("ORIGINALE").Range("T9").Value
'copia CANTIERE
Sheets("database").Cells(rigaDB, 6).Value = Sheets("ORIGINALE").Range("CN9").Value
'copia CAMPIONAMENTO
Sheets("database").Cells(rigaDB, 7).Value = Sheets("ORIGINALE").Range("EI11").Value
'copia ATB
Sheets("database").Cells(rigaDB, 8).Value = Sheets("ORIGINALE").Range("AJ15").Value
'copia MANOMETRO
Sheets("database").Cells(rigaDB, 9).Value = Sheets("ORIGINALE").Range("CZ15").Value
'copia PUNTO DI CARICO
Sheets("database").Cells(rigaDB, 10).Value = Sheets("ORIGINALE").Range("Z17").Value
'copia IL DDT
Sheets("database").Cells(rigaDB, 11).Value = Sheets("ORIGINALE").Range("CA17").Value
'copia IL TIPO DI GETTO
Sheets("database").Cells(rigaDB, 12).Value = Sheets("ORIGINALE").Range("EI19").Value
'copia RCK
Sheets("database").Cells(rigaDB, 13).Value = Sheets("ORIGINALE").Range("BH35").Value
'copia DMAX
Sheets("database").Cells(rigaDB, 14).Value = Sheets("ORIGINALE").Range("DL35").Value
'copia COMPATTAZIONE
Sheets("database").Cells(rigaDB, 15).Value = Sheets("ORIGINALE").Range("EI21").Value
'copia TIPO DI CEMENTO
Sheets("database").Cells(rigaDB, 16).Value = Sheets("ORIGINALE").Range("W37").Value
'copia ALTRE CARATTERISTICHE
Sheets("database").Cells(rigaDB, 17).Value = Sheets("ORIGINALE").Range("CM37").Value
'copia TARA
Sheets("database").Cells(rigaDB, 18).Value = Sheets("ORIGINALE").Range("O47").Value
'copia LORDO
Sheets("database").Cells(rigaDB, 19).Value = Sheets("ORIGINALE").Range("AT47").Value
'copia CONSISTENZA
Sheets("database").Cells(rigaDB, 20).Value = Sheets("ORIGINALE").Range("EI17").Value
'copia SLUMP
Sheets("database").Cells(rigaDB, 21).Value = Sheets("ORIGINALE").Range("DM39").Value
'copia N°PROVINI
Sheets("database").Cells(rigaDB, 22).Value = Sheets("ORIGINALE").Range("S43").Value
'copia DIM.PROVINI
Sheets("database").Cells(rigaDB, 23).Value = Sheets("ORIGINALE").Range("AZ43").Value
'copia ORA
Sheets("database").Cells(rigaDB, 24).Value = Sheets("ORIGINALE").Range("DC51").Value
'copia SCADENZA1
Sheets("database").Cells(rigaDB, 25).Value = Sheets("ORIGINALE").Range("AB67").Value
'copia SCADENZA2
Sheets("database").Cells(rigaDB, 26).Value = Sheets("ORIGINALE").Range("AB69").Value
'copia SCADENZA3
Sheets("database").Cells(rigaDB, 27).Value = Sheets("ORIGINALE").Range("AB71").Value
'copia SCADENZA4
Sheets("database").Cells(rigaDB, 28).Value = Sheets("ORIGINALE").Range("AB73").Value
'copia PESO1 SCADENZA1
Sheets("database").Cells(rigaDB, 29).Value = Sheets("ORIGINALE").Range("AT67").Value
'copia PESO2 SCADENZA1
Sheets("database").Cells(rigaDB, 30).Value = Sheets("ORIGINALE").Range("CD67").Value
'copia PESO1 SCADENZA2
Sheets("database").Cells(rigaDB, 31).Value = Sheets("ORIGINALE").Range("AT69").Value
'copia PESO2 SCADENZA2
Sheets("database").Cells(rigaDB, 32).Value = Sheets("ORIGINALE").Range("CD69").Value
'copia PESO1 SCADENZA3
Sheets("database").Cells(rigaDB, 33).Value = Sheets("ORIGINALE").Range("AT71").Value
'copia PESO2 SCADENZA3
Sheets("database").Cells(rigaDB, 34).Value = Sheets("ORIGINALE").Range("CD71").Value
'copia PESO1 SCADENZA4
Sheets("database").Cells(rigaDB, 35).Value = Sheets("ORIGINALE").Range("AT73").Value
'copia PESO2 SCADENZA4
Sheets("database").Cells(rigaDB, 36).Value = Sheets("ORIGINALE").Range("CD73").Value
'copia rm1 SCADENZA1
Sheets("database").Cells(rigaDB, 38).Value = Sheets("ORIGINALE").Range("bl67").Value
'copia rm2 SCADENZA1
Sheets("database").Cells(rigaDB, 39).Value = Sheets("ORIGINALE").Range("cv67").Value
'copia rm1 SCADENZA2
Sheets("database").Cells(rigaDB, 40).Value = Sheets("ORIGINALE").Range("bl69").Value
'copia rm2 SCADENZA2
Sheets("database").Cells(rigaDB, 41).Value = Sheets("ORIGINALE").Range("cv69").Value
'copia rm1 SCADENZA3
Sheets("database").Cells(rigaDB, 42).Value = Sheets("ORIGINALE").Range("bl71").Value
'copia rm2 SCADENZA3
Sheets("database").Cells(rigaDB, 43).Value = Sheets("ORIGINALE").Range("Cv71").Value
'copia rm1 SCADENZA4
Sheets("database").Cells(rigaDB, 44).Value = Sheets("ORIGINALE").Range("BL73").Value
'copia rm2 SCADENZA4
Sheets("database").Cells(rigaDB, 45).Value = Sheets("ORIGINALE").Range("CV73").Value
'copia OSSERVAZIONI
Sheets("database").Cells(rigaDB, 46).Value = Sheets("ORIGINALE").Range("F76").Value
'copia MC CARICATI
Sheets("database").Cells(rigaDB, 47).Value = Sheets("ORIGINALE").Range("DV37").Value
'copia TIPO DI ACQUA
Sheets("database").Cells(rigaDB, 48).Value = Sheets("ORIGINALE").Range("EI25").Value
'copia DOSAGGIO CEMENTO
Sheets("database").Cells(rigaDB, 49).Value = Sheets("ORIGINALE").Range("N80").Value
'copia DOSAGGIO CENERE
Sheets("database").Cells(rigaDB, 50).Value = Sheets("ORIGINALE").Range("AE80").Value
'copia TOTALE AGGREGATI
Sheets("database").Cells(rigaDB, 51).Value = Sheets("ORIGINALE").Range("BC80").Value
'copia DOSAGGIO DI ACQUA
Sheets("database").Cells(rigaDB, 52).Value = Sheets("ORIGINALE").Range("BT80").Value

'Compila N° entry DB in ORIGINALE
Sheets("ORIGINALE").Range("EI4").Value = Sheets("database").Cells(rigaDB, 1).Value

Sheets("ORIGINALE").Select

Msg = MsgBox("Vuoi eseguire la stampa della scheda N° " & Sheets("ORIGINALE").Range("EI4").Value & " ?", vbYesNo)
If Msg = vbYes Then
Sheets("ORIGINALE").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End If
End Sub
Public Function CercainDB(SchedaDB As Integer) As Integer
Dim n_MAX
Dim rigaDB
'Dim SchedaDB
Dim Valore
Dim TrovatoinDB As Boolean
Sheets("Database").Select
n_MAX = Range("a2").Value
CercainDB = 0
'Ricerca il numero scheda nella colonna Axx ogni 5 righe
For i = 2 To n_MAX * 5 - 3 Step 1
rigaDB = i
Valore = Sheets("Database").Cells(rigaDB, 1).Value
If Not (Valore <> SchedaDB) Then
TrovatoinDB = True
Exit For
End If
Next

'Se non ha trovato il numero scheda visualizza il messaggio
If Not TrovatoinDB Then
MsgBox ("Numero scheda non trovato")
Sheets("ORIGINALE").Select
End
End If
CercainDB = rigaDB
End Function
Sub Estrai_MIX()
Dim riga
Dim n_MAX
Dim scheda
Dim Valore
Dim Trovato As Boolean

'Se il campo scheda in ORIGINALE è vuoto chiede il numero scheda da estrarre dal DB
'per compilare la scheda imapsti
nscheda:
If Sheets("ORIGINALE").Range("ei4").Value = "" Then
Sheets("ORIGINALE").Range("ei4").Value = InputBox("Inserire il numero scheda")
End If
scheda = Sheets("ORIGINALE").Range("ei4").Value

Sheets("Database").Select
n_MAX = Range("a2").Value

'Ricerca il numero scheda nella colonna Axx ogni 5 righe
For i = 2 To n_MAX * 5 - 3 Step 1
riga = i
Valore = Cells(riga, 1).Value
If Not (Valore <> scheda) Then
Trovato = True
Exit For
End If
Next

'Se non ha trovato il numero scheda visualizza il messaggio
If Not Trovato Then
MsgBox ("Numero scheda non trovato")
Sheets("ORIGINALE").Select
GoTo Fine_Estrai
End If

'copia dati da ORIGINALE a Database

'copia la data
Sheets("ORIGINALE").Range("DD4").Value = Sheets("database").Cells(riga, 2).Value
'copia IL PRELIEVO
Sheets("ORIGINALE").Range("CQ4").Value = Sheets("database").Cells(riga, 3).Value
'copia l'IMPIANTO
Sheets("ORIGINALE").Range("AU6").Value = Sheets("database").Cells(riga, 4).Value
'copia IMPRESA
Sheets("ORIGINALE").Range("T9").Value = Sheets("database").Cells(riga, 5).Value
'copia CANTIERE
Sheets("ORIGINALE").Range("CN9").Value = Sheets("database").Cells(riga, 6).Value
'copia CAMPIONAMENTO
Sheets("ORIGINALE").Range("EI11").Value = Sheets("database").Cells(riga, 7).Value
'copia ATB
Sheets("ORIGINALE").Range("AJ15").Value = Sheets("database").Cells(riga, 8).Value
'copia MANOMETRO
Sheets("ORIGINALE").Range("CZ15").Value = Sheets("database").Cells(riga, 9).Value
'copia PUNTO DI CARICO
Sheets("ORIGINALE").Range("Z17").Value = Sheets("database").Cells(riga, 10).Value
'copia IL DDT
Sheets("ORIGINALE").Range("CA17").Value = Sheets("database").Cells(riga, 11).Value
'copia IL TIPO DI GETTO
Sheets("ORIGINALE").Range("EI19").Value = Sheets("database").Cells(riga, 12).Value
'copia RCK
Sheets("ORIGINALE").Range("BH35").Value = Sheets("database").Cells(riga, 13).Value
'copia DMAX
Sheets("ORIGINALE").Range("DL35").Value = Sheets("database").Cells(riga, 14).Value
'copia COMPATTAZIONE
Sheets("ORIGINALE").Range("EI21").Value = Sheets("database").Cells(riga, 15).Value
'copia TIPO DI CEMENTO
Sheets("ORIGINALE").Range("W37").Value = Sheets("database").Cells(riga, 16).Value
'copia ALTRE CARATTERISTICHE
Sheets("ORIGINALE").Range("CM37").Value = Sheets("database").Cells(riga, 17).Value
'copia TARA
Sheets("ORIGINALE").Range("O47").Value = Sheets("database").Cells(riga, 18).Value
'copia LORDO
Sheets("ORIGINALE").Range("AT47").Value = Sheets("database").Cells(riga, 19).Value
'copia CONSISTENZA
Sheets("ORIGINALE").Range("EI17").Value = Sheets("database").Cells(riga, 20).Value
'copia SLUMP
Sheets("ORIGINALE").Range("DM39").Value = Sheets("database").Cells(riga, 21).Value
'copia N°PROVINI
Sheets("ORIGINALE").Range("S43").Value = Sheets("database").Cells(riga, 22).Value
'copia DIM.PROVINI
Sheets("ORIGINALE").Range("AZ43").Value = Sheets("database").Cells(riga, 23).Value
'copia ORA
Sheets("ORIGINALE").Range("DC51").Value = Sheets("database").Cells(riga, 24).Value
'copia SCADENZA1
Sheets("ORIGINALE").Range("AB67").Value = Sheets("database").Cells(riga, 25).Value
'copia SCADENZA2
Sheets("ORIGINALE").Range("AB69").Value = Sheets("database").Cells(riga, 26).Value
'copia SCADENZA3
Sheets("ORIGINALE").Range("AB71").Value = Sheets("database").Cells(riga, 27).Value
'copia SCADENZA4
Sheets("ORIGINALE").Range("AB73").Value = Sheets("database").Cells(riga, 28).Value
'copia PESO1 SCADENZA1
Sheets("ORIGINALE").Range("AT67").Value = Sheets("database").Cells(riga, 29).Value
'copia PESO2 SCADENZA1
Sheets("ORIGINALE").Range("CD67").Value = Sheets("database").Cells(riga, 30).Value
'copia PESO1 SCADENZA2
Sheets("ORIGINALE").Range("AT69").Value = Sheets("database").Cells(riga, 31).Value
'copia PESO2 SCADENZA2
Sheets("ORIGINALE").Range("CD69").Value = Sheets("database").Cells(riga, 32).Value
'copia PESO1 SCADENZA3
Sheets("ORIGINALE").Range("AT71").Value = Sheets("database").Cells(riga, 33).Value
'copia PESO2 SCADENZA3
Sheets("ORIGINALE").Range("CD71").Value = Sheets("database").Cells(riga, 34).Value
'copia PESO1 SCADENZA4
Sheets("ORIGINALE").Range("AT73").Value = Sheets("database").Cells(riga, 35).Value
'copia PESO2 SCADENZA4
Sheets("ORIGINALE").Range("CD73").Value = Sheets("database").Cells(riga, 36).Value
'copia RM1 SCADENZA1
Sheets("ORIGINALE").Range("BL67").Value = Sheets("database").Cells(riga, 38).Value
'copia RM2 SCADENZA1
Sheets("ORIGINALE").Range("CV67").Value = Sheets("database").Cells(riga, 39).Value
'copia RM1 SCADENZA2
Sheets("ORIGINALE").Range("BL69").Value = Sheets("database").Cells(riga, 40).Value
'copia RM2 SCADENZA2
Sheets("ORIGINALE").Range("CV69").Value = Sheets("database").Cells(riga, 41).Value
'copia RM1 SCADENZA3
Sheets("ORIGINALE").Range("BL71").Value = Sheets("database").Cells(riga, 42).Value
'copia RM2 SCADENZA3
Sheets("ORIGINALE").Range("CV71").Value = Sheets("database").Cells(riga, 43).Value
'copia RM1 SCADENZA4
Sheets("ORIGINALE").Range("BL73").Value = Sheets("database").Cells(riga, 44).Value
'copia RM2 SCADENZA4
Sheets("ORIGINALE").Range("CV73").Value = Sheets("database").Cells(riga, 45).Value
'copia OSSERVAZIONI
Sheets("ORIGINALE").Range("F76").Value = Sheets("database").Cells(riga, 46).Value
'copia MC CARICATI
Sheets("ORIGINALE").Range("DV37").Value = Sheets("database").Cells(riga, 47).Value
'copia TIPO DI ACQUA
Sheets("ORIGINALE").Range("EI25").Value = Sheets("database").Cells(riga, 48).Value
'copia DOS CEMENTO
Sheets("ORIGINALE").Range("N80").Value = Sheets("database").Cells(riga, 49).Value
'copia DOS CENERE
Sheets("ORIGINALE").Range("AE80").Value = Sheets("database").Cells(riga, 50).Value
'copia TOT AGGREGATI
Sheets("ORIGINALE").Range("BC80").Value = Sheets("database").Cells(riga, 51).Value
'copia DOS ACQUA
Sheets("ORIGINALE").Range("BT80").Value = Sheets("database").Cells(riga, 52).Value

Fine_Estrai:
Sheets("ORIGINALE").Select


End Sub


Grazie in anticipo aspetto vostre notizie.
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Sponsor
 

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 11/01/16 23:20

Per poter lavorare concretamente sulla faccenda serve un file con l'esatta struttura dati e contenuti realistici su cui poter lavorare; riesci a pubblicare qualcosa?

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

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 11/01/16 23:43

Ciao anthony, spiegati meglio cosa dovrei fare? Vuoi che ti invii il file con msg privato?
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 12/01/16 00:07

Dovresti pubblicare un file su cui quella macro lavora, sia per poter vedere quale e' la struttura dati su cui si appoggia e sia per usarlo per le prove relative alla richiesta fatta.
E' infatti impensabile di automatizzare una estrazione dati senza conoscere la struttura dei dati, ne' si puo' chiedere a chi ha voglia di provarci di spendere tempo a creare innanzitutto un ambiente di prova.
Purtroppo parlo di "pubblicare" il file, personalmente non sono in grado di dare supporto tramite comunicazioni dirette.

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

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 12/01/16 00:10

Ok domattina provo a postarlo qui. Grazie mille
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 12/01/16 16:32

ok ragazzi ci sono riuscito.
non smanetto molto su queste cose, perciò grazie per la pazienza.

ecco il link

http://we.tl/ct6qDXYFw1

spero non ci siano problemi.
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 12/01/16 23:11

Ok, adesso facendo riferimento al file allegato mi descrivi a grandi linee come si lanciano la macro che avevi pubblicato, che cosa fanno, e quale modifica dobbiamo cercare di apportare?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 12/01/16 23:36

Ok anthony, le macro le lanci con
Ctrl+Maiusc+s per salvare il verbale riempito nel DB
Ctrl+Maiusc+c per compilare il verbale (che si può anche compilare manualmente scrivendo nelle celle designate)
Ctrl+Maiusc+i per svuotare il verbale e inizializzare il file.
Ctrl+Maiusc+e per estrarre un report dal database e inserire i dati salvati nella scheda verbale

Se vedi il foglio DB ( database) esiste una colonna che si chiama impianto, io vorrei che in automatico ogni volta che salvò il verbale di prelievo il programma riconosce di quale impianto si tratta e lo salva nel database dell'impianto corretto. Mantenendo il numero progressivo del report necessario per l'estrazione.


Esempio

VERBALE DI PRELIEVO n.1 -- PROGRESSIVO DATABASE n.1 -- IMPIANTO : A (database impianto A)

VERBALE DI PRELIEVO n.2 -- PROGRASIVO DATABASE n.2 -- IMPIANTO : B (database impianto B)

VERBALE DI PRELIEVO n.3 -- PROGRASIVO DATABASE n.3 -- IMPIANTO : C (database impianto C)

VERBALE DI PRELIEVO n.4 -- PROGRASIVO DATABASE n.4 -- IMPIANTO : B (database impianto B)

E così via, mi serve creare solo 3 database e il criterio per l'estrazione deve essere sempre lo stesso e cioè il progressivo database anche se in questo caso credo che la ricerca dovrà farla su tutti e tre i database .

Ovvero se lancio la macro ESTRAI il programma mi chiede

"Quale verbale devo estrarre ?"

Supponiamo di estrarre il n.2

Lui dovrà fare la ricerca nel primo DB , nel secondo DB e nel terzo finché non trova il n.2 e procede all'estrazione .

Spero di essere riuscito a spiegarmi , se hai domande chiedi pure. Non è facile spiegarsi via post ma ci provo.

Grazie ancora.
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 14/01/16 02:28

Mi stai chiedendo quindi di aiutarti a spezzettare il database da unico a multiplo, in funzione dell'impianto... ebbene sappi che nella mia opinione questa e' una fesseria bella e buona in quanto i dati devono essere quanto piu' possibile raggruppati. Ci sono altri metodi per aggregare separatamente i dati dei vari impianti, ad esempio l'Ordinamento, il Filtro automatico, le istruzioni subordinate (Somma.Se, Conta.Se, Matr.Somma.Prodotto e tutti gli artifici che l'articolazione delle formule consente).

Seguendo questa filosofia lascerai inalterata la struttura del foglio Database; poi se proprio vuoi ti crei N fogli, ognuno col nome di un impianto, e nel modulo di codice di questi fogli (Nota*) inserisci questa macro:
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
Sheets("Database").Range("A:L").AutoFilter Field:=4, Criteria1:=ActiveSheet.Name
Sheets("Database").Range("A:L").Copy Range("A1")
Sheets("Database").Range("A:L").AutoFilter Field:=4
End Sub

Nota*: per accedere a questi "moduli": da Excel, tasto dx sul tab col nome del foglio, scegliere Visualizza codice.
La procedura dovra' essere ripetuta su tutti i fogli col nome di un impianto.
In questo modo, tutte le volte che selezioni un foglio col nome di un impianto ti troverai sul foglio le schede che appartengono a quell'impianto, prelevate dal foglio Database (che le contiene sempre tutte).

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

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 14/01/16 13:11

Ciao anthony e grazie per la tempestività

E' interessante cosi , ma devo cercare di capire quanto mi è utile , perche poi per ciascun impianto devo far girare delle formule che mi servono per creare i grafici relativi al monitoraggio di ogni impianto .
Se dopo che mi ha generato la copia dei dati che mi interessano di un impianto voglio far eseguire per ogni riga copiata un formula devo scrivere la formula nella macro che mi hai postato tu ?

es. supponiamo che per l'impianto A devo fare la media di una coppia di valori RM ottenuti per il verbale in esame

IMP. A VERBALE N.2 RM1 20 RM2 30

dopo aver aperto il foglio relativo all'imp. A io voglio che a fine colonna di copia ( L ) in una cella per ogni record venga fatta la media dei valori RM1 e RM 2

cosa mi consigli di fare?
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 14/01/16 23:51

Non vorrei aver semplificato troppo il tuo messaggio, ma io mi sono fissato su come lasciare il database unico e all'occorrenza crearne delle viste parziali per impianto.
Se nel foglio dei singoli impianti vuoi inserire un campo calcolato, metterai ad esempio in M2 la formula
Codice: Seleziona tutto
=SE(D2<>"";LaFormulaPerCalcolareIlCampo;"")
e poi la copi verso il basso per quante righe massimo pensi di avere per ogni impianto
Pero' nuovamente io questo lo farei sul foglio Database (quello unico), con la stessa "formula"; poi "allargherei" di conseguenza l'area copiata con la macro di Worksheet_Activate; ad esempio
Codice: Seleziona tutto
Sheets("Database").Range("A:Q").Copy Range("A1")

Come si intuisce questa copia nel foglio dell'impianto le colonne A:Q di Database.

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

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 15/01/16 00:14

Proverò a bypassare il problema facendo come hai detto tu, è lasciando il DB intero. In effetti è uguale anche calcolando la formula nel foglio d'impianto. Vedo come fare e ti aggiorno. Intanto,

Anthony mi insegni come fare a far comparire un menù a tendina nell'inputbox?

Se provi a lanciare LA macro " compila verbale" vorrei che quando appare l'inputbox "Impianto?" Lì dentro deve comparire il menù a tendina con i 3 impianti .

Non ho mai capito come fare
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 18/01/16 09:23

:undecided: :undecided: :undecided:

ho chiesto troppo??

ciao aspetto notizie
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 18/01/16 12:34

No, non hai chiesto molto, ma devi aspettare lo stesso :D :D :!:

L'inputbox col menu' a tendina e' l'oggetto "Casella di riepilogo", che trovi sia tra i "controlli Modulo" che tra i "controlli ActiveX" (vedi Menu /Sviluppo /Inserisci).
Nel controllo tipo Modulo puoi impostare (vedi Formato controllo) l'intervallo di input e la cella collegata; puoi anche assegnare una macro all'oggetto.
Il controllo tipo ActiveX (Listbox) e' meglio programmabile, sia tramite le sue Proprieta' che tramite la gestione dei suoi molteplici eventi (vedi Visualizza codice).

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

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 19/01/16 16:17

:( :( :( ....no , pensavo fosse più semplice, non sono ingrado di crearlo.

ho provato anche con la guida ma non riesco a farlo .

Anthony puoi farmi un esempio? Non ho tutta questa esperienza nella programmazione. :undecided: :undecided:
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 20/01/16 03:01

Guardare un file fatto da me non ti servira' granche':
https://www.dropbox.com/s/m46l6nq6iqwt0 ... .xlsx?dl=0

Sei sicuro che non ti convenga usare le prestazioni standard di Excel, compreso la Convalida?
Che ci devi fare con questo coso?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 20/01/16 18:21

sul file che ho postato qualche giorno fa (e che ho ripostato qui sotto ),se provi a lanciare la macro " compila verbale" (ctrl+maiusc+c) lui inizia il ceck di compilazione verbale, alla terza voce dice "IMPIANTO NON INSERITO " e nell'imputbox puoi scrivere di quale impianto si tratta , io vorrei che quando appare l'inputbox "Impianto" anziche scrivere vorrei far comparire il listbox tendina con i 3 impianti .
ovviamente lo userei anche per altre voci che mi interessano.

http://we.tl/BuwJuMiPGJ

vedi se puoi darmi una mano Antonhy
grazie.
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: CREAZIONE DI PIU DATABASE

Postdi Anthony47 » 20/01/16 23:54

Per fare tutte quelle cose non hai bisogno di un listbox, ti bastera' usare la Convalida direttamente sul foglio:
-sulle celle da compilare togli la spunta di "Bloccata" in Formato celle, tab Protezione
-imposti una convalida su tutte le celle che devono essere compilate, e usi il tab "Messaggio di input" per dare un suggerimento sul contenuto della cella. Potrai cosi' controllare che (ad esempio) un campo data sia compilato realmente con una data, o che l'impianto sia scelto tra gli N disponibili, idem l'Impresa e il Cantiere (se di essi hai una anagrafica), che i numeri siano numeri, e cosi' via. Ricorda che puoi usare il tab Messaggio di input per dare un suggerimento anche se consenti Qualsiasi valore.
-poi proteggi il foglio anche senza password, ma togliendo la spunta a Seleziona celle bloccate.
In questo modo l'utente puo' solo spostarsi sulle celle da compilare, e a ogni selezione si trova con un messaggio di "suggerimento" (il contenuto di Messaggio di input), oltre che essere aiutato (anche con gli Elenchi di Convalida, dove possibile) e controllato nella corretta compilazione.

La macro attivata tramite Contr-C (se non ho capito male il suo scopo) puo' "scorrere" le celle da compilare e fermarsi sulla prima cella ancora non compilata, senza nessun messaggio ulteriore (bastera' il "suggerimento" di cui abbiamo gia' parlato).

Poi e' chiaro che si possono fare delle automazioni; ma (perdona) l'automazione deve creare una sua interfaccia consistente (es una userform con tutti i controlli) e non casuale (un inputbox qua, un listbox la, ...), e richiede un lavoro sul posto sia per adattarsi all'utenza che all'organizzazione e la conoscenza dei controlli e della loro programmazione, che e' piu' complessa del "solito" vba.
Tutto questo per dire che se con qualche suggerimento piu' o meno vago non ci riesci (a introdurre una valida automazione) allora ti conviene restare sull'interfaccia e le prestazioni di Excel, rinforzata da qualche macro di ausilio.

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

Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 21/01/16 16:48

ok anthony ci provo , grazie mille per l'aiuto!!
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Re: Re: CREAZIONE DI PIU DATABASE

Postdi coupe79 » 02/11/16 17:27

Problema con macro print pdf :

Salve a tutti

mi haavete aiutato moltissimo con il mio programma qualche anno fa, è successo però che ho cambiato pc e ora ho di nuovo il problema della stampa in pdf. Quando lancio la macro :

Codice:
Sub macroPrintPDF()
'QUESTA FUNZIONA, le altre sono tutte prototipi manipolati
'Le righe marcate <<< e >>> sono alternative; quelle >>> richiedono
' di impostare il riferimento alla libreria PDFCreator (menu /Riferimenti /...)
'Come e' ora NON e' necessario avere il "Riferimento" a pdfcreator nel vba
'
'Dim objPDFCreator As PDFCreator.clsPDFCreator '>> Early Bind
Dim objPDFCreator '<<< Late Bind
Dim Perc As String
Dim Nome As String
'
Nome = Worksheets("ORIGINALE").Range("EI4").Value & ".pdf"
Perc = ThisWorkbook.Path & "\pdf_prelievi\"
'
On Error Resume Next
If Dir(Perc & Nome) = Nome Then Kill (Perc & Nome)
Shell "taskkill /f /im PDFCreator.exe", vbHide
Application.Wait (Now + TimeValue("0:00:05"))
On Error GoTo 0
'
'Set objPDFCreator = New PDFCreator.clsPDFCreator '>>>
Set objPDFCreator = CreateObject("PDFCreator.clsPDFCreator") '<<
aaa1 = objPDFCreator.cProgramIsRunning

With objPDFCreator
.cStart "/NoProcessingAtStartup"
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = Perc
.cOption("AutosaveFilename") = Nome
.cOption("AutosaveFormat") = 0
aaa = .cOption("AutosaveFilename")
.cVisible = False
.cClearCache
End With
'
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'stampa "Foglio"
objPDFCreator.cPrinterStop = False

'attesa disponibilita' file finale
Do
DoEvents
Loop Until Dir(Perc & Nome) = Nome
'
'clear finale oggetto e kill processo
Set objPDFCreator = Nothing
Shell "taskkill /f /im PDFCreator.exe", vbHide
'
End Sub



Purtroppo non riesco a capire dove sta il problema.

Va in blocco dandomi l'errore " Run-Time 429" ActiveX non e in grado di creare l'oggetto.
e mi si evidenzia questa stringa :

Set objPDFCreator = CreateObject("PDFCreator.clsPDFCreator")

Sul nuovo pc ho installato win7 e ho scaricato l'ultima versione di pdfcreator 2.4.0 , cosa devo correggere?

Spero sappiate aiutarmi, devo sistemare questo file entro domani altrimenti mi linciano.


Mille Grazie aspetto notizie.
coupe79
Utente Junior
 
Post: 36
Iscritto il: 29/08/12 15:03

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Re: CREAZIONE DI PIU DATABASE":

creazione video
Autore: themisterx
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti