Génération email avec sélection de certaines lignes
Bonjour,
j'utilise actuellement Office 2016 sur mon pc professionnel mais je poste ici depuis mon pc perso (Office 2007 :-()
Dans le cadre de mon travail, je souhaite, à partir d'un fichier Excel, générer un email à partir d'un clic sur un bouton (inclus dans le fichier). Cet email qui contiendra:
- un nom d'expéditeur (expediteur@societe.fr)
- plusieurs noms de destinataires (dest1@client.fr; dest2@client.fr)
- plusieurs noms de destinataires en copie (chef@societe.fr;chef2@scoiete.fr)
- un objet : "Compte rendu journalier"
- une phrase d'introduction :"Bonjour, veuillez trouver ci-dessous les informations demandées"
- la recopie des lignes dont la colonne "Nom" est surlignée en jaune (ou ligne 9 à 15) ET la colonne "Commentaire" est rouge ou verte (ou non vide). Dans mon exemple (voir fichier joint), l'email ne devra donc contenir que les lignes 9 et 12.
Est ce que ceci est faisable? Merci d'avance pour vos précieux conseils.
Cédric
Bonjour Cedric8181 et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum
Pour répondre à la question, oui c'est faisable, en cherchant un peu vous trouverez tout ce qu'il vous faut sur ce forum
Bonne participation
Présentation faite ;-), Merci pour ce rappel.
Bonjour,
J'ai trouvé le code pour générer l'email
Sub Bouton1_Cliquer()
Dim MailCL As Variant
Set MailCL = CreateObject("Outlook.Application")
With MailCL.CreateItem(olMailItem)
.Subject = "Dépôts valorisés en erreur"
.To = "XXXX.XXXX@YYYYYYY.com"
.CC = "UUUUUUU@SSSSS.com"
Corps = "Bonjour,"
Corps = Corps & Chr(13) & Chr(10) & Chr(13) & Chr(10)
Corps = Corps & "Veuillez trouver ci-joint les erreurs:"
.Body = Corps
.Display
End With
End SubMe reste donc à trouver comment sélectionner les lignes qui m’intéressent et comment les coller dans cet email.
Bonsoir Cedric8181,
Désolé de vous laisser un peu dans vos recherches
Voici le code modifié à mettre dans un module et à appeler par un bouton
Option Explicit
Const olMailItem As Long = 0
Sub EnvoiMail()
Dim MailCL As Object
Dim Corps As String
Dim dLig As Long, Lig As Long
Dim Sht As Worksheet
' Définir la feuille our se trouve les noms
Set Sht = ThisWorkbook.Sheets("Feuil1")
' Créer une instance OUTLOOK
Set MailCL = CreateObject("Outlook.Application")
With MailCL.CreateItem(olMailItem)
.Display ' Afficher tout de suite le mail poru avoir la signature
' Inscrire les différentes infos
.Subject = "Dépôts valorisés en erreur"
.to = "XXXX.XXXX@YYYYYYY.com"
.CC = "UUUUUUU@SSSSS.com"
' Début du message
Corps = "Bonjour,<br><br>" & _
"Veuillez trouver ci-joint les erreurs :"
' Dernière remplie du tableau
dLig = Sht.Range("A" & Rows.Count).End(xlUp).Row
' Parcourir les lignes pour le mail
For Lig = 2 To dLig
' Si la cellule de la colonne A est jaune
If Sht.Range("A" & Lig).Interior.Color = 65535 Then
' S'il y a un commentaire en E
If Sht.Range("E" & Lig) <> "" Then
Corps = Corps & "<br>" _
& "Nom : " & Sht.Range("A" & Lig) & " - Commentaire : " & Sht.Range("E" & Lig)
End If
End If
Next Lig
.htmlbody = Corps & .htmlbody
End With
End SubA+
Waouw merci Bruno,
J'ai un peu changé mon avis sur ce que je souhaite voir dans mon email:
Les conditions sont: colonne A est jaune et colonne N est rouge :
For ligne = 2 To derniere_ligne
' Si la cellule de la colonne A est jaune
If Sht.Range("A" & ligne).Interior.Color = RGB(255, 255, 0) Then
' S'il y a un commentaire en N
If Sht.Range("N" & ligne).Interior.Color = RGB(255, 140, 140) Then
Mais sachant que la couleur de la colonne N est dépendante d'une mise en forme conditionnelle, la couleur rouge n'est pas détectée correctement. J'ai fait un test en remplissant manuellement la case en rouge (remplissage) et elle est bien détectée. Comment contourner ce problème?
Re,
Si la couleur rouge est une MFC, celle-ci est liée à une ou des conditions, il suffit de mettre les mêmes dans le vba
Ou alors d'utiliser
If Sht.Range("A" & ligne).DisplayFormat.Interior.Color A+Impressionné par tes connaissances. Merci beaucoup et si je peux abuser , j'ai une dernière demande. Pour la formule suivante:
Sht.Range("A" & ligne)
Les données contenues dans la colonnes A sont à 13 chiffres comprenant un ou plusieurs zeros en début de chaîne (ex 0012345678910 ou 0000012345678)
Mais les chiffres récupérés dans le mail ne contiennent pas les zéros du début (retourne : 12345678910 ou 12345678). Comment faire pour tout récupérer?
Merci, merci :-)
Re,
Ne soit pas impressionné, cela fait des décennies que je pratique
Pour moi, si les données à 13 chiffres ne sont pas récupérés correctement, c'est qu'ils ont juste un affichage avec un format,
il faut donc les formater
Format(Sht.Range("A" & ligne);"0000000000000")A+
Bonjour et merci encore une fois . Je savais qu'il me fallait chercher vers le format aux 13 zéros mais je ne trouvais pas la syntaxe. J'ai bien avancé sur ma macro mais je bloqué sur un point. Je vais tenter de l'expliquer ici par écrit.
Le fichier que je traite est généré par une macro à partir d'un fichier source qui le remplit et y ajoute la date dans le nom. Fichier.xlsm devient Fichier 27-12-21.xlsm. J'ai créé ma macro dans fichier.xlsm pour qu'on la retrouve dans le fichier daté du jour. La macro que je crée doit donc s'appliquer à Fichier 27-12-21.xlsm mais celle ci va récupérer les infos dans Fichier.xlsm :-(. Comment faire pour que ma macro récupère les données du fichier depuis lequel elle est lancée?
J'espere que mes explications sont claires.
Bonjour Cédric8181
1) ta demande n'est absolument pas clair
2) elle n'a plus rien à voir avec la demande initiale, merci de créer un nouveau fil
3)