Envoyer par mail une plage de cellule avec un corps perso
Bonjour,
Je cherche à créer une macro qui permettra d'insérer une plage de cellule dans un mail outlook et en parcourant les différents site j'arrive pas à trouver une solution c'est toujours différent parfois faut du htlm ou non, et sans dire que j'arrive pas à déchiffrer les lignes pour récupérer ce que j'ai besoin.
J'ai fais des groupes de contact dans outlook donc je voudrai savoir mettre to = "nomdugroupe" ne pas pas tout casser.
J'ai fais un exemple avec gmail car j'ai pas outlook chez moi.
Voila, merci.
Bonjour Jeff413
Voici le code pour le faire
Option Explicit
Const olMailItem As Integer = 0
Const olImportanceHigh = 2
Sub Envoi_Mail()
Dim sDest As String, sCopie As String, Objet As String
Dim Texte(2) As String
Dim Cel As Range, Plage As Range
Dim OutLk As Object, eMail As Object, Rng As Object, wdDoc As Object
Objet = "blabla"
Texte(1) = "Bonjour," & vbCr & vbCr & "Vous trouverez ci-dessous blabla"
Texte(2) = "Vous souhaitant bonne réception"
' eMails du/des destinataires et copie
sDest = "toto.machin@gmail.com"
sCopie = "truc.bidule@gmail.com"
'
' Création de l'instance Outlook et de l'objet email
Set OutLk = CreateObject("outlook.application")
Set eMail = OutLk.CreateItem(olMailItem)
' Plage à copier
Set Plage = Sheets("Feuil1").Range("A2:C10")
With eMail
.Display ' ICI pour afficher la signature et la conserver
.To = sDest
.CC = sCopie
.Subject = Objet
.Importance = olImportanceHigh
' Corps du mail
Set wdDoc = eMail.GetInspector.WordEditor
Set Rng = wdDoc.Range(0, 0)
' Insertion avant la copie du tableau
Rng.InsertAfter Texte(1) & vbNewLine 'introduction
'-------------------------------------------------------------------------
'ajout du titre tableau 1
Rng.InsertAfter vbNewLine 'titre tableau 1
'-------------------------------------------------------------------------
'ajout du tableau 1
Set Rng = Rng.Paragraphs.Add().Range 'on ajoute un nouveau paragraphe
Plage.Copy ' Copie du tableau 1
' collage du tableau
Rng.Paste: Rng.Move 1, 1
' pied de page
Rng.InsertAfter vbNewLine & Texte(2)
'.Send 'Envoyer le message
End With
' On efface les variables objets
Set OutLk = Nothing: Set eMail = Nothing: Set wdDoc = Nothing
End SubEt le fichier
A+
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour BrunoM45,
Une remarque:
Lorsqu'on utilise l'éditeur Word, dans l'envoi d"un mail, il est nécessaire que l'explorateur OutLook soit activé. L'instanciation d'une application Outlook n'est pas suffisante dans le cas par exemple où Outlook n'est pas démarré sur le PC. Il vaut mieux compléter le code ainsi :
' Création de l'instance Outlook et de l'objet email
Set OutLk = CreateObject("outlook.application")
If OutLk.Explorers.Count = 0 Then
OutLk.Session.GetDefaultFolder(olFolderInbox).Display
OutLk.ActiveExplorer.WindowState = olMinimized
End IfSalut Thev,
Effectivement, mais comme aujourd'hui on travaille tous avec Outlook d'ouvert en permanence
Merci pour la correction
Au plaisir
Bonjour à vous, oui comme le dit Bruno au boulot les outlook sont ouvert en permanence . Après pour ce côté là je peux récupérer les lignes sur d'autre macro sur d'autre fichier, moi ce qui me faisait buter c'est récupérer la plage de cellule.
Je vais essayer de récupérer outlook chez moi car j'ai supprimé ce que j'avais pas besoin j'ai gardé word, excel et ppt et comme c'est la version 2019 me faut l'exécutable (différent du office 365 que je récupère du compte microsoft).
Vous avez des liens pour faire la mise en forme du text du corps du mail pour mettre en gras par exemple?
Et pour les destinataires, comme il y en a une bonnes vingtaines je fais mettre tous les mails dans une case et faire .To = Range(la cellule) si ça fonctionne comme ça.
Je vous tiens au courant. Merci.
Re, petite question en lisant le code je vois pas où je peux personnaliser la plage, c'est genre A3:D21 (environ) et j'ai l'impression que cette macro se fit aux cellules remplies, et comme mon fichier il y plein d'autre truc sur le même onglet ça va tous casser?
Salut jeff413
Les impressions en développement sont souvent mauvaises
La ligne qui fixe la plage est au début... je NE SAIS PAS comment être plus explicite
' Plage à copier
Set Plage = Sheets("Feuil1").Range("A2:C10")Et ça ne peut rien casser puisque ça fait juste une copie, rien est inscrit !
A+
D'accord je comprend mieux. Bon je récupère outlook sinon je verrais ça au boulot. Merci.
Re,
J'ai essayé la macro au boulot et elle fonctionne super. Cependant c'est un copier/coller de tableau brut et comme il est assez grand d’origine sur le mail ça fait moche. Donc est ce possible de copier/coller seulement les valeurs avec un plus petit tableau sans mise en forme particulière? Comme le tableau du premier poste.
Je mets le tableau d'origine avec des cellules de 40x145 pixels pour mieux comprendre.
Sinon pour la ligne de la plage de cellule je me rend compte que j'avais pas vu la ligne, j'avais regardé trop bas!
Merci.
Bonjour,
Merci à vous deux, j'ai réussis à faire la mise en page du tableau comme je veux en le faisant dans un onglet masquer qui reprend les infos et comme ça je peux facilement modeler le mail.
Ensuite , je voudrais pouvoir ajouter dans le code les lignes afin d'ouvrir l'explorateur de fichier et de sélectionner des pièces jointes en une fois (ctrl+clics ou maintien clic) puis de valider.
Voila, merci d'avance pour l'aide.
PS: je voulais rééditer le titre pour pas faire un autre topic encore.