Macro envoi par e-mail de la liste des modifications
Bonjour le Forum,
La solution ne sera peut-être pas bien compliquée mais je ne suis pas très dégourdi en VBA et je n'ai pas réussi à trouver de discussion qui correspondent complètement à mon problème.
J'ai récupéré un code qui permet d'envoyer un e-mail lorsqu'une modification est effectuée sur une plage donnée d'une feuille.
J'ai commencé à l'adapter mais je bloque un peu... Il y a des erreurs que je n'arrive pas à résoudre et celui-ci n'est pas encore totalement adapté à mon besoin.
Private Sub Worksheet_Change(ByVal Target As Range)
'Si modification dans la plage de donnée, alors identification
If Not Intersect(Target, [B11:AL6000]) Is Nothing Then
Application.EnableEvents = False
Cells(Target.Row, 1) = "X"
Application.EnableEvents = True
End If
Const destinataire = "XXX@XXX.XX"
'Si on est dans la zone on crée un Email
If Sheets("PRODUCTION").Range("A:A").Text = "X" Then
If MsgBox("Voulez-vous valider ce changement ?", vbYesNo, "Envoi Email") = vbYes Then
Const olMailItem = 0
'Open a new mail item
Dim outlookApp As Object
Set outlookApp = CreateObject("Outlook.Application")
Dim outMail As Object
Set outMail = outlookApp.CreateItem(olMailItem)
outMail.To = destinataire
outMail.Subject = "Modifs dans le classeur " & ActiveWorkbook.Name
'Définition du Word Editor
outMail.Display
Dim wordDoc As Object
Set wordDoc = outMail.GetInspector.WordEditor
Const wdStory = 6
Const wdParagraph = 4
'Range([a1], [p1].SpecialCells(xlLastCell)).Select
'Copie des lignes de titres dans l'email en créant une feuille temporaire
Set ws_tempo = Workbooks.Add.ActiveSheet
Range("B9:AL10").Copy ws_tempo.Range("a1")
Target.EntireRow.Range("B1:AL1").Copy ws_tempo.Range("A3")
'copie des largeurs de colonnes
Target.Parent.Range("B1:AL5").Copy
ws_tempo.Range(ws_tempo.Range("A1"), ws_tempo.Range("A1").SpecialCells(xlLastCell)).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ws_tempo.Range(ws_tempo.Range("A1"), ws_tempo.Range("A1").SpecialCells(xlLastCell)).Copy
'Pour coller dans l'Email en écrasant tout
'wordDoc.Range.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=False
'Copie de ma ligne modifiée dans l'email au début en conservant la signature
Set objSel = wordDoc.Windows(1).Selection
objSel.Move wdStory, -1
objSel.Move wdParagraph, 1
'je colle
objSel.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=False
'Pour envoyer le Mail décommentez
'outMail.send
Target.Copy
ws_tempo.Parent.Close SaveChanges:=False
'Enregistrement du fichier
ActiveWorkbook.Save
End If
End Sub
Private Sub Worksheet_BeforeClose()
'Suppression à la fermeture du document de l'identification des lignes modifiées
Worksheets("PRODUCTION").Range("A11:A6000").ClearContents
End SubAvec ce code je souhaiterais au final envoyer un seul e-mail comprenant toutes les modifications que j'ai effectué dans ma feuille.
Actuellement le code est écrit pour me générer un e-mail à chaque fois que je modifie la feuille. Cette démarche est redondante et inadaptée à mon besoin. Je peux en effet être amené à faire des 10aines de modifications à chaque fois que j'ouvre ce fichier.
Le mieux pour mon utilisation serait de créer une proposition d'e-mail avec toutes les modifications seulement lorsque je m’apprête à fermer le document.
Merci d'avance pour votre aide.
Cordialement !
Bonjour Dugz
Voici un exemple de ce qu'on peut faire
A toi d'adapter si nécessaire
Bonjour BrunoM45,
Merci beaucoup pour ta réponse.
Je vais regarder ton document et essayer de l'adapter au besoin.
Je te tiens au courant sur le résultat !
Cordialement.
Bonjour !
J'ai été un peu long mais j'ai finalement pu regarder en détail le fichier que tu m'as envoyé.
J'ai fait un truc à ma sauce à partir de ça, par contre j'ai un nouveau problème que je n'avais pas pris en compte et je rame complètement là.
Mes lignes modifiées se cumulent bien pour pouvoir ensuite être envoyées par e-mail, par contre les lignes sont redondantes les 3/4 du temps.
Exemple : Si je modifie la cellule A2, cela me crée une copie de la ligne 2.
Ensuite si je modifie la cellule D2, cela me recrée une copie de la ligne 2 sous la première ligne, avec la nouvelle modification.
Et ainsi de suite jusqu'à la fin de la saisie.
Le rapport va vite être imbuvable...
Y a-t-il la possibilité de condenser toutes les modifications quand celles-ci sont liées à la même ligne ?