Excel et Outlook - Macro
Bonjour à tous,
Je me permets de vous contacter pour me renseigner quant à la faisabilité de ce que j'aimerais faire avec un classeur.
En effet, j'explique mon projet ; dans le cadre de mon travail, je dois consulter certaines entités qui chacune ont leur adresse email. Il s'agit en l'occurrence de chantiers de travaux publics. J'ai donc créer un classeur regroupant ces entités avec leur adresse mail ainsi que les colonnes destinées aux réponses reçues ultérieurement. Le haut de mon tableau regroupe les informations générales : nom du chantier, date de démarrage, type de travaux, durée, etc
Ma première question est la suivante : est-il possible à l'aide d'un bouton de créer via une macro un email reprenant les adresse mail comme destinataires et un contenu de mail type dont la macro compléterait le texte avec les infos générales ?
Par exemple :
En cliquant sur le bouton, un brouillon de mail s'ouvre avec les adresses en destinataires dont le contenu pourrait être :
"Bonjour,
Veuillez troucer ci-joint notre demande pour le chantier suivant :
Nom : donnée issu du tableau excel
Date : donnée issu du tableau excel
Durée : ...
Merci d'avance
Cordialement".
Avant de me lancer dans de la programmation, j'aimerait savoir si cela est envisageable
Je profite de ma demande pour 2 autres questions qui sont normalement plus simple pour des professionnels d'excel :
* J'ai fusionner plusieurs cellules pour créer un encadré. Comment adapter le format d'une image collée à celui de mon cadre ? En effet, si l'image est plus petite pas de soucis, mai si celle-ci est plus grande j'aimerais qu'elle ne puisse pas sortir du cadre.
* Comment augmenter la taille d'une liste déroulante ? Il s'agit de nom et prénom dans la liste mais l'affichage permet seulement de voir le prénom, j'aimerais donc agrandir la fenêtre qui comporte la liste déroulante.
Je vous remercie d’avance pour le temps consacré à ma requête.
Cordialement
3 questions, je répond à la première :
Kratos01 a écrit :Avant de me lancer dans de la programmation, j'aimerait savoir si cela est envisageable
OUI c'est faisable et assez simple !
Option Explicit
Sub envoi()
Dim messagerie As Object
Dim email As Object
Set messagerie = CreateObject("Outlook.Application")
Set email = messagerie.CreateItem(0)
With email
.to = Range("B1")
.Subject = Range("B2")
.body = Range("B3")
.send
End With
Set email = Nothing
Set messagerie = Nothing
End SubBonjour,
Merci pour votre réponse rapide
Je suis en train d'essayer mais je ne suis pas un spécialiste macro..
Pour être sûr, quels paramètres dans votre code dois-je mettre à jour avec mon projet ?
En effet, j'ai essayé quelques modifications, créer le bouton, associer la macro mais rien ne se passe (le bouton d'enfonce mais rien ne se passe, même pas un message d'erreur)..
Les cellules qui comportes les informations du chantier et les cellules qui comportent les adresses mail doivent être en format texte ?
Poste un fichier simplifié, ce sera plus facile pour expliquer.
Les valeurs à modifier sont celles-ci :
.to = Range("B1")
.Subject = Range("B2")
.body = Range("B3")Bonjour Steelson,
C'est vrai que ça a l'air super facile !
Petite question : Si en place d'une seule cellule, je veux une plage dans le .Body... Comment dois-je l'indiquer ? Range ("B3:B15") par exemple n'a pas l'air de marcher.
Merci pour ce petit bout de code !
Cordialement,
Vbabeginner
Pour simplifier, je vous fait part de mon fichier avec des infos basics.
Dans ce cas là, j'aimerais qu'une fois que les infos du chantier au dessus de la feuille soit renseignées, cliquer sur le bouton "CONSULTER" et avoir un brouillon de mail comme l'image jointe (le texte en gras est tiré du tableau excel)
VBABEGINNER a écrit :Petite question : Si en place d'une seule cellule, je veux une plage dans le .Body... Comment dois-je l'indiquer ? Range ("B3:B15") par exemple n'a pas l'air de marcher.
Salut VBAdébutant, mais tu n'es plus un débutant !
Il faut prendre chaque cellule et la rajouter dans une zone texte :
- soit on reste en texte brut (.body) et dans ce cas on sépare chaque cellule par "=0D0A" (code hexa du retour chariot)
- soit on passe en html (.htmlbody) et dans ce cas on sépare chaque cellule par "<br/>"
Si je prends la formule html, cela donne à peu près ceci :
zonetexte = ""
For i = 3 To 15
zonetexte = zonetexte & Range("B" & i) & "<br/>"
Next i
.To = Range("B1")
.Subject = Range("B2")
.htmlbody = zonetexteou plus élégant, faire
for each macellule in Range("B3:B15")@ Kratos01
OK je vais adapter le code comme demandé, bien que je DéTESTE travailler sur un fichier excel avec cellules fusionnées
Sub envoi()
Dim messagerie As Object
Dim email As Object
Dim cel As Range
Dim destinataire As Range
Set messagerie = CreateObject("Outlook.Application")
For Each service In Range("B11:B47")
If service.Value <> "" Then
liste = ""
For Each destinataire In Range("O" & service.Row & ":AA" & service.Row)
If destinataire.Value <> "" And destinataire.Value <> "-" Then
liste = liste + destinataire.Value + ";"
End If
Next destinataire
If liste <> "" Then
contenu = "Bonjour,<br><br>Veuillez trouver ci-joint une demande de consultation pour le chantier suivant :" _
& "<br>Nom du chantier :" & Range("F4") _
& "<br>Lieu :" & Range("F6") _
& "<br><br>D'avance merci,<br><br>Cordialement<br><br><i>Signature ici</i>"
Set email = messagerie.CreateItem(0)
With email
.to = liste
.Subject = "Check List"
.htmlbody = contenu
.display
End With
Set email = Nothing
End If
End If
Next service
Set messagerie = Nothing
End Sub
Bonjour Steelson,
Merci pour cette explication.
Je suis un peu moins débutant en Excel mais toujours très débuant en Vba !
Bonne soirée,
Vbabeginner
Bonjour,
Je vous remercie pour le code, il marche très bien c'est ce que je voulais !
Le seul petit truc c'est que ça m'ouvre beaucoup de mail (un par contact). Est-il possible de n'avoir plus qu'un seul mail avec toutes les adresses ?
Je vais peut-être pousser un peu le truc mais dernière demande concernant mon projet ; j'ai un deuxième onglet qui reprend les informations du chantier et qui permet aux utilisateurs de coller une image ou une capture d'écran d'un plan afin de cibler une zone pour peaufiner la consultation. Est-il possible d'intégrer uniquement cet onglet en pièce jointe du mail grâce à la macro ? Je pense que non mais on ne sait jamais..
En tout cas, vous m'aidez beaucoup, merci
Je profite de ma réponse pour réitérer mes petites questions qui à mon avis sont faciles pour des spécialistes Excel comme vous
* J'ai fusionner plusieurs cellules pour créer un encadré. Comment adapter le format d'une image collée à celui de mon cadre ? En effet, si l'image est plus petite pas de soucis, mai si celle-ci est plus grande j'aimerais qu'elle ne puisse pas sortir du cadre.
* Comment augmenter la taille d'une liste déroulante ? Il s'agit de nom et prénom dans la liste mais l'affichage permet seulement de voir le prénom, j'aimerais donc agrandir la fenêtre qui comporte la liste déroulante. (La liste déroulante a été créer grâce à "Données" - "Validation de données" - etc). Je pourrai illustrer ma question si nécessaire.
Merci d'avance pour le temps consacré à mes requêtes.
Bonne Journée
Kratos01 a écrit :Je vous remercie pour le code, il marche très bien c'est ce que je voulais !
Le seul petit truc c'est que ça m'ouvre beaucoup de mail (un par contact). Est-il possible de n'avoir plus qu'un seul mail avec toutes les adresses ?
A tester ...
Sub envoi()
Dim messagerie As Object
Dim email As Object
Dim cel As Range
Dim destinataire As Range
Set messagerie = CreateObject("Outlook.Application")
liste = ""
For Each service In Range("B11:B47")
If service.Value <> "" Then
For Each destinataire In Range("O" & service.Row & ":AA" & service.Row)
If destinataire.Value <> "" And destinataire.Value <> "-" Then
liste = liste + destinataire.Value + ";"
End If
Next destinataire
End If
Next service
If liste <> "" Then
contenu = "Bonjour,<br><br>Veuillez trouver ci-joint une demande de consultation pour le chantier suivant :" _
& "<br>Nom du chantier :" & Range("F4") _
& "<br>Lieu :" & Range("F6") _
& "<br><br>D'avance merci,<br><br>Cordialement<br><br><i>Signature ici</i>"
Set email = messagerie.CreateItem(0)
With email
.to = liste
.Subject = "Check List"
.htmlbody = contenu
.display
End With
Set email = Nothing
End If
Set messagerie = Nothing
End SubBonjour Steelson,
C'est parfait ! ça marche nickel
Il me reste plus que mes petits soucis que j'avais mis dans mon précédent posts mais le code c'est bon, merci beaucoup !
Bonjour,
J'ai mis à jour le code avec les informations et la configuration de mon document et ça marche au top !
Je passe sur les questions précédentes mais j'en pose 2 dernières pour que mon fichier soit complet :
1. J'ai fusionné plusieurs cellule pour avoir un encadré. Comment coller une image à l'intérieur qui s’adapte ? En gros, si elle est plus petite tant mieux, si elle est trop grosse, elle s’adapte au cade et donc se réduit.
2. Avec le code établit précédemment, j'aimerais que le deuxième onglet de mon classeur soit pièce jointe de mon mail, est-ce possible ? Je renseigne les infos sur ma page principale puis je complète mon deuxieme onglet qui sera ma pièce jointe (idéalement PDF). Je pense que 'est peut-être réalisable avec PDF Créator que j'ai déja.
Merci d'avance pour le temps consacré à mes 2 dernières requêtes.
Bonne Journée !
Kratos01 a écrit :1. J'ai fusionné plusieurs cellule pour avoir un encadré. Comment coller une image à l'intérieur qui s’adapte ? En gros, si elle est plus petite tant mieux, si elle est trop grosse, elle s’adapte au cade et donc se réduit.
Désolé, je ne vais pas pouvoir te répondre sur ce point, ouvre un autre post en mettant bien le sujet afin de capter les meilleurs experts sur le sujet !
Kratos01 a écrit :2. Avec le code établit précédemment, j'aimerais que le deuxième onglet de mon classeur soit pièce jointe de mon mail, est-ce possible ? Je renseigne les infos sur ma page principale puis je complète mon deuxieme onglet qui sera ma pièce jointe (idéalement PDF). Je pense que 'est peut-être réalisable avec PDF Créator que j'ai déja.
pas besoin de PDF Créator, excel sait le faire.
Je t'envoie un bout de code ... tout de suite.
Sub envoi()
Dim messagerie As Object
Dim email As Object
Dim nompdf As String
nompdf = Environ("Temp") & "\" & "fichier test"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nompdf & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Set messagerie = CreateObject("Outlook.Application")
Set email = messagerie.CreateItem(0)
With email
.to = Sheets("param").Range("B1")
.Subject = Sheets("param").Range("B2")
.body = "test"
.Attachments.Add nompdf & ".pdf"
.display
End With
Set email = Nothing
Set messagerie = Nothing
Kill Environ("Temp") & "\" & "fichier test" & ".pdf"
End SubTu peux bien sûr remplacer ActiveSheetpar le nom de la feuille concernée. Et donner un autre nom que fichier test !
Excel va enregistrer sous un fichier temporaire une copie comme impression de la feuille concernée, et la joindra au courriel.
J'espère que c'est assez clair...
Merci de répondre aussi vite !
Alors si Excel le fait en direct c'est encore mieux. Par contre, je dois intégrer ce code dans le précédent pour faire un seul bouton de commande... Etant très débutant dans les macros, ce code peut s'intégrer directement ? Je pense qu'il s'agit d'ajouter cela entre le destinataire et l'objet..
J'ai essayé en intégrant :
Dim nompdf As String ' dans la liste des Dim
nompdf = Environ("Temp") & "\" & "Croquis"
.Attachments.Add nompdf & ".pdf" ' dans le "with" du mail
Kill Environ("Temp") & "\" & "fichier test" & ".pdf" ' en fin de code
J'ai remplacé ActiveSheet.ExportAsFixedFormat par Croquis.ExportAsFixedFormat car Croquis est le nom de mon deuxième onglet mais le code affiche une erreur. Sinon en laissant ActiveSheet, rien ne se passe quand je clique sur le bouton.. J'ai peut-être mail intégré le nouveau code..
Serait-il possible d'avoir le code que vous aviez fait pour le brouillon de mail avec l'intégration de votre 2eme code ?
Un grand merci en tout cas
Pour l'autre question, c'est un détail je vais essayer de creuser mais si je n'ai pas de réponse ce n'est pas grave
essaie ceci (attention, je n'ai pas pu tester ... tu y étais presque je pense) ! bravo
Sub envoi()
Dim messagerie As Object
Dim email As Object
Dim cel As Range
Dim destinataire As Range
Dim nompdf As String
nompdf = Environ("Temp") & "\" & "Croquis"
Sheets("Croquis").ExportAsFixedFormat Type:=xlTypePDF, Filename:=nompdf & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Set messagerie = CreateObject("Outlook.Application")
liste = ""
For Each service In Range("B11:B47")
If service.Value <> "" Then
For Each destinataire In Range("O" & service.Row & ":AA" & service.Row)
If destinataire.Value <> "" And destinataire.Value <> "-" Then
liste = liste + destinataire.Value + ";"
End If
Next destinataire
End If
Next service
If liste <> "" Then
contenu = "Bonjour,<br><br>Veuillez trouver ci-joint une demande de consultation pour le chantier suivant :" _
& "<br>Nom du chantier :" & Range("F4") _
& "<br>Lieu :" & Range("F6") _
& "<br><br>D'avance merci,<br><br>Cordialement<br><br><i>Signature ici</i>"
Set email = messagerie.CreateItem(0)
With email
.to = liste
.Subject = "Check List"
.htmlbody = contenu
.Attachments.Add nompdf & ".pdf"
.display
End With
Set email = Nothing
End If
Kill Environ("Temp") & "\" & "fichier test" & ".pdf"
Set messagerie = Nothing
End Sub
Si tu cliques sur Débogage, quelle est la ligne surlignée ?
j'ai vu
Kill Environ("Temp") & "\" & "fichier test" & ".pdf"à remplacer par
Kill Environ("Temp") & "\" & "Croquis" & ".pdf"Bonjour Steelson,
Effectivement c'était bien ça !
Tout est bon, tout est parfait, merci beaucoup pour le coup de pouce en tout cas
Bonne Journée
