Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Amélioration macro envoi mail

pompaero

XLDnaute Impliqué
Bonjour le forum,

Le fichier joint sert de test.
J'ai créé une macro de manière à créer un document en pdf et l'envoyer directement par mail.
cela fonctionne, il y a juste un petit détail que j'aimerai améliorer dans la macro "Mail", c'est cette ligne,
VB:
Mail2 = Sheets("Destinataire mail").Range("B2:B4")
Au lieu de préciser B2:B4, j'aimerai que cela soit automatique si l'on ajoute un ou plusieurs destinataires.
Est-ce possible ?

Merci de votre aide.
Cdlt.
pompaero
 

Pièces jointes

  • Test envoie mail.xlsm
    26.5 KB · Affichages: 14

patricktoulon

XLDnaute Barbatruc
Bonjour
si il n'y a rien d'autre autour tu peux utiliser
VB:
Mail2 = Sheets("Destinataire mail").[B2].curentregion
ou encore ceci :
Code:
with Sheets("Destinataire mail"):Mail2 = .Range("B2", Cells(Rows.Count, "B").End(xlUp)):end with

cela dit ton exemplaire de fichier n'est pas très représentatif
tu a le mot "date:" dans B2 et ce n'est pas un mail

il faut faire un peu plus d'effort dans vos demande et les fichiers que tu envoie avec la demande
les réponses que tu aura seront à la hauteur de la précision de la demande
 

pompaero

XLDnaute Impliqué
Bonjour patricktoulon

Merci de ton retour, je viens de tester les 2 solutions cela présente un bug.
Désolé si les explications ne sont pas assez explicites. Le mot "date" est sur la feuille [Document] alors que le B2 dont il s'agit est dans la feuille [destinataire mail] ou il y a bien un mail.
La feuille [document] va servir de présentation encore à définir (à construire) et dans la feuille [destinataire mail] un tableau Excel nommé TbMail est composé de 2 colonnes, en Col A le nom de la personne et en Col B les adresses mail.
L'objectif est de pouvoir ajouter ou supprimer des adresses mails dans la feuille [destinataire mail] sans devoir rentrer dans la macro "Mail" pour y modifier le nombre de lignes à prendre en charge (pour le moment B2:B4) mais que cela s'ajuste automatiquement.
Si besoin plus de détails, hésite pas.
Merci
Cdlt, pompaero
 
C

Compte Supprimé 979

Guest
Bonjour Pompaero

Puisque tu utilises un tableau structuré pour tes adresses mails, tu peux faire
VB:
Dim Mail2 as Range
Set Mail2 = Sheets("Destinataire mail").Range("TbMail[Adresse mail]")
Ton range évoluera en fonction de ton tableau

Ton code pour la liste n'est pas correcte, il doit être comme ceci
Code:
  Liste = ""
  For Each C In Mail2
    Liste = Liste & C & "; "
  Next C

A+
 

patricktoulon

XLDnaute Barbatruc
Bonjour @BrunoM45
ce qu'il y a de bien avec les listobjects ou les ranges nommées c'est qu'il ne peut y en avoir qu'une du même nom
il n'est donc pas nécessaire de préciser le parents
même si a feuille parent du range n'est pas celle qui est active
VB:
Mail2 = Range("TbMail[Adresse mail]")
liste = ""
For Each C In Mail2
   liste = liste & ";" & C
Next C
MsgBox liste
 
C

Compte Supprimé 979

Guest
Merci Patrick, effectivement,
En revanche, si je peux me permettre, pour le remplissage de la liste, ce n'est pas correct
Le ";" doit se trouver après le nom et nom avant
VB:
liste = liste & C & "; "
 

patricktoulon

XLDnaute Barbatruc
re
oui exact Bruno je me suis contenter de copier coller le code de notre ami
cela dit tu aura un ";" a la fin de trop par la force des choses
perso je n'ai jamais fait comme ça
et là en l’occurrence on peut tout automatiser en un seul coup
liste= join(application.transpose(Range("TbMail[Adresse mail]")),";")
 

pompaero

XLDnaute Impliqué
Bonjour patricktoulon, BrunoM45

Belle échange entre vous, c'est cool.
Merci à vous, je viens de tester votre macro finale avec les petits ajustement et cela fonctionne à merveille.
Je vous remercie encore et encore désolé pour le manque d'explications du départ.
Bonne soirée
Cdlt, pompaero;
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…