Insérer des tableaux automatiquement dans un mail Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
S
Skizobar
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 24 juillet 2019
Version d'Excel : 2016

Message par Skizobar » 12 août 2019, 16:53

Bonjour à tous,

Je ne sais pas si il y a une solution à ce problème, mais je pense que ça doit bien se trouver avec votre aide. :)

J'exporte un tableau excel depuis un logiciel interne de mon entreprise et celui-ci me permets de faire des relances. Plus exactement, une ligne contient un prix, une référence, un montant, le nom du client ainsi que d'autres infos comme la date de l'opération...

Pour le moment ma macro me permets d'envoyer un mail à chaque client (chaque ligne), un mail disant
Bonjour, veuillez noter que nous n'avons toujours pas reçu le règlement pour cette opération
prix = A1,
quantité = B1
...

Cependant, il est possible que plusieurs lignes soient destinées à la même personne.
Et j'aimerais si le cas se présente, avoir directement un extrait du tableau avec les informations utiles.

"Bonjour, veuillez noter que nous n'avons pas reçu le règlement pour ces opérations:

extrait du tableau avec chacune des lignes du client

Je suis débutant en VBA et je n'ai pas d'idée même en ce qui concerne le test des différentes lignes afin de regrouper celles qui auraient la même valeur dans la colonne "client".

Je continue afin de commencer à constuire un bout de code.

Merci à vous. :)
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'119
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 13 août 2019, 10:11

Bonjour,

Pour la sélection de tes cellules, tu peux faire une boucle sur celles-ci avec un For ... Next ou bien faire un filtre avancé en VBA.

Pour envoyer le tableau de résultat par message, je peux te proposer une fonction personnalisée que j'avais créé pour un sujet où la personne avait également besoin d'envoyer un tableau:
Private Function tableHTML(plage As Range) As String
tableHTML = "<head> <style> table, th, td {border: 1px solid black; border-collapse:collapse;}</style> </head><TABLE width=" & plage.Columns.width & ">" & Chr(10) & "<TR>"

For Each col In plage.Columns
    tableHTML = tableHTML & "<TH width=" & col.width & ">" & plage.Cells(1, col.Column)
Next col

If plage.Rows.Count > 1 Then
    For i = 2 To plage.Rows.Count
        tableHTML = tableHTML & "<TR>"
        For j = 1 To plage.Columns.Count
            tableHTML = tableHTML & "<TD bgcolor=" & DecVersHexa(plage.Cells(i, j).Interior.Color) & ">" & plage.Cells(i, j)
        Next j
    Next i
End If

tableHTML = tableHTML & "</TABLE>"
End Function

Private Function DecVersHexa(ByVal valeur As Long) As String
rouge = Left(Hex(Int(valeur Mod 256)) & "00", 2)
vert = Left(Hex(Int((valeur Mod 65536) / 256)) & "00", 2)
bleu = Left(Hex(Int(valeur / 65536)) & "00", 2)
DecVersHexa = rouge & vert & bleu
End Function
La première fonction crée un code HTML représentant un tableau, la deuxième permet de convertir les couleurs d'Excel en quelque choe d'utilisable en HTML. Pour utiliser cette fonction, il faudra par exemple mettre dans le corps de ton message:
tableHTML(Range("A1:H8"))
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
S
Skizobar
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 24 juillet 2019
Version d'Excel : 2016

Message par Skizobar » 13 août 2019, 13:36

Merci beaucoup pour ta réponse, pour les boucles je sais m'y prendre :)

Si je comprends bien, il faut passer par un code "HTML" pour exporter, manipuler, des données un peu plus complexes que des valeurs de cellules de VBA à un mail.

Merci encore une fois pour ces fonctions, je vais voir pour les adapter et ainsi résoudre mon problème.
Je reviendrai par ici pour te tenir au courant.
S
Skizobar
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 24 juillet 2019
Version d'Excel : 2016

Message par Skizobar » 13 août 2019, 13:54

Hello,
Ta fonction est très simple à utiliser, c'est top.

Le problème étant que j'écris cela:
Sub Mail()

Dim tableau As Variant

'Derlig = [A10000].End(xlUp).Row
'DerCol = [Xfd1].End(xlToLeft).Column
'tableau = Cells(1, 1).Address & ":" & Cells(Derlig, DerCol).Address
'tableau = Cells(1, 1).Address & ":" & Cells(3, 9).Address

Dim ol As Object, mymail As Object
Set ol = CreateObject("outlook.application")
Set mymail = ol.CreateItem(olMailItem)

mymail.To = "middleoffice@toto.com"

mymail.cc = "service_middle_obligations@toto.com"

mymail.Subject = "UNMATCHED AND SHORT POSITIONS"

mymail.Body = "Hello," & Chr(13) & Chr(13) _
                & "Could you please advise regarding the below trades:" & Chr(13) & Chr(13) _
                & tableHTML(Range("A1:I3")) & Chr(13) & Chr(13) _
                & "Please check and revert to us."
                               
mymail.display

End Sub
et j'obtiens cela dans mon corps de mail, je dois avoir fais une fausse manip
Hello, 
Could you please advise regarding the below trades: 
<head> <style> table, th, td {border: 1px solid black; border-collapse:collapse;}</style> </head><TABLE width=745.5> 
<TR><TH width=60>TD<TH width=60>VD<TH width=78>ISIN<TH width=60>Quantity<TH width=60>Price <TH width=60.75>Net amount<TH width=139.5>Our SSI <TH width=167.25>Your SSI<TH width=60>State<TR><TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>........<TD bgcolor=FFFFFF>19,000<TD bgcolor=FFFFFF>102.39<TD bgcolor=FFFFFF>19,558.57<TD bgcolor=FFFFFF>EC <TD bgcolor=FFFFFF>CEDEL<TD bgcolor=FFFFFF>Short<TR><TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>.......<TD bgcolor=FFFFFF>40,000<TD bgcolor=FFFFFF>99.35<TD bgcolor=FFFFFF>42,110.41<TD bgcolor=FFFFFF>German Domestic <TD bgcolor=FFFFFF>German Domestic <TD bgcolor=FFFFFF>Short</TABLE>
Please check and revert to us. 
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'119
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 13 août 2019, 14:21

Re!

content de voir que tu apprécies la fonction que j'ai créé :mrgreen:
Pour ta question, il faut commencer ton message par : "<HTML><BODY>" et finir par "</BODY></HTML>"
ce qui donnerait:
mymail.Body = "<HTML><BODY>Hello," & Chr(13) & Chr(13) _
                & "Could you please advise regarding the below trades:" & Chr(13) & Chr(13) _
                & tableHTML(Range("A1:I3")) & Chr(13) & Chr(13) _
                & "Please check and revert to us.</BODY></HTML>"
Je te joins le fichier que j'avais utilisé pour tester la fonction HTML si ça peut t'aider, ainsi que le sujet:
création tableau HTML.xlsm
(17.39 Kio) Téléchargé 9 fois
https://forum.excel-pratique.com/viewtopic.php?f=2&t=127947

Il faut lancer la macro manuellement, tu peux regarder de plus près le code si ça peut t'aider :wink:
1 membre du forum aime ce message.
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 13'928
Appréciations reçues : 829
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 13 août 2019, 14:29

Elle est géniale ta fonction Ausecour, mais il me semble qu'il manque la fermeture des balises th, tr et td
</th>
</tr>
</td>
J'i un doute sur " & Car(10) & ", j'aurais mis <BR/>
Je suis étonné que cela fonctionne !

Mais ta fonction est géniale (j'ai la même mais en noir et blanc, c'est cela la différence !)
Modifié en dernier par Steelson le 13 août 2019, 14:35, modifié 1 fois.
1 membre du forum aime ce message.

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
S
Skizobar
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 24 juillet 2019
Version d'Excel : 2016

Message par Skizobar » 13 août 2019, 14:32

rien n'y faire,

voici le mail:
<HTML><BODY>Hello, 
Could you please advise regarding the below trades: 
<head> <style> table, th, td {border: 1px solid black; border-collapse:collapse;}</style> </head><TABLE width=745.5> 
<TR><TH width=60>TD<TH width=60>VD<TH width=78>ISIN<TH width=60>Quantity<TH width=60>Price <TH width=60.75>Net amount<TH width=139.5>Our SSI <TH width=167.25>Your SSI<TH width=60>State<TR><TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>KO19<TD bgcolor=FFFFFF>19,000<TD bgcolor=FFFFFF>102.39<TD bgcolor=FFFFFF>19,558.57<TD bgcolor=FFFFFF>EC <TD bgcolor=FFFFFF>CEDEL<TD bgcolor=FFFFFF>Short<TR><TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>08/11/2079<TD bgcolor=FFFFFF>KOKOKOKOK<TD bgcolor=FFFFFF>40,000<TD bgcolor=FFFFFF>99.35<TD bgcolor=FFFFFF>42,110.41<TD bgcolor=FFFFFF>German Domestic <TD bgcolor=FFFFFF>German Domestic <TD bgcolor=FFFFFF>Short</TABLE>
Please check and revert to us.</BODY></HTML> 
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'119
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 13 août 2019, 14:36

Merci pour cette remarque Steelson!
Je ne sais pas non plus par quel miracle ça marche! :mrgreen:
J'ai tâché de revoir la fonction pour ajouter ce qu'il faut:
Private Function tableHTML(plage As Range) As String
tableHTML = "<head> <style> table, th, td {border: 1px solid black; border-collapse:collapse;}</style> </head><TABLE width=" & plage.Columns.width & ">" & Chr(10) & "<TR>"

For Each col In plage.Columns
    tableHTML = tableHTML & "<TH width=" & col.width & ">" & plage.Cells(1, col.Column) & "</TH>"
Next col

If plage.Rows.Count > 1 Then
    For i = 2 To plage.Rows.Count
        tableHTML = tableHTML & "<TR>"
        For j = 1 To plage.Columns.Count
            tableHTML = tableHTML & "<TD bgcolor=" & DecVersHexa(plage.Cells(i, j).Interior.Color) & ">" & plage.Cells(i, j) & "</TD>"
        Next j
        tableHTML = tableHTML & "</TR>"
    Next i
End If

tableHTML = tableHTML & "</TABLE>"
End Function

Private Function DecVersHexa(ByVal valeur As Long) As String
rouge = Left(Hex(Int(valeur Mod 256)) & "00", 2)
vert = Left(Hex(Int((valeur Mod 65536) / 256)) & "00", 2)
bleu = Left(Hex(Int(valeur / 65536)) & "00", 2)
DecVersHexa = rouge & vert & bleu
End Function
Maintenant il y a les fins de balises :wink:
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 13'928
Appréciations reçues : 829
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 13 août 2019, 14:36

@kizobar , Tu dois déclarer email.htmlBODY et non email.BODY

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Avatar du membre
Ausecour
Passionné d'Excel
Passionné d'Excel
Messages : 3'119
Appréciations reçues : 346
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 13 août 2019, 14:40

Skizobar a écrit :
13 août 2019, 14:32
rien n'y faire,
Ah oui pardon, je n'avais pas vu que tu avais écris mymail.Body, il faut mettre mymail.HTMLBody :lole:

EDIT: ah ben Steelson on s'est croisé de peu encore une fois :lole:
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message