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. capture

J'ai fais un exemple avec gmail car j'ai pas outlook chez moi.

125mail.xlsx (8.78 Ko)

Voila, merci.

up

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 Sub

Et le fichier

295jeff413-mail.xlsm (24.73 Ko)

A+

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 If

Salut 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.

capture

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.

Rechercher des sujets similaires à "envoyer mail plage corps perso"