Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

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-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi geronimo91 » 20/08/15 12:01

Buongiorno,
premetto che ho ampiamente spulciato questo ottimo forum ma essendo a digiuno di VBA e macro, trovo difficoltà nell'adattare le varie guide alla mia situazione.

Sto curando uno scadenzario degli automezzi ed attrezzature presenti in cantiere, compresi quelli dei subappaltatori.
Ho la necessità di ricevere una mail come promemoria alla mia stessa casella di posta elettronica a 7 giorni dalla scadenza delle assicurazioni e dei bolli.
Programmi utilizzati: Excel 2013 e Outlook 2013
La difficoltà che riscontro è legata al fatto che ci sono tante pagine diverse per ogni subappaltatore; inoltre le caselle da prendere in considerazione sono due e non una sola:

Immagine

Quindi, le funzioni che mi servono sono:
1) Invio mail a -7 giorni dalla scadenza dell' assicurazione (colonna H) e del libretto (colonna G) e che ciò sia valido per ciascuna delle pagine (sono tutte strutturate allo stesso modo);
2) testo della mail che comprenda nome veicolo, targa/matricola e che specifichi se sta per scadere il bollo o l' assicurazione (quest'ultima cosa se si può, altrimenti metterò un avviso generale "controlla scadenza bollo/assicurazione");
3) mi interesse sapere se questo processo possa avvenire anche automaticamente (cosa abbastanza superflua, mi servirebbe solo comprenderlo per un eventuale utilizzo futuro);
4) Potreste dirmi come inserire il comando per inviare una mail per un'eventuale altra scadenza (verifica di sollevamento)? Perché è possibile che in futuro mi possa servire anche comunicare questa informazione.


Vi ringrazio in anticipo e spero di essere stato abbastanza chiaro :D
geronimo91
Newbie
 
Post: 3
Iscritto il: 20/08/15 11:07

Sponsor
 

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Anthony47 » 20/08/15 21:59

Ciao geronimo91, benvenuto nel forum.
Dalla tua immagine non si capisce quali sono le colonne con le date da ispezionare; ho supposto la G e la H
Poi assumo che tutti i fogli siano assolutamente simili...
Cio' detto, partendo dal codice di una delle tante "Sub InvioEmail" il codice che dovrebbe andare bene per te e' questo:
Codice: Seleziona tutto
Sub Invioemail33()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=105254
Dim OutApp As Object, OutMail As Object
Dim EmailAddr As String, Subj As String
Dim BDT As String, I As Long, myCnt As Long, Elenco, FogliO           'FIN QUI E' SONO "DICHIARAZIONI"
'  (a)
Elenco = Array("Ditta1", "Ditta2", "Ditta3")        '<<< L'elenco dei fogli in cui cercare
'
BDT = "Elenco automezzi in scadenza al " & Format(Date, "yyyy-mmm-dd") & vbCrLf

For Each FogliO In Elenco
BDT = BDT & vbCrLf & vbCrLf & "SCADENZE DAL FOGLIO " & FogliO
    Sheets(FogliO).Select                               
'compilazione del testo della mail
    For I = 6 To Cells(Rows.Count, "H").End(xlUp).Row
        If IsDate(Cells(I, "H").Value) Then
            If Cells(I, "H") <= (Date + 7) Or Cells(I, "G") <= (Date + 7) Then
                BDT = BDT & vbCrLf & Cells(I, "C") & " / " & Cells(I, "D") & " - " & "Scad Lib: " & _
                    Format(Cells(I, "G"), "dd-mmm-yyyy") & "Scad Ass: " & Format(Cells(I, "H"), "dd-mmm-yyyy")
                myCnt = myCnt + 1
            End If
        End If
    Next I
Next FogliO


BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "La tua macro"
''  (b)
If myCnt = 0 Then Exit Sub                              'Nessuna scadenza, si termina senza azioni
'
'DA QUI SI CREA E INVIA LA MAIL:
Set OutApp = CreateObject("Outlook.Application")
EmailAddr = "TuaEmail@Dominio.Com"                      '<<< INDIRIZZO EMAIL
Subj = "Scadenze del " & Format(Date, "yyyy-mmm-dd")    ' OGGETTO DELLA MAIL
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Body = BDT
'.Display 'or use .send
.send
End With
Application.Wait (Now + TimeValue("0:00:04"))
'  (c)
Set OutMail = Nothing
'  (d)
Set OutApp = Nothing
'
End Sub
Le righe marcate <<< vanno personalizzate

La macro contiene un loop (For Each FogliO In Elenco / Next FogliO) che seleziona uno alla volta tutti i fogli in cui "guardare" e un secondo loop (For I = 6 To Cells(Rows.Count, "H").End(xlUp).Row /Next I) che controlla una per una le righe dei fogli.

La mail indichera' in quali fogli, Modello /Targa - scadenze relative, ma il testo puo' essere variato variando la composizione di BDT.

Uso del codice:
Da excel: Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx. Personalizza le righe marcate <<<

All'occorrenza avvierai la macro Invioemail33:
Da Excel, premi alt-F8, scegli Invioemail33 dall' elenco di macro che ti propone, premi Esegui.

Potrebbe essere utile attivare la Invioemail33 all'apertura del file.
A questo scopo, da Excel premi Alt-F11 per andare all'editor delle macro; identifica nel frame Progetto-VbaProject di sx la voce Questa-Cartella_di_Lavoro ed espandila con Doppioclick; poi inserisci questo codice nel frame vuoto di dx:
Codice: Seleziona tutto
Private Sub Workbook_Open()
    Call Invioemail33
End Sub

A questo punto la macro Invioemail33 si avviera' automaticamente all'apertura del file.

Prova e fai sapere, 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: 14208
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi geronimo91 » 21/08/15 12:11

La macro funziona perfettamente, esattamente come volevo che funzionasse, e sei stato chiarissimo anche per un newbie come me :)
Grazie mille per l'aiuto e per l'incredibile celerità della risposta... questa community è davvero grandiosa :D

P.S.
un'altra piccola informazione... come posso modificare la macro in modo che invii solo le date in scadenza e non quelle già scadute?
geronimo91
Newbie
 
Post: 3
Iscritto il: 20/08/15 11:07

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Anthony47 » 23/08/15 22:18

Io non dimenticherei le righe gia' scadute...
Piuttosto userei una colonna libera, es la N (o quella che vuoi tu) per inserire l'informazione che la pratica e' stata presa in carico, e solo in questo caso si ignora la scadenza.
Es se in N scriverai "OK" quando ricevi la notifica e avvii la pratica (ricordandoti di cancellarla quando inserisci la nuova data di scadenza...), allora devi modificare la riga If IsDate(Cells(I, "H").Value) Then in
Codice: Seleziona tutto
If IsDate(Cells(I, "H").Value) And UCase(left(Cells(I, "N"), 2)) <> "OK" Then

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: 14208
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi geronimo91 » 25/08/15 13:42

Mi interessava tralasciare le date già scadute perché ci sono alcuni mezzi spostati presso altri cantieri e ancora presenti in elenco per un eventuale ritorno (ad ognuno di essi è stato assegnato un numero specifico legato ad una determinata pratica, quindi preferisco conservarli per rendere più agevole la parte burocratica).
Però la tua soluzione è ottima, in questo modo è anche più visibile per altre persone che visioneranno il file :D

Ti ringrazio ancora per la disponibilità e per il supporto fornitomi :D Buona giornata :)
geronimo91
Newbie
 
Post: 3
Iscritto il: 20/08/15 11:07

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Fiancr » 10/02/17 18:22

Buonasera a tutti sono fiancr un nuovo iscritto
ho sfruttato anche io la macro e complimenti per il fantastico funzionamento.
Ho soltanto un problema: avrei necessità che invii la mail solo per le scadenze in arrivo entro 7 gg dalla data odierna, senza che riporti quelle già scadute.
Potreste per cortesia indicarmi quale e come modificare la relativa stringa?
Grazie anticipatamente per la collaborazione
Fiancr
Newbie
 
Post: 5
Iscritto il: 10/02/17 18:08

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Anthony47 » 11/02/17 19:59

Ciao Fiancr, benvenuto nel forum.
Nella discussione e' spiegato come evitare di continuare a inviare meno a eventi gia' sollecitati (sia che stiano nei prossimi 7 giorni, sia che siano gia' scaduti), tramite la colonna N in cui viene marcato "evento gia' preso in gestione".
Comunque se vuoi fermarti solo alle date in futura scedenza allora modificherai questa riga
If Cells(I, "H") <= (Date + 7) Or Cells(I, "G") <= (Date + 7) Then
in
Codice: Seleziona tutto
            If (Cells(I, "H") <= (Date + 7) And Cells(I, "H") <= Now) Or (Cells(I, "G") <= (Date + 7) And Cells(I, "G") <= Now) Then

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: 14208
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Fiancr » 11/02/17 20:48

Grazie tante, non ne capisco di programmazione, e prendendo un po' di qua ed un po' di la, ho messo insieme tante idee ed ho creato un simpatico scadenzario. Lunedì proverò e vi farò sapere!
E GRAZIE ANCORA, SIETE GRANDI!!!
Fiancr
Newbie
 
Post: 5
Iscritto il: 10/02/17 18:08

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Fiancr » 13/02/17 19:37

Gentili antony47,
Il codice che avete allegato funziona regolarmente ma ho sbagliato a descrivere bene le mie necessità che sono un po' più "semplici" rispetto a quello dell'amico geronimo: a me servirebbe un codice che per esempio, ogni giorno che passa mi avvisi delle scadenze future entro i 7 giorni futuri. Non so se se può fare ma con questo codice succede che oggi giorno 13/02 mi invia le mail SOLO del 20/02 (7 giorni dopo).
In realtà a me servirebbe che oggi 13/02 mi avvisi delle scadenze del 14,15,16...... fino al 20/02 rispetto alle date della sola colonna "D" a me necessaria, con la possibilità come ho letto sopra che con l'apposito codice si possa "tacitare" quella scadenza scrivendo accanto nella colonna "E" un semplice OK come segno di presa visione. Chiaramente domani 14/02, dovrà segnarmi tutti i giorni fino al 21/02 ripetendo ovviamente ciò che non è stato tacitato.
Si può fare qualcosa in merito o è troppo complesso?
A me servirebbero: colonna "A" oggetto, colonna "B" cognome e nome, colonna "C" data di esecuzione (dato solo di riferimento) e la precedente colonna "D" data verifica scadenza.
Grazie anticipatamente e perdonate la mia ignoranza in materia.
Fiancr
Newbie
 
Post: 5
Iscritto il: 10/02/17 18:08

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Anthony47 » 13/02/17 23:57

Supponiamo che sul foglio attivo, da riga 2 in avanti, la data di scadenza sia in colonna D, e in colonna E ci sia l'Ok di presa in carico di un sollecito. Colonna A e Colonna B devono essere anche loro inseriti nel corpo della mail.

La macro idonea potrebbe essere:
Codice: Seleziona tutto
Sub Invioemail44()
' http://www.pc-facile.com/forum/viewtopic.php?f=26&t=105254&p=634621#p634621
Dim OutApp As Object, OutMail As Object
Dim EmailAddr As String, Subj As String
Dim BDT As String, I As Long, myCnt As Long, Elenco, FogliO           'FIN QUI E' SONO "DICHIARAZIONI"
'  (a)
Elenco = Array("Foglio3", "Foglio4")          '<<< L'elenco dei fogli in cui cercare
'
'NELLA PROSSIMA RIGA:            '<<<< TESTO STANDARD NELLA MAIL
BDT = "Elenco automezzi in scadenza al " & Format(Date, "yyyy-mmm-dd") & vbCrLf

For Each FogliO In Elenco
BDT = BDT & vbCrLf & vbCrLf & "SCADENZE DAL FOGLIO " & FogliO
    Sheets(FogliO).Select
'compilazione del testo della mail
    For I = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If IsDate(Cells(I, "D").Value) And UCase(Left(Cells(I, "E"), 2)) <> "OK" Then
            If Cells(I, "D") <= (Date + 7) Then
                BDT = BDT & vbCrLf & Cells(I, "A") & " / " & Cells(I, "B") & " - " & "Scadenza: " & _
                    Format(Cells(I, "D"), "dd-mmm-yyyy")
                myCnt = myCnt + 1
            End If
        End If
    Next I
Next FogliO
BDT = BDT & vbCrLf & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "La tua macro"
''  (b)
If myCnt = 0 Then Exit Sub                              'Nessuna scadenza, si termina senza azioni
'
'DA QUI SI CREA E INVIA LA MAIL:
Set OutApp = CreateObject("Outlook.Application")
EmailAddr = "pippo@dominio.com"                         '<<< INDIRIZZO EMAIL
Subj = "Scadenze del " & Format(Date, "yyyy-mmm-dd")    '<<< OGGETTO DELLA MAIL
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Body = BDT
.Display 'or use .send
'.send
End With
Application.Wait (Now + TimeValue("0:00:04"))
'  (c)
Set OutMail = Nothing
'  (d)
Set OutApp = Nothing
'
End Sub

Le righe marcate <<< contengono testo (tra virgolette) che deve essere personalizzato.

Prova e fai sapere.
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: 14208
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Fiancr » 14/02/17 16:40

Perfettamente funzionante! GRANDIOSO, GRAZIE.
Unica cosa: là macro funziona solo se l'avvio io e quindi all'atto dell'apertura del file. È possibile che la stessa, lasciando il file aperto, effettui in automatico il lancio delle scadenze anche in mia assenza?(per esempio impostando un lancio della macro ogni mattino alle 07.00?
Forse chiedo troppo... Vi ringrazio!
Fiancr
Newbie
 
Post: 5
Iscritto il: 10/02/17 18:08

Re: [EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario

Postdi Anthony47 » 15/02/17 01:56

Si, si puo' fare attivando la macro col metodo OnTime. Tuttavia in questo modo potrebbe succedere che una operativita' garibaldina porti alla pianificazione di piu' invii.
D'altra parte non e' nemmeno necessario che le mail vengano ricevute in tua assenza, quindi il suggerimento e' che lasci la situazione come e' adesso, la sera chiudi il file e lo riapri alla mattina successiva.

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: 14208
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL-OUTLOOK 2013] Macro per invio e-mail scadenzario":


Chi c’è in linea

Visitano il forum: wallace&gromit e 28 ospiti