Condividi:        

Creazione file csv da elenco di turni

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

Creazione file csv da elenco di turni

Postdi Jake-Kast » 10/10/16 20:50

Buonasera a tutti.

A lavoro sto cercando di realizzare dei tool per ottimizzare la gestione delle schedulazioni dei dipendenti. Al momento, in particolare, ho creato un file di scelta dei turni da parte dei dipendenti strutturato come da allegato.

Il dipendente va sul foglio "scelta dei turni" e seleziona con un "prenotato" quelli che vuole, poi un moderatore guarda che sia tutto a posto e da l'ok.

Ora per caricare su sistema informatico la scelta dei turni avrei bisogno di esportare i dati di quel foglio in un file csv, sempre come da allegato, con sole tre colonne, senza intestazioni, che riporti: data; id del dipendente; id del turno
All'interno del file in questione ho già un foglio a parte con gli id dei dipendenti e un altro foglio con gli id dei turni.

E' possibile secondo voi creare una macro, magari da assegnare ad un pulsante, per fare tutto il lavoro in autonomia? Come?

Grazie in anticipo e buona serata.

http://www.filedropper.com/toolsceltaturni
Jake-Kast
Newbie
 
Post: 7
Iscritto il: 06/12/10 11:25

Sponsor
 

Re: Creazione file csv da elenco di turni

Postdi Anthony47 » 11/10/16 01:49

In A1, B1 e C1 di foglio CSV metti rispettivamente queste formule:
Codice: Seleziona tutto
=SE(B1<>"";'Selezione Turni'!A2;"")

=SE.ERRORE(CERCA.VERT(INDICE('Selezione Turni'!$A$1:$I$1;1;PICCOLO(SE('Selezione Turni'!F2:I2<>"";RIF.COLONNA('Selezione Turni'!F2:I2);"");1));'data Dip'!A:B;2;0);"")

=SE.ERRORE(INDICE('data Turni'!B$1:B$100;CONFRONTA(TESTO('Selezione Turni'!B2;"hh:mm");SINISTRA('data Turni'!A$1:A$100;5);0));"")

Le ultime due sono da confermare con Contr-Maiusc-Enter, non il solo Enter
Copia poi queste tre righe verso il basso per quante righe pensi di dover compilare.

Poi ti bastera': andare sul foglio CSV, copiarlo su un nuovo file (tasto dx sul tab col nome CSV, scegli Sposta o copia, spunta Crea una copia e scegli Copia i fogli selezionati in "(nuova cartella)"; salvi questo foglio appena creato col formato CSV; chiudi il file e torni al file principale.
Puoi crearti una macro con tutte queste operazioni tramite il registratore di macro; poi eventualmente la associ a un pulsante che metti su uno dei fogli.

Per le istruzioni su come registrare una macro:
viewtopic.php?f=26&t=103893&p=622593#p622593

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

Re: Creazione file csv da elenco di turni

Postdi Jake-Kast » 11/10/16 19:41

Grazie mille Anthony per la veloce [e notturna] risposta, ho provato e funziona; però ora mi sto scervellando per capire come posso adattarla in caso sulla stessa linea del turno ci siano più "prenotato", perché magari di quel turno ce n'è bisogno di più di uno e più di un dipendente lo sceglie.

Penso che probabilmente basta cambiare i riferimenti delle formule nelle celle di CSV in modo da avere una colonna per dipendente e poi unire a mano in una colonna unica, ma mi sembra macchinoso.

C'è un modo per automatizzare?

Un saluto.
Jake-Kast
Newbie
 
Post: 7
Iscritto il: 06/12/10 11:25

Re: Creazione file csv da elenco di turni

Postdi Anthony47 » 11/10/16 22:53

Per avere fino a 3 Id, modifica la seconda formula in
Codice: Seleziona tutto
=ANNULLA.SPAZI(CERCA.VERT(INDICE('Selezione Turni'!$A$1:$I$1;1;PICCOLO(SE('Selezione Turni'!F2:I2<>"";RIF.COLONNA('Selezione Turni'!F2:I2);"");1));'data Dip'!A:B;2;0)&"  "&SE.ERRORE(CERCA.VERT(INDICE('Selezione Turni'!$A$1:$I$1;1;PICCOLO(SE('Selezione Turni'!F2:I2<>"";RIF.COLONNA('Selezione Turni'!F2:I2);"");2));'data Dip'!A:B;2;0);"")&"  "&SE.ERRORE(CERCA.VERT(INDICE('Selezione Turni'!$A$1:$I$1;1;PICCOLO(SE('Selezione Turni'!F2:I2<>"";RIF.COLONNA('Selezione Turni'!F2:I2);"");3));'data Dip'!A:B;2;0);""))

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

Re: Creazione file csv da elenco di turni

Postdi Jake-Kast » 12/10/16 09:32

Grazie di nuovo, prima di tutto.

Il sistema su cui devo caricare il CSV, purtroppo, necessità di un solo id dipendente per riga. Secondo te come posso fare per separarli su righe diverse?

Un saluto.
Jake-Kast
Newbie
 
Post: 7
Iscritto il: 06/12/10 11:25

Re: Creazione file csv da elenco di turni

Postdi Anthony47 » 13/10/16 01:23

Cosa devi fare? Innanzitutto una analisi piu' dettagliata di quel che devi fare e dei vari scenari, "poi" chiedere aiuto.

Allora passiamo alla soluzione macro...
Metti in un Modulo standard del vba questa macro
Codice: Seleziona tutto
Sub TurniCsv()
Dim myiDD, myiDT, myOut As String, nextFN As Integer
Dim I As Long, J As Long
'
Sheets("Selezione Turni").Select
myFile = "Pippo_" & Format(Now, "yyyy-mm-dd_hh-mm-ss") & ".csv"  '****
nextFN = FreeFile
Open ThisWorkbook.Path & "\" & myFile For Output As #nextFN
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If Application.WorksheetFunction.CountA(Range(Cells(I, 4), Cells(I, 25))) > 0 Then
        myiDT = Application.VLookup(Format(Cells(I, 2), "hh:mm") & "-" & Format(Cells(I, 3), "hh:mm"), Sheets("data Turni").Range("A1:B1000"), 2, 0)
        If IsError(myiDT) Then myiDT = ""
        For J = 4 To 25
            If Cells(I, J) <> "" Then
                myiDD = Application.VLookup(Cells(1, J).Value, Sheets("data Dip").Range("A1:B1000"), 2, 0)
                If IsError(myiDD) Then myiDD = ""
                Write #1, Format(Cells(I, 1), "dd/mm/yyyy"), myiDD, myiDT
'                Debug.Print myOut
            End If
        Next J
    End If
Next I
Close #nextFN
End Sub
Lanciala, dovrebbe creare un file col nome impostato nella riga marcata *** con aggiunta la desinenza yyyy-mm-dd_hh-mm-ss, posizionato nella stessa directory dove e' gia' stato salvato il file Excel.
Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19183
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creazione file csv da elenco di turni

Postdi Jake-Kast » 13/10/16 15:52

:roll: chiedo venia, lo scenario era completo nella mia mente, ma nell'ipotesi che vi ho fatto ho dato per scontato alcune cose, lo ammetto. Grazie per la pazienza e per l'aiuto.

Ho provato e modificato sull'esigenza del file reale la macro e funziona alla grande. Rimane solo un piccolo problema, credevo infatti che bastasse rendere la riga così,
Codice: Seleziona tutto
                Write #1, myiDD, Format(Cells(I, 1), "dd/mm/yyyy"), myiDT

per fare in modo che nel csv mi venisse prima l'id dipendente e poi la data e l'id turno (si, avevo detto diversamente, è che sto imparando via via come funziona il sistema), ma quando vado a lanciarla, e ad aprire il csv estratto,vedo che le date sono, si al posto giusto, ma tutte fra virgolette [""]. Cos'è che non ho capito?

Inoltre, quando mi salva il csv, invece di separarmi le stringhe con i punti e virgola"id_dip;data;id_turno" me li separa con delle virgole semplici "id_dip,data,id_turno". Infatti invece di essere su celle separate, riaprendolo su excel sono tutte su un'unica cella. Mi sa che creerà problemi caricandolo.
Jake-Kast
Newbie
 
Post: 7
Iscritto il: 06/12/10 11:25

Re: Creazione file csv da elenco di turni

Postdi Anthony47 » 13/10/16 23:28

Allora invece della riga Write #1, myiDD, Format(Cells(I, 1), "dd/mm/yyyy"), myiDT usa
Codice: Seleziona tutto
                Print #1, myiDD & ";" & Format(Cells(I, 1), "dd/mm/yyyy") & ";" & myiDT

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

Re: Creazione file csv da elenco di turni

Postdi Jake-Kast » 14/10/16 22:35

Funziona perfettamente, grazie.
Un saluto.
Jake-Kast
Newbie
 
Post: 7
Iscritto il: 06/12/10 11:25


Torna a Applicazioni Office Windows


Topic correlati a "Creazione file csv da elenco di turni":


Chi c’è in linea

Visitano il forum: Nessuno e 55 ospiti