Newsgroup: it.comp.appl.access
Titolo: Come estrarre codici assenza multipli per n dipendenti con VBA ?

Nella speranza di aver introdotto un oggetto sintetico ma chiaro allo
stesso tempo, propongo nuovamente il problema che con altro oggetto
non ha avuto fortuna.
Ho un file Excel 2007 nel quale sono riportati alcuni dati che
sintetizzo in basso
Cognome	Nome	Tp. A/P	Ore
A	FRANCESCO	C710	3,00
A	FRANCESCO	C023	8,00
A	FRANCESCO	C400	8,00
B	ANGELO	C024	5,50
B	ANGELO	C670	2,50
B	ANGELO	C670	0,07
B	ANGELO	C670	0,03
B	ANGELO	C670	0,03
B	ANGELO	C670	0,03
B	ANGELO	C400	8,00
B	ANGELO	ZZZZ	8,00
B	ANGELO	C024	5,50
B	ANGELO	C919	2,50
C	CATERINA	C023	8,00
C	CATERINA	C023	8,00
C	CATERINA	C023	8,00
C	CATERINA	C023	8,00
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	2,50
C	CATERINA	CB60	1,50
D	ENZO	ZZZZ 	1,25
E	FRANCESCO	C400	8,00
E	FRANCESCO	C670	2,50
E	FRANCESCO	C023	8,00
F	NICOLA	C014	5,50
F	NICOLA	C013	8,00
F	NICOLA	C014	5,50
Nella colonna A sono elencati i "cognomi" dei dipendenti, nella
colonna B i "nomi", nella C il "codice assenza" e nella D le "ore di
assenza". In totale i dipendenti sono 113, ma nell'esempio ne figurano
soltanto alcuni.
Le righe riportano ogni giorno di assenza dello stesso dipendente
(quindi tante righe "intestate" al dipendente X per quanti sono i
giorni in cui si è assentato - anche per pochi minuti).
Come vedete, però, il codice assenza cambia in base alla tipologia di
assenza e vi sono 21 codici possibili.
Vorrei creare un pulsante nel quale inserire il codice VBA per
ottenere approssimativamente questa disposizione su un altro foglio:
Dip.   C013   C014   C023   C024   C070   C400   C670   ecc.
A        8,00	 	 	  8,00    3,00
B      11,00	 	    8,00	  2,60    2,50     8,00
C	 	 	  24,00                          24,00
D                   1,25               8,00	  8,00    2,50
E        8,00	               11,00
Il problema è: per ognuno dei dipendenti (in questo esempio 5) vorrei
calcolare il totale delle ore (o minuti) per ogni singolo codice
assenza; da non dimenticare che ogni mese le quantità di righe per
ogni dipendente potrebbe variare in virtù delle assenze e che anche i
codici assenza, ovviamente, potrebbero essere altri. Facile a dirsi,
ma a farlo è un gran casino. Il sistema probabilmente c'è, ma non
riesco a tirar fuori nulla di buono. C'è qualcuno disposto ad
aiutarmi?  
Grazie a quanti prenderanno in considerazione il problema, Gianni

 C' qualcuno disposto ad aiutarmi ?
Eccomi.
Chiedi che qualcuno ti faccia un programma, renditi
conto. Io te lo faccio,  pero' ... :-)
ipotesi :
a)
non ci sono due nominativi uguali.
Se ci sono devi risolvere associandogli un
qualcosa che te li differenzi.
b)
I dati delle assenze sono ordinati per nominativo
Devi prendere il file excel e aggiungerci un foglio
dei risultati, diciamo R.
In R, devi predisporre la riga dei codici di assenza.
A quel punto tu sai il numero di colonna di ogni
codice. Attenzione. Siano c1,c2, ... cn questi
numeri.
Supponiamo che sia la riga n 1, e che inizi alla
colonna n. 2 (nella colonna 1 ci metti i nomi).
Poi un altro foglio dove metti il tasto C, diciamo
il foglio P. Che deve essere il primo.
I foglio dei dati grezzi sia D.
Hai dunque un workbook fatto quindi di 3 fogli :
P,R,D.
Entri nel tasto D e ci scrivi la procedura di calcolo.
Deve essere fatta cosi'
public Sub Calcola( )
- a) msgbox di richiesta di conferma all' utente
- b) pulisce il foglio R
- c) ci scrive i nuovi dati
end sub
la a) e la b) la do' per scontata.
La c) deve essere cosi' :
riga = (numero della prima riga dei dati)
colonna_codice_assenza = ...
colonna_nominativo = ...
colonna_tempo_assenza = ...
r_nome = 2
do while true
    nome = D.cells(riga, colonna_nominativo)
    tempo = D.cells(riga, colonna_tempo_assenza)
    R.cells(r_nome,1) = nome
    r_nome = r_nome + 1
    do while D.cells(riga, colonna_nominativo) = nome
        select case D.cells(riga, colonna_codice_assenza)
             case "codice assenza 1"
                 R.cells(r_nome, c1) =  _
                     R.cells(r_nome, c1) +  _
                     tempo
                case "codice assenza 2"
                 R.cells(r_nome, c2) =  _
                     R.cells(r_nome, c2) +  _
                     tempo
              .  ...
             case "codice assenza n"
                 R.cells(r_nome, cn) =  _
                     R.cells(r_nome, cn) +  _
                     tempo
         end select
         riga = riga + 1
         if (D.cells(riga, 1) = "STOP" then exit sub
    loop
loop
Devi mettere, prima della elaborazione, il testo
"STOP" alla fine dei dati.
Ciao.

 Eccomi.
Aoh, non te sbraccia' in ringraziamenti, che
me metti in imbarazzo ... ;-)

 Grazie a quanti prenderanno in considerazione il problema, Gianni
1) Query "X" dove calcoli il totale minuti per dipendente (raggruppi
Nome+Cognome e sommi le ore trasformate in minuti)...
2) Query "Y" a campi incrociati (fatta sulla query "X") per
l'organizzazione dei dati come da te descritta...
nulla + nulla - per fare cio' che hai chiesto.

 nulla + nulla - per fare cio' che hai chiesto.
Ma perche' siete sempre cosi' "incazzosi" ? :-))

 Ma scusa luii lavora in Excel nativo : come fa ?
Mmmmmm ... collegando il foglio excel come una tabella? ;)
Popi


Intendi fare una query ADO da dentro EXCEL dandogli il
driver corretto per "vedere" il foglio come una tabella ?
Certamente, ma non credo che quel Signore sia in
grado di farlo (senza offesa per nessuno).
Nel caso lo fosse, ovviamente quella sarebbe la
soluzione migliore.

 Ma perche' siete sempre cosi' "incazzosi" ? :-))
ua' proprio di me dire incazzoso e' un parolone! io sono sempre
allegro e disponibile... sono Napoletano te ne sei dimenticato? :D

 soluzione migliore.
si, lo e' ;)


Rad, Gianni ha postato in un ng che parla di Access chiedendo aiuto
per un foglio Excel.
Se non è fortunato ci sarà qualcuno che esclama "pussa via brutta
bertuccia, qua si parla di mdb non di xls".
Se è fortunato trova qualcuno che è in grado di dargli una soluzione
per Excel (magari mettendoci dentro fogli di appoggio e tutto il
codice vba per l'elaborazione).
Se è un po' meno fortunato trova qualcuno che gli dice "crea un file
mdb, collega il tuo foglio xls come una tabella, e creati 'ste due
query".
Popi

 lo collega come tabella... e' una possibilita' nativa di access...
Lo so, ma mi sembrava che Gianni volesse lavorare da *dentro*
l' excel.
Vabbe', non ho capito io. Peccato, ho faticato un pochino per
postargli il codice.

 query".
io direi l'esatto contrario... e' fortunato se incontra la soluzione
piu' adeguada al suo problema, e lo e' meno se incontra chi gli
suggerisce arzigogolamenti vari per arrivare a un obbiettivo
semplicissimo. ;)


Se vuole giochicchiare da excell, deve andare sull'NG di excell... ;)
ha chiesto sull'NG di Access per cui io gli rispondo in Acce"ssese" ;)


Of course, è solo che il mio punto di partenza era "risolvere Excel
lavorando in Excel", quindi il caso "meno fortunato" era dovuto solo
al dover utilizzare un altro sw oltre a Excel.
:)
Popi

 per un foglio Excel.
E percio' gl' ho fatto al volo un programmino che gli risolve
la vexata quaestio nel modo piu' semplice, usando solo
excel nativo.

 ha chiesto sull'NG di Access per cui io gli rispondo in Acce"ssese" ;)
E chi ti dice niente ? :-)

"radicale 004"  ha scritto nel messaggio 
news:b92b0a9f-9228-495a...@k38g2000vbn.googlegroups.com...



___________Risposta:
Quindi ci metti un attimo ad incollare il codice... o è un'altra palla anche 
questa?
MA

 questa?
In che senso "ci metto un attimo" ? Gia' gliel' ho dato !
Sta qui, in questo 3D !
MA CHE VUOI DA ME ? MA CHE T' HO FATTO ????
:-)))))
(scherzo)


Grazie. Proverň questa soluzione che sembra alla mia portata.
Saluti

nulla + nulla - per fare cio' che hai chiesto.
Rispetto alla soluzione di radicale 001, questa mi sembra più "fluida"
anche se dovrei usare access.
Ringrazio anche te.
Ciao

Popi
Come dici tu, sono stato fiducioso e per fortuna non mi é capitato il
primo caso.
Grazie

semplicissimo. ;)
Va bene cosě Pablito. Mi servivano dei suggerimenti che mi
avvicinassero alla soluzione poiché, davvero, non sapevo da dove
cominciare.
Ciao

 ha scritto:

E te ne sono grato. Mi hai insegnato qualcosa ed il tuo suggerimento -
ne sono certo - mi aiuterą a risolvere il problema.
Grazie ancora, ciao

 wrote:

Va benissimo, proverò anche la tua soluzione.
Grazie mille, ciao

 anche se dovrei usare access.
Appunto. :-))

 wrote:

Infine hop risolto usando la tua soluzione.
Grazie, ciao

 Grazie, ciao
Giusto, ma a questo punto la prossima volta non chiedere qua...
chiedi su microsoft.public.it.office.excel
Questo e' un NG di Access, e quindi di Access si parla. ;)

 Questo e' un NG di Access, e quindi di Access si parla. ;)
Stai a rosica' eh ? Famme senti', famme senti' ... :
"Rosich", Risich" ... Si. stai a rosica'. E io godo. :-)))
(scherzo, non t' arrabbia')

> >> anche se dovrei usare access.

ok, starò più attento, ciao

 (scherzo, non t' arrabbia')
ma figurati... ;)