VBA - Envoi d'un courriel automatique d'un segment

Icemansuperced Messages postés 96 Statut Membre -  
Icemansuperced Messages postés 96 Statut Membre -
Bonjour a tous,
j'espere que vous avez passé un bon weekend et merci d'avance pour le temps que vous accorderai a ma question..
Voici ce que je veux faire, j'ai un dashboard qui comporte trois graphiques et que j'ai un segment de tout le personnel. Donc, lorsque je clique sur un nom dans le segment, les trois graphiques s'actualise pour la personne donné. De plus, dans jai un TCD qui s'actualise aussi et qui indique dans le cellule Z3 le courriel a lequel je voudrais envoyer seulement la situation trier par le segment (comme un screenshot si on veut)...
Je ne suis pas super bon dans les macro et j'ai suivi une formation qui ma mené a cela ... mais cela ne fonctionne pas et je crois qu'il me manqué des infos ...

Sub envoiClasseur()
Dim Fichier As Variant
'le programme ouvre une fenêtre où l'on sélectionne le fichier'
Fichier = Application.GetOpenFilename("Tous les fichiers(*.*),*.*")

MsgBox Fichier
'ici on demande d'utiliser Outlook comme client de messagerie'
Dim MaMessagerie As Object
Dim MonMessage As Object
Set MaMessagerie = CreateObject("Outlook.application")
Set MonMessage = MaMessagerie.Createitem(0)

'ici nous définissions les champs du mail'
'entre guillemet il faut indiquer les adresses mail'
MonMessage.to = " = sub EnterValue (Cell(5,26))"

'ici nous commençons la rédaction du mail
MonMessage.attachments.Add Fichier

'sujet du mail'
MonMessage = "Situation générale de l'apprenant pour le mois"

'Corps du mail'
contenu = "***The English follows the French***"
contenu = contenu & Chr(10) & Chr(13)
'les caractères Chr indique un saut de ligne'
contenu = contenu & "Bonjour" & Chr(10) & Chr(13)
contenu = contenu & "Voici trois graphiques résumant la situation de votre apprenant pour janvier. Vous trouverez un premier graphique indiquant le nombre absence par jour de votre employé. Un deuxième graphique montrant le nombre de journée de recouvrement. Le troisième graphique démontrant le nombre de total de retard. Si vous n'êtes plus le directeur de l'apprenant, s'il-vous-plait nous avisez ou pour toute autre erreur. Si vous avez des questions veuillez consulter le document des mesures de contrôles " & Chr(10) & Chr(13)
contenu = contenu & "Hello" & Chr(10) & Chr(13)
contenu = contenu & "You will find three graphics illustrating the situation of your learner for the month of January. The first graphic indicates the number of absences per days of your employee. The second graphic illustrates the number of day of absence. The third graphic illustrates the total time of delay. If you're no longer the manager of the learner, please notify us. If you've any question please consult the document bellows on control measures" & Chr(10) & Chr(13)
contenu = contenu & "CSC"
MonMessage.body = "contenu"

'ici on provoque l'envoi du mail et de sa pièce jointe'
MonMessage.Send

'réinitialisation de la messagerie'
Set MaMessagerie = Nothing

'Boite de dialogue qui confirme l'envoi du message et de sa pièce jointe'
MsgBox "Votre mail a bien été envoyé"

End Sub

6 réponses

  1. thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention   722
     
    Bonjour,

    ceci ne correspond pas une liste de destinataires :
     'entre guillemet il faut indiquer les adresses mail'
    MonMessage.to = " = sub EnterValue (Cell(5,26))" 

    vous devez avoir :
    MonMessage.to = "adresse1;adresse2;..." 
    0
    1. Icemansuperced Messages postés 96 Statut Membre
       
      Bonjour,
      okay, je comprend. Par contre cela ne ressous pas ma problématique, car je ne veux pas envoyer le document a tout le monde... je veux juste envoyer le dashboard de l'apprenant a lui meme et non a tout le monde.
      0
  2. thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention   722
     
    Pour cela, il faut disposer quelque part de l'adresse mail de l'apprenant.
    0
    1. Icemansuperced Messages postés 96 Statut Membre
       
      bien je l'ai mentionné l'adresse courriel apparait dans la cellule z3 ... a moins que vous voulez dire quelque chose ... que je dois inséré tout les addresses courriels dans la macro
      0
  3. thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention   722
     
    Pour faire référence au contenu de cette cellule, il faut indiquer dans quelle feuille de quel classeur elle se trouve :
     
    MonMessage.to =  Workbooks(?).Sheets(?).Cells(3,"Z")
    0
    1. Icemansuperced Messages postés 96 Statut Membre
       
      ca fonctionne toujours... -_- est ce que je peux tenvoyer le dossier
      0
    2. Icemansuperced Messages postés 96 Statut Membre
       
      Bonjour Thev,
      si par exemple, je veux que cela soit une MAcro que je peux active sur plus d'un document, est -ce que cela peut foncitonné sans qu'il n'aille rien de coder dans Workbook? exemple si le courriel est dans Feuil1 et la cellule T8
      0
    3. Icemansuperced Messages postés 96 Statut Membre
       
      MonMEssage.to = Workbook . Sheets(feuil1). Cells(8,"T")
      0
  4. thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention   722
     
    Oui
    0
    1. Icemansuperced Messages postés 96 Statut Membre
       
      parfait je t'envoie cela demain !!! merci d'avance
      0
    2. Icemansuperced Messages postés 96 Statut Membre
       
      Bonjour Thev,
      désolé du délai... voici le fichier joint: https://www.cjoint.com/c/HChq7cjPSLJ Un énorme merci déjà pour le temps consacré à ma question
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention   722
     
    Un petit souci. Lien non disponible ......
    0
    1. Icemansuperced Messages postés 96 Statut Membre
       
      okay je vais ressayer ce soir !!! étrange
      0
  7. thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention   722
     
    Bonjour,

    Insérer ce code dans la feuille "DASHBOARD_JANVIER"

    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Dim apprenant As Range, email As Range
    Dim sh_temp As Worksheet, contenu As String, graphe As ChartObject

    '// Assignation apprenant et adresse mail associée
    With Target
    Set apprenant = .VisibleFields(1).DataRange
    Set email = .VisibleFields(2).DataRange
    End With

    '// Confirmation envoi du mail
    If Not MsgBox("Souhaitez-vous envoyer le graphique à " & apprenant & " ?", 36, "Confirmation") = 6 Then Exit Sub

    '// création feuille temporaire et copie des graphique à envoyer sur la feuille temporaire
    Sheets.Add After:=Sheets(Sheets.Count): Set sh_temp = Sheets(Sheets.Count): sh_temp.Activate
    For Each graphe In Me.ChartObjects
    graphe.Copy
    sh_temp.Range(graphe.TopLeftCell.Address).PasteSpecial (xlPasteAll)
    Next graphe

    '// Création mail et envoi ......................................................................................
    With sh_temp
    With .MailEnvelope
    'Crée le contenu du message avec insertion de sauts de ligne
    contenu = "***The English follows the French***"
    contenu = contenu & Chr(10) & Chr(13)
    'les caractères Chr indique un saut de ligne'
    contenu = contenu & "Bonjour" & Chr(10) & Chr(13)
    contenu = contenu & "Voici trois graphiques résumant la situation de votre apprenant pour janvier. Vous trouverez un premier graphique indiquant le nombre absence par jour de votre employé. Un deuxième graphique montrant le nombre de journée de recouvrement. Le troisième graphique démontrant le nombre de total de retard. Si vous n'êtes plus le directeur de l'apprenant, s'il-vous-plait nous avisez ou pour toute autre erreur. Si vous avez des questions veuillez consulter le document des mesures de contrôles " & Chr(10) & Chr(13)
    contenu = contenu & "Hello" & Chr(10) & Chr(13)
    contenu = contenu & "You will find three graphics illustrating the situation of your learner for the month of January. The first graphic indicates the number of absences per days of your employee. The second graphic illustrates the number of day of absence. The third graphic illustrates the total time of delay. If you're no longer the manager of the learner, please notify us. If you've any question please consult the document bellows on control measures" & Chr(10) & Chr(13)
    contenu = contenu & "CSC"
    .Introduction = contenu

    'Destinataires, objet et envoi
    With .Item
    .To = email
    .CC = ""
    .BCC = ""
    .Subject = "Situation générale de l'apprenant pour le mois"
    .Send
    End With
    End With
    End With

    '// Attente complétude opération d'envoi du mail
    DoEvents

    '// suppression feuille temporaire et sauvegarde classeur
    Application.DisplayAlerts = False
    sh_temp.Delete
    ThisWorkbook.Save
    Application.DisplayAlerts = True

    End Sub


    ci-joint fichier
    https://www.cjoint.com/c/HCloADPuFGz

    0
    1. Icemansuperced Messages postés 96 Statut Membre
       
      Bonjour Thev!!!
      un gros merci pour ton travail, par contre il a un soucis... dans le courriel que cela envoie, il y a environ 200 ligne de codification qui est envoyé...
      deplus si j'apporte cette macro a un autre document, cela va t'il envoyé toutes les graphiques ? ou je dois rajouté ceux que je veux a la macro
      0
      1. thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention   722 > Icemansuperced Messages postés 96 Statut Membre
         
        dans le courriel que cela envoie, il y a environ 200 ligne de codification qui est envoyé...
        Curieux. Je n'ai pas eu ce problème dans les tests que j'ai effectués.

        deplus si j'apporte cette macro a un autre document, cela va t'il envoyé toutes les graphiques ?
        La réponse est oui.
        Si par exemple, vous ne voulez envoyer que le premier graphique, il faudra modifier cette partie du code ainsi
            '// création feuille temporaire et copie des graphique à envoyer sur la feuille temporaire
            Sheets.Add After:=Sheets(Sheets.Count): Set sh_temp = Sheets(Sheets.Count): sh_temp.Activate
            With Me.ChartObjects("Graphique 1")
                    .Copy
                    sh_temp.Range(.TopLeftCell.Address).PasteSpecial (xlPasteAll)
            End With
        
        0
      2. Icemansuperced Messages postés 96 Statut Membre > thev Messages postés 2008 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonjour,
        parfait je ne voyais par le Graphique 1 cela a fonctionné merci beaucoup!!!
        0