Condividi:        

invio automatico mail al verificarsi di una data

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

invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 10/06/15 17:56

Ciao ragazzi, sono nuovo del forum e quindi mi pare doveroso salutarvi e ringraziarvi in anticipo per la vostra disponibilità.
Come ho scritto nel titolo avrei bisogno di un aiuto per completare un programmino in excel che ad una data scadenza invii
una mail automatica.
Gestisco un piccolo magazzino con dei prodotti che hanno delle scadenze, seguendo un vostro forum precedente sono riuscito a creare il foglio di lavoro con 2 pulsanti che corrispondono a 2 macro che servono una a "gestire" il foglio delle scadenze e l'altra che invia la mail con allegato il file excel. Quello che vorrei fare(non riuscendoci!!) è di creare una macro che al verificarsi di una scadenza in una determinata data invii in maniera automatica la mail. Quindi, ho creato una cella dove ho inserito la data odierna(=oggi()), un'altra dove inserisco quanti giorni in anticipo voglio essere avvisato prima della scadenza(es. 10 giorni prima della data di scadenza) e, infine, l'ultima cella che contiene la data in cui deve partire la mail automatica, cioè, la data di scadenza del prodotto meno i giorni di anticipo. (es. =O3-O6, data scadenza 10/06/2015, giorni di anticipo 5, data invio mail automatica 05/06/2015).
aspetto vostre notizie.
grazie
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Sponsor
 

Re: invio automatico mail al verificarsi di una data

Postdi Flash30005 » 11/06/15 00:47

Ciao CiccioIlPacco e benvenuto nel Forum

Se hai già la macro che invia ti occorre solo una condizione ammettendo che la data scadenza sia nella colonna "C"
Codice: Seleziona tutto
Sub VerifData()
If Date >= Range("Cxx").value then
'macro invio email
endif
End Sub


Però così rischi di inviare due volte la stessa email quindi occorre un controllo di email inviata
allora potrai procedere usando una colonna check di email inviata (esempio colonna "Z")
Codice: Seleziona tutto
Sub VerifData()
If Date >= Range("Cxx").value and range("Zxx").value = "" then
'macro invio email
range("Zxx").value = 1
endif
End Sub

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 11/06/15 08:26

Ciao Flash30005, ti ringrazio per la risposta.
Allora, io ho questo codice:
Codice: Seleziona tutto
Sub SendList()
'Crea copia del foglio in Temp
ActiveSheet.Copy
TempFile = Environ$("temp") & "\ciccio.xls"   'Salva in Temp un file pippozczc.xls
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=TempFile, _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
Application.DisplayAlerts = True
Workbooks("ciccio.xls").Close savechanges:=False
'
'Codice per l' invio email
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String                     
'
EmailAddr = "aaa@dominio.it"     
'
'  (a)
Set OutApp = CreateObject("Outlook.Application")
''compilazione di un testo standard di accompagnamento   
BDT = "Elenco prodotti in scadenza"
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "CiccioILpacco"
''  (b)
'Nominat = Sheets("Scheda").Range("C5").Value
OutFile = Environ$("temp") & "\ciccio.xlsSubj = "Prodotti Magazzino"   

Set OutMail = OutApp.CreateItem(0)     With OutMail
.To = "bbb@dominio.it"
.CC = ""
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
.Display 'or use .send
'.send
End With
'  (c)
Set OutMail = Nothing
'
'  (d)
Set OutApp = Nothing
    Application.Wait (Now + TimeValue("0:00:04"))
    Application.SendKeys "%a"
    Application.Wait (Now + TimeValue("0:00:04"))

che, come già detto ho copiato da un vostro forum precedente, infatti, alcune parti del codice non le ho nemmeno capite bene, tipo
Codice: Seleziona tutto
(Nominat = Sheets("Scheda").Range("C5").Value)
 Set OutApp = Nothing
    Application.Wait (Now + TimeValue("0:00:04"))
    Application.SendKeys "%a"
    Application.Wait (Now + TimeValue("0:00:04"))

Comunque, gentilmente, mi puoi dire dove integrare il tuo codice? nel tuo esempio colonna Cxx, xx intendi la posizione ovviamente, per esempio c5 o c15. Infine, non ho capito cosa intendi per colonna di check, cosa dovrebbe fare la colonna z? contare le mail inviate di volta in volta?
mi scuso per le domande che, immagino per te, possono sembrare stupide.
grazie
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 11/06/15 09:42

Un altra cosa, al volo, come posso fare prove di funzionamento senza aspettare che si verifichi la data. In pratica, per fare delle prove devo aspettare per forza domani (perchè come data più vicina ci metto quella del giorno dopo) oppure si può provare in qualche altro modo, tipo che metto la data di oggi chiudo il programma e vedo se invia la mail automaticamente.
grazie 1000!!!
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi Flash30005 » 11/06/15 12:50

Io non so se invii la tua email sempre allo stesso utente oppure gli utenti si trovano in una colonna specifica e, in questo, caso
l'indirizzo di destinazione dovrà cambiare in funzione della rispettiva cella di data scadenza.

Meglio sarebbe se inviassi un file di esempio
seguendo questa procedura

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 11/06/15 16:10

ciao, guarda la mail deve essere mandata a 3 indirizzi che saranno sempre gli stessi.
ti invio il link dropbox dove c'è la cartella di lavoro, è una versione "base" perchè prima di aggiustare il tutto voglio che almeno funzioni per quello che mi sono posto di fargli fare.
link:
https://www.dropbox.com/s/bu007pvimnbrw ... .xlsm?dl=0
puoi fare tutte le modifiche che vuoi e dirmi come lo cambieresti tranquillamente, sono qua per ascoltare consigli.
Come al solito ringrazio sopratutto te Flash30005 e chiunque avrà voglia di dire la sua.
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi Flash30005 » 12/06/15 00:10

Questa è la macro che potrebbe funzionare nel foglio da te inviato
Non ho capito il significato delle celle che controllano la scadenza in colonna "O"
Pertanto, al momento ma modificabile, ho optato per utilizzare la colonna "E" con testata "GG Ant" per determinare singolarmente l'anticipo di invio email per ogni riga e in colonna "F" il CheckInvio
Codice: Seleziona tutto
Sub VerifData()
UR = Range("D" & Rows.Count).End(xlUp).Row
For RR = 4 To UR
If Date >= Range("D" & RR).Value - Range("E" & RR).Value And Range("F" & RR).Value = "" Then
'macro invio email <<<< qui richiamerai la tua macro di invio email
Range("F" & RR).Value = "Inviata"
End If
Next RR
End Sub


Come dicevo l'anticipo di 5 giorni se sono sempre uguali per tutti puoi inserirlo direttamente nella macro
sostituendo la riga della condizione con
Codice: Seleziona tutto
If Date >= Range("D" & RR).Value - 5 And Range("F" & RR).Value = "" Then

Oppure inserito quel valore in una cella del foglio che indicherai nella macro
nel tuo caso hai l'anticipo in O5 quindi la riga codice sarà

Codice: Seleziona tutto
If Date >= Range("D" & RR).Value - [O5] And Range("F" & RR).Value = "" Then


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 12/06/15 08:14

ciao, grazie per la disponibilità, ho modificato il codice spero di averlo fatto bene, ho seguito alla lettera quello che mi hai detto ed ho fatto così:
Codice: Seleziona tutto
Sub SendList()
'Crea copia del foglio in Temp
ActiveSheet.Copy
TempFile = Environ$("temp") & "\ciccio.xls"   
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=TempFile, _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
Application.DisplayAlerts = True
Workbooks("ciccio.xls").Close savechanges:=False
'
Sub VerifData()
UR = Range("D" & Rows.Count).End(xlUp).Row
For RR = 4 To UR
If Date >= Range("D" & RR).Value - 1 And Range("F" & RR).Value = "" Then
'macro invio email <<<< qui richiamerai la tua macro di invio email
'Codice per l' invio email
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String                   
'
EmailAddr = "nome@dominio.it"     
'
'  (a)
Set OutApp = CreateObject("Outlook.Application")
''compilazione di un testo standard di accompagnamento 
BDT = "Si trasmette l' elenco dei prodotti in scadenza"
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "Ciccio"
''  (b)
'Nominat = Sheets("Scheda").Range("C5").Value
OutFile = Environ$("temp") & "\ciccio.xls"     
Subj = "Elenco prodotti in scadenza"   
Set OutMail = OutApp.CreateItem(0)     
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
.Display 'or use .send
'.send
End With
'  (c)
Set OutMail = Nothing
'
'  (d)
Set OutApp = Nothing
    Application.Wait (Now + TimeValue("0:00:04"))
    Application.SendKeys "%a"
    Application.Wait (Now + TimeValue("0:00:04"))
'
End Sub
Range("F" & RR).Value = "Inviata"
End If
Next RR
End Sub


Con questo codice nella colonna D scrivo la scadenza accanto ad ogni prodotto e lui automaticamente 1 giorno(in questo caso) prima della scadenza mi invia una mail, giusto?
Inoltre, come posso provare a vedere se funziona, ho inserito che voglio esser avvisato un giorno prima, quindi , devo aspettare per forza domani oppure c'è un altro modo.
grazie
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi Flash30005 » 13/06/15 03:11

Beh dovrebbe funzionare
Non uso Ms Outlook pertanto non posso provarla
Lo schema comunque è questo
Immagine

ma visto che hai optato che i giorni in anticipo li inserirai fissi nella macro puoi non tenerne conto.

Per fare il test puoi mettere una data in D antecedente a quella attuale
in pratica se oggi è 13 giugno e hai date scadenza oltre il 15 giugno dovrai attendere domani
ma se inserisci in una cella la data di oggi o di domani (al massimo) l'email sarà inviata in quanto hai inserito un giorno di anticipo.
(altra possibilità più "macchinosa" e cambiare la data al PC)

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 15/06/15 07:16

ciao flash, ho provato e riprovato, non funziona.
Mi sorge una domanda spontanea, per farlo funzionare devo avere excel aperto? oppure funziona comunque senza accendere proprio il computer, per intenderci.suggerimenti?
grazie
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi Flash30005 » 15/06/15 10:40

Pensi davvero che non accendendo il computer possa essere spedita l'email contenuta in un foglio di Excel posto in una cartella remota nell'hard disk del Pc stesso?
E' chiaro che deve essere avviato il file di Excel e, come facevi, prima premere il comando "Invio"
Si può anche far avviare il file ad una certa ora o all'avvio del pc
e far avviare la macro di invio all'apertura del file
Ma intanto prova ad avviare la macro "manualmente"

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 15/06/15 11:14

va bene, ti posso chiedere la gentilezza di inviarmi qualche file già fatto magari da modificare, perchè non saprei come fare.
non mi riesce il file fatto in precedenza..
aiutino?
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 15/06/15 12:52

ciao, sto rivedendo il tutto dall'inizio, sono arrivato a questo codice semplice semplice, funziona, il problema è che non mi riconosce la condizione perchè io gli sto dicendo "se il valore(che poi in realtà è una data) di D1 è uguale al valore di F1 allora" solo che salta completamente questa parte ed invia direttamente la mail.
Codice: Seleziona tutto
Sub Auto_apri()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EmailAddr As String
    Dim Subj As String
    Dim BodyText As String
 
 If Date = Range("D1").Value = Range("F1").Value = "" Then
    End If
   
    EmailAddr = Range("i2").Value  '<<< inserire  indirizzi
    Subj = "nota n° " & Range("j4") & " del " & Range("j6").Value

    BodyText = "In allegato ."


    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
    .to = EmailAddr
    .CC = ""
    .BCC = ""
    .Subject = Subj
    .Body = BodyText
    .Attachments.Add ActiveWorkbook.FullName 'inserisce il file excel in allegato
    .Send 'or use .Display
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

    End Sub
   


In i2 inserisco l'indirizzo di posta elettronica e nelle altre celle il contenuto di alcuni dati.
mi potete dire dov'è l'errore perchè io non ci riesco.
grazie
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi Anthony47 » 16/06/15 01:47

Non ho seguito la discussione, quindi vado a tentativi:
Se vuoi mandare l' email solo quando D1 e' uguale a F1 allora invece di
If Date = Range("D1").Value = Range("F1").Value = "" Then
End If

Potresti usare
Codice: Seleziona tutto
If Date = Range("D1").Value = Range("F1").Value = "" Then Exit Sub


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

Re: invio automatico mail al verificarsi di una data

Postdi Flash30005 » 16/06/15 03:25

Leggi quanto scritto da Anthony

Ti invio il file originale funzionante
Download File

aprilo
metti delle date fittizie come scadenza
e premi il tasto Invia email

L'email non sarà inviata perché dovrai inserire il nome della macro dove evidenziato
ma la macro verificherà quale scadenza è prossima e provvederà a fare quanto desiderato mettendo un check per evitare ulteriori invii

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 16/06/15 09:19

ciao ragazzi,
flash ho provato a fare quello che mi hai spiegato ma non riesco a capire qual'è la parte evidenziata dove inserire il nome della macro. quando inserisco le date fittizie, mi da l'ok per la data e poi al chek mi esce inviata. Chiaramente manca quel pezzo che mi hai detto dove devo inserire il nome della macro.
mi spieghi meglio l'operazione che devo fare.
grazie per la disponibilità.
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi Flash30005 » 16/06/15 13:31

Hai detto di avere una macro che funziona perfettamente per inviare email
ammesso che questa tua macro si chiami "Pippo"
nella macro "VerifData" che hai trovato nel mio file hai questo codice
Codice: Seleziona tutto
Sub VerifData()
UR = Range("D" & Rows.Count).End(xlUp).Row
For RR = 4 To UR
MsgBox Date & " " & Range("D" & RR).Value - Range("E" & RR).Value
If Date >= Range("D" & RR).Value - Range("E" & RR).Value And Range("F" & RR).Value = "" Then
Pippo  '<<<<< qui devi scrivere il nome della tua macro di invio email
Range("F" & RR).Value = "Inviata"
End If
Next RR
End Sub


Inserisci il nome della tua macro dove indicato

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 17/06/15 14:25

grazie ragazzi, funziona ed è tutto ok.
approfitto per chiedervi una cosa, si può salvare il file in allegato in .pdf anzichè .xls? ho provato a mettere il percorso e poi a cambiare solo l'estensione ma non va, mi dice percorso errato.
come posso fare?
grazie
+
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 17/06/15 16:30

ragazzi un'altra cosa al volo, per aggiungere nel corpo della mail valori contenuti in alcune celle e mantenere l aformattazione del foglio come faccio?
grazie raga
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Re: invio automatico mail al verificarsi di una data

Postdi ciccioILpacco » 18/06/15 07:46

ciao ragazzi ho provato con questa linea di codice:
Codice: Seleziona tutto
BodyText = Join(WorksheetFunction.Transpose(Range("L1:L10")), " ")

solo che non mantiene la formattazione ed invece di copiare nel corpo della mail la colonna "L" in verticale come nel foglio me la copia in orizzontale.
Aspetto notizie, grazie
ciccioILpacco
Utente Junior
 
Post: 13
Iscritto il: 10/06/15 17:34

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "invio automatico mail al verificarsi di una data":


Chi c’è in linea

Visitano il forum: systemcrack e 35 ospiti

cron