Problème envoi des cellules sélectionnées VBA
Résolu
Miguel
-
Miguel -
Miguel -
Bonjour,
je m'adresse à vous car j'ai un petit souci.
En effet, j'ai une feuille excel contenant un tableau avec des informations que je souhaiterai filtrer et envoyer par la suite par mail.
Le soucis est que lorsque je lance mon script, celui-ci m'envoit toutes les données par mail et non seulement celles que j'ai sélectionné au préalable :s
Je souhaiterai donc si possible qu'une âme charitable me vienne t'en aide, je lui en serais vraiment reconnaissant.
Merci par avance,
Miguel
Voilà mon code :
Sub SendMail_Outlook(nomdest As String)
'Constantes à modifier si le tableau évolue
'Nombre de Colonnes
Const DCOL = 14
'Colonne du Demandeur
Const DCOLD = 9
'Définition des variables
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
Dim Selection As Range
Dim lastcell As String
Dim vtab As String
Dim vrow As Integer
'Instanciation de l'objet Outlook
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
'Recherche du nombre de lignes dans le tableau pour calcul du Range
vrow = 1
While Sheets("Basedonnées").Cells(vrow, 1) <> ""
vrow = vrow + 1
Wend
'Selection du Tableau
With Sheets("Basedonnées")
Range(Cells(1, 1), Cells(vrow, DCOL)).AutoFilter Field:=DCOLD, Criteria1:=nomdest
Range(Cells(1, 1), Cells(vrow, DCOL)).Select
End With
'Paramêtrage de l'objet Mail en vue d'envoie
With olmail
.To = "email destinataire"
.Subject = "Tâche à réaliser"
.BodyFormat = olFormatHTML
.HTMLBody = PH(Sheets("Basedonnées").Range(Cells(1, 1), Cells(vrow, DCOL)))
.Send
End With
End Sub
Function PH(LaPlage As Range) As String
' transforme une plage en tableau HTML
Dim l As Long, c As Long
PH = "<html><table width='100%'>" 'balises de début du code HTML et de début de table
For l = 1 To LaPlage.Rows.Count ' pour chaque ligne de la plage
PH = PH & "<tr>" ' balise de début de ligne
For c = 1 To LaPlage.Columns.Count 'pour chaque colonne de la ligne
' balise début de colonne + contenu de la cellule + balise fin de colonne
PH = PH & "<td>" & LaPlage.Cells(l, c) & "</td>"
Next c
PH = PH & "</tr>" ' balise fin de ligne
Next l
PH = PH & "</table></html>" ' balises de fin de table et de fin de code HTML
End Function
je m'adresse à vous car j'ai un petit souci.
En effet, j'ai une feuille excel contenant un tableau avec des informations que je souhaiterai filtrer et envoyer par la suite par mail.
Le soucis est que lorsque je lance mon script, celui-ci m'envoit toutes les données par mail et non seulement celles que j'ai sélectionné au préalable :s
Je souhaiterai donc si possible qu'une âme charitable me vienne t'en aide, je lui en serais vraiment reconnaissant.
Merci par avance,
Miguel
Voilà mon code :
Sub SendMail_Outlook(nomdest As String)
'Constantes à modifier si le tableau évolue
'Nombre de Colonnes
Const DCOL = 14
'Colonne du Demandeur
Const DCOLD = 9
'Définition des variables
Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
Dim Selection As Range
Dim lastcell As String
Dim vtab As String
Dim vrow As Integer
'Instanciation de l'objet Outlook
Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
'Recherche du nombre de lignes dans le tableau pour calcul du Range
vrow = 1
While Sheets("Basedonnées").Cells(vrow, 1) <> ""
vrow = vrow + 1
Wend
'Selection du Tableau
With Sheets("Basedonnées")
Range(Cells(1, 1), Cells(vrow, DCOL)).AutoFilter Field:=DCOLD, Criteria1:=nomdest
Range(Cells(1, 1), Cells(vrow, DCOL)).Select
End With
'Paramêtrage de l'objet Mail en vue d'envoie
With olmail
.To = "email destinataire"
.Subject = "Tâche à réaliser"
.BodyFormat = olFormatHTML
.HTMLBody = PH(Sheets("Basedonnées").Range(Cells(1, 1), Cells(vrow, DCOL)))
.Send
End With
End Sub
Function PH(LaPlage As Range) As String
' transforme une plage en tableau HTML
Dim l As Long, c As Long
PH = "<html><table width='100%'>" 'balises de début du code HTML et de début de table
For l = 1 To LaPlage.Rows.Count ' pour chaque ligne de la plage
PH = PH & "<tr>" ' balise de début de ligne
For c = 1 To LaPlage.Columns.Count 'pour chaque colonne de la ligne
' balise début de colonne + contenu de la cellule + balise fin de colonne
PH = PH & "<td>" & LaPlage.Cells(l, c) & "</td>"
Next c
PH = PH & "</tr>" ' balise fin de ligne
Next l
PH = PH & "</table></html>" ' balises de fin de table et de fin de code HTML
End Function
A voir également:
- Problème envoi des cellules sélectionnées VBA
- Verrouiller des cellules excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Excel compter cellule couleur sans vba - Guide
- Programmer envoi sms - Guide
- Envoi impossible messenger - Forum Facebook Messenger
3 réponses
Salut,
Regarde cette discussion voir si elle s'approche de tes attentes
https://forums.commentcamarche.net/forum/affich-21042611-envoi-mail-en-vba-avec-corps-message#p21322430
Regarde cette discussion voir si elle s'approche de tes attentes
https://forums.commentcamarche.net/forum/affich-21042611-envoi-mail-en-vba-avec-corps-message#p21322430
Re,
Non pas tout à fait la totalité de la feuille, seulement de A1 à AK32 sans les boutons ni code.
Dans la soirée je te fais un code, avec envoi sans passer par une messagerie comme Outlook, mais directement par le SMTP
Par contre donnes moi des détails sur la structure de ton fichier, la colonne à filtrer et sur quel critères, ou poste nous ton fichier sans notes confidentielles
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Non pas tout à fait la totalité de la feuille, seulement de A1 à AK32 sans les boutons ni code.
Dans la soirée je te fais un code, avec envoi sans passer par une messagerie comme Outlook, mais directement par le SMTP
Par contre donnes moi des détails sur la structure de ton fichier, la colonne à filtrer et sur quel critères, ou poste nous ton fichier sans notes confidentielles
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Bonjour Mike,
désolé je viens tout juste de prendre connaissance de ton mail.
Voici le lien où tu pourras trouver mon fichier : http://www.cijoint.fr/cjlink.php?file=cj201103/cijelhrbid.xlsm
J'ai retiré les infos confidentielles.
En fait, je souhaiterais filtrer la colonne I (Référent(s)), et une fois celle-ci filtrée je voudrais que les infos présentes alors dans ma feuille excel filtrée me soit envoyé par mail.
Mon système d'envoi de mail fonctionne, mon souci est que lorsque je fais mon filtre et que je m'envois le mail, je n'ai pas seulement les données filtrées mais l'ensemble de ma feuille excel :(
Si tu pouvais m'aider je t'en serais vraiment reconnaissant.
Bien cordialement,
Miguel
désolé je viens tout juste de prendre connaissance de ton mail.
Voici le lien où tu pourras trouver mon fichier : http://www.cijoint.fr/cjlink.php?file=cj201103/cijelhrbid.xlsm
J'ai retiré les infos confidentielles.
En fait, je souhaiterais filtrer la colonne I (Référent(s)), et une fois celle-ci filtrée je voudrais que les infos présentes alors dans ma feuille excel filtrée me soit envoyé par mail.
Mon système d'envoi de mail fonctionne, mon souci est que lorsque je fais mon filtre et que je m'envois le mail, je n'ai pas seulement les données filtrées mais l'ensemble de ma feuille excel :(
Si tu pouvais m'aider je t'en serais vraiment reconnaissant.
Bien cordialement,
Miguel
Mon souci est de pouvoir envoyer les données filtrées uniquement dans mon corps de message alors que là j'ai la totalité de ma feuille excel qui se retrouve dans le corps du message :(
Je commence à désespérer là... :(
Merci quand même :)