Envoi de mail depuis Excel avec condition sur les destinataires

Juju1971 Messages postés 9 Date d'inscription vendredi 26 août 2011 Statut Membre Dernière intervention 11 octobre 2012 - 26 août 2011 à 19:52
Juju1971 Messages postés 9 Date d'inscription vendredi 26 août 2011 Statut Membre Dernière intervention 11 octobre 2012 - 28 août 2011 à 14:20
Bonjour,


J'ai récupéré le code suivant qui me permet d'envoyer depuis Excel 2007 mon fichier en cours vers Outlook grâce à un bouton :


Private Sub CommandButton1_Click()

Dim fichier As String
fichier = ActiveWorkbook.FullName

Set ol = CreateObject("Outlook.Application")
Set olmail = ol.CreateItem(olMailItem)
Set ObjAttachement = olmail.Attachments
Set MonOutlook = CreateObject("Outlook.Application")

With olmail
.To = "moi@mail.fr; collègue_1@mail.fr; collègue_2@mail.fr; collègue_3@mail.fr"
.Subject = "Fichier"
.Body = "Voici la mise à jour du fichier."
.Attachments.Add fichier
.Send

End With

End Sub


Cette macro fonctionne mais je souhaiterais pouvoir la modifier.

Nous sommes quatre collègues qui avont en commun un tableau excel que l'on modifie régulièrement et que l'on transmet aux autres.

Lorsque l'un de nous quatre met à jour ce tableau, je souhaiterais que la macro envoie par mail le fichier aux trois autre sans que lui ne soit en destinataire.

Il faudrait que la macro identifie celui de nous quatre qui travaille sur le fichier et le retire des destinataires du mail.

Ne connaissant rien en programmation je ne vois pas comment faire.

Je remercie par avance celui qui voudra bien m'aider !!!

16 réponses

Utilisateur anonyme
26 août 2011 à 21:24
Bonsoir,
.To = "moi@mail.fr; collègue_1@mail.fr; collègue_2@mail.fr; collègue_3@mail.fr" 

Pourquoi ne pas modifier cette ligne sur chaque poste respectif ?
0
Juju1971 Messages postés 9 Date d'inscription vendredi 26 août 2011 Statut Membre Dernière intervention 11 octobre 2012
27 août 2011 à 11:28
Bonjour Banana32,


J'ai placé un bouton sur le fichier excel que l'on modifie à tour de rôle afin d'envoyer celui-ci par mail aux autres.

Si on a chacun une ligne différente, cela veut dire chacun sa propre macro.

Mais alors est-ce toujours possible d'utiliser le même bouton sur la feuille ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 août 2011 à 12:08
Bonjour,
Puisque le fichier est partagé :
Ouvre donc un petit userform avec, dessus, une listbox contenant tous les emails
Mets-y un label invitant l'utilisateur à sélectionner le sien
refuse de contineur si rien de sélectionné
ensuite :
For i = 0 To ListBox1.ListCount - 1
  If i <> ListBox1.ListIndex Then
     toto = toto & ";" & ListBox1.List(i)
  End If
Next
toto = Mid(toto, 2)
MsgBox toto


te reste plus qu'à affecter toto à ton .to dans ton code


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 août 2011 à 13:08
et tu peux même te faciliter la vie et rendre flexible ton truc, ainsi :
- Une feuille nommée "les_desti_possibles"
- dans les cellules A1 à Ax (donc dans la colonne A) :tous les destinataires possibles (les mêmes pour tous)
et tu alimentes alors ainsi ta listbox :
derlig = Worksheets("les_desti_possibles").Range("A" & Rows.Count).End(xlUp).Row
ListBox1.RowSource = Worksheets("les_desti_possibles").Range("A1:A" & derlig).Address

ce qui te permet de modifier, au fur et à mesure des besoins, le nombre d'utilisateurs et donc de destinataires possibles, sans toucher au code.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Juju1971 Messages postés 9 Date d'inscription vendredi 26 août 2011 Statut Membre Dernière intervention 11 octobre 2012
27 août 2011 à 13:53
Bonjour ucfoutu,


Merci pour ta réponse bien que ca me semble un peu complexe car je ne sais pas ce qu'est un userform.

Les deux lignes de code que tu as écrites doivent-elles faire partie de ma macro ?

Pourrais tu me faire un exemple de fichier excel avec une listbox ?

Je te remercie par avance !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 août 2011 à 14:55
Non...
Du moins pas pour l'instant.
Tu vas t'efforcer d'abord de te servir d'un userform, s'il te plait, et d'y placer un label et une listbox.
C'est le "prix à payer".


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 août 2011 à 15:29
En te précisant qu'apprendre cela n'est même pas du développement ! Juste l'apprentissage de l'IDE de ton outil (et je me rappelle parfaitement l'avoir trouvé, à mon époque, dans les toutes premières minutes)!
Je te rappelle également que tu es ici sur un forum de développement sous VBA/Excel.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Juju1971 Messages postés 9 Date d'inscription vendredi 26 août 2011 Statut Membre Dernière intervention 11 octobre 2012
27 août 2011 à 15:46
OK merci déja pour tes renseignements je vais voir pour ouvrir un userform en premier avant d'aller plus loin.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 août 2011 à 17:51
je vais voir pour ouvrir un userform en premier avant d'aller plus loin

Il va bien falloir que tu le fasses, si tu veux pouvoir utiliser tout ce qui vient :

Ajoute à ton classeur une feuille nommée "Feuille_destis"
C'est sur cette feuille que tu devras mettre, en colonne A, à la suite et sans lignes blanches
intercalées, toutes les adresses emails (de tout le monde)

Sur ta feuille de calcul principal, sur ton bouton de commande actuel nommé CommandButton1 :
Private Sub CommandButton1_Click()
  UserForm1.Show
End Sub


Sur ton Userform1 :
- un label nommé label1
- une listbox nommée ListBox1
- un bouton de commande nommé CommandButton1
- un bouton de commande nommé CommandButton2
Code pour ton UserForm1 :
Private Sub CommandButton1_Click()
  For i = 0 To ListBox1.ListCount - 1
    If i <> ListBox1.ListIndex Then
       liste_des_destis = liste_des_destis & ";" & ListBox1.List(i)
    End If
    Next
    liste_des_destis = Mid(liste_des_destis, 2)
    Dim fichier As String
    fichier = ActiveWorkbook.FullName
   Set ol = CreateObject("Outlook.Application")
   Set olmail = ol.CreateItem(olMailItem)
   Set ObjAttachement = olmail.Attachments
   Set MonOutlook = CreateObject("Outlook.Application")

   With olmail
     .To = liste_des_destis
     .Subject = "Fichier"
     .Body = "Voici la mise à jour du fichier."
     .Attachments.Add fichier
     .Send
   End With
  ' ......et le reste de ton code d'envoi
   '......
   ' et n'oublie pas de terminer par des set ... = Nothing pour tous tes objetx ouverts par des setr
   Unload Me
End Sub

Private Sub CommandButton2_Click()
 CommandButton1.Visible = False
 CommandButton2.Visible = False
End Sub

Private Sub ListBox1_Click()
   If ListBox1.ListIndex <> -1 Then
     CommandButton1.Visible = True
     CommandButton2.Visible = True
   End If
End Sub

Private Sub UserForm_Activate()
  Dim ou As Worksheet
  Set ou = ActiveSheet
  CommandButton1.Visible = False
  CommandButton1.Caption = "Envoyer le fichier"
  CommandButton2.Visible = False
  CommandButton2.Caption = "Annuler le choix fait"
  With Label1
    .Caption = "dans la liste ci-dessous, cliquez sur votre poropre addresse email"
    .AutoSize = True
  End With
  
  derlig = Worksheets("Feuille_destis").Range("A" & Rows.Count).End(xlUp).Row
  Worksheets("Feuille_destis").Activate
  ListBox1.RowSource = "A1:A" & derlig
  ou.Activate
  Set ou = Nothing
  If derlig < 2 Then
    Me.Hide
    MsgBox "au moins deux destinataires doivent figurer en colonne A de la feuille nommée Feuille_destis"
    Unload Me
  End If
End Sub


Voilà .



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
27 août 2011 à 23:42
Bonsoir à tous,

Pas trop au top pour ce genre de problème, mais pourquoi ne pas récupérer le nom de l'utilisateur par la fonction environ("username") et ainsi l'exclure de la liste des destinataires?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 août 2011 à 07:26
Bonjour, GG72,

Ton idée est bonne mais quelque peu contraignante pour les raisons suivantes :
- cela implique des adresses emails incluant forcément ce nom (pas toujours évident si ce nom existe déjà chez le fournisseur) et toutes chez le même fournisseur.
- quid si l'un des utilisateurs, en voyage, se sert d'un autre PC ou portable que l'habituel ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
28 août 2011 à 08:44
Bonjour ucfoutu,

Effectivement il y aurait quelques problèmes en ce qui concerne ta 2ème remarque.

Par contre, pour la 1ère, tu peux inclure dans le fichier Excel, une table de correspondance Nom utilisateur >>> adresse mail.

Qu'en penses-tu?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 août 2011 à 09:22
Par contre, pour la 1ère, tu peux inclure dans le fichier Excel, une table de correspondance Nom utilisateur >>> adresse mail.

Certes.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 août 2011 à 10:04
La vraie question reste (mais j'en parlerai in fine) l'utilisation de emails. Elle ne me parait pas vraiment si nécessaire que cela (on en parlera une fois que le demandeur aura résolu son problème, avec le mécanisme qu'il a décidé de mettre en oeuvre).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
28 août 2011 à 10:57
En supposant que l'utilisation de emails soit maintenue, j'ai repensé à ta 2ème remarque.

Tu peux tester si le nom de l'utilisateur renvoyé par Environ("username") figure dans la table de correspondances. Si oui, tout est ok. Si non et seulement dans ce cas, tu lui demandes de s'identifier.

Sinon, je ne vois pas trop l'autre solution que tu envisages.
Mais bon, comme tu dis, attendons la réaction du demandeur.

Bonne journée.
0
Juju1971 Messages postés 9 Date d'inscription vendredi 26 août 2011 Statut Membre Dernière intervention 11 octobre 2012
28 août 2011 à 14:20
Merci Icfoutu pour ton code à utiliser dans le Userform.

Je vais essayer de mettre en place ta solution.

J'essaie de garder l'utilisation de l'émail pour le côté rapide, nous avons tous les 4 la messagerie ouverte en permanence et ainsi on est informé rapidement de la mise à jour de ce fichier.

Il y a bien des réseaux sur le serveur de la société mais on a tous des droits différents sur les accés.

Merci à toi également GG72, j'ai vu que le username renvoyait le nom et le prénom enregistré dans Outlook.

Ce serait également intéressant car nous utilisons tous les 4 le même mail d'entreprise de type :

prénom.nom@société.com

Comme c'est un fichier dans le cadre du travail, nous n'avons pas besoin de nous l'envoyer hors de l'entreprise par une messagerie différente.

Il n'y aura pas non plus de cas où nous aurions à envoyer ce fichier depuis le poste d'un autre collègue.

Merci en tout cas à vous deux pour vos remarques.
0
Rejoignez-nous