Ciao Luigi, benvenuto nel forum.
Supponendo che tu utilizzi Outlook come client di posta elettronica, ho elaborato una delle tante macro di Invio Email ti propongo questa versione:
- Codice: Seleziona tutto
Sub InvioemailB811()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=110177
''Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=105944
''Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=104487
'
Dim OutApp As Object, OutMail As Object
Dim EmailAddr As String, Subj As String, myShips, Ship
Dim CScad As String, cFree As String, wDays As Long
Dim BDT As String, I As Long, myCnt As Long 'FIN QUI SONO "DICHIARAZIONI"
' (a)
'Parametri
CScad = "M" '<<< La colonna con le date di Scadenza
cFree = "Z" '<<< Una colonna LIBERA
wDays = 15 '<<< I giorni di preavviso desiderati
myShips = Array("Foglio1", "Foglio2") '<<< Elenco dei fogli da esaminare
'
BDT = "Alert per Contratto in scadenza al " & Format(Date, "yyyy-mmm-dd") & vbCrLf
'Si crea una sessione Outlook
Set OutApp = CreateObject("Outlook.Application")
For Each Ship In myShips
Sheets(Ship).Select
For I = 2 To Cells(Rows.Count, CScad).End(xlUp).Row
If Cells(I, CScad) < (Date + wDays) Then
If Cells(I, cFree) + 7 < Date Then
Cells(I, cFree).Value = Date
'Si compila il testo della mail
BDT = BDT & Cells(I, "A").Value & " " & Cells(I, "B").Value & _
" - Scadenza: " & Format(Cells(I, CScad).Value, "dd-mmm-yyyy") & vbCrLf
myCnt = myCnt + 1
BDT = BDT & "La tua macro"
'
'DA QUI SI CREA E INVIA LA MAIL:
EmailAddr = "TuaEmail@Dominio.ppp" '<<< TUO INDIRIZZO EMAIL
Subj = "Prossime Scadenze al " & Format(Date, "yyyy-mmm-dd") & " - " & myCnt '<<< OGGETTO DELLA MAIL
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
' .CC = Cells(I, "D") '<<< In Copia al Cliente?? Colonna D???
' .BCC = ""
.Subject = Subj
.Body = BDT
'.Display 'or use .send
.send
End With
' (c)
Application.Wait (Now + TimeValue("0:00:01"))
Set OutMail = Nothing
End If
End If
Next I
Next Ship
' (d) Chiudi Outlook
Set OutApp = Nothing
If myCnt > 0 Then
MsgBox ("Prossime scadenze: " & myCnt)
Else
MsgBox ("Nessuna prossima scadenza rilevata...")
End If
'
End Sub
Il codice va inserito in un "Modulo standard" del vba:
-dal tuo foglio excel, premi Alt-F11 per aprire l' editor delle macro
-Menu /Inserisci /Modulo
-copia il codice e inseriscilo nel frame di dx
Le istruzioni marcate <<< vanno personalizzate come da commento sulla linea.
Non conoscendo il layout dei tuoi dati ho inventato io quali vanno prese in considerazione; le eventuali variazioni sono da fare nelle righe marcate <<<
La macro prevede che si possa lavorare anche su piu' Fogli (ad esempio per un Agente che gestisce piu' Compagnie), e richiede l'uso di una colonna LIBERA che sara' utilizzata per marcare la data di prima segnalazione, cioe' invio della prima email; se dopo 7 giorni la scadenza non e' stata ancora aggiornata allora sara' inviata una ulteriore email, e cosi' ogni 7 giorni.
La macro prevede l'invio al tuo indirizzo email, ma e' gia' predisposta per l'invio in copia al Cliente; basterebbe eliminare l' Apostrofo in tesa alla riga
.CC = Cells(I, "D").
Ma mi permetto di suggerire che l'email al cliente la inoltri tu dopo aver verificato la correttezza di quanto segnalato. Vedi tu.
Se non usi Outlook allora si puo' cercare qualche altro metodo, ma meno automatizzato.
Prova e fai sapere