Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Invia email diverse a 3 diversi indirizzi - da excell

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

Invia email diverse a 3 diversi indirizzi - da excell

Postdi AleRosa » 16/09/18 13:44

Ciao a tutti.
Avrei bisogno di una mano per quanto riguarda la realizzazione di un VBA, se possibile.
Un esempio è disponibile qui:
https://files.fm/u/aemdba5e

Una volta compilati i campi, vorrei inviare agli indirizzi specificati 3 email differenti, contenenti 3 tipologie di informazioni differenti.
Nello specifico:
a TR: testo x contenente la casella Tr delivery
a PR: testo x contenente la casella Tr delivery e Pr delivery
a CUST: testo x contenente la casella Tr delivery, Pr delivery e Final delivery
è fattibile? Inoltre, c'è la possibilità di agganciare ulteriori file excell a questo per inviare, sempre agli stessi indirizzi, altre informazioni? E allegare dei file? Grazie!
AleRosa
Utente Junior
 
Post: 41
Iscritto il: 09/11/16 09:40

Sponsor
 

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi Anthony47 » 16/09/18 18:54

Supponiamo che le tre email sono da inviare in blocco.
Usando una delle tante soluzioni gia' pubblicate potresti usare questo codice, da inserire in un nuovo Modulo standard del vba del tuo file Excel:
Codice: Seleziona tutto
Dim OutlookApp As Object    'RIGOROSAMENTE IN TESTA AL MODULO

Sub NMail()
Dim Dest, Tx1Mess, Tx2Mess, I As Long, mMess As String
Dim myC As Range
'
Dest = Array("C3", "D3", "H3")          '<<< Le celle con gli Indirizzi
Tx1Mess = Array("I3", "I8", "I13")      '<<< Le celle con un testo fisso
Tx2Mess = Array("E3", "E3:F3", "E3:G3") '<<< Le celle con le date da comunicare
'
Set OutlookApp = CreateObject("Outlook.Application")
For I = LBound(Dest) To UBound(Dest)
    mMess = Range(Tx1Mess(I)) & vbCrLf                             'Il testo variabile
    For Each myC In Range(Tx2Mess(I))
        mMess = mMess & Format(myC.Value, "dd-mmm-yyyy") & vbCrLf  'Le date
    Next myC
    mMess = mMess & "Saluti Finali" & vbCrLf & "Pinco Palla"       '<<< Coda del messaggio
    Call SendMess(mMess, Range(Dest(I)))
Next I
Set OutlookApp = Nothing
End Sub


Sub SendMess(ByVal myM As String, ByVal myD As String)
  Dim MItem As Object
  Dim Subj As String
'
Subj = "Mail di Non so che cosa al " & Format(Now, "dd-mmm-yyyy")       '<<< Un Subject
Set MItem = OutlookApp.CreateItem(0)
With MItem
  .To = myD
'  .cc = "Indirizzo1@dominio1"      '<<< EVENTUALE INDIRIZZO IN COPIA
  .Subject = Subj
  .Body = myM
'  .display
  .Send
End With
Application.Wait (Now + TimeValue("0:00:01"))
Set MItem = Nothing
End Sub

Le celle marcate <<< sono da specializzare, come da commento. In particolare puoi inserire un indirizzo fisso in "CC" eliminando l' apostrofo in testa alla riga .cc = "Indirizzo1@dominio1" e inserendo un indirizzo valido.

All'occorrenza, seleziona il foglio Sheet1 e avvia la Sub NMail

Noterai nel corpo della Sub Nmail come il testo della mail venga composto usando informazioni variabili (provenienti dagli "ARRAY" di informazione) e testo fisso (per i saluti finali). Ovviamente anche i testi fissi sono da adattare.

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

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi AleRosa » 18/09/18 18:41

Ciao Anthony,
sì, le email sono in effetti da inviare in blocco.
Non ho capito però diversi passaggi.
1. 'RIGOROSAMENTE IN TESTA AL MODULO - Lo devo eliminare o sono delle informazioni?
2. Ok per le celle da cambiare. Posso inserire a questo punto un "intervallo di celle" e, per l'email specifica, dire che mi recuperi quanto contenuto nella colonna E riga 25, per esempio? é una cosa che avviene in automatico?
3. All'occorrenza, seleziona il foglio Sheet1 e avvia la Sub NMail = che vuol dire esattamente?
Grazie!
AleRosa
Utente Junior
 
Post: 41
Iscritto il: 09/11/16 09:40

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi Anthony47 » 18/09/18 22:56

'RIGOROSAMENTE IN TESTA AL MODULO - Lo devo eliminare o sono delle informazioni?
Questa e' una istruzione per te; significa che quella riga (cosi' come te l'ho passata) deve essere la prima di tutte le altre.

Ok per le celle da cambiare. Posso inserire a questo punto un "intervallo di celle" e, per l'email specifica, dire che mi recuperi quanto contenuto nella colonna E riga 25, per esempio? é una cosa che avviene in automatico?
Puoi inserire un intervallo di celle per quanto riguarda le date, quelle contenute in Tx2Mess; come ho fatto io seguendo le tue richieste iniziali
La parte testuale invece non prevede intervalli di celle ma solo celle singole; ovviamente puoi "concatenare" testi provenienti da piu' celle, modificando le istruzioni che "compongono" mMess (il testo del messaggio)
Tutte (e solo) le operazioni codificate nella macro avvengono in modo automatico, quando avvii la macro.

Non ho capito cosa sia la "email specifica" da recuperare in E25

All'occorrenza, seleziona il foglio Sheet1 e avvia la Sub NMail = che vuol dire esattamente?
Significa che quando ti serve mandare le email e il foglio e' completo dei dati allora devi selezionare il Sheet1 e devi avviare la macro NMail

Per avviare una macro, partendo da Excel: premi Alt-F8, selezioni il nome della macro tra quelle disponibili e premi Esegui.

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

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi AleRosa » 03/10/18 15:32

Ciao Anthony,
sembra funzionare ma avrei bisogno di un paio di aggiustamenti:
- se volessi inserire una qualsiasi cella in un qualsiasi campo della macro, come faccio? Mi spiego meglio, in
Subj = "Mail di Non so che cosa al " & Format(Now, "dd-mmm-yyyy") '<<< Un Subject
L'oggetto della email dovrebbe leggere "Notification about [contenuto A3, contenuto B3]
- For Each myC In Range(Tx2Mess(I))
mMess = mMess & Format(myC.Value, "dd-mmm-yyyy") & vbCrLf 'Le date
Come vengono visualizzate nella email non va bene. Nello specifico, devono essere anche menzionati i titoli della colonna contenente le date perché altrimenti sembra un elenco di date senza senso.
Inoltre, se volessi inserire un nome al posto TR nel testo seguente?
Testo da inviare a TR
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
AleRosa
Utente Junior
 
Post: 41
Iscritto il: 09/11/16 09:40

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi Anthony47 » 03/10/18 23:59

se volessi inserire una qualsiasi cella in un qualsiasi campo della macro, come faccio?
La macro compie una operazione specifica; quindi si puo' inserire nel corpo della macro "una cella specificata"

Per fare riferimento al contenuto di una cella specifica si puo' usare la notazione Sheets("NomeDelFoglio").Range("IndirizzoDellaCella").Value; oppure il solo Range("IndirizzoDellaCella").Value per fare riferimento a celle appartenenti al foglio Attivo; oppure Cells(Riga, Colonna).Value

Per concatenare piu' valori, esempio "stringhe" e contenuto di una cella, userai il carattere "&"

Quindi, ad esempio:
Codice: Seleziona tutto
Subj = "Notification about " & Range("A3") & ", " & Range("B3")


Per inserire anche le intestazioni di colonna delle date modificherai l'istruzione mMess = mMess & Format(myC.Value, "dd-mmm-yyyy") & vbCrLf in
Codice: Seleziona tutto
        mMess = mMess & Cells(1, myC.Column) & ": " & Format(myC.Value, "dd-mmm-yyyy") & vbCrLf

Quanto alla richiesta di inserire un nome al posto di TR in "Testo da inviare a TR /Lorem ipsum dolor sit amet etc etc", non capisco la domanda, visto che quel testo e' contenuto nella cella I3, dove puoi scriverci qualsiasi cosa.

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

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi AleRosa » 04/10/18 10:47

Grazie Anthony,
ma non mi funziona, non credo perché ci sia qualcosa di sbagliato ma perché sicuramente sbaglio io qualcosa.
Ho provveduto a rifare un file exel, per farti capire meglio quello che vorrei fare (sostanzialmente questo excel riepiloga tutti i post per cui ho chiesto una mano a voi in questi mesi - mezze cose le ho risolte, altre mi sono arresa e scrivo a mano).
Il file è disponibile qui:
https://files.fm/u/eag8dtw5

Le specifiche sono le seguenti:
Le schede POappendix e SCHEDULEappendix rappresentano i fogli "secondari" a cui fanno riferimento alcune delle celle contenute in PO e SCHEDULE.
La scheda Management viene per lo più compilata manualmente, alcuni campi sono rappresentati da moltiplicazioni tra celle, suddivisioni, sottrazioni ecc.
Come potrai vedere, alcuni campi sono in giallo, rosso oppure verde.
In verde (numero sequenziale) = un numero univoco, che possibilmente si aggiorni in automatico dopo che ho convertito il file in pdf (e che quindi, per la conversione successiva contenga un numero incrementato di 1 rispetto al precedente).
In rosso (=Management!D5) in realtà non mi serve che la cella sia "uguale" a quanto contenuto in Management D5. Ovviamente adesso ci sta solo una riga, ma quello che vorrei è che questo campo in rosso venga aggiornato con quanto contenuto in Management, colonna D, ultima cosa (ultima riga) completata.
Poi ci sta la questione dell'allegato... che in realtà non so se sia o meno fattibile. Eventualmente lo posso eliminare e sostituire con un testo libero.
Ho inoltre formattato meglio le varie email che devono essere inviate. Forse così è più semplice... non lo so...
Grazie mille per l'aiuto!
AleRosa
Utente Junior
 
Post: 41
Iscritto il: 09/11/16 09:40

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi Anthony47 » 05/10/18 15:01

Hai allegato un file da 42 Mbyte, me lo devo guardare con calma...
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: 15979
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi AleRosa » 05/10/18 15:44

Anthony47 ha scritto:Hai allegato un file da 42 Mbyte, me lo devo guardare con calma...


Sì lo so. Spero solo che sia tutto chiaro. Se c'è qualcosa che non ti è chiaro o se, in qualsiasi modo, ti viene in mente qualcosa di meglio... fai pure :)
Grazie!
AleRosa
Utente Junior
 
Post: 41
Iscritto il: 09/11/16 09:40

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi Anthony47 » 07/10/18 17:31

Il file in realta' e' solo corrotto; ma basta eliminare le righe sul foglio Management da riga 1500 in avanti che la dimensione si riduce da 42 Mbyte a un centinaio di Kbyte; d'altra parte sono tutte celle vuote...

Guardando il file e leggendo la descrizione io pero' non capisco su che cosa stai chiedendo aiuto, e nel file manca quel poco che ti avevo suggerito fin qui.

Insomma, cosa possiamo fare per te?

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

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi AleRosa » 08/10/18 09:17

Quindi sei riuscito ad aprire il file?
Ho sistemato le informazioni per le email da inviare (le ho modificate rispetto a prima). Se modifico il VBA con queste nuove informazioni non funziona (probabilmente perché colloco le informazioni nel posto sbagliato). Scusa, ma io non sono molto pratica :)
Grazie
AleRosa
Utente Junior
 
Post: 41
Iscritto il: 09/11/16 09:40

Re: Invia email diverse a 3 diversi indirizzi - da excell

Postdi Anthony47 » 09/10/18 21:53

La richiesta iniziale era di poter inviare a tre destinatari diversi un testo "x" prelevato da tre celle del foglio piu' le informazioni Tr delivery, Pr delivery e Final delivery.
Per questo avevo proposto una macro (msg del 16/09/18) e una successiva integrazione (msg del 03/10/18)

Successivamente hai cambiato il contenuto del file. A spanne mi pare che l'equivalente di Sheet1 (del primo file) sia, nel nuovo file, il foglio Schedule. Qui pero', oltre ad aver cambiato il tracciato record, non si capisce da quali celle va prelevato il "messaggio x" diverso per ogni destinatario.
La macro adattata al layout di foglio Schedule e' questa:
Codice: Seleziona tutto
Dim OutlookApp As Object    'RIGOROSAMENTE IN TESTA AL MODULO

Sub NMail()
Dim Dest, Tx1Mess, Tx2Mess, I As Long, mMess As String
Dim myC As Range
'
Dest = Array("B3", "C3", "G3")          '<<< ** Le celle con gli Indirizzi
Tx1Mess = Array("I3", "I8", "I13")      '<<< Le celle con un testo fisso
Tx2Mess = Array("D3", "D3:E3", "D3:F3") '<<< ** Le celle con le date da comunicare
'
Set OutlookApp = CreateObject("Outlook.Application")
For I = LBound(Dest) To UBound(Dest)
    mMess = Range(Tx1Mess(I)) & vbCrLf                             'Il testo variabile
    For Each myC In Range(Tx2Mess(I))
        mMess = mMess & Cells(1, myC.Column) & ": " & Format(myC.Value, "dd-mmm-yyyy") & vbCrLf
    Next myC
    mMess = mMess & "Saluti Finali" & vbCrLf & "Pinco Palla"       '<<< Coda del messaggio
    Call SendMess(mMess, Range(Dest(I)))
Next I
Set OutlookApp = Nothing
End Sub


Sub SendMess(ByVal myM As String, ByVal myD As String)
  Dim MItem As Object
  Dim Subj As String
'
Subj = "Notification about " & Range("A3")                              '<<< Un Subject
'
Set MItem = OutlookApp.CreateItem(0)
With MItem
  .To = myD
'  .cc = "Indirizzo1@dominio1"      '<<< EVENTUALE INDIRIZZO IN COPIA
  .Subject = Subj
  .Body = myM
'  .display
  .Send
End With
Application.Wait (Now + TimeValue("0:00:01"))
Set MItem = Nothing
End Sub

Le righe modificate sono quelle marcate <<< ***.
La riga Tx1Mess = Array("I3", "I8", "I13") immagino sia anche essa da modificare, per puntare alle celle che contengono i messaggi specifici dei destinatari.

Ti avevo anche indicato come inserire nel testo il contenuto di eventuali altre celle usando il simbolo "&" per concatenare le stringhe tra di loro, nel caso voglia meglio articolare i vari testi.

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


Torna a Applicazioni Office Windows


Topic correlati a "Invia email diverse a 3 diversi indirizzi - da excell":


Chi c’è in linea

Visitano il forum: cg, klingklang e 23 ospiti