Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Esportazione condizionata di alcuni campi

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] Esportazione condizionata di alcuni campi

Postdi pivelloVBA » 07/10/09 12:46

Salve a tutti e complimenti per la vostra competenza e disponibilità.

Dal mio nick potete evincere il mio livello di competenza, per cui mi vedo "costretto" a chiedere aiuto, mi sembra di aver trovato cose simili nel forum, ma non proprio uguali.

Cerco di essere chiaro:

ho a che fare con una tabella di turni di lavoro classica:
------------------------ lun----------------mar----------------mer --------------gio--------------ven
tizio------------------8.00-12.00
caio
sempronio--------------------------------------------------8.00-12.00
flavio
martino---------------8.00-12.00

la macro che vorrei creare dovrebbe, dato in input il giorno (ma andrebbero bene anche 5 macro diverse per ogni giorno, da eseguire giornalmente) controllare l'orario di lavoro della persona e, se corrisponde a un certo orario, inserire il nome della persona in un file di word (o di testo). Nel caso specifico se l'orario di interesse è 8.00-12.00, il lunedi si dovrà generare un file contenente tizio e martino, il martedi un file vuoto, il mercoledi un file contenente sempronio e cosi' via.

N.B. credo non cambi la sostanza ma la tabella di excel è inserita in un file di word, nonostante tutto se dovesse fare la differenza allora posso costringere chi la utilizza a rifarne una ex novo in Excel.

Grazie anticipatamente a tutti.
pivelloVBA
Newbie
 
Post: 5
Iscritto il: 07/10/09 12:23

Sponsor
 

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi Flash30005 » 07/10/09 17:03

pivelloVBA ha scritto:la macro ...dovrebbe, dato in input il giorno ...controllare l'orario di lavoro della persona e, se corrisponde a un certo orario

Dove lo prende l'orario di lavoro della persona?
E
dove va a prendere "quel certo orario" di corrispondenza?

Per il resto è fattibile

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi pivelloVBA » 08/10/09 11:07

Ciao Flash,

ti ringrazio della tempestività, sono certo che per te sia un giochetto realizzare la macro. Nonostante tutto il sospetto di essermi espresso male è diventato una certezza. Ci riprovo...

In pratica ogni cella della tabella contiene solo orari di servizio, quindi è in ogni cella che la macro deve controllare e "prendere" il valore. Anche se in realtà non è che lo prenda, deve solo verificare che, se l'orario è 8.00-12.00, allora la persona deve essere "iscritta" nella lista che poi è un file di testo o .doc.

La tabella che vedi nella mia richiesta iniziale contiene tutti campi vuoti dove, nei fatti, può esserci qualunque orario, io per brevità non avevo scritto nulla e avevo solo inserito i turni 8.00-12.00 che sono quelli di mio interesse. In realtà si può avere una situazione del tipo:


------------------------LUNEDI---------------MARTEDI---------------MERCOLEDI--------------GIOVEDI--------------VENERDI

tizio------------------8.00-12.00------------9.00-15.00------------9.00-15.00------------9.00-15.00------------9.00-15.00
caio------------------9.00-15.00------------9.00-15.00------------9.00-15.00------------9.00-15.00------------9.00-15.00
sempronio-----------9.00-15.00------------9.00-15.00------------8.00-12.00------------9.00-15.00------------9.00-15.00
flavio-----------------9.00-15.00------------9.00-15.00------------9.00-15.00------------9.00-15.00------------9.00-15.00
martino---------------8.00-12.00------------9.00-15.00------------9.00-15.00------------9.00-15.00------------9.00-15.00

la macro che vorrei creare dovrebbe, dato in input il giorno (ma andrebbero bene anche 5 macro diverse per ogni giorno, da eseguire giornalmente) controllare l'orario di lavoro della persona dalla cella e, se corrisponde a 8.00-12.00, inserire il nome della persona in un file di word (o di testo).

Nel caso della tabella di sopra il lunedi si genererà LUNEDI.TXT:
-------------------------------------------------
aventi diritto mensa:

tizio
martino
-------------------------------------------------
Il martedi si genererà MARTEDI.TXT:

FILE VUOTO
-------------------------------------------------
Il mercoledi genererà MERCOLEDI.TXT:

aventi diritto mensa:

sempronio
-------------------------------------------------


E cosi' via...

Stavolta spero di essere stato chiaro, spero tu mi possa aiutare, grazie mille in anticipo, ciao!
pivelloVBA
Newbie
 
Post: 5
Iscritto il: 07/10/09 12:23

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi pivelloVBA » 08/10/09 11:12

OOPS solo ora capisco dove mi spiegavo male!

Ho scritto "dato in input il giorno", in effetti qualcuno deve dire alla macro che giorno è oggi e quindi dovrebbe leggerlo da tastiera o in qualche altro modo, oppure posizionandosi sulla colonna corrispondente, non importa. Se è troppo complesso puo' ogni giorno generare tutti e 5 i file da lunedi a venerdi, non importa, i 4 file inutili si possono cancellare in batch o manualmente, è lo stesso...

Compito della macro è scorrere tutti i servizi di tizio, caio, etc per ogni giorno e generare il file dove inserire i nomi ogni volta che trova 8.00-12.00

GRAZIE ANCORA
pivelloVBA
Newbie
 
Post: 5
Iscritto il: 07/10/09 12:23

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi pivelloVBA » 08/10/09 11:19

In effetti devo ancora spiegarmi meglio, scusa ancora...

Gli orari che fanno iscrivere i nostri eroi nell'elenco sono 3 e sono fissi, quindi non si devono inserire, basta specificarli nella macro perchè non varieranno.

Credo che la soluzione piu semplice è creare 5 macro uguali, una per ogni giorno, se è martedi uso la macro chiamata "martedi" che si occupa di scorrere in verticale l'orario di lavoro di ogni persona, solo nella colonna martedi.

Con 5 macro uguali dove cambia solo il nome, credo sia piu' facile.

Grazie ancora
pivelloVBA
Newbie
 
Post: 5
Iscritto il: 07/10/09 12:23

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi Flash30005 » 08/10/09 14:35

Una macro che può fare quanto cerchi potrebbe essere questa:
Codice: Seleziona tutto
Public Perc, NomeM, NomeG As String, Pass As Integer
Sub CreaReport()
Pass = 0
UR = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Foglio1").Range("A1:F1").Interior.ColorIndex = 0
GiorO = UCase(Format(Range("H1").Value, "ddd"))
For CG = 2 To 6
GiorS = Mid(Cells(1, CG).Value, 1, 3)
    If GiorS = GiorO Then
        GiSt = CG
    End If
Next CG
NomeG = Cells(1, GiSt)
    For RN = 2 To UR
        If Cells(RN, GiSt).Value = "8:00-12:00" Then
        NomeM = Cells(RN, 1).Value
        'MsgBox NomeM
       Call GeneraTxt
        End If
    Next RN
    If NomeM = "" Then MsgBox "Non ci sono utenti aventi diritto a mensa " & NomeG
Worksheets("Foglio1").Range("H1").FormulaR1C1 = "=TODAY()"
End Sub
Sub GeneraTxt()
Perc = "C:\"
Ftxt = NomeG
    If Dir(Perc & "MensaTxt", vbDirectory) = "" Then
        MkDir (Perc & "MensaTxt")
    End If
    DataF = Mid(Date, 7, 4) & Mid(Date, 4, 2) & Mid(Date, 1, 2)
    If Pass = 0 Then
        Open Perc & "MensaTxt\" & DataF & "_" & Ftxt & ".txt" For Append As #1
        Print #1, "Aventi diritto mensa:"
        Print #1,
        Pass = 1
    Close #1
    End If
    Open Perc & "MensaTxt\" & DataF & "_" & Ftxt & ".txt" For Append As #1
    Print #1, NomeM
 Close #1
End Sub

con questo codice dirattamente sul foglio1
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$H$1" Then Exit Sub
Range("A1:F1").Interior.ColorIndex = 0
   GiorO = UCase(Format(Range("H1").Value, "ddd"))
For CG = 2 To 6
    GiorS = Mid(Cells(1, CG).Value, 1, 3)
    If GiorS = GiorO Then
        Cells(1, CG).Interior.ColorIndex = 6
    End If
Next CG
End Sub

e ques'altro in ThisWorkbook
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A1:F1").Interior.ColorIndex = 0
End Sub
Private Sub Workbook_Open()
    Worksheets("Foglio1").Range("H1").FormulaR1C1 = "=TODAY()"
End Sub

In H1 avrai il giorno attuale e si evidenzierà nel prospetto settimanale e con il comando apposito verrà creato il file AnnoMeseGiorno_GiornoSettimana .Txt nella directory C:\MensaTxt\
Il giorno H1 può essere cambiato manualmente mettendo solo 3 lettere del giono interessato (es. Lunedì digita lun, Martedì digita mar etc). ad ogni fine elaborazione o al riavvio del file verrà ripristinato il giorno attuale.
Ma, per evitare errori, ti invio direttamente il file che puoi prelevare Qui

Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi Anthony47 » 08/10/09 14:40

Guarda quanto postato da Flash subito prima di questo messaggio.
Pero' io tornerei all' analisi del problema:
L' obiettivo finale, quale e' (non dire "generare N file txt", perche' quello e' il modo con cui hai pensato di risolvere il problema...)? E perche' chiedi di generare dei file txt quando quelle indicazioni le puoi avere gia' in excel?
E i vari elenchi ti servono giornalmente (oggi quello di giovedi', domani quello di venerdi', etc), o a consuntivo, o preventivo? E' giusta la mia interpretazione che nella tabella Nominativo/Giornate ci sono "stringhe" non campi "orari"?
Come vedi, per ora da parte mia solo domande :) ; se quanto proposto da Flash non risolve (non avendo capito il problema non so valutare la soluzione) rispondi anche a questi miei dubbi per avere un aiuto efficace.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi pivelloVBA » 08/10/09 15:25

Ciao a tutti,

che dire? Secondo me voi non date consigli ma fate uscire la gente dai guai. Dovremmo pagarvi in pratica...

Diciamo che ne guadagnerà il vostro karma...

Non ho ancora provato la soluzione di Flash che, avendo capito il mio livello, mi ha pure mandato la macro pronta, pero' credo abbia interpretato ciò che intendevo dire, infatti rispondo ad Anthony che in effetti si ho le informazioni che mi servono in Excel, ma mi serve preparare una lettera con l'elenco dei nomi, quindi tali dati devono "uscire" dal foglio di Excel e credo che Flash mi abbia interpretato appieno (nonostante la mia scarsa spiegazione). Anthony ha pero' ragione a dire che i campi sono tutti stringhe in effetti e non orari.

Sto sintonizzato anche se spero di aver risolto.

GRAZIE A TUTTI E DUE, continuero' a seguire il forum da iscritto e non da lurkatore.....
pivelloVBA
Newbie
 
Post: 5
Iscritto il: 07/10/09 12:23

Re: [Excel] Esportazione condizionata di alcuni campi

Postdi Flash30005 » 08/10/09 19:04

Informaci se tutto ok ;)
pivelloVBA ha scritto:... ma mi serve preparare una lettera con l'elenco dei nomi,...

quale programma utilizzi per l'email? :roll:
Volendo potresti rendere il tutto automatico (anche la spedizione dell'email con allegato il file testo) ;)

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Esportazione condizionata di alcuni campi":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti