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

Outlook Discussion :

[IDEE] Créer un envoi de mail contenant des données issues d'un fichier Excel


Sujet :

Outlook

  1. #1
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut [IDEE] Créer un envoi de mail contenant des données issues d'un fichier Excel
    Bonjour à tous,

    Je me permet de poster ce topic ici bien que je suppose qu'il est mal placé.

    Commençons.

    Dans le cadre du suivi SAV d'appareil, je dois envoyer des demandes d'intervention à un prestataire et j'aimerais optimiser le tout.

    En effet, actuellement, pour envoyer un mail, nous devons remplir un mail avec des données issus d'un tableau excel puis remplir les données manquantes (la panne, etc ...).
    Je souhaiterais créer un mécanisme qui, en double cliquant sur la case du tableau Excel, m'ouvrirait directement le mail voulu en ayant rempli l'objet du mail, ne me laissant plus qu'à remplir la demande d'intervention.

    je me doute que la tâche n'est pas aisée et soyons honnête, je pense que l'idée de base sera modifié plus tard mais j'aimerais savoir si cela est faisable, si oui, comment ? Et si quelqu'un a une idée de la procédure à suivre ?

    Vous remerciant pas avance de votre aide.

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 125
    Points : 9 953
    Points
    9 953
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    à mon sens, le plus simple est de réaliser la macro dans Excel.

    la plage de ton tableau est-elle fixe ?

    un exemple qu'on doit adapter si ça correspond à ton besoin
    il est pas complet, il manque la fonction qui va convertir ta plage au format HTML pour l'insérer dans le mail

    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
    Sub EnvoiMailIntervention()
     
        Dim OutApp As Object
        Dim OutMail As Object
        Dim Plage As Range
     
        Set Plage = "ici c'est la plage qu'on mettra dans le corps du mail"
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
        With OutMail
     
            .To = "test@test.fr"
            .Subject = "L'objet du Mail"
     
            ' ici on utilise la fonction qui converti la plage Excel en données HTML
            .HTMLBody = RangetoHTML(Plage)
     
            ' afficher
            .Display
     
            ' envoyer
            '.Send
        End With
     
        Set OutApp = Nothing
        Set OutMail = Nothing
        Set Plage = Nothing
    End Sub

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Bonjour Joe,

    Effectivement, ma plage est fixe.

    Par contre, si je copie la macro tel quelle dans mon tableau Excel via Macro, on m'indique une erreur de syntaxe ...

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 125
    Points : 9 953
    Points
    9 953
    Billets dans le blog
    5
    Par défaut
    Attend tu brûles les étapes !

    c'était un exemple

    quelles sont les coordonnées de ta plage ?

  5. #5
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    J'ai des données de B2 à B12.

    PS : Désolé d'avoir brûlé des étapes

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 125
    Points : 9 953
    Points
    9 953
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    voici les codes censés être fonctionnels.

    il faut impérativement que ton Outlook soit ouvert quand tu vas lancer la procédure dans Excel

    il faut les coller dans un module du VBE (l'éditeur de code). Dans Excel :
    1) Appuyer sur Alt+F11
    2) Tu arrives sur l'interface du VBE : tu fais un clic droit dans la fenêtre en haut à gauche, sur la ligne marquée "VBAProject(NomDeTonClasseur")
    3) Tu choisis "Insertion" / "Module"
    4) dans la fenêtre blanche qui occupe l'interface (du milieu jusqu'à la toute droite), tu y colles les deux codes suivants

    La procédure qui va créer le mail en y mettant ta plage B2:B12
    tu dois indiquer le nom de la feuille où est situé ta plage + mettre l'adresse mail + adapter le titre du mail
    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
    Sub EnvoiMailIntervention()
     
        Dim OutApp As Object
        Dim OutMail As Object
        Dim Plage As Range
     
        Set Plage = Thisworkbook.Worksheets("NomDeTaFeuille").Range("B2:B12")
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
        With OutMail
     
            .To = "test@test.fr"
            .Subject = "L'objet du Mail"
     
            ' ici on utilise la fonction qui converti la plage Excel en données HTML
            .HTMLBody = RangetoHTML(Plage)
     
            ' afficher
            .Display
     
            ' envoyer
            '.Send
        End With
     
        Set OutApp = Nothing
        Set OutMail = Nothing
        Set Plage = Nothing
    End Sub

    Ensuite, la fonction qui va convertir ta plage Excel afin de l'insérer dans le mail
    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
    46
    47
    48
    49
    Function RangetoHTML(ByVal rng As Range)
        Dim fso As Object
        Dim ts As Object
        Dim TempFile As String
        Dim TempWB As Workbook
     
        TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
        rng.Copy
        Set TempWB = Workbooks.Add(1)
        With TempWB.Sheets(1)
     
            .Cells(1).PasteSpecial Paste:=12
            .Cells(1).PasteSpecial Paste:=-4122
            .Cells(1).Select
            Application.CutCopyMode = False
            On Error Resume Next
            .DrawingObjects.Visible = True
            .DrawingObjects.Delete
            .Columns.AutoFit
            On Error GoTo 0
        End With
     
     
        With TempWB.PublishObjects.Add( _
             SourceType:=xlSourceRange, _
             Filename:=TempFile, _
             Sheet:=TempWB.Sheets(1).Name, _
             Source:=TempWB.Sheets(1).UsedRange.Address, _
             HtmlType:=xlHtmlStatic)
            .Publish (True)
        End With
     
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
        RangetoHTML = ts.ReadAll
        ts.Close
        RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                              "align=left x:publishsource=")
     
        TempWB.Close savechanges:=False
     
     
        Kill TempFile
     
        Set ts = Nothing
        Set fso = Nothing
        Set TempWB = Nothing
     
    End Function


    Pour lancer ta procédure, tu fais Alt+F8 et tu auras la liste de tes macros présentes dans le fichier : tu choisis "EnvoiMailIntervention"


    EN CAS D'ERREUR DANS LA PROCEDURE : tu m'indiques la ligne qui est en erreur + le message d'erreur
    j'ai simplement adapté une procédure que j'utilise au quotidien .. et qui était beaucoup plus complexe.

  7. #7
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Encore merci de ton aide et désolé du retard.

    J'ai effectué le test et cela semble fonctionner, le soucis reste que je ne peux pas modifier le corps du message, j'aimerais y ajouter un texte personnalisé (car le SAV en question ne reçoit que les demandes bien précises), puis-je ajouter du texte tout en conservant la macro ?

    EDIT :
    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
    Sub EnvoiMailIntervention()
     
        Dim OutApp As Object
        Dim OutMail As Object
        Dim Plage As Range
     
        Set Plage = ThisWorkbook.Worksheets("Feuil1").Range("B2")
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
        With OutMail
     
            .To = "Test@test.fr"
            .Subject = "-- -- --"
            ' ici on utilise la fonction qui converti la plage Excel en données HTML
     
     
            ' afficher
            .Display
            .HTMLBody = "Bonjour," & vbCrLf _
             & vbCrLf _
             & "Une nouvelle demande d'intervention :" & vbCrLf _
             & vbCrLf _
             & "SN : NOSERIE" & vbCrLf _
             & vbCrLf _
             & "Descriptif de la demande : ERREUR." & vbCrLf _
             & vbCrLf _
             & "Merci de nous renvoyer un mail de prise en compte de cette demande." & vbCrLf _
             & vbCrLf _
             & "Bonne journée," & vbCrLf _
             & vbCrLf _
             & "Cordialement."
     
             .Display
     
            ' envoyer
            '.Send
        End With
     
        Set OutApp = Nothing
        Set OutMail = Nothing
        Set Plage = Nothing
    End Sub
    J'ai rajouter "& vbCrLf _" afin de voir si cela fonctionner, le corps s'affiche correctement.

    Le soucis vient du fait que j'aimerais effectuer une mise à la ligne à la fin de certains lignes (sur le mail) afin que le tout soit plus clair dans le mail, est-ce faisable ?

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

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    Si tu utilises dans le code .HTMLBody ca veut dire que ton texte doit être balisé avec du HTML !

    Soit tu envois en texte brut
    (.body à la place de .htmlbody et avant tu mets .BodyFormat = olFormatPlain au lieu de .BodyFormat = olFormatHTML)
    Soit tu mets des balises HTML, essaye en remplaçant

    par (dans le texte pas entre ")

  9. #9
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Je prend note,

    Le soucis restant est que nous disposons d'une signature automatique (qui remonte par stratégie), cette dernière doit figuré sur les mails afin que le prestataire puisse nous contacter au besoin, si j'utilise ce code, la signature disparaît, que faire pour la faire apparaître ?

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

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Il faut AFFICHER le mail (.display), ce qui fait apparaître la signature, avant d'AJOUTER quelque chose au corps du Mail et non pas le remplacer.

    En gros il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' afficher
            .Display
            signature=.HTMLBody 
     
            .HTMLBody = "<html><body>Bonjour,<BR> à la ligne <BR> A la ligne ....</html></body>" &  signature

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 125
    Points : 9 953
    Points
    9 953
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    merci pour le SAV Oliv-


    Je viens de voir que la plage n'est plus que la cellule B2

    dans le cas où la plage ne contient qu'une seule cellule, on peut utiliser la plage dans le corps brut, pas besoin de passer par du HTML (et de facto, on utilise .Body au lieu de .HTMLBody)

    ça sera plus simple pour toi si tu dois agrémenter le corps du mail

  12. #12
    Membre éprouvé

    Homme Profil pro
    Développeur PHP/Symfony // Mentor OpenClassrooms
    Inscrit en
    Octobre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur PHP/Symfony // Mentor OpenClassrooms
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 203
    Points : 1 264
    Points
    1 264
    Billets dans le blog
    3
    Par défaut
    Merci Oliv pour l'aide,

    Je ne peux assez vous remercier tout les deux, le tout fonctionne au poil

    Effectivement, l'idée du mail est de donner un texte précisant la panne et le numéro de série, le fait de l'insérer dans le corps et l'objet du mail permet d'effectuer un suivi sur un logiciel de gestion de token.

    SI cela est possible, cela optimiserait le tout de manière plus "propre".

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/10/2008, 15h30
  2. Réponses: 7
    Dernier message: 10/06/2008, 15h38
  3. importer des données d'un autre fichier excel
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/05/2008, 16h51
  4. Réponses: 3
    Dernier message: 15/05/2007, 09h28
  5. [Mail] Envoi de mail contenant des images
    Par juliotte dans le forum Langage
    Réponses: 4
    Dernier message: 06/09/2006, 15h48

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