formateur informatique

Envoyer un mail avec plusieurs pièces jointes en VBA

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Envoyer un mail avec plusieurs pièces jointes en VBA
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Joindre plusieurs pièces

Grâce à la formation sur la facturation avec gestion des stocks, en fin de parcours, nous avons appris à éditer et joindre une facture par mail en VBA Access. Mais qu'en est-il lorsqu'il s'agit de joindre plusieurs pièces à un même message. C'est la technique que nous allons démontrer ici.

Base de données Access à télécharger
Nous proposons d'appuyer l'étude sur une base de données offrant quelques atouts. Comme vous le constatez, la base de données est accompagnée d'un sous dossier nommé archives_factures. Il archive effectivement d'anciennes factures au format PDF. Nous les avions produites grâce à l'application que nous avions développée et que nous avons mentionnée précédemment.
  • Double cliquer sur le fichier de la base de données pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité pour libérer les ressources,
  • Puis, dans le volet de navigation, double cliquer sur le formulaire fContact pour l'exécuter,
Nous découvrons un formulaire très simple.

Formulaire VBA Access pour envoyer des mails avec plusieurs pièces jointes

Il est tout d'abord doté d'une zone de saisie pour inscrire l'adresse mail du destinataire. Il est pourvu d'un bouton destiné à déclencher une boîte de dialogue pour que l'utilisateur puisse spécifier les fichiers à joindre au message. Enfin, il est doté d'une zone de liste, simplement à titre de confirmation visuelle, pour restituer les chemins des fichiers sélectionnés par l'utilisateur.

La procédure
Nous devons commencer par associer une procédure au bouton pour qu'un code VBA Access se déclenche au clic sur ce dernier.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur le bouton Joindre et Envoyer,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement nommé Au clic,
  • Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
C'est ainsi que nous basculons dans l'éditeur VBA Access, plus précisément entre les bornes de la procédure événementielle envoyer_Click. envoyer est le nom du bouton. Click est son déclencheur associé.

Les références
Pour envoyer des messages et pour choisir des fichiers avec une boîte de dialogue, des références sont nécessaires. Mais nous avions anticipé et elles sont déjà incorporées. Nous proposons de le constater.
  • En haut de la feuille de code, cliquer sur le menu Outils pour le déployer,
  • Dans les propositions, choisir l'option Référence,
Ajouter les librairies nécessaires eu développement du projet VBA Access

Il s'agit respectivement des librairies Microsoft Office 16.0 Object Library et Microsoft Outlook 16.0 Object Library. Grâce à elles, nous allons pouvoir créer une instance d'Outlook pour diriger les messages sortants ainsi qu'une instance d'Office pour piloter les boîtes de dialogue standards.

Les variables
Justement, nous devons maintenant déclarer les variables capables d'instancier ces classes.
  • Cliquer sur le bouton Ok de la boîte de dialogue pour revenir sur la feuille de code,
  • Dans les bornes de la procédure événementielle, ajouter les déclarations suivantes :
Private Sub envoyer_Click()
Dim boite As FileDialog: Dim piece As Variant
Dim client_msg As New Outlook.Application: Dim message As Outlook.MailItem


End Sub


L'objet boite typé comme un FileDialog doit instancier la classe Office permettant de piloter ses boîtes de dialogue standards. L'objet piece (Variant) prendra son type à l'occasion d'une boucle For Each devant parcourir tous les éléments désignés par l'utilisateur, par le biais de la boîte de dialogue standard. Ensuite, nous créons un objet (Outlook.Application) pour instancier la classe Outlook et à l'intérieur de cette dernière, un autre (Outlook.MailItem) pour construire un message à envoyer.

Vérifier le destinataire
Le message ne peut être composé que dans la mesure où un destinataire est bien renseigné dans la zone, d'ailleurs intitulée destinataire. Avant de poursuivre, nous devons donc déclencher une instruction conditionnelle pour réaliser un test.
  • Après les variables, créer l'instruction conditionnelle suivante :
...
If IsNull(destinataire.Value) Then
MsgBox "Vous devez spécifier un destinataire."
Exit Sub
End If
...


Si la zone du destinataire n'est pas renseignée (IsNull), nous en informons l'utilisateur par le biais d'une boîte de message (MsgBox) et nous mettons fin au traitement.

Notez que nous aurions pu pousser l'analyse pour vérifier, en cas de saisie, qu'elle est bien conforme à une adresse Mail. Mais ce n'est pas le sujet ici et nous avions déjà appris à le faire.

La classe des boîtes de dialogue
Ensuite, nous devons autoriser l'utilisateur à désigner un dossier pour y sélectionner les fichiers à joindre au message. Nous devons donc instancier la classe des boîtes de dialogue et permettre la multisélection de fichiers.
  • A la suite du code, ajouter les deux instructions VBA suivantes :
...
Set boite = Application.FileDialog(msoFileDialogFilePicker)
boite.AllowMultiSelect = True
...


Grâce à la propriété FileDialog de l'objet Application, nous instancions la classe des boîtes de dialogue Standard d'Office. C'est ainsi que nous initialisons (Set) l'objet boite pour piloter une boîte de dialogue de sélection de fichiers (msoFileDialogFilePicker). Grâce à sa propriété héritée AllowMultiSelect que nous réglons à True, nous y autorisons la multi sélection de fichiers.

La classe de messagerie
C'est maintenant à la classe permettant de créer et d'envoyer des courriers électroniques, d'être instanciée. Pour cela, nous allons exploiter la variable client_msg que nous avions typée comme un objet Outlook.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
Set message = client_msg.CreateItem(olMailItem)
With message
.Recipients.Add destinataire.Value
.Subject = "Votre facture"
.Body = "Cher client, veuillez trouver vos différents documents en pièces jointes."
End With

pj.RowSource = ""
...


C'est la méthode CreateItem avec le paramètre olMailItem qui permet d'initialiser (Set) l'objet message sur cette classe. De fait, il hérite de nombreuses propriétés et méthodes. Nous en exploitons certaines dans l'enchaînement, dans un bloc With, pour ne pas avoir à répéter l'objet message à chaque reprise. Tout d'abord, la méthode Add de sa collection Recipients, permet de définir le destinataire du message. Nous lui passons en paramètre (destinataire.Value). Et puis, grâce aux propriétés Subject et Body, nous définissons respectivement le sujet et le corps du message. Ensuite, nous réinitialisons la zone de liste pj, que nous exploiterons seulement à titre de confirmation de la bonne réception des pièces.

Joindre les pièces
Avant d'envoyer le message, nous devons encore lui associer les pièces jointes. Pour cela, notre objet message offre désormais la collection Attachments. L'astuce consiste à exploiter une boucle pour parcourir tous les fichiers sélectionnés par l'utilisateur pour les joindre tour à tour. Bien sûr, nous devons commencer par lui offrir la boîte de dialogue de sélection de fichiers.
  • Toujours à la suite du code, ajouter les instructions VBA suivantes :
...
If boite.Show Then
For Each piece In boite.SelectedItems
pj.AddItem piece
message.Attachments.Add piece
Next piece
End If
...


Nous ouvrons la boîte de dialogue des fichiers grâce à la méthode Show de notre objet boite. Nous engageons notre variable piece dans une boucle For Each, pour lui faire parcourir la collection des fichiers sélectionnés (boite.SelectedItems) dans cette boîte de dialogue. A chaque passage, nous ajoutons le fichier en cours dans la zone de liste, mais surtout en pièce jointe du message, grâce à la méthode Add de la collection Attachments.

Remarque : Avant de parcourir les fichiers sélectionnés, il aurait été opportun de tester la sélection de l'utilisateur. En effet, il peut très bien cliquer sur le bouton Annuler de la boîte de dialogue. Mais ici, nous allons à l'essentiel.

Envoyer le message
C'est la méthode héritée Send qui permet dorénavant d'envoyer le message au destinataire, tel que nous l'avons paramétré.
  • Après l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
message.Send
MsgBox "Le message et ses pièces jointes ont été envoyés avec succès", vbInformation
...


Après l'envoi, nous adressons un message de confirmation à l'utilisateur.

Détruire les objets
Dès lors qu'ils ne sont plus utilisés, nous devons détruire les objets de programmation afin de nettoyer correctement la mémoire de l'ordinateur.
  • Toujours à la suite du code, ajouter les instructions VBA suivantes :
...
client_msg.Quit
Set client_msg = Nothing
Set message = Nothing
Set boite = Nothing
...


Nous exploitons la méthode Quit de l'objet client_msg pour fermer l'instance d'Outlook. Puis, nous détruisons tous les objets en les réinitialisant à Nothing.

Remarque importante : Pour que la simulation puisse se faire, il faut qu'un serveur SMTP (Serveur sortant) soit configuré sur votre ordinateur. En d'autres termes, il faut que le logiciel Microsoft Outlook soit installé et qu'un compte de messagerie y soit configuré.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • L'exécuter en enfonçant la touche F5 du clavier, par exemple,
  • Dans la première zone de texte, inscrire une adresse mail valide,
  • Cliquer alors sur le bouton Joindre et Envoyer,
  • Avec la boîte de dialogue, ouvrir par exemple le sous dossier archives_factures,
  • Sélectionner quelques fichiers avec la souris et la touche CTRL maintenue enfoncée,
  • Enfin, valider,
Sélectionner plusieurs fichiers à joindre au mail en VBA Access

De retour sur le formulaire, le message de confirmation surgit et les pièces jointes sont énumérées dans la zone de liste, avec leurs chemins d'accès complets.

Si vous avez pris soin de vous désigner en tant que destinataire, il ne vous reste plus qu'à ouvrir votre client de messagerie pour constater la présence du courrier généré en VBA Access, avec ses multiples pièces jointes.

Courrier électronique avec plusieurs pièces jointes envoyé en VBA Access

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn