Email da estrazione Dati



  • Email da estrazione Dati
    di Ray Milano (utente non iscritto) data: 09/11/2017 12:17:24

    Buongiorno a tutti.
    Sono a chiedere l'aiuto di chi mastica VBA più di quanto ne sappia io.
    Vi spiego subito il problema che mi affligge da giorni e che mi induce a rivolgermi a voi.
    Ho un'operazione giornaliera che vorrei automatizzare per agevolare l'attività. In pratica mi ritrovo ad avere ogni mattina un file .xlsm, popolato di dati riguardanti gli SLA di diversi ticket, che ricevo durante la giornata precedente. Utilizzando i filtri, devo suddividere i record per competenze (ci sono almeno una decina di soggetti owner dei ticket), ai quali sollecitare eventuali mancanze nell'operatività e gestione dei suddetti (ticket). Per fare ciò, filtravo (appunto) i record, copiavo il risultato del filtro e lo incollavo in una email di Outlook, che inviavo ai referenti subito dopo.
    Da qualche giorno però ho trovato un modo per automatizzare il tutto, creando una macro (quella che vi posto qui sotto) che ho inserito in un pulsante. All'avvio della macro, dopo aver filtrato a mano i record a seconda dell'owner, Excel mi crea, all'interno del Foglio di lavoro (che ho chiamato "Dati"), una email preformattata (completa di testo standard) che invio subito dopo aver impostato i destinatari.
    Qui inizia il problema: prima dell'invio della email mi compare un messaggio che recita "Il foglio di lavoro contiene righe o colonne nascoste che il destinatario può scoprire: Continuare?".
    Premendo sull'opzione OK, la mail parte regolarmente. Chi riceve la email trova inseriti solo i record che ho filtrato e che lo riguardano ma facendo RISPONDI alla email, viene ESPLOSA L'INTERA TABELLA dalla quale ho estrapolato i record filtrati. Quindi, chi la riceve, è in grado di vedere tutte le attività che ho in carico: è la situazione che devo assolutamente evitare. Chi riceve quella email deve poter vedere SOLO ciò che interessa a lui.
    L'aiuto che cortesemente vi chiedo è la modifica di questo codice affinché vengano inibiti i record non filtrati, o la possibilità di impedire che alla risposta della email compaiano tutti i dati dell'intera tabella.

    Vi ringrazio fin da ora per tutto l'aiuto che potete concedermi.
    Attendo fiducioso un vostro riscontro.
     
    Private Sub FUoriSLA_Click()
       ' Select the range of cells on the active worksheet.
       ActiveSheet.Range("C1:I123").Select
       
       ' Show the envelope on the ActiveWorkbook.
       ActiveWorkbook.EnvelopeVisible = True
       
       ' Set the optional introduction field thats adds
       ' some header text to the email body. It also sets
       ' the To and Subject lines. Finally the message
       ' is sent.
       With ActiveSheet.MailEnvelope
          .Introduction = "Buongiorno." & vbCrLf & "Potreste cortesemente fornirci informazioni in merito alle seguenti chiamate, vengono effettuate oggi?" & vbCrLf & "Grazie." & vbCrLf & "[Fate Rispondi a tutti]"
          .Item.To = " "
          .Item.CC = "assistenza.unipolsai@gruppobdf.com"
          .Item.Subject = "UNIPOLSAI - Chiamate scadute/in scadenza"
          .Item.Send
       End With
    End Sub
    



  • di Albatros54 data: 09/11/2017 15:50:02

    Prova a salvare la selezione che hai filtrato in un nuovo foglio,e spedisci quel foglio con i dati filtrati.
    ti posto la macro
    ciao
    albatros54

     
    Sub Macro59()
    If ActiveSheet.AutoFilterMode = False Then
    Exit Sub
    End If
    ActiveSheet.AutoFilter.Range.Copy
    Worksheets.Add.Paste
    Cells.EntireColumn.AutoFit
    End Sub






  • di Ray Milano (utente non iscritto) data: 09/11/2017 16:32:22

    La provo subitissimo. Grazie, sei stato molto gentile.



  • di Ray Milano (utente non iscritto) data: 09/11/2017 17:56:41

    Provo un po' di imbarazzo ma... come dovrebbe funzionare la macro che mi hai gentilmente postato?
    Io ho creato un modulo nel quale l'ho inserita. Ho filtrato la selezione dei record che mi interessano ed ho lanciato la macro da Sviluppo -> Macro ma non accade nulla...
    Da profano e bbestia quale sono, dove sbaglio?



  • di albatros54 (utente non iscritto) data: 09/11/2017 18:14:23

    Nel foglio dove tu hai i tuoi dati , attiva il filtro per selezionare i record che ti interessano, dopo esegui la macro che tu hai inserito nel modulo con il tasto F5, ti dovresti trovare un nuovo foglio con i dati che tu hai filtrato
    Ciao
    Albatros54



  • di Ray Milano (utente non iscritto) data: 09/11/2017 18:28:59

    Mentre attendevo risposta ho fatto altre prove. Ho creato una macro che mi permette di fare quello che mi consigliavi tu (qui sotto il codice generato).
    Messo il pulsante sul foglio che mi viene creato dalla macro (in questo caso chiamato "Email") funziona tutto alla grande ma... zio caro, c'è sempre un ma... ora, non riscontrando righe nascoste mi fa partire in automatico la email senza chiedermi conferma dei destinatari. Cosa che invece mi occorre fare perché, come spiegavo prima, variano a seconda dei ticket.
    Domanda: Come posso impostare un comando che mi consenta di confermare l'invio della email di modo da avere la possibilità di inserire i destinatari?


     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    
    '
        Sheets.Add After:=ActiveSheet
        Sheets("Dati").Select
        Range("C1:I123").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Email").Select
        ActiveSheet.Paste
        Columns("A:A").EntireColumn.AutoFit
        Columns("B:B").EntireColumn.AutoFit
        Columns("C:C").EntireColumn.AutoFit
        Columns("D:D").EntireColumn.AutoFit
        Columns("E:E").ColumnWidth = 8.57
        Columns("E:E").EntireColumn.AutoFit
        Columns("F:F").EntireColumn.AutoFit
        Columns("G:G").EntireColumn.AutoFit
        With Worksheets("Email").Cells.Font
       .Name = "Arial"
       .Size = 10
        End With
    
    End Sub



  • di Albatros54 data: 09/11/2017 18:45:02

    L'indirizzo e-mail dove lo prende?
    Potresti inserire l'indirizzo in una cella e assegnere alla variabile item.to il valore della cella e poi lanciare la macro.
    Ciao
    Albatros54





  • di Ray Milano (utente non iscritto) data: 09/11/2017 18:52:45

    La email viene generata dal pulsante che ho inserito nel foglio Email, prendendo la parte del codice che ti allego qui sotto.
    Ho lasciato il campo .Item.To = " " appositamente vuoto poiché l'indirizzo del destinatario andrebbe selezionato dalla rubrica di Outlook (cosa che riescivo a fare dal form della email che mi viene generato dentro il foglio excel), se solo adesso non partisse in automatico in background ma potessi avere la possibilità di interagire con il modulo, come accadeva prima, quando mi evidenziava l'alert delle righe nascoste.
    Ho un range di circa 20 indirizzi email da selezionare ed ai quali inviare il messaggio di posta elettronica.

     
    ' Set the optional introduction field thats adds
       ' some header text to the email body. It also sets
       ' the To and Subject lines. Finally the message
       ' is sent.
       With ActiveSheet.MailEnvelope
          .Introduction = "Buongiorno." & vbCrLf & "Potreste cortesemente fornirci informazioni in merito alle seguenti chiamate, vengono effettuate oggi?" & vbCrLf & "Grazie." & vbCrLf & "[Fate Rispondi a tutti]"
          .Item.To = " "
          .Item.CC = "assistenza.XXXXX@XXXXX.com"
          .Item.Subject = XXXXX - Chiamate scadute/in scadenza"
          .Item.Send



  • di Albatros54 data: 09/11/2017 19:31:48

    Non vorrei dire m...te, ma credo che con questo codice, non puoi richiamare la rubrica di outlook selezionare i destinatari e poi inviare.
    Aspetto smentite
    ciao
    albatros54





  • di Luca73 data: 10/11/2017 08:42:40

    ma se togli il .send non te la invia...quindo se vuoi interagire devi togliere quella riga poi potrebbe ma qui sparo al buio potrebbe macare un .show
    Cioa
    Luca





  • di Ray Milano (utente non iscritto) data: 10/11/2017 09:33:33

    @ Albatros54
    No, non mi fa più interagire con il modulo email dal momento che, con il tuo aiuto, ho risolto il problema dell'alert.
    Prima avevo la possibilità di farlo (inconsapevolmente) solo perché alla comparsa dell'alert lo script si bloccava sulla maschera del form della email poiché premevo sull'opzione "Annulla" della maschera dell'alert.
    Adesso che il problema è risolto, all'avvio dello script mi accorgo che il codice ha fatto il suo lavoro solo da un rapido sfarfallio del monitor e dalla successiva ricezione della email (essendo io in CC), senza ovviamente però essereci l'indirizzo del destinatario.
    Per questo ti chiedevo se esiste la possibilità di inserire nello script una sorta di blocco di invio (come avveniva per l'alert) al fine di riuscire nuovamente ad avere il form della email visibile ove permettermi di impostare l'indirizzo del destinatario.

    Ancora grazie per le tue cortesi. risposte e preziosi suggerimenti.

    @ Luca
    Grazie Luca, gentilissimo. Provo a smanettare con la tua soluzione :)



  • di Ray Milano (utente non iscritto) data: 10/11/2017 10:15:05

    Grazie ragazzi. Sono riuscito ad ottenere un buon risultato grazie al vostro aiuto.
    Ci sono quasi.
    Se fosse possibile però vorrei che fosse PERFETTO.
    Mi restano adesso 2 cosucce da nulla per esperti come voi.

    1- Quando lancio la macro che mi trasferisce le celle selezionate dal filtro nella nuova pagina (Email), mi crea anche una seconda pagina che prende ID crescente (Foglio1, Foglio2, Foglio3...). Ciò mi obbliga a cancellarle ogni volta. E' possibile modificare il codice qui sotto per fare in modo che non mi apra una nuova pagina ogni volta?
    N.B.
    Se non trova la pagina che ho denominato Email, la macro non parte.

    2- Mi perde tutta la formattazione che ho dato alle celle della pagina Dati. Per comodità visiva, le celle sono suddivise per colore, dove ogni colore rappresenta uno status della pratica che ho in carico. Sarebbe bello se mi trasferisse nella nuova pagina (Email) tutte le celle selezionate mantenendo la formattazione originale.
    Per dargli un aspetto decente ho aggiunto questa parte di codice alla macro, che fa il suo dovere, ma solo limitatamente alla formattazione del carattere.

    With Worksheets("Email").Cells.Font
    .Name = "Arial"
    .Size = 10
    End With

    Vi chiedo solo quest'ultimo aiutino e poi vi coprirò di lodi in giro per il web...

    Grazie
     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    
    '
        Sheets.Add After:=ActiveSheet
        Sheets("Dati").Select
        Range("C1:I123").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Email").Select
        ActiveSheet.Paste
        Columns("A:A").EntireColumn.AutoFit
        Columns("B:B").EntireColumn.AutoFit
        Columns("C:C").EntireColumn.AutoFit
        Columns("D:D").EntireColumn.AutoFit
        Columns("E:E").EntireColumn.AutoFit
        Columns("E:E").EntireColumn.AutoFit
        Columns("F:F").EntireColumn.AutoFit
        Columns("G:G").EntireColumn.AutoFit
        With Worksheets("Email").Cells.Font
       .Name = "Arial"
       .Size = 10
        End With
    
    End Sub
    



  • di Luca73 data: 10/11/2017 11:59:05

    Ciao Giusto una pensata.
    ma se invece di copiare i dati copi il foglio, elimini i dati che non ti interessano, spedisci la mail e poi cancelli il foglio?






  • di Ray Milano (utente non iscritto) data: 10/11/2017 12:43:07

    @Luca
    L'azione che devo compiere non è molto ripetitiva (alla fine devo fare circa 20 selezioni). Però parliamo di 9 click per ogni selezione (per come la stai pensando tu), contro i 2 click per selezione (rispetto a come vorrei che venisse fatta io).
    Quello che vorrei creare con queste macro è un sistema che limiti al minimo eventuali errori umani (che potrebbero incorrere nei numerosi click) ma soprattutto, sviluppare uno strumento che possa essere utilizzato da chiunque del mio staff, poiché di facile esecuzione e comprensione.
    Grazie al tuo suggerimento di togliere il .Send ho risolto il problema.
    Adesso è perfettamente funzionante ma... mi crea una pagina di troppo (Foglio(n)) e non tiene la formattazione (colori).



  • di Ray Milano (utente non iscritto) data: 10/11/2017 12:59:44

    Ragazzi. Ho risolto anche il problema dell'apertura della pagina superflua (togliento la prima riga della macro).

    Sheets.Add After:=ActiveSheet

    Mi resta solo il problema della formattazione. Se si può fare, bene... altrimenti chiudo come risolto il thread e posto la soluzione finale.

    Grazie a tutti. Siete fantastici.



  • di Ray Milano (utente non iscritto) data: 13/11/2017 16:13:01

    Eccomi a dare la soluzione del problema che ho presentato.
    Il mio file excel si compone di 2 Fogli, così denominati: Dati (dove incollo la tabella dei Fuori SLA) e Email (dove vengono filtrate le pratiche per owner).
    Dopo aver filtrato i record delle celle (foglio Dati) che mi interessa inserire nelle email di avviso che devo inviare, utilizzando il codice (assegnato alla macro in modulo (generale) e che posto qui sotto evidenziandolo con riferimento "N1"), sposto nel foglio Email il risultato del filtro, premendo sul pulsante del menù degli strumenti denominato Macro (Alt+F8) e clicco su Esegui.

    Trasferiti i dati nel foglio Email, premo il pulsante (precedentemente creato e identificato come "FUoriSLA") al quale ho assegnato il codice con riferimento "N2".
    Inserisco la email dell'owner delle pratiche nel form di Outlook, che viene generato all'interno del foglio excel, selezionandolo dalla stessa Rubrica.

    Premo invio.
    Ed il gioco è fatto.

     
    'N1
    
    Sub Macro1()
    '
    ' Macro1 Macro
    '
    
    '
        Sheets("Dati").Select
        Range("C1:I123").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Email").Select
        ActiveSheet.Paste
        Columns("A:A").EntireColumn.AutoFit
        Columns("B:B").EntireColumn.AutoFit
        Columns("C:C").EntireColumn.AutoFit
        Columns("D:D").EntireColumn.AutoFit
        Columns("E:E").EntireColumn.AutoFit
        Columns("F:F").EntireColumn.AutoFit
        Columns("G:G").EntireColumn.AutoFit
        With Worksheets("Email").Cells.Font
       .Name = "Arial"
       .Size = 10
        End With
    
    End Sub
    ----------------------------------
    'N2
    
    Private Sub FUoriSLA_Click()
       ' Select the range of cells on the active worksheet.
       ActiveSheet.Range("C1:I123").Select
       
       ' Show the envelope on the ActiveWorkbook.
       ActiveWorkbook.EnvelopeVisible = True
       
       ' Set the optional introduction field thats adds
       ' some header text to the email body. It also sets
       ' the To and Subject lines. Finally the message
       ' is sent.
       With ActiveSheet.MailEnvelope
          .Introduction = "Buongiorno." & vbCrLf & "Potreste cortesemente fornirci informazioni in merito alle seguenti chiamate, vengono effettuate oggi?" & vbCrLf & "Grazie." & vbCrLf & "[Fate Rispondi a tutti]"
          .Item.To = " "
          .Item.CC = "assistenza.azienda@suffisso.com"
          .Item.Subject = "Azienda - Chiamate scadute/in scadenza"
          .Item.Send
       End With
    End Sub