Envoyer un email avec Excel version améliorée

Coucou les spécialistes d'Excel

Je fais appel à votre science ! Je débute dans le VBA. Je n'ai pas nécessairement vocation à devenir spécialiste car ce n'est en rien mon métier Néanmoins, je trouve ça intéressant.

Voilà ma complainte : J'ai une liste importante de fournisseurs à contacter. Je vais faire un premier mailing général pour demander de signer un document que je vais joindre à ce mail.

Ensuite je vais effectuer des relances. Néanmoins, je souhaiterais éviter de relancer les fournisseurs que j'ai déjà contactés. Aussi, la formule (avec mes mots) serait la suivante : rechercher la colonne "mail envoyé à telle date" si vide alors ré-envoyer le mail.

Et faire ainsi de suite car je vais faire 3 relances en tout. Donc à chaque fois, il faudrait que la formule puisse vérifier si la première, la seconde relance ont potentiellement marché puis ré-envoyer le mail le cas échéant.

Est ce qu'il faut que je fasse deux boutons ? Il serait possible de faire une fusion de tout ça ?

Je vous transmets mon fichier pour comprendre ma demande et mon tableau. J'ai trouvé la formule en bossant pour envoyer le mail avec Excel en attachant le document que je vais adresser aux fournisseurs #fierté lol Elle n'apparaît pas sur ce fichier. C'était le premier outil que j'ai amélioré depuis. SI vous voulez je vous l'enverrai.

Par ailleurs quand j'envoie le mail, j'ai trouvé également comment modifier le texte du mail. Néanmoins, je n'ai pas trouvé comment mettre en gras une partie. Par exemple : merci de m'envoyer les éléments pour le XX/XX/2019. SI je veux mettre uniquement la date en gras, comment ça marche ?

Enfin, si jamais ma demande est impossible, j'ai bien pensé à le faire à la mano en filtrant et en ne laissant qu'apparaître que les entreprises concernées par un éventuel renvoi. Néanmoins, en procédant au test, je me suis rendu compte que même si je filtre et je sélectionne que les entreprises concernées, cela envoie quand même à tout le monde

Normal car je pense que le filtre n'est qu'une vision pour l'utilisateur. Quoiqu'il arrive ma formule sélectionne toute la colonne...Je ne sais pas si je suis clair

Merciiiiiii pour votre aide !!!!

Bonjour,

Par ailleurs quand j'envoie le mail, j'ai trouvé également comment modifier le texte du mail. Néanmoins, je n'ai pas trouvé comment mettre en gras une partie. Par exemple : merci de m'envoyer les éléments pour le XX/XX/2019. SI je veux mettre uniquement la date en gras, comment ça marche ?

Sur ce point précis, il faut créer le mail avec htmlbody et non body, et encadrer le texte à mettre en gras par les balises html <b>_______</b>

Plus globalement :

  • quelle messagerie utilises-tu ? outlook ? ou bien est-ce que tu passes par Thunderbird ? CDO ? il est dommage de ne pas avoir le début de ton code (sans informations confidentielles)
  • où se trouve le critère qui permet de relancer ?

J'étais de chez moi ! Du coup voici le doc avec ma formule bidouillée comme j'ai pu (l'essentiel est que cela marche)

Vu

Donc tu utilises outlook.

1-

je reviens sur ma question : quel est le critère qui permet de relancer ou pas ? j'ai compris qu'il s'agissait d'un filtre, mais le quel ?

Il faudra juste adapter ceci pour y inclure le critère

For f = LBound(ListeDest(), 1) To UBound(ListeDest(), 1)
  sListeDest = sListeDest & ";" & ListeDest(f, 1)
Next

Un conseil, essaie de mieux indenter ton code afin d'y voir plus clair

2-

pour la mise en forme, gras notamment

-- remplace .body par .htmlbody

-- tu peux aussi mettre

.htmlbody = "bla bla bla" & .htmlbody

et ainsi récupérer à la fin ta signature

-- remplacer tous les chr(10) par "<br/>" qui est la balise html pour le retour à la ligne

-- je n'ai pas vu où était m'envoyer les éléments ... ; pour mettre la date en gras mettre :

m'envoyer les éléments pour le <b>XX/XX/2019</b>

Super pour le retour à la ligne J'ai fait comme j'ai pu LOL

Le "m'envoyer les éléments pour XX" était un exemple. In concreto c'est le terme "protocole" que j'aurais souhaiter mettre en gras

Pour le filtre c'était une idée ! Ma première action aurait été que le formule check si le premier envoi est effectué, puis si j'ai le document (colonne présence du doc) puis renvoyer. Et donc ça renverrait uniquement sur les entreprises concernées.

SINON l'idée 2 est de ne renvoyer que sur les entreprises filtrées (si c'est possible). Et dans ce cas là ce serait uniquement le filtre sur la colonne K du coup permettant de checker si le doc est présent ou pas !

Merciii en tous les cas c'est top de vous décarcasser pour moi

Je regarde demain ...

Une proposition basée sur le scénario :

Ma première action aurait été que le formule check si le premier envoi est effectué, puis si j'ai le document (colonne présence du doc) puis renvoyer. Et donc ça renverrait uniquement sur les entreprises concernées.

Sub EnvoiMail()
  Dim ListeDest()
  Dim ListeComment()
  Dim f As Long
  Dim oMsgApp As Object
  Dim oMsg As Object
  Dim sListeDest As String
  Dim sFichier As String

  sFichier = Application.GetOpenFilename(, , "Sélectionner le fichier à envoyer")
  If sFichier = "" Then
    MsgBox "Aucun fichier sélectionné, opération annulée"
    Exit Sub
  End If

  Set oMsgApp = CreateObject("Outlook.Application")

  ListeDest() = Range("Base[mail]")
  sListeDest = ""

  For f = LBound(ListeDest(), 1) To UBound(ListeDest(), 1)
    With ActiveSheet.ListObjects(1)
      If .ListColumns("Document est il présent ?").DataBodyRange.Rows(f).Value <> "OUI" Then
        sListeDest = sListeDest & ";" & ListeDest(f, 1)
        If .ListColumns("Premier mail envoyé").DataBodyRange.Rows(f).Value = "" Then
          .ListColumns("Premier mail envoyé").DataBodyRange.Rows(f).Value = Now
        ElseIf .ListColumns("1ère relance").DataBodyRange.Rows(f).Value = "" Then
          .ListColumns("1ère relance").DataBodyRange.Rows(f).Value = Now
        ElseIf .ListColumns("2ème relance").DataBodyRange.Rows(f).Value = "" Then
          .ListColumns("2ème relance").DataBodyRange.Rows(f).Value = Now
        Else
          .ListColumns("3ème relance").DataBodyRange.Rows(f).Value = Now
        End If
      End If
    End With
  Next

    Set oMsg = oMsgApp.CreateItem(0)
    With oMsg
      .To = sListeDest
      .Attachments.Add sFichier
      .Subject = "Protocole de sécurité"
      ' texte à ré-écrire :
      .htmlBody = "Madame, Monsieur,<br><br><b>pour mettre en gras</b> retour en maigre" & .htmlBody
      .display '.Send pour envoi direct

    End With
    Set oMsg = Nothing

  oMsgApp.Quit
  Set oMsgApp = Nothing
  MsgBox "Mail envoyé"

End Sub

Waooouuuuuu je vais regarder ça demain au boulot ! G compris la formule en tous les cas !!! tu es mon héros (ou héroine en fonction du genre )

Que j'aimerais avoir vos connaissances sur ce domaine particulier d'excel ! Je pense que ça doit faire gagner un temps fou au taff!!!!!

c'est super ! En plus ça marque même l'heure et le jour de l'envoi ! J'avais pas capté !!

Mercii encore !!!

Merci pour ce retour

Rechercher des sujets similaires à "envoyer email version amelioree"