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

Macros et VBA Excel Discussion :

Envoyer un mail personnalisé avec Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 100
    Par défaut Envoyer un mail personnalisé avec Excel
    Bonjour,
    A partir d'une base de données excel, je souhaite envoyé un mail personnalisé reprenant les données de mes cellules. J'ai tenté d'écrire un code, mais je me trouve bloquer car cela bug.

    Le principe est de sélectionner une cellule d'une ligne
    De cliquer sur le bouton "Mail d'envoi des clés de Licence"
    Derrière ce mail, se cache le code suivant se basant sur un mail (le code source du mail se trouve dans l'onglet Liste), les champs devant se compléter automatiquement


    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    '' ##############################################################
    '' This is launched when the user clicks to create a PO
    '' ##############################################################
    Public Sub CreateCleLicenceMail_Click()
    Dim oMailApp As Object   '' Outlook.Application
    Dim oMail As Object      '' Outlook.MailItem
    Dim sMailBody As String
    Dim oWS As Worksheet
     
        Set oWS = ActiveSheet
        sMailBody = Sheets("Liste").Range("MailBody1") & Sheets("Liste").Range("MailBody2") & Sheets("Liste").Range("MailBody3")
        sMailBody = Replace(sMailBody, "%%Num?ro de commande%%", oWS.Cells(ActiveCell.Row, cmFCNumCommande))
        sMailBody = Replace(sMailBody, "%%Date de commande%%", Format(oWS.Cells(ActiveCell.Row, cmFCDateCommande), "dd mmmm yyyy"))
        sMailBody = Replace(sMailBody, "%%Identifiant 1%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant1))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 1%%", oWS.Cells(ActiveCell.Row, cmFCCle1))
        sMailBody = Replace(sMailBody, "%%Identifiant 2%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant2))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 2%%", oWS.Cells(ActiveCell.Row, cmFCCle2))
        sMailBody = Replace(sMailBody, "%%Identifiant 3%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant3))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 3%%", oWS.Cells(ActiveCell.Row, cmFCCle3))
        sMailBody = Replace(sMailBody, "%%Identifiant 4%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant4))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 4%%", oWS.Cells(ActiveCell.Row, cmFCCle4))
        sMailBody = Replace(sMailBody, "%%Identifiant 5%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant5))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 5%%", oWS.Cells(ActiveCell.Row, cmFCCle5))
     
        Set oMailApp = CreateObject("Outlook.Application")
        Set oMail = oMailApp.CreateItem(0)  '' olMailItem
        With oMail
            .To = [cmFCMail]
            .Subject = "Votre commande [" & cmFCNumCommande & "][" & Format(cmFCDateCommande, "dd mmmm yyyy") & "] - Cl? de licence"
            .BodyFormat = 2    '' olFormatHTML
            .HTMLBody = sMailBody
            .Display
        End With
     
        Set oMailApp = CreateObject("Outlook.Application")
        Set oMail = oMailApp.CreateItem(0)  '' olMailItem
        With oMail
            .To = oWS.Cells(ActiveCell.Row, cmFCMail)
            .Subject = "Votre commande [" & Format(oWS.Cells(ActiveCell.Row, cmFCDateCommande), "dd mmmm yyyy") & "] pour [" & oWS.Cells(ActiveCell.Row, cmFCNumCommande) & "]"
            .BodyFormat = 2    '' olFormatHTML
            .HTMLBody = sMailBody
            .Display
        End With
     
    End Sub

    Voici le fichier déjà bien avancé.
    Merci pour votre aide
    Bonne journée
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Citation Envoyé par Kaytilou Voir le message
    J'ai tenté d'écrire un code, mais je me trouve bloquer car cela bug.
    Mais encore? Un message d'erreur? Une ligne surlignée en jaune? Un résultat qui ne correspond pas à ton attente?

    cmFCNumCommande (et les autres) ne sont pas déclarés et sont vides lors de l'exécution, c'est du à la création du fichier exemple?.

    Je ne vois nul part de contrôle pour s'assurer que la sélection se trouve bien dans le tableau, ça peut vite tourner au drame .

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre confirmé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 100
    Par défaut
    Bonjour
    Effectivement, merci Qwazerty, il manquait un bout de code à savoir la déclaration des commandes (point résolu).
    J'ai également mis à jour la macro qui permet de cliquer sur une cellule d'une ligne pour reprendre les données de cette ligne.

    Il reste toutefois un bug.

    Lorsque je lance la macro "CreateCleLicenceMail", le mail s'ouvre bien et reprend les données pour la partie => cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set oMailApp = CreateObject("Outlook.Application")
        Set oMail = oMailApp.CreateItem(0)  '' olMailItem
        With oMail
            .To = oWS.Cells(ActiveCell.Row, cmFCMail)
            .Subject = "Votre commande " & oWS.Cells(ActiveCell.Row, cmFCNumCommande) & " du " & Format(oWS.Cells(ActiveCell.Row, cmFCDateCommande), "dd mmmm yyyy") & " - Cl? de licence"
            .BodyFormat = 2    '' olFormatHTML
            .HTMLBody = sMailBody
            .Display
        End With
    Par contre, les commandes suivantes ne fonctionnent pas, car cela ne reprend pas les données de cellules par ligne sélectionnée, mais le nom de la colonne. Résultat au lieu de me donner le numéro d'identifiant et la clé de licence, s'affiche uniquement le texte "numéro d'identifiant" et "clé de licence"

    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
    Public Sub CreateCleLicenceMail_Click()
    Dim oMailApp As Object   '' Outlook.Application
    Dim oMail As Object      '' Outlook.MailItem
    Dim sMailBody As String
    Dim oWS As Worksheet
     
        Set oWS = ActiveSheet
        sMailBody = Sheets("Liste").Range("MailBody1") & Sheets("Liste").Range("MailBody2") & Sheets("Liste").Range("MailBody3")
        sMailBody = Replace(sMailBody, "%%Num?ro de commande%%", oWS.Cells(ActiveCell.Row, cmFCNumCommande))
        sMailBody = Replace(sMailBody, "%%Date de commande%%", Format(oWS.Cells(ActiveCell.Row, cmFCDateCommande), "dd mmmm yyyy"))
        sMailBody = Replace(sMailBody, "%%Identifiant 1%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant1))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 1%%", oWS.Cells(ActiveCell.Row, cmFCCle1))
        sMailBody = Replace(sMailBody, "%%Identifiant 2%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant2))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 2%%", oWS.Cells(ActiveCell.Row, cmFCCle2))
        sMailBody = Replace(sMailBody, "%%Identifiant 3%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant3))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 3%%", oWS.Cells(ActiveCell.Row, cmFCCle3))
        sMailBody = Replace(sMailBody, "%%Identifiant 4%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant4))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 4%%", oWS.Cells(ActiveCell.Row, cmFCCle4))
        sMailBody = Replace(sMailBody, "%%Identifiant 5%%", oWS.Cells(ActiveCell.Row, cmFCIdentifiant5))
        sMailBody = Replace(sMailBody, "%%Cl? Licence 5%%", oWS.Cells(ActiveCell.Row, cmFCCle5))
    Je dois sans doute avoir un problème de déclaration de variable dans le mail type (le code est dans le fichier txt en PJ).
    J'y suis presque mais petit bug
    Merci pour votre aide

    En PJ fichier mis à jour
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Sans exécuter le code je dirais que le problème vient du contenu des cellules "MailBodyx". Le code y recherche %%....%% pour insérer les valeurs, sauf que %% n'apparaissent nul part dans le text, le seul text qui existe est bien du style "numéro d'identifiant" et n'est donc pas remplacé dans le code, le mail n'est donc pas personnalisé. De plus tous tes caractère accentués sont remplacés pas des "?", replace ne va pas comprendre il faut mettre le texte exact que tu veux remplacer.

    Est-ce que tu es intéressé par une modification de ton fichier?
    • Utilisation plus "avancée" du tableau structuré que tu utilises
    • quelques "solidification" du code, j'entend pas là qu'une partie des tes appels à des Sheets ne spécifient pas le classeur, ce qui à mon avis est une mauvaise habitude
    • Le contenu des MailBodyx peut-être passé dans une constante ou une variable au sein du code VBA, il n'apparaitrait plus dans le fichier Excel


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre confirmé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 100
    Par défaut
    Bonsoir,
    Un grand merci pour la réponse. Plus simple, n'était pas possible Je viens d'opter les caractères %%....%% qui effectivement d'avaient aucune utilité et remplacé par le texte exact. :-) Du coup tout fonctionne correctement
    N'ayant pas une experte en VBA, juste autodidacte, je suis preneuse de toute amélioration me permettant d'enrichir mes compétences. Donc avec plaisir pour une modification du fichier
    Je t'envoi la dernière version du fichier avec les dernières mises à jour
    Merci à toi
    Bonne soirée
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Dans ton code précédent "Clé Licence x", il te manque les accents sur "clé"

    Dans les entêtes de colonnes, Clé Licence 3 et 4 ont un espace en fin et Tarif L5 en début et en fin. C'est problématique de laisser trainer ça pour utiliser au mieux les noms de champs dans le code.


    Essai et dis moi, je n'ai pas tout testé,juste les modifications (il est tard )

    ++
    Qwaz
    Fichiers attachés Fichiers attachés

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. [Bouncy castle] Envoyer un mail chiffré avec piece jointe
    Par finalevirus dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 28/04/2013, 00h34
  2. Comment envoyer un mail HTML avec Tinymce
    Par sws2008 dans le forum Langage
    Réponses: 2
    Dernier message: 06/10/2008, 19h23
  3. Envoyer des mails à partir d'excel
    Par triaguae dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2007, 18h01
  4. Envoyer un mail Lotus d'EXCEL
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/10/2007, 12h02
  5. [Mail] Envoyer des mails simplement avec PHP
    Par mailou dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2006, 18h21

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