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 :

Envoyer une copie d'une feuille Excel par mail (sans pièce jointe). [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2022
    Messages : 9
    Par défaut Envoyer une copie d'une feuille Excel par mail (sans pièce jointe).
    Bonjour,

    je cherche à automatiser l'envoi de deux comptes rendus à la suite de deux réunions systématiques. l'idée c'est de prendre des notes dans un fichier Excel lors des réunions et en fin de réunions cliquer sur un bouton pour faire une copie du contenu (2 feuilles différentes) et les envoyer dans le corps d'un mail.

    j'ai fait la liste des destinataires dans deux feuilles (peut être mises à jour après ..) pour déclarer un tableau dynamique.

    j'ai écrit ce code avec l'aide que j'ai pu trouver dans d'autre discussion (voir ci-dessous et PJ) mais quand j'exécute, ça s'arrête à l'ouverture d'Outlook avec une pièce jointe, le champ sujet Outlook est bien renseigné mais celui des dentinaires est vide et rien n'est envoyé. en plus, les copies qui ont été réalisées en ouvrant deux autres fichiers ne se ferment pas.

    Question subsidiaire : comment faire pour avoir les options d'envoi de mail avec une copie de feuille en pièce jointe (titre réunion fichier réunion X) et l'envoi de mail avec une copie d'une plage ou d'une feuille (zone remplie) dans le corps d'un mail ?

    merci d'avance de votre coup de main.

    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
    Sub Envoi_CR_1()
    Dim Destinataires1()
    Dim Destinataires2()
    Dim Sujet1 As String, Sujet2 As String
    Dim AccuseReception As Boolean
    Dim DerLigne As Integer, Tab_Ligne As Integer
     
     
    'Bornes du tableau de destinataires 1:
        DerLigne = Worksheets("Destinataires 1").Range("A" & Rows.Count).End(xlUp).Row
        ReDim Destinataires1(DerLigne, 0) ' Redimensionner Tableau BDD
     
    'Remplissage du tableau dynamique de destinataires 1 :
        For Tab_Ligne = 0 To UBound(Destinataires1)
            Destinataires1(Tab_Ligne, 0) = Range("C" & Tab_Ligne + 1) ' Colonne adresse mail
            'Destinataires1(Tab_Ligne, 1) = Range("A" & Tab_Ligne + 1) ' Colonne prénom
            'Destinataires1(Tab_Ligne, 2) = Range("B" & Tab_Ligne + 1) ' Colonne nom
     
     
        Next
     
    'Bornes du tableau de destinataires 2:
        DerLigne = Worksheets("Destinataires 2").Range("A" & Rows.Count).End(xlUp).Row
        ReDim Destinataires2(DerLigne, 2) ' Redimensionner Tableau BDD
     
    'Remplissage du tableau dynamique de destinataires 2 :
        For Tab_Ligne = 0 To UBound(Destinataires2)
            Destinataires2(Tab_Ligne, 0) = Range("C" & Tab_Ligne + 1) ' Colonne adresse mail
            'Destinataires2(Tab_Ligne, 1) = Range("A" & Tab_Ligne + 1) ' Colonne prénom
            'Destinataires2(Tab_Ligne, 2) = Range("B" & Tab_Ligne + 1) ' Colonne nom
     
     
        Next
     
     
    Sujet1 = "CR réunion 1"
    Sujet2 = "CR réunion 2"
     
    AccuseReception = True
     
     
     
    'Nom de la Feuille à envoyer
    'ThisWorkbook.Sheets("CR réunion 1").Copy
    'ThisWorkbook.Sheets("CR réunion 2").Copy
    Worksheets("Destinataires 1").Range("A1:N49").Copy
    Worksheets("Destinataires 2").Range("A1:N49").Copy
     
    ActiveWorkbook.SendMail Destinataires1, Sujet1, AccuseReception
    ActiveWorkbook.SendMail Destinataires2, Sujet2, AccuseReception
    ActiveWorkbook.Close False
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 035
    Par défaut
    Bonjour,
    Vous trouverez dans cette documentation toutes les fonctions nécessaires pour envoyer un tableau d'Excel (ou une plage quelconque) dans Outlook :
    (Principalement aux chapitres III.E et V dans votre cas).

    Fonctions en VBA pour générer des courriels depuis Excel

    Pour une plus grande souplesse dans vos traitements je vous invite à utiliser les tableaux structurés (table de données).
    Toutes les fonctions utiles sont ici :

    Fonctions en VBA pour gérer les Tableaux Structurés d’Excel


    Bonne programmation.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2022
    Messages : 9
    Par défaut
    Bonjour,

    merci de votre retour.

    je viens de lire les deux chapitres et j'ai utilisé les deux propositions, mais je n'y arrive pas... je dois peut-être m'y prendre mal.

    merci du coup de main.

  4. #4
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 035
    Par défaut
    Bonjour,
    J'ai importé le module "Mail" et complété votre code (lignes 55 et suivantes) :

    Code VBA : 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
    71
    72
    73
    74
    75
    76
    77
    Sub Envoi_CR_1()
    Dim Destinataires1()
    Dim Destinataires2()
    Dim Sujet1 As String, Sujet2 As String
    Dim AccuseReception As Boolean
    Dim DerLigne As Integer, Tab_Ligne As Integer
     
     
    'Bornes du tableau de destinataires 1:
        DerLigne = Worksheets("Destinataires 1").Range("A" & Rows.Count).End(xlUp).Row
        ReDim Destinataires1(DerLigne, 0) ' Redimensionner Tableau BDD
     
    'Remplissage du tableau dynamique de destinataires 1 :
        For Tab_Ligne = 0 To UBound(Destinataires1)
            Destinataires1(Tab_Ligne, 0) = Worksheets("Destinataires 1").Range("C" & Tab_Ligne + 1) ' Colonne adresse mail
            'Destinataires1(Tab_Ligne, 1) = Range("A" & Tab_Ligne + 1) ' Colonne prénom
            'Destinataires1(Tab_Ligne, 2) = Range("B" & Tab_Ligne + 1) ' Colonne nom
     
     
        Next
     
    'Bornes du tableau de destinataires 2:
        DerLigne = Worksheets("Destinataires 2").Range("A" & Rows.Count).End(xlUp).Row
        ReDim Destinataires2(DerLigne, 2) ' Redimensionner Tableau BDD
     
    'Remplissage du tableau dynamique de destinataires 2 :
        For Tab_Ligne = 0 To UBound(Destinataires2)
            Destinataires2(Tab_Ligne, 0) = Worksheets("Destinataires 2").Range("C" & Tab_Ligne + 1) ' Colonne adresse mail
            'Destinataires2(Tab_Ligne, 1) = Range("A" & Tab_Ligne + 1) ' Colonne prénom
            'Destinataires2(Tab_Ligne, 2) = Range("B" & Tab_Ligne + 1) ' Colonne nom
     
     
        Next
     
     
    Sujet1 = "CR réunion 1"
    Sujet2 = "CR réunion 2"
     
    AccuseReception = True
     
     
     
    'Nom de la Feuille à envoyer
    'ThisWorkbook.Sheets("CR réunion 1").Copy
    'ThisWorkbook.Sheets("CR réunion 2").Copy
    'Worksheets("Destinataires 1").Range("A1:N49").Copy
    'Worksheets("Destinataires 2").Range("A1:N49").Copy
     
    'ActiveWorkbook.SendMail Destinataires1, Sujet1, AccuseReception
    'ActiveWorkbook.SendMail Destinataires2, Sujet2, AccuseReception
    'ActiveWorkbook.Close False
     
    ' ------------------------------------------------
     
    ' Transforme le tableau Destinataires1 et Destinataires1 en deux chaines séparées
    ' par des points-virgules:
    Dim Dest1 As String
    Dim Dest2 As String
    Dim i As Integer
    For i = 1 To UBound(Destinataires1) - 1
        Dest1 = Dest1 & IIf(Dest1 = "", "", ";") & Destinataires1(i, 0)
    Next i
    For i = 1 To UBound(Destinataires2) - 1
        Dest2 = Dest2 & IIf(Dest2 = "", "", ";") & Destinataires2(i, 0)
    Next i
     
    ' Transforme la plage CR réunion 1 en une mémoire et génère le message:
    Dim CR1 As String
    Call Mail_PlageExcel(CR1, Worksheets("CR réunion 1").Range("A1:N49"), Alignement_Gauche)
    Call Mail_Envoyer(CR1, False, Dest1, Sujet1) ' -> False pour afficher, ou True pour envoyer.
     
    ' Idem pour la plage CR réunion 2:
    Dim CR2 As String
    Call Mail_PlageExcel(CR2, Worksheets("CR réunion 2").Range("A1:N49"), Alignement_Gauche)
    Call Mail_Envoyer(CR2, False, Dest2, Sujet2) ' -> False pour afficher, ou True pour envoyer.
     
    End Sub

    Attention : les cellules sont mémorisées d'après le contenu de la cellule, sans prendre en compte le texte qui déborde de la cellule, affiché à l'écran mais que ne sera pas mémorisé. Il faut donc fusionner les cellules pour que l'affichage corresponde bien au contenu. Ce que j'ai fait dans le fichier joint.

    CR réunions 1 et 2.xlsm

    Vous pouvez aussi joindre un fichier dans le message Outlook, ce n'est pas compliqué alors je vous laisse faire, c'est comme cela que vous progresserez.
    Cordialement.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2022
    Messages : 9
    Par défaut
    Merci beaucoup Laurent !
    Cela fonctionne. Petite dernière question : quand j'ajoute dans le compte rendu une zone "image" qui vient copier le contenu d'un autre fichier Excel, alors le mail qui se génère se génère bien avec l'image mais elle n'est pas lisible. j'ai un message d'erreur comme quoi c'est impossible a afficher.
    j'ai essayé en collant juste une image et j'ai essayé en créant un lien vers des graphiques ; même résultat.

    en tout cas merci, car cela répond bien à mon besoin initial !

    Et, oui, je suis d'accord je vais me pencher tête reposer sur tout le module importe "Mail" pour comprendre son fonctionnement (j'ai vu qu'il y avait des commentaire pour la partie insertion de PJ).

    Bonne journée.

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

Discussions similaires

  1. [XL-2016] Envoyer une feuilles du classeur actif en pièce jointe via CDO
    Par brunohampert dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/06/2020, 03h11
  2. [WD-2007] Envoi d'un document word par mail sans pièce jointe
    Par Alexou. dans le forum VBA Word
    Réponses: 0
    Dernier message: 01/08/2012, 14h24
  3. Dupliquer une feuille excel par macro
    Par eleve36 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/02/2007, 23h01
  4. nommer une feuille excel par la date du jour.
    Par Bourezak dans le forum Access
    Réponses: 3
    Dernier message: 22/01/2007, 15h22

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