Copier le résultat d'un filtre TCD et coller dans Outlook et envoyer

Bonjour chers tous.

S'il vous plaît, après avoir parcouru ce post sous le thème FILTRER UN TCD je souhaiterais que vous m'aider à envoyer le résultat du filtre via Outlook à l'adresse se trouvant dans une cellule quelconque.

Merci d'avance pour le temps et la considération que vous aurez pour mon besoin.

11table-test.xlsx (41.26 Ko)

Bonjour,

Pas sur de bien comprendre, vous voulez envoyer 1 mail par ligne du TCD, aux adresses indiquées ? Auquel cas on envoie le TCD complet à chaque adresse ou sa ligne seulement ?

Ou bien envoyer l'ensemble du TCD à 1 adresse mail unique, auquel cas dans quelle cellule est-elle indiquée (S1 par exemple) ?

Bonsoir SABOH

Désolée du retard.

En fait je voudrais envoyer le TCD de chacune des entreprise à partir du tcd Général

Sorte de boucle sur chaque entreprise, Filtre le TCD des valeur correspondant a l'entreprise et envoi du résultat filtré à l'entreprise

Ex :
For each Rg dans la plage qui contient la liste des entreprise

Si rg = Entreprise 1, alors, je filtre les données d'entreprise 1 et je les lui envoie par Outlook.

Je ne sais pas si c'est assez détaillé.

D'accord, j'ai compris le principe. Mais si vous parlez de la liste des entreprises en feuille "SAISIES", il me semble que passer par le TCD est superflu ? On peut directement utiliser le tableau de la feuille SAISIES pour envoyer les mails non ?

Bonjour.

Merci pour le temps que tu mets sur ma préoccupation.
Je suis d'accord pour qu'on le fasse directement à partir du tableau source.

Merci.

Ok. Ci-joint une proposition qui génère 1 mail/ligne. Le code VBA se trouve dans le module1. Pour tester, les mails ne sont pas envoyés mais juste "préparés". Il faut changer la ligne du code :

countMail = countMail + SendMail(mailApp, msgList(i), False)

Par

countMail = countMail + SendMail(mailApp, msgList(i), True)

Pour les envoyer automatiquement.

Ci-après le code utilisé.

Option Explicit

' signature du mail
Const SIGNATURE As String = "Nathalie Charette"

' contenu utile a la creation d'un mail
Private Type Msg
  company As String
  expDate As Date
  remDays As String
  alert As String
  com As String
  mailAdr As String
End Type

' definir les numeros de colonne ici
Private Enum columnsIndex
  company = 1
  expDate = 6
  remDays = 7
  alert = 8
  com = 9
  mailAdr = 10
End Enum

' extraction d'un message depuis une ligne du tableau
Private Function MsgFromRow(ByRef tbl As Variant, rowI As Long) As Msg
  Dim newMsg As Msg
  With newMsg
    .company = CStr(tbl(rowI, columnsIndex.company))
    .expDate = CDate(tbl(rowI, columnsIndex.expDate))
    .remDays = CStr(tbl(rowI, columnsIndex.remDays))
    .alert = CStr(tbl(rowI, columnsIndex.alert))
    .com = CStr(tbl(rowI, columnsIndex.com))
    .mailAdr = CStr(tbl(rowI, columnsIndex.mailAdr))
  End With

  MsgFromRow = newMsg
End Function

Private Function SendMail(mailApp As Object, message As Msg, Optional ByVal envoiAuto As Boolean = False) As Long
  On Error Resume Next

  With mailApp.CreateItem(0)
    .To = message.mailAdr
    .Subject = message.alert
    .Body = "Bonjour " & message.company & "," & vbCrLf & vbCrLf _
      & "Vous avez " & message.remDays & " jours restants avant le " & Format$(message.expDate, "dd/mm/yyyy") & "." & vbCrLf _
      & message.com & vbCrLf & vbCrLf _
      & SIGNATURE

    If envoiAuto Then
      ' pour envoyer le mail
      .Send
    Else
      ' pour afficher le mail
      .Display
    End If
  End With

  ' verification qu'aucune erreur ne s'est produite
  If Err.Number Then
    SendMail = 0
    Err.Clear
  Else
    SendMail = 1
  End If

  On Error GoTo 0
End Function

Public Sub EnvoyerMails()
  ' lecture du tableau
  Dim tblEntreprises As Variant
  tblEntreprises = ThisWorkbook.Worksheets("SAISIES").ListObjects("Tableau1").DataBodyRange.Value

  ' creation de la liste des messages
  Dim i As Long, msgList() As Msg
  ReDim msgList(LBound(tblEntreprises, 1) To UBound(tblEntreprises, 1))
  For i = LBound(msgList) To UBound(msgList)
    msgList(i) = MsgFromRow(tblEntreprises, i)
  Next i

  ' envoi sur outlook
  Dim mailApp As Object
  Set mailApp = CreateObject("Outlook.Application")
  Dim countMail As Long
  For i = LBound(msgList) To UBound(msgList)
    ' pour envoyer le mail automatiquement, remplacer False par True dans la ligne suivante :
    countMail = countMail + SendMail(mailApp, msgList(i), False)
  Next i

  ' recap
  MsgBox countMail & "/" & UBound(msgList) & " mails ont été correctement envoyés.", vbInformation, "Récap"
End Sub
10table-test.xlsm (57.30 Ko)

Merci énormément pour ce que tu as fait.

C'est déjà une très belle ébauche.

en fait, quand je copie manuellement une plage de TCD et que je colle dans Outlook, le tableau se colle net.
Je voudrais savoir, est ce que tu peux m'aider à écrire une code qui copie une plage dynamique (nombre de ligne variable) et fixe en colonne ?

peux tu écrire le code qui permettrait plutôt de mettre un coller comme valeur de .Body dans le mail? le corps du mail soit une plage ?

Il peut arriver que société x aie 3 ou 4 lignes de données en fait, je voudrais une disposition en tableau.

STP, je ne sais pas si j'explique bien.

Bonjour,

Non vous n'expliquez pas très bien. Jusqu'à présent vous n'aviez pas précisé le "détail" qu'une même entreprise puisse apparaitre plusieurs fois dans votre liste. J'aurais dû m'en douter c'est vrai, car sinon l'utilisation du TCD est complètement superflue (ce que je disais plus haut), mais vous auriez pu mettre 2 lignes avec la même entreprise dans l'exemple histoire qu'il soit réaliste. C'est très important ce genre de choses…

S'il vous plait, pour que je puisse vous aider il me faut :

  • Un tableau source représentatif de vos valeurs (donc de même taille, mêmes colonnes, et s'il y a des doublons/des caractéristiques, les mettre en évidence)
  • Un exemple concret du mail à envoyer. Vous pouvez joindre un .msg de outlook avec un mail que vous avez préparé manuellement par exemple, ou un Word.

Merci.

Bonjour SABOH et merci.

En effet, c'est un tableau de relance client.
Avec une base de données des clients, une feuille de saisies des factures et règlements, un TCD qui récapitule le compte en affichant que les factures non réglées ou partiellement réglées.

Voici le modèle d'email préparé directement par macro, c'est-à-dire copier la plage TCD correspondant au filtre des données d'un client (entreprise), coller dans Outlook et envoyer le mail suivant au client :

image

NB : Ce filtre de la colonne client a été fait manuellement, et j'ai une cinquantaine de clients, d'où mon obstination à l'idée d'automatiser ce travail.

Rechercher des sujets similaires à "copier resultat filtre tcd coller outlook envoyer"