XL 2016 Format de texte de variable dans corps de mail

bonoboas

XLDnaute Occasionnel
Bonjour
J'ai fait une macro qui fonctionne mais je souhaiterais mettre du gras et souligné sur mes variables.
ville, date et lien de dossier
Voici mon code :
Code:
Sub envoimail(ByVal control As IRibbonControl)
Dim i As Byte
For i = 3 To 5
If Cells(i, 12).Value <> "" Then
Dim olApp As Outlook.Application
Set olApp = CreateObject("outlook.application")
Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)
With olMail
.To = Cells(i, 12).Value
.Subject = "Consultation  "  & Range("Ville")
.Body =  situé à " & Range("Ville") & vbLf & vbLf &  "La date limite  est fixée au " & Range("date") & vbLf & vbLf _
& " Vous trouverez sur ce lien les éléments du dossier : " & Range("lien_dossier") & vbLf & vbLf _
& "Vous en souhaitant bonne réception, nous nous tenons à votre disposition pour toute information complémentaire " _
& vbLf & vbLf & "Cordialement "
.Send
End With
End If
Next i

End Sub

Merci d'avance
Anthony
 

bérylion

XLDnaute Occasionnel
Code:
Sub envoimail()

  Dim ville$, ajd As Date, lien$, olApp As Object, olMail As Object
  ville = "Paris"
  ajd = Date
  lien = "http://lien.bidon"
  Set olApp = CreateObject("outlook.application")
  Set olMail = olApp.CreateItem(olMailItem)
 
  With olMail
    .Subject = "Consultation  " & ville
    .HTMLBody = "situé à <u><b>" & ville & "</b></u> <br><br>" & _
      "La date limite  est fixée au <u><b>" & ajd & "</b></u><br><br>" & _
        "Vous trouverez sur ce lien les éléments du dossier : <u><b><a href=" & lien & ">Mon lien bidon</a></b></u><br>" & _
          " Vous en souhaitant bonne réception, nous nous tenons à votre disposition pour toute information complémentaire <br><br>" & _
            "Cordialement "
   
    .display
  End With

End Sub

Enjoy ;)
 

bonoboas

XLDnaute Occasionnel
Merci pour le code j'ai réussi à adapter, mais mon souci maintenant c'est qu'il ne fait pas l'envoi.
le ".send" ne fonctionne pas.
Pouvez-vous m'aider sur ce point s'il vous plaît.
Bien à vous
Anthony
ps : pourquoi vous mettez $ dans la déclaration des variables
 

bérylion

XLDnaute Occasionnel
re-

pas de souci de mon coté avec .Send
quelle erreur tu as ?

sinon, mets le code en entier pour vérifier ;)

@+

(le $ ça remplace as string, et comme d'habitude je déclare pas les variables a l'avance c'est devenu un réflexe... mais parfaitement inutile dans ce cas précis)
 

bonoboas

XLDnaute Occasionnel
Voici le problème que j'ai maintenant :
https://support.microsoft.com/fr-lu...time-error--2147023174-800706ba-error-message

voici mon nouveau code
VB:
Sub format(ByVal control As IRibbonControl)

  Dim Nom$, Titre$, ville$, date_recu As Date, lien$, olApp As Object, olMail As Object
  ville = Range("ville")
  date_recu = Range("date_reception")
  nb_logements = Range("nb_logement")
  lien = Range("lien_dossier")
  Set olApp = CreateObject("outlook.application")
  Set olMail = olApp.CreateItem(olMailItem)
Dim i As Byte

For i = 3 To 70
If Cells(i, 14).Value <> "" Then
Titre = Cells(i, 4)
Nom = Cells(i, 5)
Cells(i, Columns.Count).End(xlToLeft).Offset(, 1).Value = Date 'Mettre la date d'envoi au bout de la ligne
  With olMail
  .To = Cells(i, 14).Value
    .Subject = "Consultation d'appel d'offre " & ville & " - Projet de " & nb_logements & " logements"
    .HTMLBody = "Bonjour " & Titre & " " & Nom & " <br><br>" & _
    "Nous étudions actuellement un projet de construction de <b> " & nb_logements & "</b> " & " logements situé à <b>" & ville & "</b> <br><br>" & _
    "Nous souhaitons vous solliciter pour un chiffrage. <br><br>" & _
      "La date limite  pour recevoir les offres est fixée au : <u><b>" & date_recu & "</b></u><br><br>" & _
        "Vous trouverez sur le lien suivant les éléments du dossier : <u><b><a href=" & lien & ">" & lien & "</a></b></u><br><br>" & _
          " Si vous n'avez pas la possibilité de nous répondre, veuillez nous le faire savoir par retour d'émail . <br><br>" & _
         " Nous restons à votre disposition pour toutes informations complémentaires. <br><br>" & _
            "Cordialement "
'.Send
.Display

   End With
 
End If

Next i
End Sub
Savez-vous s'il est possible d'ouvrir tous les messages ?
Si on utilise display la boucle ci-dessus ferme les messages au fur et à mesure mais le dernier message reste ouvert, ce qui nous donne la possibilité de l'envoyer.
Lorsqu'on utilise .send les messages sont envoyés directement sans visualisation.
La possibilité de contrôler serait un plus.
Merci pour votre aide.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

bonoboas
Je te ferai la même suggestion que celle faite récemment à castor30
(puisque tu disposes d'outlook, nul besoin de macro VBA pour envoyer des mails
En plus, c'est beaucoup plus simple et riche en option pour formater le message)

Bonjour le fil, le forum

castor30
Pourquoi se dispenser des possibilités offertes par la suite Office ?
https://support.office.com/fr-fr/article/Utiliser-le-publipostage-pour-envoyer-des-messages-électroniques-en-bloc-0f123521-20ce-4aa8-8b62-ac211dedefa4

En plus avec cette solution, pas de VBA à manipuler (et comme tu indiques ne pas le maitriser), ta question est rapidement résolue, non ?
 

bonoboas

XLDnaute Occasionnel
Bonsoir Staple1600,
C'est une très bonne remarque. Je connais bien cette méthode de publipostage de mail, je l'ai souvent utilisé, mais elle ne remplit pas mon besoins. L'objet de mon outil sert à faire un suivi de consultation c'est à dire que les flux d'informations : email et téléphone sont saisis dans un tableur (et changent au cours du temps)...Il permettra ainsi à d'autre de savoir ce qu'il en est pour chaque destinataire. Avec Outlook, il est compliqué de savoir si un mail a été envoyé, surtout s'il est absent. Je ne sais pas si tu vois où je veux en venir...
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re,

Bonsoir Staple1600,
Avec Outlook, il est compliqué de savoir si un mail a été envoyé, surtout s'il est absent. Je ne sais pas si tu vois où je veux en venir...
Ah bon?
https://support.office.com/fr-fr/ar...essitent-9d0f175f-f3e9-406d-bbf7-9c57e1f781cc
https://support.office.com/fr-fr/ar...e-règles-c24f5dea-9465-4df4-ad17-a50704d66c59

Si tu as une base Excel, c'est avec elle qu'il faut faire le publipostage.
(et dans Word, il y a les champ de fusion pour personnaliser les mails à l'envie)

Mais comme dit précédemment dans le fil de castor30
Libre à toi de te compliquer la tâche ;)
 

bérylion

XLDnaute Occasionnel
re-

pas d'erreur chez moi, ca envoie une rafale de 70 émils....

VB:
Sub format()

  Dim date_recu As Date, olApp As Object, olMail As Object
  ville$ = "ville"
  date_recu = Date
  nb_logements$ = "nb_logement"
  lien$ = "lien_dossier"
  Set olApp = CreateObject("outlook.application")
  Set olMail = olApp.CreateItem(olMailItem)

  For i% = 3 To 70
  'If Cells(i, 14).Value <> "" Then
  Titre$ = "Cells(i, 4)"
  Nom$ = "Cells(i, 5)"
  Cells(i, Columns.Count).End(xlToLeft).Offset(, 1).Value = Date 'Mettre la date d'envoi au bout de la ligne
    With olMail
    .To = "adresse@mail.fr"
      .Subject = "Consultation d'appel d'offre " & ville & " - Projet de " & nb_logements & " logements"
      .HTMLBody = "Bonjour " & Titre & " " & Nom & " <br><br>" & _
      "Nous étudions actuellement un projet de construction de <b> " & nb_logements & "</b> " & " logements situé à <b>" & ville & "</b> <br><br>" & _
      "Nous souhaitons vous solliciter pour un chiffrage. <br><br>" & _
        "La date limite  pour recevoir les offres est fixée au : <u><b>" & date_recu & "</b></u><br><br>" & _
          "Vous trouverez sur le lien suivant les éléments du dossier : <u><b><a href=" & lien & ">" & lien & "</a></b></u><br><br>" & _
            " Si vous n'avez pas la possibilité de nous répondre, veuillez nous le faire savoir par retour d'émail . <br><br>" & _
           " Nous restons à votre disposition pour toutes informations complémentaires. <br><br>" & _
              "Cordialement "
    .Send
    '.Display
     End With
  'End If
  Next i

End Sub

t'as vérifié quelles références sont activées ? :
(voila les miennes)
upload_2017-9-29_12-6-0.png



sur quelle ligne ca couine chez toi ?
 

bonoboas

XLDnaute Occasionnel
voici ce que j'ai activé

et ça couine ici :

J'ai l'impression que la boucle bloque, car le premier mail part et bloque au suivant sur la ligne jaune...
Code:
Sub format(ByVal control As IRibbonControl)

  Dim Nom$, Titre$, ville$, date_recu As Date, lien$, olApp As Object, olMail As Object
  ville = Range("ville")
  date_recu = Range("date_reception")
  nb_logements = Range("nb_logement")
  lien = Range("lien_dossier")
  Set olApp = CreateObject("outlook.application")
  Set olMail = olApp.CreateItem(olMailItem)
Dim i As Byte

For i = 3 To 200
If Cells(i, 14).Value <> "" Then
Titre = Cells(i, 4)
Nom = Cells(i, 5)
Cells(i, Columns.Count).End(xlToLeft).Offset(, 1).Value = Date 'ajoute la date à la fin de la ligne
  With olMail
  .To = Cells(i, 14).Value
    .Subject = "Consultation d'appel d'offre " & ville & " - Projet de " & nb_logements & " logements"
    .HTMLBody = "Bonjour " & Titre & " " & Nom & " <br><br>" & _
    "Nous étudions actuellement un projet de construction de <b> " & nb_logements & "</b> " & " logements situé à <b>" & ville & "</b> <br><br>" & _
    "Nous souhaitons vous solliciter pour un chiffrage. <br><br>" & _
      "La date limite pour envoyer votre offre est fixée au : <u><b>" & date_recu & "</b></u><br><br>" & _
        "Vous trouverez sur le lien suivant les éléments du dossier : <u><b><a href=" & lien & ">" & lien & "</a></b></u><br><br>" & _
          " Si vous n'avez pas la possibilité de nous répondre, veuillez nous le faire savoir par retour d'émail . <br><br>" & _
         " Nous restons à votre disposition pour toutes informations complémentaires. <br><br>" & _
            "Cordialement "
.Send
.Display

   End With
     
End If

Next i
End Sub
Merci Bérylion pour ton aide...
 
Dernière édition:

bonoboas

XLDnaute Occasionnel
Bonjour Staple1600,
Merci encore pour ton aide c'est super sympa, mais hélas, j'avais bien mis un i pas un 1. J'ai vu tes propositions de méthodes dans le message#8, je les utilise sur des mails qui me sont destinés. Cet macro permet en fait de savoir si les mails ont été envoyés.
Je m'explique avec le scénario suivant :
Imaginons Staple1600 possède un pc avec une session dédié et sa propre messagerie. Il envoie lundi matin un mail à X et Y mais à pas Z.
Mardi Staple1600 à la gastro et est arrêté 1 semaine.
Et bien pour ne pas avoir du retard sur le dossier, je décide alors de prendre la suite et d'ouvrir l'outil qui est sur le serveur et je vois d'un seul coup d’œil que les mails pour X et Y sont bien envoyée et je demande à la secrétaire de les appeler pour savoir s'il ne leur manque rien sur le lien du dossier et faire le nécessaire (elle écrira sur une colonne ses commentaires).
Au retour de Staple1600 le dossier n'a pas pris de retard puisque le suivi a continué et en plus il y a les commentaires des appels. Excel n'est pas magnifique ? Si tu as des solutions sur Outlook moi je veux bien...
En tout cas, ça me fait très plaisir que tu te penches sur mon problème. Si tu as d'autres idées n'hésite pas.
Merci beaucoup.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

[aparté]
Staple n'a jamais la gastro, car Staple se lave les mains avant de manger.
Et Staple n'a plus été en arrêt maladie depuis avril 2008.
[/aparté]

bonoboas
Au final, ta macro fonctionne ou pas?
Tu as résolu ton problème ?
 

bérylion

XLDnaute Occasionnel
re-

et en mettant ta déclaration de variable objet à l'intérieur de la boucle, c'est pas mieux ?... :p

VB:
Sub format()

  Dim date_recu As Date, olApp As Object, olMail As Object
  ville$ = "ville"
  date_recu = Date
  nb_logements$ = "nb_logement"
  lien$ = "lien_dossier"
  Set olApp = CreateObject("outlook.application")
  'rem  ICI suppression de "Set olMail = olApp.CreateItem(olMailItem)"
  For i% = 3 To 70
    If Cells(i, 14).Value <> "" Then
      Set olMail = olApp.CreateItem(olMailItem) 'rem ici ajout de la ligne
      Titre$ = "Cells(i, 4)"
      Nom$ = "Cells(i, 5)"
      Cells(i, Columns.Count).End(xlToLeft).Offset(, 1).Value = Date 'Mettre la date d'envoi au bout de la ligne
      With olMail
        .To = Cells(i, 14).Value
        .Subject = "Consultation d'appel d'offre " & ville & " - Projet de " & nb_logements & " logements"
        .HTMLBody = "Bonjour " & Titre & " " & Nom & " <br><br>" & _
          "Nous étudions actuellement un projet de construction de <b> " & nb_logements & "</b> " & " logements situé à <b>" & ville & "</b> <br><br>" & _
          "Nous souhaitons vous solliciter pour un chiffrage. <br><br>" & _
            "La date limite  pour recevoir les offres est fixée au : <u><b>" & date_recu & "</b></u><br><br>" & _
              "Vous trouverez sur le lien suivant les éléments du dossier : <u><b><a href=" & lien & ">" & lien & "</a></b></u><br><br>" & _
                " Si vous n'avez pas la possibilité de nous répondre, veuillez nous le faire savoir par retour d'émail . <br><br>" & _
                  " Nous restons à votre disposition pour toutes informations complémentaires. <br><br>" & _
                    "Cordialement "
        .Send
        '.Display
     End With
   End If
  Next i

End Sub
 

Discussions similaires

Réponses
6
Affichages
268

Statistiques des forums

Discussions
311 724
Messages
2 081 937
Membres
101 844
dernier inscrit
pktla