MACRO PER FILTRO DINAMICO
Hai un problema con Excel? 
MACRO PER FILTRO DINAMICO
di Dervish data: 21/07/2016 11:52:01
Buongiorno,
innanzitutto anticipo che di macro e vba in genere so ben poco, anche se di excel e programmazione in generale mastico qualcosa.
Ho l'esigenza di creare una macro che, a seconda di chi apra il foglio, filtri automaticamente i dati di una cartella di lavoro protetta, permettendogli di visualizzare solo i dati a lui relativi.
Spiego meglio (provando ad allegare un file excel d'esempio):
Ad ogni intervallo di tempo devo inviare un report alla ns forza vendita. Da un DB estrapolo una pivot che per agente, da loro possibilità di visualizzare le qt acquistate dai loro clienti ed eseguire un drill down che esploda il dettaglio per marca (cliente->cliente/marca) e poi per articolo (cliente/marca->cliente/marca/articolo).
Quel che vorrei la macro eseguisse è questo (ovviamente se possibile):
All'apertura del file si apre una maschera di richiesta credenziali dove l'agente deve inserire il suo codice agente (meglio ancora se da un elenco con menu a tendina), che farà da filtro dati della pivot, ed una password che darò io ad ogni agente (e che periodicamente, per questioni anche di sicurezza, rinnoverei).
Solo una volta inserite le credenziali, gli agenti possono entrare, IN SOLA VISUALIZZAZIONE sui dati della pivot, già depurata dei dati degli altri agenti (potendo agire solo sui filtri o sugli ordinamenti dei campi a disposizione. Filtrare quindi per vedere l'acquistato di un solo cliente; poter ordinare rispetto a chi ha acquistato di più, etc).
Fattibile come richiesta?
Potete compilarmi il codice vba spiegando passo passo le relative funzioni che avete inserito (così comincio a familiarizzare con il codice)?
Vi ringrazio.
Saluti.
di Vecchio Frac data: 21/07/2016 22:40:06
cit. "Fattibile come richiesta? "
---> Premesso che quasi tutto è fattibile, fare quanto chiedi con Excel è un suicidio per la sicurezza dei dati, perchè questo applicativo non è pensato per offrire protezione efficace (nè con password nè con cifratura, almeno quella fornita da Excel stesso). Excel è e deve restare un manipolatore di dati, non un server sicuro dove gestire password, accessi, permessi eccetera.
Con nessuno strumento Office otterrai qualcosa di sicuro, se così deve essere devi orientarti su soluzioni web based, un server centrale che gestisce gli accessi e un'applicazione scritta con un vero linguaggio di programmazione.
In parte quello che chiedi si può risolvere con Access, ma devi avere presente che gli utenti dovrebbero aver accesso alla base dati in un percorso comune (non internet, ma su una cartella condivisa in LAN interna).
cit. "Potete compilarmi il codice vba spiegando passo passo le relative funzioni che avete inserito (così comincio a familiarizzare con il codice)? "
---> Come partenza, non hai scelto l'esempio più facile :)
di Thyke data: 22/07/2016 03:36:49
e si...fare un lavoro simile è possibile ma come dice vecchio frac il livello di sicurezza è veramente basso, certo se nessuno degli agenti prova a scardinare le protezioni può andare bene, ma nel momento in cui decidesse di farlo...io non ci metterei più di qualche minuto ad avere accesso alla tabella completa.
In ogni caso, visto che parlavi di "inviare" non fai prima ad inviare ad ogni agente i suoi dati e solo i suoi dati?
se gli invii un file con i dati di tutti...è un invito alla curiosità...
di Dervish data: 22/07/2016 09:40:14
Innanzitutto vi ringrazio per le risposte.
Spiego il nocciolo centrale del problema:
- Quello della sicurezza è un problema "relativo" e circostanziato; sia per i dati (almeno per questi report NON sensibili; non si produce quindi un effettivo danno se c'è qualche "curioso", ma come policy aziendale è sempre bene non dare diretto accesso alle informazioni degli altri), sia per la cultura informatica generale degli agenti stessi. Posso garantirvi che la maggior parte stenta ad utilizzare una pivot ed a comprenderne i filtraggi o la struttura. So bene che le protezioni in excel siano a livello di barzelletta, ma chi non si occupa di programmazione o di lavoro d'ufficio e passa il suo tempo in macchina e tra gli agenti di certo non si(mi) preoccupa a violare la sicurezza di un report che forse avrà il tempo di vedere nei ritagli di tempo.
Esempio spicciolo: "se devo proteggere un osso da un cane, non la nascondo in un caveu; al massimo la chiudo in una stanza (senza forse nemmeno usare la chiave) :)
- Il vero problema è dover inviare ad ogni cliente dati diversi. Significa moltiplicare il lavoro di produzione dati "n" volte. Ho "ottimizzato" il problema con un "accrocchio", per ora. Dal file d'esempio proposto, infatti, solitamente io filtro per il campo cod ag, in modo da filtrare i dati per il singolo agente, nascondo le righe di filtro della pivot e vado poi a proteggere il foglio, permettendo ordinamento, filtri e rapporti pivot all'utente finale.
Ripeto, è un accrocchio, ma così perlomeno ho una produzione dati univoca ed n lavorazioni di file piuttosto veloci.
Quando occorre ripetere simili report per una cinquantina di persone... il tempo si ferma :)
So anche che "l'esercizio" non sia dei più semplici ma, come detto, ottimizzerebbe di gran lunga parte del mio lavoro a cadenza periodica.
Saluti.
di Thyke data: 22/07/2016 15:48:53
ho allegato il file FILTRO DINAMICO.xlsm le password per gli agenti sono:
Agente 1 aaaaaa
Agente 2 bbbbbb
Agente 3 cccccc
dagli un'occhiata, il codice è aperto, se ti piace poi discutiamo sul suo funzionamento
di mb data: 26/07/2016 14:31:19
Gentilissimo thyke
in attesa di risposte da parte di dervish desideravo chiederti delucidazioni su come hai nascosto il foglio dei dati
grazie
di Vecchio Frac data: 26/07/2016 14:49:05
@mb
Non credo l'abbia fatto da codice.
Avrà probabilmente premuto il tasto destro del mouse sulla linguetta DATI e poi "Nascondi"
^_^
di mb data: 26/07/2016 14:57:01
Ciao vecchio frac
anch'io pensavo fosse così è attiva solo la possibilità di nascondere i fogli ma non di scoprirli e quindi vedere i dati dove sono non è possibile
??
o forse ho interpretato male io la spiegazione della soluzione
io conosco l'opzione nascondi (tasto dx de mouse )
oppure da codice....
di Vecchio Frac data: 26/07/2016 15:48:23
Ma tu hai chiesto solo come Thyke ha nascosto il foglio, non come lo puoi rendere visibile :)
Editor di codice (Alt-F11), finestra immediata (Ctrl-G), digita sheets("DATI").visible = True o come si chiama il foglio, io non so.
di mb data: 26/07/2016 16:51:18
ok
Grazie
di Thyke data: 26/07/2016 18:33:26
ho semplicemente impostato le proprietà dei fogli a visible = xlSheetVeryhidden dalle proprietà del foglio nell'editor del VBA, basta andare nell'editor, selezionare il foglio ed impostare la proprietà visible=xlSheetVisible
a parte questo...ti va bene come soluzione?
ciao
di mb data: 27/07/2016 14:16:53
grazie thyke
non conoscevo questa opzione sui fogli senza il necessario ausilio di una sub di vba ma modificando solo le impostazione del file
essendo solo di "passaggio" definisco molto interessante tutta al procedura
se va bene o meno bisogna chiederlo a chi ha postato la domanda per primo io sono "un'intruso"
grazie a prescindere
di Vecchio Frac data: 27/07/2016 19:30:47
cit. "io sono "un'intruso" "
---> Le discussioni sono aperte a tutti e anzi tutti dovrebbero essere invogliati a partecipare.
di Thyke data: 28/07/2016 06:19:06
@ mb
mi sono confuso...pensavo che fossi tu ad aver fatto la richiesta
in realtà era Dervish che non si è più fatto sentire.
Vuoi Approfondire?