Envoi feuilles excel plusieurs destinataires

roro67200

XLDnaute Nouveau
Bonsoir,

Je souhaiterais envoyer depuis un fichier Excel, une feuille (composée de chiffres produits) par destinataire via un bouton.
Pour résumer :
- une feuille "PIERRE"
- une feuille "PAUL"
- une Feuille "MARIE"
- une feuille "Feuil1" sur laquelle j'ai installé 3 boutons : PIERRE, PAUL et MARIE
Chaque bouton fait un lien vers une macro permettant d'envoyer un mail aux destinataires PAUL, PIERRE et MARIE, en y intégrant un fichier avec une feuille par destinataire.
J'ai regardé un peu partout mais je n'arrive pas à faire en sorte de n'avoir qu'un seul bouton permettant d'envoyer en même temps les 3 mails. L'objectif étant évidemment un gain de temps, sachant qu'il peut y avoir plus de 10 personnes, donc 10 boutons...
Est-il possible de le faire vis sendMail?
Vous trouverez ci-joint mon fichier.
 

Pièces jointes

  • Classeur1.xlsm
    21.3 KB · Affichages: 56

Calvus

XLDnaute Barbatruc
Bonsoir Roro67200, le Forum,

Dans la cellule F1 de chaque feuille, entrer l'adresse du destinataire.
Dans un module standard, mettre ce code :
Et il faut laisser la feuille1 à la fin du classeur.

VB:
Option Explicit

Sub Envoi()
Dim Dest As String, Sujet As String, i As Integer
For i = 1 To Worksheets.Count - 1
Sheets(i).Select  'Saisir le nom exact la feuille
ActiveSheet.Copy 'crée une copie de la feuille active
Dest = [F1] 'Saisir l'adresse mail
Sujet = "Chiffres"
ActiveWorkbook.SendMail Dest, Sujet, True
Application.DisplayAlerts = False
ActiveWorkbook.Close 'ferme la copie de la feuille active
Application.DisplayAlerts = True
Next
End Sub

A+
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Re,

J'ai pensé qu'il serait plus logique d'avoir toutes les adresses mail sur la feuille de commande.
Donc les inscrire en colonne F par exemple, à partir de F1 et remplacer le code par celui-ci :

VB:
Option Explicit

Sub Envoi()
Dim Dest As String, Sujet As String, i As Integer, f As Worksheet
Set f = Feuil4
For i = 1 To Worksheets.Count - 1
Dest = f.Cells(i, 6) 'Saisir l'adresse mail
Sheets(i).Select  'Saisir le nom exact la feuille
ActiveSheet.Copy 'crée une copie de la feuille active
Sujet = "Chiffres"
ActiveWorkbook.SendMail Dest, Sujet, True
Application.DisplayAlerts = False
ActiveWorkbook.Close 'ferme la copie de la feuille active
Application.DisplayAlerts = True
Next
End Sub

On pourrait également imaginer une correspondance entre le nom de la feuille et l'adresse.

A+
 

roro67200

XLDnaute Nouveau
Bonsoir Calvus,

Encore merci, cette méthode fonctionne très bien :) et c'est encore mieux !
Cela est en effet plus pratique d'avoir toutes les adresses mail sur une seule feuille (commande), ne serait-ce que pour les modifications (ajout, suppression), qui seront plus rapides à effectuer et source de moins d'erreurs.

Tu as sans doute raison, j'imagine qu'il y a d'autres méthodes ou possibilités ; la correspondance entre le nom de la feuille et l'adresse doit certainement en être une, je ne suis pas assez aguerri pour aller aussi loin.
En tout cas, pour moi, c'est parfait ! c'est exactement ce que je voulais. Au départ je souhaitais, outre le sujet, inclure aussi un message dans l'envoi...mais le sendMail ne le permettant pas, j'ai abandonné l'idée de chercher une autre solution, d'autant plus que le message sera mis à la place du sujet, et ça me va très bien. Il faut parfois faire au plus simple, surtout si on ne maîtrise pas les outils...;)

Toute ma gratitude pour ton aide.:)
Bonne soirée

Bien cordialement,
 

roro67200

XLDnaute Nouveau
Bonjour Calvus,

Je viens de me rendre compte que tu avais raison quant au fait qu'il fallait faire correspondre le nom de la feuille et l'adresse mail. En effet, actuellement les feuilles sont envoyées aux destinataires saisis, mais pas à la bonne personne. Il faudrait donc que par exemple : pour la feuille PIERRE, elle soit envoyée à l'adresse mail : pierre.nom@...fr., et ainsi de suite...

Cela est-il possible ?
Merci d'avance de ta réponse.

Cordialement,
 

Calvus

XLDnaute Barbatruc
Bonsoir Roro, le Forum,

Voici ton fichier en retour.
Créer une petite table de correspondance comme sur l'exemple, et hop ! c'est parti mon kik.... ! ;)

VB:
Option Explicit

Sub Envoi()
Dim Dest, Sujet as String, i As Integer, f As Worksheet, onglet As String
Set f = Feuil4
For i = 1 To Worksheets.Count - 1
onglet = Sheets(i).Name
Set Dest = f.Range("F:F").Find(onglet) 'Saisir l'adresse mail
Sujet = Dest.Offset(0, 2)
Dest = Dest(1, 2)
Sheets(i).Select  'Saisir le nom exact la feuille
ActiveSheet.Copy 'crée une copie de la feuille active
ActiveWorkbook.SendMail Dest, Sujet, True
Application.DisplayAlerts = False
ActiveWorkbook.Close 'ferme la copie de la feuille active
Application.DisplayAlerts = True
Next
f.Activate
End Sub

A+
 

Pièces jointes

  • Roro.xlsm
    25.4 KB · Affichages: 51

roro67200

XLDnaute Nouveau
Bonsoir Calvus,

Je te remercie vivement pour toute ton aide, pour le travail réalisé, et pour me permettre de m'améliorer !
C'est impeccable, c'est tout à ça que je souhaitais ! Tu es trop fort ! :)
Avec cette méthode, il sera plus facile de modifier tous les items, et il est possible d'adapter éventuellement et si besoin, le sujet :) Super

Encore merci pour tout !
Bonne soirée
A+
Cordialement
 

roro67200

XLDnaute Nouveau
Bonsoir Calvus,

Désolé de t'embêter encore une fois, mais finalement il y a une petite erreur dans le code apparamment.
Je l'avais constaté la dernière fois, mais je pensais que le problème venait d'Excel 2007, mais en essayant avec Excel 2010, c'est la même erreur qui apparaît :
erreur d'exécution '91' variable objet ou variable bloc with non définie
Cela n'empêche en rien l'envoi des mails avec la feuille jointe à la bonne personne, mais ce serait mieux sans le message d'erreur
Ci-dessous l'endroit de l'erreur dans le code : ligne n° 7 => "Sujet = Dest.Offset(0, 2)"
Code:
Option Explicit

Sub Envoi()
Dim Dest, Sujet As String, i As Integer, f As Worksheet, onglet As String
Set f = Feuil5
For i = 1 To Worksheets.Count - 1
onglet = Sheets(i).Name
Set Dest = f.Range("F:F").Find(onglet) 'Saisir l'adresse mail
Sujet = Dest.Offset(0, 2)
Dest = Dest(1, 2)
Sheets(i).Select  'Saisir le nom exact la feuille
ActiveSheet.Copy 'crée une copie de la feuille active
ActiveWorkbook.SendMail Dest, Sujet, True
Application.DisplayAlerts = False
ActiveWorkbook.Close 'ferme la copie de la feuille active
Application.DisplayAlerts = True
Next
f.Activate
End Sub
Merci encore de ton aide.
Bien à toi
 

Calvus

XLDnaute Barbatruc
Bonjour Roro67200,

Je ne peux pas te dire ce qu'il se passe. Chez moi aucune erreur, à aucun moment, même si j'efface les sujets.

Alors je ne sais pas d'où ça peut venir.
Tu as conservé le même code ?

Bonne journée
 

roro67200

XLDnaute Nouveau
Bonjour Calvus,

Je viens de tester à nouveau, et j'ai la même erreur ; les mails sont bien envoyés mais à l'envoi du dernier, le message apparaît "erreur 91..."
Tu trouveras en pièce jointe le fichier, avec le même code. J'ai juste modifié le n° de feuille dans "Set f = ...
Merci d'avance de ton aide
Cordialement,
 

Pièces jointes

  • RORO4.xlsm
    47.1 KB · Affichages: 46

Calvus

XLDnaute Barbatruc
Bonsoir Roro,

C'est normal que tu aies cette erreur. Tu essaies d'envoyer 4 mails à 3 destinataires....
Modifie le code comme suit et tout devrait rentrer dans l'ordre.
VB:
Option Explicit

Sub Envoi()
Dim Dest, Sujet As String, i As Integer, f As Worksheet, onglet As String
Set f = Feuil5
For i = 1 To Worksheets.Count - 2
onglet = Sheets(i).Name
Set Dest = f.Range("F:F").Find(onglet) 'Saisir l'adresse mail
Sujet = Dest.Offset(0, 2)
Dest = Dest(1, 2)
Sheets(i).Select  'Saisir le nom exact la feuille
ActiveSheet.Copy 'crée une copie de la feuille active
ActiveWorkbook.SendMail Dest, Sujet, True
Application.DisplayAlerts = False
ActiveWorkbook.Close 'ferme la copie de la feuille active
Application.DisplayAlerts = True
Next
f.Activate
End Sub

A+
 

roro67200

XLDnaute Nouveau
Bonsoir Calvus,
Je te remercie vivement pour ta réactivité. C'est encore une fois parfait ! :)
Le nombre de feuille à ajouter m'a complétement échappé
Pour chaque feuille à ajouter il faut augmenter la valeur (For i = 1 To Worksheets.Count - 3 pour 4 feuilles - 4, etc...).
Très bonne soirée à toi
:)
A+
Bien cordialement
 

Calvus

XLDnaute Barbatruc
Re,

Pour chaque feuille à ajouter il faut augmenter la valeur (For i = 1 To Worksheets.Count - 3 pour 4 feuilles - 4, etc...).
Non, pas tout à fait.
Worksheets.Count compte le nombre de feuiles.
Donc là tu en as 5 au total, moins les 2 dernières que tu n'envoies pas.
Même si tu as 50 feuilles à envoyer, le code restera le même En revanche, si tu ajoutes une feuille que tu ne dois pas envoyer à la fin de ton classeur, il faudra la soustraire. Donc For..... -3
Bonne soirée..
 

Discussions similaires

Réponses
2
Affichages
372

Statistiques des forums

Discussions
312 848
Messages
2 092 786
Membres
105 534
dernier inscrit
EmilieG60