Condividi:        

EXCEL: salvataggio dati da modello preposto in tabella

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

EXCEL: salvataggio dati da modello preposto in tabella

Postdi valle1975 » 27/09/10 16:56

Salve, ho creato un foglio in excel come modello per inserire vari dati.
Come dato UNIVOCO per tutti questi dati ho il numero progressivo definito nella cella D2.
Volevo creare una Macro che mi salvi questi dati in un foglio diverso (es. dati), che abbia come Identificativo univoco il valore della CELLA D2 riportato nella colonna "A" del foglio "dati" e nelle colonne seguenti i vari valori inseriti nel modello, esclusi quelli appartenenti alla parte Grafica e descrittiva.
Il mio problema è come fare le correlazioni tra i dati nel modello e quelli nel foglio dati.
Ho provato a lasciare SBLOCCATE tutte le celle contenenti i dati da salvare, cosi' definisco l'insieme dei valori da copiare, ma non riesco a definire le associazioni per le quali:
Valore cella E1 = colonna 2
Valore cella F4= colonna 5
ecc, sempre usando come riferimento di riga dove, il valore della colonna "A" è uguale a "d2".

Mi sono basato su questo esempio, ma non riesco ad adattarlo alle mie esigenze. Qualche aiuto?
http://programmiexcel.splinder.com/post ... -con-excel

Spero che sia comprensibile quello che ho scritto..
Grazie a tutti comunque...
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Sponsor
 

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi Anthony47 » 28/09/10 02:41

Ciao valle1975 e benvenuto nel forum.
Il file a cui fai riferimento consente di creare su foglio Dati un archivio (in riga) dei dati variabili (quelli inseriti nelle celle azzurre non bloccate) inserite sul foglio Documento; e viceversa: selezionare una riga del foglio Dati e portare quei dati su foglio Documenti.
Sia nella fase di archiviazione (da Documento a Dati) che viceversa (da Dati a Documento), sul foglio Documento vengono lette o scritte le sole celle non bloccate.
La chiave e' un indice in J1, che rappresenta la riga su Dati in cui archiviare o da cui leggere i dati.

Ora mi pare che tu descriva una situazione analoga, con la variante che l' indice e' in D2; per questo vai sulle macro e dove leggi Range("J1") inserirai Range("D2").
Non dici pero' una cosa altrettanto importante: in quale area saranno scritti i ati che poi vorrai salvare e quale e' il loro numero massimo. Nell' esempio il max e' 150 celle e l' area e' compresa nell' intervallo A2:H50; se il tuo caso ' diverso allora dove ora c' e' Range("A2:H50") metti il tuo range, e dove ora leggi 150 inserisci il tuo nuovo limite di dati da traslocare.
Infine per quanto riguarda le associazioni tra celle (di Documento) e colonne (di Dati), questa e' automatica, nel senso che la macro in fase di archiviazione prende il primo dato (cella non bloccata) e lo mette nella prima colonna, prende il secondo dato e lo mette nella seconda colonna, etc; e viceversa nella fase di lettura (da Dati a Documento).

Spero che questi ragionamenti ti siano di aiuto; comunque se non risolvi posta ancora dando questa volta il layout preciso dei tuoi dati.

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

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi valle1975 » 28/09/10 09:32

Grazie Anthony.
Avevo già fatto le modifiche da te segnalate (sia il riferimento cella che il range),infatti i dati riesco a copiarli; rimanevo il problema dell'ubicazione (in scrittura e lettura) delle celle non bloccate, per le quali non so definire il riferimento verso le colonne preposte.
Ecco come sono le associazioni che mi servirebbero: (il primo valore è nel modello, il secondo è nel foglio dati)

D2 - colonna A
D4 - colonna b
A60 - colonna c
C11 - colonna d
eccetera.........

Fammi sapere con che logica posso indirizzare questi caricamenti, che provvedero' io ad adattare per tutti i dati.
Considera che nel foglio dati, la RIGA 1 è la riga con tutte le intestazioni di Colonna, per cui i dati devono essere caricati dalla riga 2.
Grazie tante. Saluti.
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi Anthony47 » 01/10/10 13:06

Ribadisco che non ci sarebbe nessun bisogno per associare in modo predefinito una cella di Documento con una colonna di Dati: la macro salva in modo sequenziale e rispristina nello stesso ordine, quindi l' integrita' del documento e' ok.
Se comunque vuoi lo stesso fare quel che chiedi, ti propongo 2 sistemi:
1) Foglio ombra o "pazienza1":
-ti crei un "foglio ombra" simile a Documenti, dove in ogni cella che sara' salvata scrivi l' indirizzo in cui vuoi salvare, nel formato (esempio) "G1"
-una nuova macro Salva andra' a leggere lo stesso indirizzo della cella in salvataggio ma su foglio Ombra e usera' quel valore per comporre l' indirizzo di salvataggio, che sara' pari al valore in cella + offset verticale pari al numero di record in scrittura (questo anche per far iniziale i dati da riga 2).
-la nuova macro Salva non lavorera' salvando i dati nell' array "dati(150)", ma fara' un salvataggio diretto 1:1. Si noti che l' uso di un array avrebbe potuto consentire nelle macro correnti una qualche ottimizzazione, potendo salvare (e leggere) "in blocco" sull' area (o dall' area) di destinazione.
-la macro Leggi sara' simile alla attuale Salva, nel senso che lavorera' su foglio Ombra, e di ogni cella non protetta ne leggera' il contenuto, che sara' usato per calcolare la cella di Dati da cui prelevare il dato, mentre la cella di destinazione su Documenti avra' lo stesso indirizzo di quella "corrente" su Ombra.
Quindi:
-foglio Ombra con gli indirizzi di salvataggio
-nuova macro Salva
-nuova macro Leggi

2) Metodo "pazienza2":
-usi il foglio Documenti solo per il salvataggio
-nel foglio Documenti1, in un' area esterna a quella di stampa, ti crei una riga che contiene tutte le celle che potenzialmente vorrai salvare, nella sequenza preferita, usando formule sofisticate tipo =Se(F8="";"";F8)
-una nuova macro Salva legge in blocco questi valori e copia i valori sulla riga di foglio Dati
-ti fai una copia esatta di Documenti (Menu /Modifica /Sposta o copia foglio) che userai per "leggere" il contenuto dell' archivio
-una nuova macro Leggi copia la riga da Dati e la incolla su Documento2 nella stessa posizione in cui quei dati sono creati su Documenti1
-in ogni cella di Documenti2 che deve essere popolata inserisci una formula del tipo =Se(AA1="";"";AA1)

Una variante al metodo "pazienza1" lavora su un elenco di celle da salvare creato direttamente nel foglio Documenti invece che nel foglio Ombra.
La mia preferenza e' comunque per il metodo 2.

Ambedue questi metodi consentono di superare un limite non dichiarato della soluzione attuale, che e' ok se il formato su Documento rimane invariato, mentre va in crisi il giorno che si volesse aggiungere un nuovo campo, salvo che non sia "in fondo" al modello preesistente.

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

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi valle1975 » 04/10/10 10:16

Grazie Anthony.. anche per avermi fatto ragionare piu' a fondo sul come gestire la cosa.
A questo punto, visto le implicazioni che comporta, proseguo sulla base dell'esempio iniziale, salvando le celle non bloccate,poi adattanto la consultazione dei risultati in un secondo momento.
Ho adattato gli insiemi, ma ho rimasto i seguenti problemi:
1- Ho bloccato tutte le celle, tranne quelle di inserimento dati, ma quando salvo nel file DATI non mi salva nelle colonne in modo sequenziale, ma lasciano alcune colonne vuote,perchè? Si puo' evitare?

2- Vorrei ,sempre nel foglio dati, poter impostare nella riga 1 le intestazioni delle Celle, per agevolare filtri per report successivi, ma con questa macro mi parte a salvare e leggere dalla riga 1. come correggerlo perchè legga e salvi i dati iniziando dalla riga 2?

Queste sono le macro attuali "Salva" e "Leggi":
Codice: Seleziona tutto
Sub Salva()
Dim dati(150), cel As Range
Application.ScreenUpdating = False
Sheets("MODULO CONTESTAZIONE").Activate: Set Zona = Range("A2:E60")
    riga = Range("D2")
For Each cel In Zona.Cells
cel.Select
  If Selection.Locked = False Then i = i + 1: dati(i) = cel:
  If i = 1 Then cc = cel.Address: ' MsgBox (cc)
Next
Sheets("Dati").Activate
    For n = 1 To i
      Cells(riga, n + 1) = dati(n)
    Next
Sheets("Dati").Activate: Range(cc).Select
End Sub
Sub Leggi()
Dim dati(150), cel As Range
Application.ScreenUpdating = False
   riga = Range("D2")
Sheets("Dati").Activate
For n = 1 To 150
     dati(n) = Cells(riga, n + 1)
    Next
Sheets("MODULO CONTESTAZIONE").Activate: Set Zona = Range("A2:E60")
riga = Range("D2")
For Each cel In Zona.Cells
    cel.Select
  If Selection.Locked = False Then
    i = i + 1:    cel = dati(i): ' Selection.Interior.ColorIndex = 20
  End If
   Next
End Sub


Grazie di tutto.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi Anthony47 » 04/10/10 15:09

Se nella riga salvata ci sono celle vuote e' perche' hai delle celle sbloccate che non popoli; puoi debuggare la cosa sostituendo per prova nella mcro di salvataggio questa riga
If Selection.Locked = False Then i = i + 1: dati(i) = cel: con questa:
Codice: Seleziona tutto
  If Selection.Locked = False Then i = i + 1: dati(i) = cel.address

In questo modo la stringa salvata contiene gli indirizzi delle celle, non il valore, e puoi verificare.

Tuttavia ti ricordo che con questo metodo il documento da salvare deve rimanere invariato, cioe' nel tempo non puoi inserire, cancellare e nemmeno spostare nessun campo; il metodo "pazienza 2" superava questo problema.

Per quanto riguarda il lasciare libera riga 1, nella tua macro devi modificare riga = Range("D2") in
Codice: Seleziona tutto
riga = Range("D2")+1


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

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi valle1975 » 19/10/10 09:39

Grazie di tutto, ho sistemato come da tuoi consigli.
Mi rimangono alcune piccoli "difetti" sui controlli del foglio, in particolare su un pulsante di selezione, con il quale controllo la cella D2 e il caricamento automatico tramite macro "Leggi" dal foglio DATI.Sul controllo ho impostato come limite valore da 1 a 100, con step di 1 e Legame alla Cella D2 del foglio "Modulo Contestazione".
Tutto bene spostandomi tra volori che esistono, ma ho degli errori se vado oltre il valore massimo esistente e il modello mi viene compilato con i dati dell'intestazione del foglio Dati (Riga 1). E' possibile definire che il valore della cella D2 (o il controllo della macro Leggi) verifichi solo tra i valori esistenti nei range di valori nel foglio Dati tra B2 e B100?
Io non sono riuscito.
Le macro in uso sono queste:
Codice: Seleziona tutto
Sub Salva()
Dim dati(150), cel As Range
Application.ScreenUpdating = False
Sheets("MODULO CONTESTAZIONE").Activate: Set Zona = Range("A2:E65")
    riga = Range("D2") + 1
For Each cel In Zona.Cells
cel.Select
If Selection.Locked = False Then i = i + 1: dati(i) = cel:

  If i = 1 Then cc = cel.Address: ' MsgBox (cc)
Next
Sheets("Dati").Activate
    For N = 1 To i
      Cells(riga, N + 1) = dati(N)
    Next
Sheets("Dati").Activate: Range(cc).Select
End Sub


Sub Leggi()
Dim dati(150), cel As Range
Application.ScreenUpdating = False
   riga = Range("D2") + 1
Sheets("Dati").Activate
For N = 1 To 150
     dati(N) = Cells(riga, N + 1)
    Next
Sheets("MODULO CONTESTAZIONE").Activate: Set Zona = Range("A2:E65")
riga = Range("D2")
For Each cel In Zona.Cells
    cel.Select
  If Selection.Locked = False Then
    i = i + 1:    cel = dati(i):
 End If
   Next
End Sub
Sub Istruzione()
Range("d2").Select
    With Selection.Validation
        .InputTitle = "asd"
        .InputMessage = ":"
    End With
End Sub


Grazie infinite per la vs. disponibilità.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi Anthony47 » 19/10/10 13:20

Prova a sostituire nella Sb Leggi la riga riga = Range("D2") + 1
con queste:
Codice: Seleziona tutto
If Sheets("dati").Cells(Rows.Count, 2).End(xlUp).Row > Range("D2") Then
riga = Sheets("dati").Cells(Rows.Count, 2).End(xlUp).Row + 1
Range("D2") = riga - 1: Beep
Else: riga = Range("D2") + 1
End If

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

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi valle1975 » 20/10/10 10:13

Grazie Anthony, ma ci deve essere qualcosa di sbagliato.. e forse è colpa mia, perchè come ho corretto adesso non mi popola piu' niente nel foglio modello.
Ti allego qui come ho modificato la sub Leggi.

Codice: Seleziona tutto
Sub Leggi()
Dim dati(150), cel As Range
Application.ScreenUpdating = False
'   riga = Range("D2") + 1 ' come era inizialmente

If Sheets("dati").Cells(Rows.Count, 2).End(xlUp).Row > Range("D2") Then
riga = Sheets("dati").Cells(Rows.Count, 2).End(xlUp).Row + 1
Range("D2") = riga - 1: Beep
Else: riga = Range("D2") + 1
End If
' inserito da IF fino a qui consiglio di Anthony

Sheets("Dati").Activate
For N = 1 To 150
     dati(N) = Cells(riga, N + 1)
    Next
Sheets("MODULO CONTESTAZIONE").Activate: Set Zona = Range("A2:E65")
riga = Range("D2")
For Each cel In Zona.Cells
    cel.Select
  If Selection.Locked = False Then
    i = i + 1:    cel = dati(i): ' Selection.Interior.ColorIndex = 20
  End If
   Next
End Sub


Dove sta l'anomalia??
Grazie, ciao.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi Anthony47 » 20/10/10 22:46

Ho sbagliato io: NON If Sheets("dati").Cells(Rows.Count, 2).End(xlUp).Row > Range("D2") Then MA
Codice: Seleziona tutto
If Sheets("dati").Cells(Rows.Count, 2).End(xlUp).Row < Range("D2") Then

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

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi valle1975 » 21/10/10 09:22

Prima di tutto Grazie ancora, ma non ha migliorato le cose.
Per la precisione è tornato allo stato originale, cioè che funziona fino all'esistenza di valori nella colonna "B" del foglio Dati (per la precisione dalla cella B2 in giu), ma se incremento dall'ultimo valore esistente nella colonna, mi Propone il modulo tutto vuoto ( e questo puo' anche starmi bene, anche se la perfezione sarebbe avere un msgbox che mi avvisa "fine dei record disponibili"), ma se poi ripremo il controllo -1 mi visualizza i dati della RIGA 1 del foglio "Dati", dove ci sono le intestazioni della tabella "dati".
Premendo invece ancora +1, mi riparte dalla riga n.3, non dalla riga n.2.
Non è un grave problema (ci mancherebbe), era solo per cercare la perfezione.
Grazie ancora.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi Anthony47 » 21/10/10 14:00

Io ho lavorato solo sulla base del codice della macro, cosa fa il controllo + o - lo ignoro.
Dovresti debuggare la macro usando il break, il passo passo ed esaminando il contenuto di D2 rapportato al contenuto del foglio Dati.
Per suggerimenti su come eseguire il debug guarda qui: viewtopic.php?t=65537

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

Re: EXCEL: salvataggio dati da modello preposto in tabella

Postdi valle1975 » 21/10/10 17:08

Uso l'F8 in debug per tutte le variazioni che faccio.
Adesso, vedro' di approfondirle l'utilizzo con il tuo consiglio.
Per il controllo +/- è solo legato a quella MACRO "Leggi" su cui stavi lavorando e ha il riferimento alla cella D2, niente altro.
Comunque non importa, è un difetto veniale :-)) Lo lascio cosi'.
Grazie di tutto.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33


Torna a Applicazioni Office Windows


Topic correlati a "EXCEL: salvataggio dati da modello preposto in tabella":


Chi c’è in linea

Visitano il forum: Nessuno e 70 ospiti