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 :

Envoi e-mail via Excel [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut Envoi e-mail via Excel
    Bonjour tout le monde

    Je rencontre un petit problème pour l'envoi multiutilisateurs de fichiers (plusieurs) avec Excel.

    Premièrement, je suis sous Windows 10 et Office 365.

    J'arrive, dans un premier temps, avec ma macro (Module 2) à ouvrir l'explorateur afin de sélectionner les fichiers que je désire mettre en pièces jointes.
    J'arrive également à sélectionner les adresses mail figurant sur la feuille.

    Lorsque je valide, le courriel s'affiche avec les destinataires mais les pièces jointes ne sont pas jointes.

    J'ai effectué de nombreuses recherches mais je sèche depuis quelques jours afin de trouver une solution.

    Je vous remercie, par avance de votre précieuse aide.

    Je joints le code et le fichier.

    PS : Prenez votre temps, car avec mes horaires de ouf, je ne pense pas pouvoir revenir d'ici le week-end prochain.


    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    Sub Envoidoc()
    ' Envoi courriel multidestinataires avec documents
    Dim OTApp As Object
    Dim MItem  As Object
    Dim Cellules As Range
    Dim Lignes As Range
    Dim Adr_Courriel As String
    Dim Txt_Texte As String
    Dim Nbre_Fichier As Variant
    ChDir "C:\"
     
    On Error Resume Next
     
    ' Fichiers à joindre
    Nbre_Fichier = Application.GetOpenFilename( _
        Title:="                                                SÉLECTIONNEZ  LE(S) FICHIER(S) Á JOINDRE AU COURRIEL ", _
        FileFilter:="Extention de fichier,*.*", _
        MultiSelect:=True)
     
    ' Nbre de fichiers joints
    If Not IsArray(Nbre_Fichier) Then
        MsgBox "AUCUN FICHIER SÉLECTIONNÉ !"
    Else
        MsgBox UBound(Nbre_Fichier) - LBound(Nbre_Fichier) + 1 _
        & " FICHIER(S) SÉLECTIONNÉ(S) !"
    End If
     
    On Error Resume Next
          Txt_Texte = "Choisissez vos adresses courriel"
    ' Sélection des adresses courriel
    Set Lignes = Application.InputBox( _
        Title:="        SAISIE DES ADRESSES COURRIEL", _
        Prompt:=" UTILISEZ LE CLIC GAUCHE DE LA SOURIS ET LA TOUCHE CTRL DU CLAVIER ENFONCÉE ! ", _
        Default:=Txt_Texte, _
        Left:=500, _
        Top:=500, _
        Type:=8)
     
        If Lignes Is Nothing Then Exit Sub
        Set OTApp = CreateObject("Outlook.Application")
        For Each Cellules In Lignes
     
    If Cellules.Value Like "*@*" Then
     
        If Adr_Courriel = "" Then
            Adr_Courriel = Cellules.Value
                Else
                    Adr_Courriel = Adr_Courriel & ";" & Cellules.Value
        End If
     
    End If
     
        Next
     
    Set MItem = OTApp.CreateItem(0)
    ' Remplissage du courriel
    With MItem
            .To = Adr_Courriel
            .Display
            .Attachments.Add Nbre_Fichier
     
    End With
     
    End Sub


    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Profil pro
    ERP + Oracle + VBA Excel
    Inscrit en
    Juin 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : ERP + Oracle + VBA Excel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2005
    Messages : 58
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Je pense qu'une simple boucle sur le tableau Nbre_fichier fait l'affaire

    dans cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     With MItem
            .To = Adr_Courriel
            .Display
            .Attachments.Add Nbre_Fichier
     
    End With
    ajouter un boucle sur le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With MItem
            .to = Adr_Courriel
            .Display
            For i = 1 To UBound(Nbre_Fichier)
            .Attachments.Add Nbre_Fichier(i)
            Next
     
    End With

  3. #3
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut Envoi e-mail via Excel
    Bonjour EJO64, bonjour tout le monde

    Je viens de tester ta proposition.

    Malheureusement, les fichiers ne sont toujours pas mis en pièces jointe.

    J'ai essayé aussi de trouver d'autres solutions sur le net mais toujours sans succès.

    Si d'autres personnes ont une ou des idées, je suis toujours preneur.

    Meilleurs messages à tous.

    Olivier

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    bonjour
    je ne sais pas avec outlook mais avec cdo on peut intégré en piece jointe x fichiers sans boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With MItem
            .To = Adr_Courriel
            .Display
            .Attachments.Add Join(Nbre_Fichier, ";")'pour le separateur je ne sais pas non plus avec outlook,avec cdo c'est ";"
     
    End With
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut
    Hello Patrick

    Merci pour ta réponse mais ta proposition n'a pas d'effet.

    Bonne fin de journée

  6. #6
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut
    Hello le forum

    Petite précision à ma demande.

    Avec le code ci-dessous, l'envoi d'UN SEUL fichier s'effectue !

    J'ai essayer de l'adapter pour un envoi multi-fichiers mais . . .

    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
    43
    44
    45
    46
     
    Sub Envoidoc()
    ' Envoi courriel multidestinataires avec document
        Dim OTApp As Object
        Dim MItem As Object
        Dim Cellules As Range
        Dim Lignes As Range
        Dim Adr_Courriel  As String
        Dim Txt_Texte As String
        Dim Nbre_Fichier  As String
     
    Nbre_Fichier  = Application.GetOpenFilename(, , "Sélectionner le fichier à envoyer")
      If Nbre_Fichier  = "" Then
        MsgBox "Aucun fichier sélectionné"
        Exit Sub
      End If
     
    On Error Resume Next
        Txt_Texte = "Choisissez vos adresses courriel"
     
        Set Lignes = Application.InputBox( _
          Title:="        SAISIE DES ADRESSES COURRIEL", _
          Prompt:=" UTILISEZ LE CLIC GAUCHE DE LA SOURIS ET LA TOUCHE CTRL DU CLAVIER ENFONCÉE ! ", _
          Default:=Txt_Texte, _
          Left:=500, _
          Top:=500, _
          Type:=8)
     
        If Lignes Is Nothing Then Exit Sub
        Set OTApp = CreateObject("Outlook.Application")
        For Each Cellules In Lignes
            If Cellules.Value Like "*@*" Then
                If Adr_Courriel  = "" Then
                    Adr_Courriel  = Cellules.Value
                Else
                    Adr_Courriel  = Adr_Courriel  & ";" & Cellules.Value
                End If
            End If
    Next
        Set MItem  = OTApp.CreateItem(0)
    With MItem 
            .To = Adr_Courriel 
            .Display
            .Attachments.Add Nbre_Fichier 
    End With
    End Sub

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Mais pourquoi t'arracher les cheveux ? Puisque tu as Office 365, tu as un compte OneDrive, dont tu peux contrôler l'accès par des étrangers. Tu mets ton fichier sur OneDrive et tu leur envoies le lien sur OneDrive. Ceux qui ont besoin du fichier pourront y accéder.

    Et puis, si tous tes correspondants ont Office 365, Excel d'Office 365, et Excel 2019, un de ces jours, intègrent maintenant un tout nouveau système de partage de classeurs sur OneDrive.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  8. #8
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut
    Hello Clément

    Je te remercie pour ta participation.

    Si tu regarde mon fichier que j'ai mis en pièce jointe (premier post), c'est un répertoire avec des adresses courriels.

    Dans mon job, je dois envoyer plusieurs fois par jour des fichiers à des collaborateurs.

    La procédure est ok pour le choix des collaborateurs mais pas celle permettant de joindre des fichiers.

    Dans mon complément d'information que j'ai posté aujourd'hui, j'arrive à joindre un seul fichier mais pas plusieurs.

    Je te souhaite une bonne fin de soirée.


  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    La méthode Add semble attendre un fichier pas plusieurs mais par contre rien ne semble interdire de faire appel plusieurs fois à add.
    Ainsi tu peux à partir de Nbr_Fichier établir un tableau à l'aide de Split, puis boucler sur chaque élément de ce tableau en appelant Add pour chacun d'eux

    Un truc comme ça par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim OneFile As Variant
    Set MItem = OTApp.CreateItem(0)
    With MItem
            .To = Adr_Courriel
            .Display
            For Each OneFile In Split(Nbre_Fichier, ";")
                .Attachments.Add OneFile
            Next
    End With
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut
    Salut Qwazerty

    Merci de te pencher si tard sur la question.

    Je viens de tester ta proposition nocturne qui reste sans effet sur mon problème.

    Je vais continuer mes recherches.

    A++++




  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    As-tu bien contrôler que les nom de fichier sont déparés par des ";"?
    Place un point d'arrêt sur le for et exécute en mode pas à pas pour voir si la boucle est effectuée plusieurs fois.

    Si ça n'est pas le cas place un espion (ou regarder dans la fenêtre des variables locales) pour avoir le contenu de Nbre_Fichier pour regarder comment sont séparés les fichiers.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 651
    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 651
    Points : 5 769
    Points
    5 769
    Par défaut
    Bonjour,

    Chez moi le code de EJO64 au post numéro 2 fonctionne sans souci

    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
    Sub aa()
    Dim ObjOutlook As Object
    Nbre_Fichier = Application.GetOpenFilename( _
        Title:="                                                SÉLECTIONNEZ  LE(S) FICHIER(S) Á JOINDRE AU COURRIEL ", _
        FileFilter:="Extention de fichier,*.*", _
        MultiSelect:=True)
    For i = 1 To 4
    debug.print Nbre_Fichier(i)
    Next
    Set ObjOutlook = CreateObject("outlook.application")
        Set oBjMail = ObjOutlook.CreateItem(olMailItem)
        With oBjMail
           For i = 1 To 4
            .Attachments.Add Nbre_Fichier(i)
            Next
           .Display
        End With
     
    End Sub
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Lol... j'ai été grillé mais de plusieurs jours... j'aurais mieux dû lire toutes les réponses.
    (Je vois bien que le code est différent et que du coup le mien est faux! )

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Membre régulier
    Homme Profil pro
    Travailleur social
    Inscrit en
    Février 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Travailleur social
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 134
    Points : 70
    Points
    70
    Par défaut

    Hello tout le monde et surtout EJO64, patricktoulon, clementmarcotte, Qwazerty et halaster08

    Suite à un "mauvais" copier-coller, le code de EJO64 ne fonctionnait pas hier.

    J'ai tout repris et le code de EJO64 fonctionne.

    EJO64 merci à toi. Merci également à ceux qui ont participé.

    Je clôture le post !


    Afin que le post soit utile à d'autres, je mets le code corrigé !

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    Sub Envoidoc()
    ' Envoi courriel multidestinataires avec plusieurs documents joints
    ' A saisir dans un module
    Dim OTApp As Object
    Dim MItem  As Object
    Dim Cellules As Range
    Dim Lignes As Range
    Dim Adr_Courriel As String
    Dim Txt_Texte As String
    Dim Nbre_Fichier As Variant
    ChDir "C:\"
     
    On Error Resume Next
    ' Fichiers à joindre
    Nbre_Fichier = Application.GetOpenFilename( _
        Title:="                                                SÉLECTIONNEZ  LE(S) FICHIER(S) Á JOINDRE AU COURRIEL ", _
        FileFilter:="Extention de fichier,*.*", _
        MultiSelect:=True)
     
    ' Nbre de fichiers joints
    If Not IsArray(Nbre_Fichier) Then
        MsgBox "AUCUN FICHIER SÉLECTIONNÉ !"
    Else
        MsgBox UBound(Nbre_Fichier) - LBound(Nbre_Fichier) + 1 _
        & " FICHIER(S) SÉLECTIONNÉ(S) !"
    End If
     
    On Error Resume Next
          Txt_Texte = "Choisissez vos adresses courriel"
    ' Sélection des adresses courriel
    Set Lignes = Application.InputBox( _
        Title:="        SAISIE DES ADRESSES COURRIEL", _
        Prompt:=" UTILISEZ LE CLIC GAUCHE DE LA SOURIS ET LA TOUCHE CTRL DU CLAVIER ENFONCÉE ! ", _
        Default:=Txt_Texte, _
        Left:=500, _
        Top:=500, _
        Type:=8)
     
        If Lignes Is Nothing Then Exit Sub
        Set OTApp = CreateObject("Outlook.Application")
        For Each Cellules In Lignes
     
    If Cellules.Value Like "*@*" Then
     
        If Adr_Courriel = "" Then
            Adr_Courriel = Cellules.Value
                Else
                    Adr_Courriel = Adr_Courriel & ";" & Cellules.Value
        End If
     
    End If
     
    Next
     
    Set MItem = OTApp.CreateItem(0)
    ' Remplissage du courriel
     
    With MItem
            .To = Adr_Courriel
            .Display
     
            For i = 1 To UBound(Nbre_Fichier)
                .Attachments.Add Nbre_Fichier(i)
            Next
     
    End With
     
    End Sub


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

Discussions similaires

  1. [XL-2010] Envoi de mail via Excel
    Par lumpys dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 05/08/2016, 17h27
  2. Envoi de mail via Excel à partir de Notes
    Par neo79 dans le forum Excel
    Réponses: 0
    Dernier message: 26/11/2015, 22h21
  3. Envoi de mail depuis Excel 2003 via Outlook 2003
    Par SlySylvain dans le forum Excel
    Réponses: 2
    Dernier message: 19/04/2007, 10h01
  4. Envoi de mail via un macro vba sur excel
    Par momolamoto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/12/2005, 19h51

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