IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Outlook Discussion :

Userform => création mail HTML


Sujet :

VBA Outlook

  1. #1
    Membre à l'essai
    Inscrit en
    janvier 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Userform => création mail HTML
    Bonjour à tous !

    Je dois développer une macro pour mon boss et s'il m'avait permi de faire autre chose qu'une formation "initiation VBA" de 2 jours, je l'aurais sans doute déjà finalisée ;-)

    Le but : une macro attribuée à un bouton dans outlook, qui affiche un userform puis une fois rempli et validé, génère un mail HTML avec les champs intégrés dans des cellules d'une table.

    1) bouton macro => ok ça va
    2) userform : j'ai jusque là utilisé la fonction <InputBox> pour récupérer un champs, mais je ne sais pas comment utiliser un formulaire plus complexe (combobox + radios + etc... créé sous excel jusque là)
    3) Pour générer le message automatique, j'ai utilisé <sMsgBody> qui me permet d'intégrer mes champs et de faire des paragraphes. Or, il faudrait que j'utilise une mise en page complexe HTML type table avec les champs saisis dans certaines cellules.

    Je sais que j'en demande beaucoup... Mais quelqu'un de beaucoup plus doué que moi aurait-il une idée de la macro en question, ou juste une piste pour utiliser mon UserForm et/ou formuler la création de mon mail via des balises html à l'intérieur de ma macro ?


    PS :
    Je vous joins mon code actuel pour vous montrer que j'essaie des trucs malgré mes faibles capacités !!! lolll

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub new_mail()
        Dim objMail As Outlook.MailItem
        Dim sector As String
        Dim country As String
        Dim company As String
        Dim sMsgBody As String
     
        sector = InputBox("Sector")
        country = InputBox("Country")
        company = InputBox("Company")
     
    sMsgBody = "Sector: " + UCase(sector) + " / " + "Country: " + UCase(country) + vbCr + vbCr
    sMsgBody = sMsgBody & "..." & vbCr
    sMsgBody = sMsgBody & "..." & vbCr
    sMsgBody = sMsgBody & "..." & vbCr & vbCr & vbCr & vbCr
     
        Set objMail = Application.CreateItem(olMailItem)
        objMail.Subject = "(xxx Minutes) Block " + UCase(company)
     
    objMail.Body = sMsgBody
     
        Set theRecipientA = objMail.Recipients.Add("bip@bip.com")
        Set theRecipientCC = objMail.Recipients.Add("bop@bop.com;bap@bap.com")
        theRecipientCC.Type = olBCC
     
        objMail.Display
    End Sub

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 081
    Points : 7 033
    Points
    7 033
    Billets dans le blog
    20
    Par défaut
    Salut,
    les userform dans OUTLOOK sont du même fonctionnement que dans excel.

    Pour avoir du HTml il faut utiliser objMail.HTMLbody et ( objMail.BodyFormat=olFormatHTML)
    et lui donner à manger du texte avec des balises HTML.

    Par contre plus facilement tu peux utiliser utiliser un modèle et remplacer certains champs par tes valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objMail  = Application.CreateItemFromTemplate("C:\statusrep.oft")
        MyItem.htmlbody=replace(MyItem.htmlbody,"#SECTOR#",UCase(sector) )

  3. #3
    Membre à l'essai
    Inscrit en
    janvier 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Salut et merci beaucoup Oliv- !!!

    Il faut que relise ton message une bonne dizaine de fois mais je crois que l'idée du modèle est très intéressante ! Il faut juste que je me penche dessus pour en saisir toute la subtilité...

    Juste un petit détail... lorsque je suis au milieu de mes balises html, comment puis-je intégrer mes "champs" (genre SECTOR comme dans l'exemple que toi tu as fourni), pour qu'il soit intégré dans le HTML et qu'il le reconnaisse en tant que donnée ?

    Exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objMail.HTMLbody = "Le texte en html avec du <b>gras</b> de <i>l'italique</i> etc... <br>et ensuite mon [champs SECTOR] intégré dans ma phrase ou mon tableau..."
    Je présume que ça doit vraiment être tout simple et j'ai un peu honte de poser la question tout d'un coup...

  4. #4
    Expert confirmé Avatar de pc75
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : septembre 2004
    Messages : 3 662
    Points : 4 042
    Points
    4 042
    Par défaut
    Bonjour,

    En concaténant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objMail.HTMLbody = "Le texte en html avec du <b>gras</b> de <i>l'italique</i> etc... <br>et ensuite mon " & [champs SECTOR] & " intégré dans ma phrase ou mon tableau..."

  5. #5
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 081
    Points : 7 033
    Points
    7 033
    Billets dans le blog
    20
    Par défaut
    Tu mets simplement dans l'Email le mot qui te va bien et qui est sans ambiguité

    comme

    #SECTOR# ou SMUTRTZ

  6. #6
    Membre à l'essai
    Inscrit en
    janvier 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci pc75 (il me semblait bien que c'était quelque chose de simple que je n'arrivais pas à identifier ! ;-)) et Oliv- pour ces réponses !! :-)

  7. #7
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 081
    Points : 7 033
    Points
    7 033
    Billets dans le blog
    20
    Par défaut
    Salut,
    Si tu utilises bien un modèle OUTLOOK, tu crèes simplement ton Email comme n'importe quel Email, en mettant en gras , souligné couleur,ce que tu veux + des pj même si tu veux, et aux endroits où tu veux mettre tes champs tu mets un mot qui te servira de balise et que tu remplaceras par la saisie.

    Bonjour Mr #TRUC#,

    Voici votre #reference#

    cdt
    et tu fais fichier/ enregistrer sous en choisissant comme type de fichier "Modèle outlook (*.oft).

    est ce plus clair ?

  8. #8
    Membre à l'essai
    Inscrit en
    janvier 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci infiniment Oliv- pour ces informations complémentaires :-D
    En effet, ça me semble plus clair avec tous ces détails (je suis navrée d'être un peu longue à la comprenette ;-))...

    Ca me semble vraiment excellent, je n'aurais jamais pensé à un truc pareil, je vais vite tâcher de mettre ça en application !! (et j'espère ne pas avoir à revenir te solliciter si avec tout ça je n'arrivais pas à m'en sortir... ! ;-))


  9. #9
    Membre à l'essai
    Inscrit en
    janvier 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bon... c'est malheureux à admettre mais je suis une quiche intersidérale...

    Ca fait maintenant 5 jours que je triture mes lignes VBA dans tous les sens, que je lis des dizaines de tutos, sujets sur des forums etc. Je ne comprends rien et mon boss me met la pression...

    Alors je reviens vers vous avec quelques questions :

    1) Est-ce directement dans mon bouton de validation de formulaire que je dois rédiger les commandes pour la création de mail ? Ou dois-je faire un appel vers autre chose ? Ou est-ce que je dois "stocker" mes résultats quelque part pour qu'outlook les utilise par la suite ?

    2) Pourriez vous m'indiquer (je voudrais utiliser les lignes d'Oliv- avec un template OFT qui correspondent complètement à ma demande, le template est fait) ... si je dois ajouter quelque chose à ces commandes ? J'ai essayé de rajouter un "display" mais sans plus de succès...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objMail  = Application.CreateItemFromTemplate("C:\statusrep.oft")
        MyItem.htmlbody=replace(MyItem.htmlbody,"#SECTOR#",UCase(sector) )
    Je suis navrée Oliv- (car je sais que tu es toujours très réactif pour répondre à tout le monde), de ramer autant alors que ça doit être simplissime et que tu as déjà pris du temps pour m'expliquer clairement les choses...

  10. #10
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 081
    Points : 7 033
    Points
    7 033
    Billets dans le blog
    20
    Par défaut
    Salut,
    j'aime bien les quiches ;-)

    à partir du code mis au début, qui dois être affecté à un bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub new_mail()
        Dim objMail As Outlook.MailItem
        Dim sector As String
        Dim country As String
        Dim company As String
     
        sector = InputBox("Sector")
        country = InputBox("Country")
        company = InputBox("Company")
     
        Set objMail = Application.CreateItemFromTemplate("C:\statusrep.oft")
        objMail.Subject = "(xxx Minutes) Block " + UCase(company)
     
        objMail.htmlbody=replace(objMail.htmlbody,"#SECTOR#",UCase(sector) )
        objMail.htmlbody=replace(objMail.htmlbody,"#Country#",UCase(country) )
        objMail.htmlbody=replace(objMail.htmlbody,"#Company#",UCase(company)) 
     
        Set theRecipientA = objMail.Recipients.Add("bip@bip.com")
        Set theRecipientCC = objMail.Recipients.Add("bop@bop.com;bap@bap.com")
        theRecipientCC.Type = olBCC
     
        objMail.Display
    End Sub
    est ce ok ?

  11. #11
    Membre à l'essai
    Inscrit en
    janvier 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    MERCI Oliv- !! :-)

    J'espère que tu as faim, car elle grossit à vue d'oeil cette quiche......!

    Donc, les choses s'articulent dans ma tête...

    Du coup, dans la commande de mon bouton [valider] de mon formulaire, j'ai saisi le nom de la nouvelle macro [new_mail]... il se lance bien MAIS ça me buggue sur le et pof, rien.

    Et seconde petite chose...
    J'étais d'abord partie sur des InputBox qui fonctionnaient pas mal mais depuis, je me suis prise d'une ambition débordante et quasi surréaliste... et j'ai créé un formulaire complet.

    Ze question : du coup j'utilise les noms des champs : ex. j'ai une zone de texte appellée textbox1, dans le code que tu m'as gentiment corrigé je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objMail.htmlbody=replace(objMail.htmlbody,"#Company#",UCase(textbox1))
    et lui il va comprendre qu'il faut aller chercher la donnée saisie précédemment ? (oui, je sous-estime en permanence la bestiole qui doit faire ce genre de manips à l'intérieur de mon ordinateur)

    Je ne te parle même pas des checkbox (j'en garde pour la semaine prochaine !! ;-P)

  12. #12
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 081
    Points : 7 033
    Points
    7 033
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par gathz Voir le message
    Du coup, dans la commande de mon bouton [valider] de mon formulaire, j'ai saisi le nom de la nouvelle macro [new_mail]... il se lance bien MAIS ça me buggue sur le et pof, rien.
    quel est le message d'erreur ?

    Essaye de procéder par étapes, d'abord un code qui fonctionne, ensuite tu le customises avec ton userform..

    Ze question : du coup j'utilise les noms des champs : ex. j'ai une zone de texte appellée textbox1, dans le code que tu m'as gentiment corrigé je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objMail.htmlbody=replace(objMail.htmlbody,"#Company#",UCase(textbox1))
    et lui il va comprendre qu'il faut aller chercher la donnée saisie précédemment ? (oui, je sous-estime en permanence la bestiole qui doit faire ce genre de manips à l'intérieur de mon ordinateur)

    Je ne te parle même pas des checkbox (j'en garde pour la semaine prochaine !! ;-P)
    non il ne va pas comprendre cela
    il va croire que xc'est une variable
    il faut mettre userform1.textbox1
    et ton userform doit être caché (hide) mais chargé.
    sinon sur ton bouoton ok du userform tu attribu la valeur de tes textbox à des variables publiques (déclarées dans un module COMMUN)

    indique en haut de ton CODE :
    tu seras obliger de déclarer tes variables.

  13. #13
    Membre à l'essai
    Inscrit en
    janvier 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci Oliv- encore une fois ... et navrée pour le délai de réponse, je me suis rapprochée d'une collègue beaucoup plus douée que moi ces derniers jours pour essayer d'aboutir quelque chose et exploiter au mieux tous tes précieux conseils !



    Edit du 06/02 (je ne voulais pas avoir l'air de "upper" mon thread...)

    Oliv-, merci, ta solution était juste PARFAITE. Grâce à l'aide de ma collègue (merci à elle encore une fois si elle me lit), je suis arrivée à une macro qui fonctionne au poil et que je ne me lasse pas de lancer en boucle ;-)



  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    mars 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème sur code
    Bonjour à tous,

    je viens de prendre connaissance du code envoyé par Oliv- par contre j'ai la meme erreur avec objmail.display et je n'arrive pas du tout à résoudre celle-ci, si quelqu'un peux me venir en aide ?

    Cordialement

  15. #15
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    4 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 4 081
    Points : 7 033
    Points
    7 033
    Billets dans le blog
    20
    Par défaut
    merci de faire une nouvelle discussion avec votre code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lancement d'un userform à la création d'un mail
    Par Vbapprentis dans le forum VBA Outlook
    Réponses: 8
    Dernier message: 18/09/2007, 14h02
  2. [PERL/CGI] Envoyer un mail html/javascript
    Par LE NEINDRE dans le forum Web
    Réponses: 5
    Dernier message: 25/11/2005, 11h14
  3. Réponses: 6
    Dernier message: 17/11/2005, 14h39
  4. Réponses: 7
    Dernier message: 22/02/2005, 13h07
  5. [VB6] Comment envoyer un mail HTML par Winsocks ?
    Par hedgehog dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/05/2004, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo