Envoi mails automatiques

lancelot92

XLDnaute Nouveau
Bonjour à toutes et à tous,

J'ai un travail important à réaliser dans le cadre de ma profession qui concerne l'envoi de plans d'actions à des responsables. Je vais être clair. J'ai un fichier excel qui possède un nombre d'onglets variable.
(Sauf pour le premier onglet qui ne nous intéresse pas) Chaque onglet du fichier concerne une personne en particulier dont l'adresse électronique figure dans une cellule invariable dans chacun des onglets. Je souhaiterais pouvoir depuis un bouton placé sur le premier onglet (qui ne nous intéresse pas) :

_ Envoyer un mail différent en fonction de la personne citée dans lequel il y aurait simplement la copie du fichier contenant seulement l'onglet dans lequel l'adresse électronique de la personne est mentionnée. Par exemple s'il y a 20 onglets, cela signifie qu'il y a 20 mails à envoyer en tout contenant chacun un fichier différent avec l'onglet correspondant.

Je connais un code qui fonctionne à la perfection et qui permet d'envoyer un mail à une personne avec la copie du fichier en PJ. Mais je ne sais pas comment faire pour la suite... Je suppose qu'il faudrait incrémenter un compteur d'onglets avec une boucle mais là j'ai vraiment du mal à savoir par quel bout m'y prendre.

Je vous remercie par avance pour toute l'aide que vous pourrez m'apportée.

Code pour l'envoi d'un mail avec une copie d'un fichier en PJ :

Code:
Sub Envoi_du_pilote()
 'déclaration des objets
    Dim Appli_Outlook As Outlook.Application
    Dim Mail As Outlook.MailItem
    Dim Piece_Jointe As Outlook.Attachments
    
 'déclaration des variables
    Dim Corps As String
    Dim NomClasseur As String, Chemin As String
    Dim onglet As Worksheet
        
  'Valeurs contenues dans des cellules
    adresse = Trim(Range("G2"))

   'Initialisation des objets outlook
    Set Appli_Outlook = CreateObject("Outlook.application")
    Set Mail = Appli_Outlook.CreateItem(olMailItem)
    Set Piece_Jointe = Mail.Attachments
    ThisWorkbook.Save
    
   'Gestion de la pièce jointe
    NomClasseur = ActiveWorkbook.Name
    Chemin = "G:\Audit\Audits 5S\Archives\a TEMP à ne pas déplacer ni détruire\"
    Application.DisplayAlerts = False
    For Each onglet In ThisWorkbook.Worksheets
    'ce qui me manque...
    Next onglet
    ActiveWorkbook.SaveCopyAs Chemin & NomClasseur
    Application.DisplayAlerts = False
    Piece_Jointe.Add "G:\Audit\Audits 5S\Archives\a TEMP à ne pas déplacer ni détruire\" & NomClasseur
    Kill "G:\Audit\Audits 5S\Archives\a TEMP à ne pas déplacer ni détruire\" & NomClasseur
    
   'Segmentation du texte avec l'utilisation du langage html
    Phrase(0) = "<HTML><body>Bonjour,<p>"
    Phrase(1) = "Le fichier de suivi des actions correctives " & Zone
    Phrase(2) = " vient d'être complété " < p > ""
    Phrase(14) = "</body><HTML>"
    
   'construction structure mail
    With Mail
        'j'ai un doute pour l'adresse
        .To = adresse
        .Subject = "Actions correctives"
        .BodyFormat = olFormatHTML
         Corps = Phrase(0) & Phrase(1) & Phrase(2)
        .HTMLBody = Corps
        .Display
        .send
    End With
    
    ActiveWorkbook.Close savechanges:=False
    
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re : Envoi mails automatiques

Bonsoir lancelot

Code:
For Each onglet In ThisWorkbook.Worksheets
   Onglet.Copy
'xlOpenXMLWorkbookMacroEnabled = .xlsm / xlOpenXMLWorkbook = .xlsx
   Onglet.SaveAs FileName:=Chemin & NomClasseur & ".xls", FileFormat:=xlExcel8
 Next onglet
 

lancelot92

XLDnaute Nouveau
Re : Envoi mails automatiques

Bonjour Lone-wolf,

Désolé pour la réponse tardive j'ai eu quelques contretemps... mais merci pour ce que tu m'as transmis.

Malheureusement, ce ne fonctionne pas je ne sais pas pourquoi. Je vais tâcher d'incrémenter un conteur mais je ne sais pas exactement à quel endroit.

Je vous tient au courant si je trouve.

Si vous avez d'autres idées, n'hésitez pas.

Merci d'avance.
 

Lone-wolf

XLDnaute Barbatruc
Re : Envoi mails automatiques

bonjour lancelot

J'ai vu pourquoi ça ne marche pas. Ici adresse = Trim(Range("G2")) qui correspond à .To = adresse; il faut ajouter le nom de la feuille principale(Feuil1.Range("G2")) qui correspond à Monsieur A. Ensuite il faut ajouter .CC = le reste des noms.(B-C-D etc.)
 

Lone-wolf

XLDnaute Barbatruc
Re : Envoi mails automatiques

Re lancelot

Pour commencer: sauvegarde des feuilles. Crée un nouveau dossier sur le bureau et met le classeur joint, puis clique sur le bouton.

Ensuite, tu as mis Chemin comme variable. Pourquoi tu répète encore ?!

Piece_Jointe.Add "G:\Audit\Audits 5S\Archives\a TEMP à ne pas déplacer ni détruire\" & NomClasseur
Kill "G:\Audit\Audits 5S\Archives\a TEMP à ne pas déplacer ni détruire\" & NomClasseur

Et Piece_Jointe.Add à changer avec .Attachements.Add, et à mettre avec With OlMail, parce que ceci fait partie d'Outllook et non de la sauvegarde des classeurs.
 

Pièces jointes

  • Classeur1.xlsm
    21.1 KB · Affichages: 41
  • Classeur1.xlsm
    21.1 KB · Affichages: 52
Dernière édition:

lancelot92

XLDnaute Nouveau
Re : Envoi mails automatiques

En fait cela ne doit pas poser de problème car :
l'adresse qui est inscrite en G2 est la même que le nom de l'onglet. Le mail s'envoie bien quand il n'y a qu'un seul onglet. C'est quand il y en a plusieurs que ça coince
Suis-je clair ?
 

Discussions similaires

Réponses
7
Affichages
560
Réponses
2
Affichages
623