Mandare email di determinate celle di un database di magazzino

di il
26 risposte

Mandare email di determinate celle di un database di magazzino

Salve a tutti ragazzi,

mi servirebbe un aiuto. Con il mio database di magazzino mi servirebbe mandare una email automatica utilizzando un indirizzo gmail.com a un solo destinatario.
Ma non deve essere tutto il file Excel ma solo determinate celle di un foglio del magazzino, e nello specifico quelle con il valore 0, che possono variare continuamente.

Ho trovato tante cose in giro ma solo con outlook come gestore di email e non specificando il valore di determinate celle, che e' quello che servirebbe a me.

Qualcuno potrebbe aiutarmi?
Grazie per la vostra attenzione buon proseguo.

PS se serve posso postare il mio database grazie

26 Risposte

  • Re: Mandare email di determinate celle di un database di magazzino

    Buongiorno. E outlook va ene come gestore di posta? Hai già realizzato o tentato di realizzare qualcosa da cui partire?
  • Re: Mandare email di determinate celle di un database di magazzino

    Angelo_Tbp ha scritto:


    Buongiorno. E outlook va ene come gestore di posta? Hai già realizzato o tentato di realizzare qualcosa da cui partire?
    Buon giorno Angelo,

    so che con outlook e' fattibile almeno mandare email, ma non so come fare per far si che parta in automatico quando cambia il valore delle celle.
    Ma se con gmail non e' possibile mi arrangio con outlook.

    Il codice base che conosco e' il seguente:
    
    Sub sInviaEmail()
    Dim NewMail as Object
    Set NewMail = CreateObject("Outlook.Application").CreateItem(oMailItem)
    With NewMail
      .To = Worksheets("il mio foglio excel che si chiama Orders").Range("qui non so cosa mettere")
      .Subject = "Invio di prova"
      .Body = "qui dovrebbe apparire come corpo del messaggio le celle corrispondenti alla cella con valore 0 quando essa cambia"
    Destin = "a.pippo@dominio.it"   
    ActiveWorkbook.SendMail Recipients:=Destin, Subject:="Ciao"
      .Send
    End With
    End Sub
    
    La colonna che devo prendere in considerazione con il valore "0" e' la colonna J e le celle possono spaziare da J5 a infinite celle. Ogni volta che una o piu celle in questo range passa a "0" deve inviare una email della corrispondente linea che a sua volta contiene le celle E,F,G,H.
    Ovvero se J5 diventa 0 mi deve mandare una email che contenga nella descrizione quello che c'e nelle celle E5,F5, G5, H5 e cosi via dicendo.

    Non so se sono stato chiaro, ma come dicevo, se serve posso postare il file.

    Grazie
  • Re: Mandare email di determinate celle di un database di magazzino

    Tralasciando, per il momento, il codice che hai postato... vorrei capire meglio alcune cose:

    1) Quindi le righe che vorresti inserire nel corpo della mail non sono una di seguito all'altra, ma sono selezionate in base alle celle della stessa riga che, nella colonna J, hanno valore 0 giusto?

    2) il corpo della mail che invii deve riportare le celle selezionate in una sorta di tabella html (in pratica come se le copi e incolli da excel alla mail)?

    3) riguardo alla tua perplessità gmail Vs outlook... non ho capito il problema... outlook può, anzi deve essere configurato affinché utilizzi un account valido di posta elettronica, quindi perché non gmail? Volevi utilizzare altri sistemi di invio di mail diversi da outlook?
  • Re: Mandare email di determinate celle di un database di magazzino

    Ciao Angelo,

    per rispondere alle tue domande:

    1) esatto
    2) mi va bene come dici tu o in qualsiasi altro modo, l'importante e' che quello che c'e nelle celle venga riportato nel corpo della email. Ogni cella riporta la descrizione di un ordine effettuato per il materiale in magazzino. Quindi nella cella E c'e il codice del materiale, nella F la data dell'ordine, nella G la quantita ordinata e nella cella H la quantita spedita. Quando le celle G ed H corrispondono, nella cella J (che e' semplicemente la sottrazione delle 2 celle menzionate) il valore e' 0. Io so in questo modo che l'ordine e' stato concluso e mi serve che questo vada nella email.
    3) ho iniziato dicendo gmail perche non mi e' mai piaciuto Outlook. Anche se ho un account di posta Hotmail io preferisco andare sempre sul sito, non mi sono mai fidato di usare Outlook e scaricare tutto dal server, ho avuto sgradite sorprese nel passato.
    Ho visto che Outlook e' nelle impostazioni del VBA quindi piu facile da usare, mentre leggevo in giro che con altri provider, come gmail, e' piu complicato. Ma se non si puo fare allora mi accontento di usare Outlook.

    Grazie mille per la tua attenzione.
  • Re: Mandare email di determinate celle di un database di magazzino

    Ok. Procediamo con ordine:

    1) Io utilizzerei Outlook per automatizzare l'invio delle mail spedite da Gmail e se non lo hai fatto ti consiglierei di proteggerlo per bene gestendo il tuo account google attivando la verifica in due passaggi e quant'altro tu ritenga opportuno nella sezione sicurezza... e ovviamente usa una password alfanumerica per l'accesso gestita da programmi free come passwordsafe o simili...
    2) Altra cosa fondamentale è sistemare il file excel per fare in modo che le righe selezionate siano una sotto l'altra e non intervallate da righe in cui nella colonna J non hai 0.
    3) Infine ti potrai dedicare alla stesura del codice VBA per la compilazione automatica della mail.

    La parte 1 la lascio a te, la 3 la lasciamo in sospeso e per la parte 2 invece potresti procedere come segue:
    1) Devi creare una colonna contatore che si autoincrementa solo quando nella cella della colonna J c'è lo 0 e che rimane uguale al valore precedente altrimenti. Per fare questo potrai optare per:
    a. Inserire la nuova colonna a sinistra della colonna E (non per forza la D, può essere tranquillamente la A, la B o anche la C tanto quando avrai finito potrà essere nascosta);
    b. Inserire la nuova colonna a Destra ma le formule che ne deriveranno saranno diverse.
    2) In un altro foglio devi inserire una colonna contatore semplice in cui ogni riga è maggiorata di uno rispetto alla precedente;
    3) Nel nuovo foglio, se nel punto 1 hai optato er l'opzione a, allora potrai usare la formula CERCA.VERTICALE nelle successive 4 colonne (sempre nel nuovo foglio) per indicizzare le rige selezionate (incrociando i dati della colonna contatore del nuovo foglio con il range del primo foglio di lavoro che dovrà necessariamente comprendere la colonna contatore del punto 1 e le colonne E, F, G e H). Se invece hai optato per l'opzione b la formula da usare è la formula CERCA.

    Se tutto è andato bene nel nuovo foglio dovresti veder elenacate solo le righe che nella colonna J hanno 0 e questo faciliterà le operazioni necessarie alla scrittura del corpo della mail.

    Spero di essermi spiegato bene e che non mi chiedi come funziona il CERCA.VERTICALE
  • Re: Mandare email di determinate celle di un database di magazzino

    Angelo_Tbp ha scritto:


    Ok. Procediamo con ordine:

    1) Io utilizzerei Outlook per automatizzare l'invio delle mail spedite da Gmail e se non lo hai fatto ti consiglierei di proteggerlo per bene gestendo il tuo account google attivando la verifica in due passaggi e quant'altro tu ritenga opportuno nella sezione sicurezza... e ovviamente usa una password alfanumerica per l'accesso gestita da programmi free come passwordsafe o simili...
    2) Altra cosa fondamentale è sistemare il file excel per fare in modo che le righe selezionate siano una sotto l'altra e non intervallate da righe in cui nella colonna J non hai 0.
    3) Infine ti potrai dedicare alla stesura del codice VBA per la compilazione automatica della mail.

    La parte 1 la lascio a te, la 3 la lasciamo in sospeso e per la parte 2 invece potresti procedere come segue:
    1) Devi creare una colonna contatore che si autoincrementa solo quando nella cella della colonna J c'è lo 0 e che rimane uguale al valore precedente altrimenti. Per fare questo potrai optare per:
    a. Inserire la nuova colonna a sinistra della colonna E (non per forza la D, può essere tranquillamente la A, la B o anche la C tanto quando avrai finito potrà essere nascosta);
    b. Inserire la nuova colonna a Destra ma le formule che ne deriveranno saranno diverse.
    2) In un altro foglio devi inserire una colonna contatore semplice in cui ogni riga è maggiorata di uno rispetto alla precedente;
    3) Nel nuovo foglio, se nel punto 1 hai optato er l'opzione a, allora potrai usare la formula CERCA.VERTICALE nelle successive 4 colonne (sempre nel nuovo foglio) per indicizzare le rige selezionate (incrociando i dati della colonna contatore del nuovo foglio con il range del primo foglio di lavoro che dovrà necessariamente comprendere la colonna contatore del punto 1 e le colonne E, F, G e H). Se invece hai optato per l'opzione b la formula da usare è la formula CERCA.

    Se tutto è andato bene nel nuovo foglio dovresti veder elenacate solo le righe che nella colonna J hanno 0 e questo faciliterà le operazioni necessarie alla scrittura del corpo della mail.

    Spero di essermi spiegato bene e che non mi chiedi come funziona il CERCA.VERTICALE

    Ok per il punto numero 1, posso utilizzare gmail attraverso Outlook.

    Per il punto 2 ci posso lavorare. Ma sto provando a evitare tutti i passaggi che mi hai detto utilizzando le formule concatenate se.errore, indice e aggrega che dovrebbe permettermi di copiare le righe solo quando il valore corrispondente e' "0". Sto provando a modificare una che gia ho nel mio database ma ancora non funziona. Come ce l'ho pronta e sistemo il nuovo foglio poi mi servirebbe il tuo aiuto per il codice da usare.

    Grazie mille
  • Re: Mandare email di determinate celle di un database di magazzino

    Ok. Interessante l'approccio della combinazione indice, aggrega e se.errore... mi piacerebbe approfondire se riesci. Ok per il codice.
  • Re: Mandare email di determinate celle di un database di magazzino

    Angelo_Tbp ha scritto:


    Ok. Interessante l'approccio della combinazione indice, aggrega e se.errore... mi piacerebbe approfondire se riesci. Ok per il codice.
    Ciao Angelo,

    La formula e' complicata e l'ho copiata da una formula che mi avevano aiutato a creare e l'ho modificata per questa esigenza.
    Comunque la formula e' questa:

    =IFERROR(INDEX(Orders!E$5:E$5953,AGGREGATE(15,6,ROW($1:$5000)/(Orders!$J$5:$J$5900=0),ROW(A1))),"")

    Ora nel nuovo foglio ho le quattro colonne che mi interessano solo quando J e' uguale a zero.
    Come procediamo per la email?
    Grazie

    Come faccio a mettere il file in allegato? Lo stavo mettendo ma mi dice formato errato. E' in excel il file
  • Re: Mandare email di determinate celle di un database di magazzino

    Non saprei.. non ho mai allegato file a questo forum... mi sembra di aver capito che vanno pubblicati esternamente tipo su Dropbox... comunque cercherò di farmi bastare anche solo il testo della formula che hai scritto sebbene il CERCA.VERT e il CERCA li trovo più immediati e semplici.. che dire.. significherà che imparerò anche un terzo metodo per fare una cosa che magari in futuro potrà essermi utile per risolvere problemi che ora non mi sto ponendo...

    Passando al codice... useremo come base quello che hai postato all'inizio ma volevo chiederti:

    1) come si chiama il foglio in cui hai le righe aggregate che hai ottenuto? (Ho letto che hai cambiato foglio)

    2) Qual'è il range di celle che devi inserire nel corpo della mail? (Essendo in un nuovo foglio immagino sia cambiato)

    3) Qualche post sopra hai usato il termine "infinite"... cerchiamo di definire meglio: esiste qualche valore per determinare il termine delle operazioni di lettura del LOOP necessario alla lettura delle righe, ovvero ad un certo punto, nella prima colonna da importare, vedrò un valore particolare nella cella che mi faccia capire che non devo scrivere più nulla nel corpo della mail oppure la cella è vuota?

    4) indicativamente se dovessi dire un numero massimo di righe da scrivere nella mail saresti in grado di prevederlo? Te lo chiedo perché essendo una mail, immagino che nel corpo possano esserci al massimo venti righe altrimenti sarebbe poco leggibile... se avessi esigenza di mandare migliaia di righe allegherei un file ad hoc. Qual'è il tuo caso?
  • Re: Mandare email di determinate celle di un database di magazzino

    Avevo dimenticato la 5 domanda

    5) l'unico destinatario della mail è fisso oppure è specificato di volta in volta in una cella? Se la risposta è sì dove si trova?
  • Re: Mandare email di determinate celle di un database di magazzino

    Angelo_Tbp ha scritto:


    Non saprei.. non ho mai allegato file a questo forum... mi sembra di aver capito che vanno pubblicati esternamente tipo su Dropbox... comunque cercherò di farmi bastare anche solo il testo della formula che hai scritto sebbene il CERCA.VERT e il CERCA li trovo più immediati e semplici.. che dire.. significherà che imparerò anche un terzo metodo per fare una cosa che magari in futuro potrà essermi utile per risolvere problemi che ora non mi sto ponendo...

    Passando al codice... useremo come base quello che hai postato all'inizio ma volevo chiederti:

    1) come si chiama il foglio in cui hai le righe aggregate che hai ottenuto? (Ho letto che hai cambiato foglio)

    2) Qual'è il range di celle che devi inserire nel corpo della mail? (Essendo in un nuovo foglio immagino sia cambiato)

    3) Qualche post sopra hai usato il termine "infinite"... cerchiamo di definire meglio: esiste qualche valore per determinare il termine delle operazioni di lettura del LOOP necessario alla lettura delle righe, ovvero ad un certo punto, nella prima colonna da importare, vedrò un valore particolare nella cella che mi faccia capire che non devo scrivere più nulla nel corpo della mail oppure la cella è vuota?

    4) indicativamente se dovessi dire un numero massimo di righe da scrivere nella mail saresti in grado di prevederlo? Te lo chiedo perché essendo una mail, immagino che nel corpo possano esserci al massimo venti righe altrimenti sarebbe poco leggibile... se avessi esigenza di mandare migliaia di righe allegherei un file ad hoc. Qual'è il tuo caso?
    Ok qui le risposte alle tue domande:

    1) il nuovo foglio si chiama Sheet1

    2) le celle ora sono A,B,C,D

    3) diciamo che 2000 riche dovrebbero essere piu che sufficienti. La cella 2001 sara vuota

    4) al massimo puo capitare di fare dai 20 ai 30 ordini giornalieri ma ovviamente non tutti arrivano nello stesso giorno quindi 20 righe sono piu che sufficienti pero ora.

    Grazie di nuovo per il tuo aiuto
  • Re: Mandare email di determinate celle di un database di magazzino

    Una cosa che dimenticavo, ora nel nuovo foglio (sheet1) avro nelle celle A1,B1,C1 ed D1 la intestazione delle colonne (quindi queste dovranno sempre apparire nel corpo della email per capire cosa sono i dati che verranno poi) e i dati inizieranno da le celle 2 in poi.
    Non so se questo complica il tutto.
    Grazie
  • Re: Mandare email di determinate celle di un database di magazzino

    Non complica nulla.... e per quanto riguarda la 5 domanda?

    https://www.iprogrammatori.it/forum-programmazione/excel/mandare-email-determinate-celle-database-magazzino-t43246.html#p8651391

    Ps: in serata vedrò di indirizzarti sul codice...
  • Re: Mandare email di determinate celle di un database di magazzino

    Non avevo visto la quinta domanda.

    Principalmente l'email e' sempre la stessa, ma potrebbe magari aggiungersi una seconda email. Quindi diciamo che le email le scrivo nelle celle G1 e G2

    Grazie
Devi accedere o registrarti per scrivere nel forum
26 risposte