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 :

Ajout d'une feuille active par mail [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Ajout d'une feuille active par mail
    Bonjour à tous,
    Je suis plus que novice en VBA et nouveau sur ce Forum.
    Je voudrais tout d’abord vous remercier de m’accueillir parmi vous.
    Voici mon problème.
    j'ai réussi à écrire (avec l'aide du Net) pour pouvoir joindre une feuille active sous format PDF par mail, mais je n'arrive plus à le faire sous forma XLS. j'étais parvenu et comme un bleu, j'ai réécrit sur mon fichier.
    Tout ce que j'ai trouvé me renvoie sur la copie de la feuille, la sauvegarde pour enfin pouvoir joindre le fichier. Le problème est que ce classeur devra être utilisé sur différents ordinateurs et différents OS, d'où la difficulté de mettre un chemin commun.
    L'autre problème est que la feuille principale d’où provient celle que je veux joindre à des formules et je dois passer par un copier-coller de valeur afin de garder mes données.
    Voilà, j'espère avoir été le plus clair possible.....
    Merci beaucoup pour votre aide.

    Voici ce que j'utilise et qui fonctionne en PDF :

    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
    Sub envoiemail()
    '
    ' envoiemail Macro
     
     Dim chemin As String, fichier As String
     
        chemin = ThisWorkbook.Path
        fichier = chemin & "\" & "fiche-prépa" & Range("A3") & ".xls"
     
    MsgBox "La fiche est prêt à être envoyé."
     
         Sheets("PREPA").Select
        Sheets("PREPA").Copy
        Range("A1:F50").Select
        Selection.Copy
        ActiveWindow.SmallScroll Down:=-9
        Range("A1:F1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("E19:F19").Select
     
        Dim MonOutlook As Object
        Dim MonMessage As Object
     
        Set MonOutlook = CreateObject("Outlook.Application")
        Set MonMessage = MonOutlook.CreateItem(0)
            CurFile = ThisWorkbook.Path & "\" & "PREPA.Pdf"
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
     
            MonMessage.To = ""
            MonMessage.Cc = ""
            MonMessage.Subject = "Fiche Prépa pour" & " " & Range("C2")
                   MonMessage.body = "Bonjour," & _
                        Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prepa ." & _
                        Chr(13) & Chr(13) & "Bonne réception."
            MonMessage.Attachments.Add CurFile
     
                    MonMessage.display
     
     
        ActiveWorkbook.Close
     
        Set MonOutlook = Nothing
    '
     
    '
    End Sub

  2. #2
    Expert confirmé Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Points : 4 299
    Points
    4 299
    Par défaut
    Salut,

    Tu peux aller voir là :
    http://www.rondebruin.nl/win/s1/outlook/amail2.htm

    Dans ce code, il s enregistrent le doc dans le dossier "Temporaire".

    Tu peux aussi utiliser un truc de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin = thisworkbook.path
    Et tu enregistres dans le dossier "Chemin" Ainsi, le fichier à joindre sera automatiquement enregistré dans le même dossier que le document qui exécute la macro.
    Jérôme

    " Je pense donc je suis. Tu es donc j'apprends ". (GCM)

    Si ce message vous à aidé, merci de cliquer sur . Si ce message est résolu, cliquez sur .

  3. #3
    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

    Essai comme ça, je n'ai pas testé le code, il faudra peut-être faire un peu de débugage
    Tu as deux version, une avec PDF et l'autre avec xls, il me semble que c'est ce que tu cherchais à faire.

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    Option Explicit
     
    Sub envoiemailPDF()
    '
    ' envoiemail Macro
     
    Dim CurFile As String
    Dim NewSheet As Worksheet
    Dim MonOutlook As Object
    Dim MonMessage As Object
     
     
        MsgBox "La fiche est prêt à être envoyé."
     
        'On point la feuille sur laquelle on travaille
        With ThisWorkbook.Sheets("PREPA")
            'On cré une copie de cette feuille à la fin du classeur
            .Copy after:=ThisWorkbook.Worksheets.Count
            'On recopie les données en cassant les liens/formules
            .Range("A1:F50").Copy
            'Inutile de mettre tous les paramètre, lorsqu'ils sont entre crochet, ils sont facultatif
            'Il suffit de regarder dans l'aide VBA pour connaitre la valeur par défaut des paramètre facultatifs
            'Ici les 3 derniers sont par défaut à False
            NewSheet.Range("A1").PasteSpecial xlPasteValues
     
     
           Set MonOutlook = CreateObject("Outlook.Application")
           Set MonMessage = MonOutlook.CreateItem(0)
           CurFile = ThisWorkbook.Path & "\" & "PREPA.Pdf"
           'Ici l'aide ne fourni pas les valeur par defaut...
           NewSheet.ExportAsFixedFormat xlTypePDF, CurFile, xlQualityStandard, False, False, False
           With MonMessage
               .To = ""
               .Cc = ""
               .Subject = "Fiche Prépa pour " & NewSheet.Range("C2")
               .body = "Bonjour," & _
                       Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prepa ." & _
                       Chr(13) & Chr(13) & "Bonne réception."
               .Attachments.Add CurFile
               .display
           End With
     
           'On empêche Excel de nous afficher un popup pour nous demander si on est sûr de vouloir supprimer un onglet
           Application.DisplayAlerts = False
           'On supprime l'onglet provisoir
           NewSheet.Delete
           'On réactive les alertes
           Application.DisplayAlerts = True
     
           Set MonOutlook = Nothing
           Set MonMessage = Nothing
        End With
    '
    End Sub
     
    Sub envoiemailXLS()
    '
    ' envoiemail Macro
     
    Dim Chemin As String, Fichier As String, CurFile As String
    Dim NewSheet As Worksheet, NewClasseur As Workbook
    Dim iSheet As Byte
    Dim MonOutlook As Object
    Dim MonMessage As Object
     
        '?? Menteur, il n'y a encore rien de fait ;)
        MsgBox "La fiche est prêt à être envoyé."
     
        'On point la feuille sur laquelle on travaille
        With ThisWorkbook.Sheets("PREPA")
            'On prépare le chemin du fichier
            Chemin = ThisWorkbook.Path
            Fichier = Chemin & "\" & "fiche-prépa" & Range("A3") & ".xls"
            'On crée un nouveau classeur
            Set NewClasseur = Workbooks.Add
            'On cré une copie de cette feuille dans le nouveau classeur
            'On la place au début des feuille existante
            .Copy NewClasseur.Worksheets(1)
            'On pointe cette nouvelle feuille
            'On a placé la nouvelle feuille avant la 1ère, elle devient donc la 1ère du classeur
            Set NewSheet = NewClasseur.Worksheets(1)
            'On supprime les autres feuilles vierges éventuelles
            'On empêche Excel de nous afficher un popup pour nous demander si on est sûr de vouloir supprimer un onglet
            Application.DisplayAlerts = False
             For iSheet = NewClasseur.Worksheets.Count To 2 Step -1
                 NewClasseur.Worksheets(iSheet).Delete
             Next
            'On réactive les alertes
            Application.DisplayAlerts = True
            'On recopie les données en cassant les liens/formules
            .Range("A1:F50").Copy
            'Inutile de mettre tous les paramètre, lorsqu'ils sont entre crochet, ils sont facultatif
            'Il suffit de regarder dans l'aide VBA pour connaitre la valeur par défaut des paramètre facultatifs
            'Ici les 3 derniers sont par défaut à False
            NewSheet.Range("A1").PasteSpecial xlPasteValues
            'On enregistre ce nouveau document
            'Si un document existe déjà, il sera écrasé sans afficher de message... je crois (à vérifier ;) )
            Application.DisplayAlerts = False
            'On enregistre et on ferme
            NewClasseur.Close True, Fichier
            Application.DisplayAlerts = True
     
     
            'On crée une instance d'outlook et un nouveau document
            Set MonOutlook = CreateObject("Outlook.Application")
            Set MonMessage = MonOutlook.CreateItem(0)
            CurFile = ThisWorkbook.Path & "\" & "PREPA.Pdf"
            'Ici l'aide ne fourni pas les valeur par defaut...
            NewSheet.ExportAsFixedFormat xlTypePDF, CurFile, xlQualityStandard, False, False, False
            With MonMessage
                .To = ""
                .Cc = ""
                .Subject = "Fiche Prépa pour " & .Range("C2")
                .body = "Bonjour," & _
                        Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prepa ." & _
                        Chr(13) & Chr(13) & "Bonne réception."
                .Attachments.Add Fichier
                .display
            End With
     
            Set MonOutlook = Nothing
            Set MonMessage = Nothing
        End With
    '
    End Sub
    ++
    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

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    bonjour Qwaz, Bonjour Jerome,

    Merci de vos réponses. je vérifie tout cela au plus vite et revient vers vous, vous dire quoi. Merci déjà de votre implication.

    a +

    Pedro


    Citation Envoyé par jerome.vaussenat Voir le message
    Salut,

    Tu peux aller voir là :
    http://www.rondebruin.nl/win/s1/outlook/amail2.htm

    Dans ce code, il s enregistrent le doc dans le dossier "Temporaire".

    Tu peux aussi utiliser un truc de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin = thisworkbook.path
    Et tu enregistres dans le dossier "Chemin" Ainsi, le fichier à joindre sera automatiquement enregistré dans le même dossier que le document qui exécute la macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Salut
     
    Essai comme ça, je n'ai pas testé le code, il faudra peut-être faire un peu de débugage
    Tu as deux version, une avec PDF et l'autre avec xls, il me semble que c'est ce que tu cherchais à faire.

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut code final
    Bonjour à tous,

    voilà, après différent test et les pistes que vous m'avez donnés, j'ai finalement trouver une solution. Ce n'est pas celle que je voulais au départ, mais elle servira tout de même.
    Je la met a disposition au cas ou cela servira à d'autre.
    Pour explication de ce que je voulais faire :
    2 feuilles, une qui est complété par un utilisateur et une autre, formaté pour présentation finale dont les donnée sont copiés de la première et qui servira plus tard. Finalement c'est le classeur avec les 2 feuilles qui sont envoyées en excel (et non juste la 2ème) vers un service qui lui complète d'autres informations et renvoi uniquement la feuille 2 en PDF vers un 2ème service.

    Merci encore et bon week-end
    Pedro
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    Sub envoiemailXLS()
     
    '
    ' envoiemail Macro
     
     Dim chemin As String, fichier As String
    'le fichier est sélectionné
     
        chemin = ThisWorkbook.Path
        fichier = chemin & "\" & "fiche-prépa" & Range("A3") & ".xls"
    'message pour prévenir que les infos noté dans le fichier sont prête à être envoyées
     
    MsgBox "La fiche est prêt à être envoyé."
    'la feuille (fiche de préparation) est sélectionnée, copiée dans un autre classeur et on ne garde que les valeurs
     
        Sheets("PREPA").Select
        Sheets("PREPA").Copy
    'Supprimer la protection de la feuille
        ActiveSheet.Unprotect Password:="xxxxx"
        Range("A1:F50").Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
    'reactiver la protection de la feuille
        ActiveSheet.Protect Password:="xxxxx", DrawingObjects:=True, Contents:=True, Scenarios:=True
        Range("E19:F19").Select
    'on prépare pour l'envoie du mail et on fait appel à l'app de messagerie, avec les destinataire, le sujet, le corp du message et le fichier joint
     
     
        Dim MonOutlook As Object
        Dim MonMessage As Object
     
        Set MonOutlook = CreateObject("Outlook.Application")
        Set MonMessage = MonOutlook.CreateItem(0)
     
     
            MonMessage.To = ""
            MonMessage.Subject = "Fiche Prépa pour" & " " & Range("C2")
            MonMessage.body = "Bonjour," & _
                        Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prepa ." & _
                        Chr(13) & Chr(13) & "Bonne réception."
            MonMessage.Attachments.Add ThisWorkbook.FullName
            MonMessage.display
     
     
        ActiveWorkbook.Close
     
    End Sub
    Sub envoiemailPDF()
    '
    ' envoiemail Macro
     
     Dim chemin As String, fichier As String
     
        chemin = ThisWorkbook.Path
        fichier = chemin & "\" & "fiche-prépa" & Range("A3") & ".xls"
     
    MsgBox "La fiche est prêt à être envoyé."
     
         Sheets("PREPA").Select
            Dim MonOutlook As Object
        Dim MonMessage As Object
     
        Set MonOutlook = CreateObject("Outlook.Application")
        Set MonMessage = MonOutlook.CreateItem(0)
            CurFile = ThisWorkbook.Path & "\" & "PREPA.Pdf"
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
     
            MonMessage.To = ""
            MonMessage.Cc = ""
            MonMessage.Subject = "Fiche Prépa pour" & " " & Range("C2")
                   MonMessage.body = "Bonjour," & _
                        Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prepa ." & _
                        Chr(13) & Chr(13) & "Bonne réception."
            MonMessage.Attachments.Add CurFile
     
                    MonMessage.display
     
     
     
        Set MonOutlook = Nothing
    '
     
    '
    End Sub

  6. #6
    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

    [Edit]
    Oupss, il y avait 2 codes... pardon. Du coup j'ai repris les deux codes, XLS ne faisait pas ce que tu attendais de lui, voir les commentaires dans le code .
    Entre ton message et la code, il y a une sacrée différence. Tu dis avoir choisi l'option fichier excel avec les 2 feuilles alors que ton code envoie le PDF

    [/Edit]

    Essaies comme ça pour envoyer le classeur avec un seul onglet
    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
    Sub envoiemailXLS()
    '
    ' envoiemail Macro
    Dim Chemin As String, Fichier As String
    Dim NewSheet As Worksheet
    Dim MonOutlook As Object
    Dim MonMessage As Object
    Dim SujetMail As String
     
     
    'le fichier est sélectionné
     
        With ThisWorkbook.Sheets("PREPA")
            Chemin = ThisWorkbook.Path
            Fichier = Chemin & "\" & "fiche-prépa" & .Range("A3") & ".xls" 'Attention au "." devant Range
            'message pour prévenir que les infos noté dans le fichier sont prête à être envoyées
     
            MsgBox "La fiche est prêt à être envoyé."
     
            'On copie la feuille dans un nouveau classeur
            .Copy
            'On pointe la nouvelle feuille (et implicitement le classeur qui la contient)
            Set NewSheet = ActiveSheet
        End With
     
        With NewSheet
            'Supprimer la protection de la feuille
            .Unprotect Password:="xxxxx"
            'On écrase les formules
            .Range("A1:F50").Copy
            .PasteSpecial xlPasteValues
            .CutCopyMode = False
            'reactiver la protection de la feuille
            .Protect Password:="xxxxx", DrawingObjects:=True, Contents:=True, Scenarios:=True
            '?? vraiment utile? jusqu'ici la selection de l'utilisateur au départ n'a pas changée. A toi de voir
            '.Range("E19:F19").Select
            'On enregistre le document
            'On désactive les alertes pour ne pas avoir de message en cas de fichier déjà présent.
            'Excel écrasera un éventuel fihcier déjà présent sans nous demander (attention donc ;) )
            Application.DisplayAlerts = False
            .Workbook.SaveAs Fichier
            Application.DisplayAlerts = True
            'On prépare le sujet du mail
            SujetMail = "Fiche Prépa pour " & .Range("C2")
        End With
     
        'on prépare pour l'envoie du mail et on fait appel à l'app de messagerie, avec les destinataire, le sujet, le corp du message et le fichier joint
     
        Set MonOutlook = CreateObject("Outlook.Application")
        Set MonMessage = MonOutlook.CreateItem(0)
     
        MonMessage.To = ""
        MonMessage.Subject = SujetMail
        MonMessage.body = "Bonjour," & _
                    Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prepa ." & _
                    Chr(13) & Chr(13) & "Bonne réception."
        MonMessage.Attachments.Add Fichier 'ThisWorkbook.FullName 'Si tu mets ça, c'est ton classeur original avec toutes les feuilles et non la copie qu'on vient de créer au dessus
        MonMessage.display
     
     
        ActiveWorkbook.Close
     
    End Sub
    Et pour le PDF
    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
    Sub envoiemailPDF()
    '
    ' envoiemail Macro
     
    Dim Chemin As String, Fichier As String
    Dim PDFFile As String
    Dim MonOutlook As Object
    Dim MonMessage As Object
    Dim SujetMail As String
     
     
        With ThisWorkbook.Sheets("PREPA")
            Chemin = ThisWorkbook.Path
            Fichier = Chemin & "\" & "fiche-prépa" & Range("A3") & ".pdf" 'Attention à l'extension et au "." devant Range
            'On prépart le PDF
            .ExportAsFixedFormat xlTypePDF, Fichier, xlQualityStandard, False, False, False
            'On prépare le sujet du mail
            SujetMail = "Fiche Prépa pour " & .Range("C2").Value
     
        End With
     
        MsgBox "La fiche est prêt à être envoyé."
     
     
        Set MonOutlook = CreateObject("Outlook.Application")
        Set MonMessage = MonOutlook.CreateItem(0)
     
        MonMessage.To = ""
        MonMessage.Cc = ""
        MonMessage.Subject = SujetMail
        MonMessage.body = "Bonjour," & _
             Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prepa ." & _
             Chr(13) & Chr(13) & "Bonne réception."
        MonMessage.Attachments.Add Fichier
     
        MonMessage.display
     
        Set MonOutlook = Nothing
     
    End Sub
    La partie Envoie de mail pourrait être traité dans une autre fonction en lui passant les informations en paramètres (Chemin de la pièce jointe, sujet du mail et contenu texte du mail)
    Ca donnerait un truc comme ça, il est bien sûr possible de modifier un peu pour ajouter la liste des déstinataires

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    Sub envoiemailXLS()
    '
    ' envoiemail Macro
    Dim Chemin As String, Fichier As String
    Dim NewSheet As Worksheet
    Dim SujetMail As String
    Dim CorpsMessage As String
     
     
    'le fichier est sélectionné
     
        With ThisWorkbook.Sheets("PREPA")
            Chemin = ThisWorkbook.Path
            Fichier = Chemin & "\" & "fiche-prépa" & .Range("A3") & ".xls" 'Attention au "." devant Range
     
            'On copie la feuille dans un nouveau classeur
            .Copy
            'On pointe la nouvelle feuille (et implicitement le classeur qui la contient)
            Set NewSheet = ActiveSheet
        End With
     
        With NewSheet
            'Supprimer la protection de la feuille
            .Unprotect Password:="xxxxx"
            'On écrase les formules
            .Range("A1:F50").Copy
            .PasteSpecial xlPasteValues
            .CutCopyMode = False
            'reactiver la protection de la feuille
            .Protect Password:="xxxxx", DrawingObjects:=True, Contents:=True, Scenarios:=True
            '?? vraiment utile? jusqu'ici la selection de l'utilisateur au départ n'a pas changée. A toi de voir
            '.Range("E19:F19").Select
            'On enregistre le document
            'On désactive les alertes pour ne pas avoir de message en cas de fichier déjà présent.
            'Excel écrasera un éventuel fihcier déjà présent sans nous demander (attention donc ;) )
            Application.DisplayAlerts = False
            .Workbook.SaveAs Fichier
            Application.DisplayAlerts = True
            'On prépare le sujet du mail
            SujetMail = "Fiche Prépa pour " & .Range("C2")
            CorpsMessage = "Bonjour," & Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prépa " & .Range("C2").Value & ". " & Chr(13) & Chr(13) & "Bonne réception."
        End With
     
        'message pour prévenir que les infos noté dans le fichier sont prête à être envoyées
        MsgBox "La fiche est prêt à être envoyé.", vbOKCancel, "Création du mail?"
     
        'on prépare pour l'envoie du mail et on fait appel à l'app de messagerie, avec les destinataire, le sujet, le corp du message et le fichier joint
        CreationMail SujetMail, CorpsMessage, Fichier
     
    End Sub
     
     
     
    Sub envoiemailPDF()
    '
    ' envoiemail Macro
     
    Dim Chemin As String, Fichier As String
    Dim PDFFile As String
    Dim SujetMail As String
    Dim CorpsMessage As String
     
     
        With ThisWorkbook.Sheets("PREPA")
            Chemin = ThisWorkbook.Path
            Fichier = Chemin & "\" & "fiche-prépa" & Range("A3") & ".pdf" 'Attention à l'extension et au "." devant Range
            'On prépart le PDF
            .ExportAsFixedFormat xlTypePDF, Fichier, xlQualityStandard, False, False, False
            'On prépare le sujet du mail
            SujetMail = "Fiche Prépa pour " & .Range("C2").Value
            CorpsMessage = "Bonjour," & Chr(13) & Chr(13) & "Veuillez trouver, ci-joint, la fiche prépa " & .Range("C2").Value & ". " & Chr(13) & Chr(13) & "Bonne réception."
        End With
     
        MsgBox "La fiche est prêt à être envoyé.", vbOKCancel, "Création du mail?"
     
        'On ouvre le mail
        CreationMail SujetMail, CorpsMessage, Fichier
     
     
    End Sub
     
    Sub CreationMail(SujetMail As String, CorpsMessage As String, Optional CheminPJ As String)
    Dim MonOutlook As Object
    Dim MonMessage As Object
     
        Set MonOutlook = CreateObject("Outlook.Application")
        Set MonMessage = MonOutlook.CreateItem(0)
     
        MonMessage.To = ""
        MonMessage.Cc = ""
        MonMessage.Subject = SujetMail
        MonMessage.body = CorpsMessage
        MonMessage.Attachments.Add CheminPJ
     
        MonMessage.display
     
        Set MonOutlook = Nothing
    End Sub
    Un conseil, prend plus de soin à l'indentation de ton code, c'est beaucoup plus pratique à maintenir et le code est bien plus lisible.

    ++
    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

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour Qwaz,

    merci de ton aide.
    J'ai une erreur au niveau du "cutcopymode" il me donne erreur de compilation.
    Comme expliqué dans mon premier post, je suis vraiment novice dans la programmation, tout ce que j'essaie ne se fait que par des recherches et test avec l'aide du net. D'où, le manque de clarté et tout ce qui va avec. Je me doute bien que sans un peu de connaissances ça ne va pas aller, mais bon j'essaie....juste pour le plaisir d'arriver à quelque chose.
    Au niveau de l'envoi unique de la feuille Excel (pas le classeur), j'ai passé beaucoup d'heures à tester beaucoup de choses mais à chaque fois j'avais un message qu'aucun fichier n'était sélectionné, sauf pour le PDF, aller comprendre pourquoi. Je me suis donc résigné à envoyer le classeur et après la feuille en PDF. il serait tellement plus facile d'enregistrer cette feuille et après l'envoyer, mais comme je voudrais que cela fonctionne sur différentes plateformes, je ne suis pas certain que cela fonctionne en enregistrant la feuille.
    Bon dès que j'ai un peu de temps devant moi je replonge dans la code que tu m'as envoyé et voir pourquoi cette erreur.

    Très bonne journée et bon weekend.
    Pedro

  8. #8
    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

    Je suis aller un peu vite
    remplace la ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.CutCopyMode = False
    Comme expliqué dans mon premier post, je suis vraiment novice dans la programmation, tout ce que j'essaie ne se fait que par des recherches et test avec l'aide du net. D'où, le manque de clarté et tout ce qui va avec. Je me doute bien que sans un peu de connaissances ça ne va pas aller, mais bon j'essaie....juste pour le plaisir d'arriver à quelque chose.
    Aucun soucis, je n'avais pas l'intention de te faire un reproche, l'indentation (je suppose que c'est de ça qu'il s'agit) est vraiment une chose importante pour bien organiser son code. Les connaissances en programmation nécessaire pour le faire ne sont pas très élevées, il faut juste bien s'organiser et être rigoureux.
    Même si au cours du développement tu n'arrives pas à t'y tenir, il est important dès que tu rencontres un problème ou dès que tu veux partager ton code de refaire l'indentation avant tout autre chose. Bien souvent une partie des problème se résolvent, surtout lorsqu'il y a des With dans le code.

    Au niveau de l'envoi unique de la feuille Excel (pas le classeur), j'ai passé beaucoup d'heures à tester beaucoup de choses mais à chaque fois j'avais un message qu'aucun fichier n'était sélectionné,
    Oui car à aucun moment tu ne sauvegardais ton nouveau classeur
    Tu déterminais bien son Chemin et son Nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        chemin = ThisWorkbook.Path
         fichier = chemin & "\" & "fiche-prépa" & Range("A3") & ".xls"
    Mais dans la suite du code, à aucun moment tu ne créais ton fichier sur le disque dur (SaveAs)

    Par la suite, au moment de lier ton fichier à ton mail, tu utilisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonMessage.Attachments.Add ThisWorkbook.FullName
    Hors ThisWorkbook fait référence au classeur qui contient le code qui est en train de s’exécuter, donc à ton original.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il serait tellement plus facile d'enregistrer cette feuille et après  l'envoyer, mais comme je voudrais que cela fonctionne sur différentes  plateformes, je ne suis pas certain que cela fonctionne en enregistrant  la feuille.
    Le code proposé dans mon dernier message devrait le faire, il faudra faire un teste sur les "autres plateformes" mais logiquement c'est un code basique, il ne devrait pas y avoir de problème de compatibilité.

    Bonne journée et bonne lecture/compréhension.
    Je pense plus intéressant de comprendre le code que de juste avoir un code qui fait le boulot. Suivant cette philosophie, n'hésite pas à poser des questions si tu ne comprends pas des parties du code, je me ferais un plaisir d'y répondre .

    ++
    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

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

Discussions similaires

  1. [XL-2007] Impossible d'ajouter du texte dans une cellule d'une feuille créée par une macro.
    Par guillaume7684 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2017, 20h55
  2. Problème d'envoi feuille active par mail
    Par tophe45300 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 29/10/2015, 19h20
  3. Ajouter un code VBA dans une feuille Excel par macro
    Par arnaud03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/09/2015, 03h57
  4. [Mail] envoyer une page web par mail
    Par Zen_Fou dans le forum Langage
    Réponses: 8
    Dernier message: 06/04/2006, 17h06
  5. [MySQL] Envoi identifiant d'une zone membre par mail
    Par vinche999 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/01/2006, 23h12

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