IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Envoie mail avec pièce jointe (.xlsm) à plusieurs destinataires [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut Envoie mail avec pièce jointe (.xlsm) à plusieurs destinataires
    Bonjour à tous !

    Je travaille sur un classeur excel à plusieurs feuilles.
    J'ai besoin d'envoyer une seule feuille de mon classeur excel à plusieurs destinataires. Ces destinataires sont déjà listés dans le classeur.
    La feuille que j'envoie doit être envoyée avec les macros qui sont présentes dans le classeur que j'utilise.

    J'ai déjà lus toute la FAQ disponible à ce sujet : http://excel.developpez.com/faq/inde...age=Messagerie

    Pour l'instant, j'en suis ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Option Explicit
     
    Sub EnvoieMail()
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim Temp As String
    Dim CdoMessage As Object
    Dim Fichier As String
     
        Set Sourcewb = ActiveWorkbook
        ActiveSheet.Copy
        Set Destwb = ActiveWorkbook
     
        Temp = ThisWorkbook.Path & Application.PathSeparator & "Toto.xls"
     
        With Application
            .ScreenUpdating = False
            .DisplayAlerts = False
        End With
     
        Destwb.SaveAs Temp
        Fichier = Destwb.Path & Application.PathSeparator & Destwb.Name
        Destwb.Close
        Application.DisplayAlerts = True
     
        Set CdoMessage = CreateObject("CDO.Message")
        With CdoMessage
            .Subject = "Exemple"
            .From = "Stanler@domaine.com"
            .To = "Stanler@domaine.com"
            .CC = ""
            .BCC = ""
            .TextBody = "Ceci est un test"
            .AddAttachment Fichier
            .Send
        End With
     
        Application.ScreenUpdating = True
     
        Set CdoMessage = Nothing
        Kill Fichier
    End Sub
    J'obtiens une erreur sur la ligne .Send et je n'arrive pas à résoudre cette erreur.
    Dois-je changer de methode ? Comment faire en sorte que ma pièce jointe prenne aussi les macros ? Puis-je utiliser la liste de mails dans la feuille du classeur comme destinataires ?

  2. #2
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    Quelle erreur obtiens-tu?

    Et pour que ta pj accepte les macros, il suffit de l'enregistrer au format ".xlsm" et non pas ".xls"

  3. #3
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Bonjour,

    J'obtiens une erreur "La valeur de "SendUsing" est non valide".
    J'ai fais des recherches sur cette erreur, apparement c'est une histoire de SMTP et de port à configurer. Je souhaite pouvoir envoyer le mail sans saisir de mot de passe parce que je ne serais pas le seul utilisateur du fichier (environ 5 personnes différentes seront amenés à l'utiliser).

    Mon fichier est déjà au format .xlsm ^^

    J'ai aussi remarqué ce code qui me plait un peu plus, mais j'aimerai paramétrer la feuille en pièce jointe et non en corps du texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub EnvoieMailcorps()
    Worksheets("Saisie").Select '=la plage de cellules à envoyer
    'Rend le mail visible
    ActiveWorkbook.EnvelopeVisible = True
    'Ajoute ces informations aux mail à envoyer
        With ActiveSheet.MailEnvelope
            .Introduction = "Bonjour, vous trouverez ci dessous le tableau des horaires décalés pour"
            .Item.To = "" 'Destinataire
            .Item.Subject = "Saisie Reporting"
        End With
    Application.ScreenUpdating = True
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Bonjour, il me semble que lorsque tu copies une feuille les macros ne suivent pas, pour avoir une copie avec les macros il faudrait copier le classeur entier puis supprimé les autres feuilles

    et voici le code de mail que j'utilise, il te manque le ".Attachments.Add " pour gérer une pièce jointe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub mail()
     
    Dim ObjOutlook As Object
    Set ObjOutlook = CreateObject("outlook.application")
        Set oBjMail = ObjOutlook.CreateItem(olMailItem)
        With oBjMail
            .To = Range("destinataire")
            .CC = Range("destinataire_cc")
           .Subject = Range("titre_mail") ' l'objet du mail
           .Body = Range("Body")
           .Attachments.Add 'le chemin de la pièce jointe
           .Display
            'SendKeys "^{ENTER}" 'pour éviter la confirmation par outlook
     
        End With
     
    End Sub
    Mon fichier est déjà au format .xlsm ^^
    Dans ton code tu le sauve en "Toto.xls"

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Bonjour,

    il me semble que lorsque tu copies une feuille les macros ne suivent pas, pour avoir une copie avec les macros il faudrait copier le classeur entier puis supprimé les autres feuilles
    Oke, mais je dois donc fermer mon classeur pour en faire une copie ? Je ne peux pas lancer la macro à partir du classeur, si je comprends bien, n'est ce pas ?

    Dans ton code, la selection des destinataire est faite avec une plage. Dans mon cas, la plage va évoluer d'une utilisation à l'autre. Dois-je redéfinir la plage par vba juste avant cette procédure ?

    Mon fichier est déjà au format .xlsm ^^
    Dans ton code tu le sauve en "Toto.xls"
    Ah, oui ! Je pensais que l'on parlait du fichier principal. Oke, je l'ai changé, mais les macros ne sont pas venues avec lui.
    Puis-je écrire ou copier/coller mon code dans la nouvelle feuille créée ?

    Enfin, j'ai du rajouter cette ligne à ton code :

  6. #6
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Oke, mais je dois donc fermer mon classeur pour en faire une copie ? Je ne peux pas lancer la macro à partir du classeur, si je comprends bien, n'est ce pas ?
    Non pas du tout, il suffit d'utiliser workbook.saveCopyAs
    En effet ! Tu penses vraiment à tout ^^

    Dans ton code, la selection des destinataire est faite avec une plage. Dans mon cas, la plage va évoluer d'une utilisation à l'autre. Dois-je redéfinir la plage par vba juste avant cette procédure ?
    Qu'entends-tu par là? Si plage est bien structurée (tout dans une seule colonne ou une seule ligne), tu peux la modifier comme tu veux (ajouter, supprimer des mails) sans avoir à changer le code.
    Et bien, les adresses mails de destination sont listées dans : Range(Range("D2"), Range("D2").End(xlDown))Range("D1") = "Adresses e-mail".
    Parfois, je n'ai aucune adresse e-mail dans ma colonne. Exemple en image : Nom : adressesmails.png
Affichages : 1312
Taille : 3,6 Ko
    Est ce que la plage va quand meme rester ? Ou dois-je définir la plage de D2 jusqu'à D1048576 ?

    Ah, oui ! Je pensais que l'on parlait du fichier principal. Oke, je l'ai changé, mais les macros ne sont pas venues avec lui.
    Puis-je écrire ou copier/coller mon code dans la nouvelle feuille créée ?
    Oui c'est faisable, mais totalement inutile dans ton cas puisqu'il y a la méthode workbook.saveCopyAs
    Oui, c'est compris !

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Non pas du tout, il suffit d'utiliser workbook.saveCopyAs
    C'est bien à ça que je pensait


    Je ne comprends pas bien, les destinataires sont fixes ou variables?

  8. #8
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Et bien, les adresses mails de destination sont listées dans : Range(Range("D2"), Range("D2").End(xlDown))
    Range("D1") = "Adresses e-mail".
    Parfois, je n'ai aucune adresse e-mail dans ma colonne.
    Est ce que la plage va quand meme rester ? Ou dois-je définir la plage de D2 jusqu'à D1048576 ?
    Si elles sont listées dans la colonne D, il faut utiliser une boucle un peu comme celle-ci de préférence (en vérifiant que la cellule 2 ne soit pas vide):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim listeMails as string
     
    listeMails = ""
    If cells(2,4).value <> "" then
         For i = 2 To sheets("LaFeuilleContenantLesMails").Range("D" & Rows.Count).End(xlUp).row
               listeMails = listeMails & cells(i,4).value & " ; "
        NExt i
    End If
    Puis dans le mail :
    Faire de même pour les personnes en copie (avec une autre liste bien sûr)

  9. #9
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Halaster a tout dit

    Oke, mais je dois donc fermer mon classeur pour en faire une copie ? Je ne peux pas lancer la macro à partir du classeur, si je comprends bien, n'est ce pas ?
    Non pas du tout, il suffit d'utiliser workbook.saveCopyAs

    Dans ton code, la selection des destinataire est faite avec une plage. Dans mon cas, la plage va évoluer d'une utilisation à l'autre. Dois-je redéfinir la plage par vba juste avant cette procédure ?
    Qu'entends-tu par là? Si plage est bien structurée (tout dans une seule colonne ou une seule ligne), tu peux la modifier comme tu veux (ajouter, supprimer des mails) sans avoir à changer le code.

    Ah, oui ! Je pensais que l'on parlait du fichier principal. Oke, je l'ai changé, mais les macros ne sont pas venues avec lui.
    Puis-je écrire ou copier/coller mon code dans la nouvelle feuille créée ?
    Oui c'est faisable, mais totalement inutile dans ton cas puisqu'il y a la méthode workbook.saveCopyAs

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par halaster08 Voir le message
    il me semble que lorsque tu copies une feuille les macros ne suivent pas
    Sauf le code contenu dans le module de classe de la feuille …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  11. #11
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    merci pour toutes vos réponses !

    Grace a vous, j'ai pu coder ce que je voulais ^^ Je passe le sujet en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoie Mail avec pièce jointe
    Par Sh@m@n dans le forum SAP
    Réponses: 11
    Dernier message: 05/04/2012, 15h22
  2. Envoi mail avec pièce jointe sans confirmation
    Par grrimag dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/04/2008, 15h23
  3. [VBA-E]envoi mail avec pièce jointe
    Par magictom42 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2007, 12h33
  4. Envoie mail avec pièce jointe
    Par Juniora dans le forum Access
    Réponses: 3
    Dernier message: 03/04/2006, 15h24
  5. [VB]Bp envoie mail avec piéce jointe
    Par jm1213 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/02/2006, 21h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo