Envoie de mail à une liste de destinataire filtré VBA
Bonjour,
Je débute dans ce monde et je rencontre quelques soucis. Je souhaite envoyer un mail à une liste de destinataire présente dans la colonne [MAIL]. Jusque la tout vas bien. Mon problème intervient lorsque je filtre mon tableau, l'envoie de mail ne tient pas compte si les destinataire ont étaient cachés par les filtres ou non et envoie un mail à tous le monde.
Je souhaiterais donc que lorsque j'appuie sur ma macro, seul les destinataire visible (via filtre "STATUT" voir fichier) soit pris en compte et non l'ensemble du tableau.
J'ai lu quelque part la fonction mais je ne parvient pas à m'en servir SpecialCells(xlCellTypeVisible).Select
De plus, petit rab si quelqu'un peut m'aider, un MsgBox s'affiche lorsque le mail s'envoie mais il s'affiche également lorsque j'annule, que dois-je rajouter pour modifier cela ?
Merci d'avance pour votre aide !
Sub MAILPROJET()
'définition des variables
Dim Listdest Dim i As Long
Dim oMsgApp As outlook.Application
Dim oMsg As outlook.MailItem
Dim slistdest As String 'ouverture de fichier avant à joindre
Dim sfichier Set oMsgApp = New outlook.Application
Listdest = Range("Tableau1[Mail]")
'SpecialCells(xlCellTypeVisible).Select formule pour selectionner les destinataire visible uniquement
'sécurisation de la boucle slistdest = "" 'boucle destinataires
For i = LBound(Listdest, 1) To UBound(Listdest, 1)
slistdest = slistdest & ";" & Listdest(i, 1) Next
Set oMsg = oMsgApp.CreateItem(olMailItem)
With oMsg
.To = "monadresse@monfai.com"
.BCC = slistdest
.Subject = "Votre Projet de construction"
'possibilité de creer un body avec des variable as string pour mise en forme, chr10 et chr13 permet de sauter une ligne
.Body = "Bonjour" & Chr(10) & Chr(13) & "Vous m'avez contacté afin d'avoir des renseignements pour votre projet de construction. J'ai cherché à vous joindre sans succès, pouvez-vous me faire savoir par retour de mail si votre projet est toujours d'actualité?" & Chr(10) & Chr(13) & "Si oui, n'hesitez pas à me confirmer les villes correspendantes à votre recherche." & Chr(10) & Chr(13) & "Bien cordialement"
'accusé de lecture
.ReadReceiptRequested = True
.Display 'a remplacer par
.send dès que tout sera opérationnel pour envoie sans ouverture du mail
End With
'oMsgApp.Quit
'Set oMsgApp = Nothing
'Set oMsg = Nothing
MsgBox "Mail envoyé avec succès"
End Sub@+
Bonjour,
Un test en bouclant simplement sur la databodyrange de la table structurée et en regardant le statut masqué de la ligne. S'il n'est pas masqué alors on ajoute à la liste. Par contre pas compris l'intérêt d'avoir une table de 1000 lignes si on en utilise que 7, la table s'étendant automatiquement lorsque vous rentrez des nouvelles valeurs :
Sub MAILPROJET()
'définition des variables
Dim Listdest
Dim i As Long
Dim oMsgApp As outlook.Application
Dim oMsg As outlook.MailItem
Dim slistdest As String
'ouverture de fichier avant à joindre
Dim sfichier
Set oMsgApp = New outlook.Application
For Each L In Worksheets("2021").ListObjects("Tableau1").ListColumns(5).DataBodyRange
If L.EntireRow.Hidden = False Then slistdest = L & ";" & slistdest
Next L
Set oMsg = oMsgApp.CreateItem(olMailItem)
With oMsg
.To = "ipinguet@maisonssesame.com"
.BCC = Left(slistdest, Len(slistdest) - 1)
.Subject = "Votre Projet de construction - Maisons Sésame"
'possibilité de creer un body avec des variable as string pour mise en forme, chr10 et chr13 permet de sauter une ligne
.Body = "Bonjour" & Chr(10) & Chr(13) & "Vous m'avez contacté afin d'avoir des renseignements pour votre projet de construction. J'ai cherché à vous joindre sans succès, pouvez-vous me faire savoir par retour de mail si votre projet est toujours d'actualité?" & Chr(10) & Chr(13) & "Si oui, n'hesitez pas à me confirmer les villes correspendantes à votre recherche." & Chr(10) & Chr(13) & "Bien cordialement"
'accusé de lecture
.ReadReceiptRequested = True
.Display 'a remplacer par .send dès que tout sera opérationnel pour envoie sans ouverture du mail
End With
'oMsgApp.Quit
'Set oMsgApp = Nothing
'Set oMsg = Nothing
MsgBox "Mail envoyé avec succès"
End SubCdlt,
Bonjour,
Merci pour la réponse si rapide ! C'est parfait.
Je vais me renseigner sur cette fonction for each qui pourrait me solution quelques petites choses ...
Concernant la table, tu me dis que même si mon tableau d'origine fait 10 lignes, quand je créer la 11eme via L'userform, le tableau s'agrandit tous seul ? Les plages d'applications des mise en formes conditionnelles suivent également?
Bonne journée
Bonjour,
J'ai testé avec votre fichier, et sauf mauvaise manipulation de ma part, c'est confirmé. Pour les MEFC, formules, etc ... Tout suis si je ne dit pas de bêtises (j'en dit beaucoup), c'est l'un des avantages des tables structurées. Mais pour en avoir le cœur net, le plus simple est que vous testiez par vous même. Limitez les lignes de votre table, testez et vous verrez si je suis à côté de la plaque.
Si c'est en adéquation avec ce que je dis, vos macros n'en seront, je pense que plus rapide (moins de lignes à vérifier, etc etc ...)
Cdlt,