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 :

MACRO envoyer par mail copie d'un tableau après filtre


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    assitante achat
    Inscrit en
    Août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : assitante achat
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut MACRO envoyer par mail copie d'un tableau après filtre
    Bonjour à tous et avant tout merci infiniment du temps que vous prendrez pour m'aider.
    J'ai insérer le fichier excel à mon poste. Je travail avec excel 2013 et outlook.

    Dans le cadre de mon travail, je souhaiterais envoyer un rapport mensuel personnalisé à mes utilisateurs (colonne "E" "demandeur") en semi automatique (c'est à dire que j'aimerais cliquer sur un bouton dans excel pour qu'il effectue la tache).

    Pour cela, il faudrait qu'excel :

    - commence par faire un filtre du 1er nom dans la colonne demandeur "E"
    - ceci fera apparaitre le tableau de suivi que je souhaite envoyer par mail à ce demandeur avec toutes ses commandes
    - ouvre outlook, récupère l'adresse mail de l'utilisateur (colonne "W") inscrive un objet et un corps de mail (identique pour tous les demandeurs)
    - colle à la fin du corps du mail le fameux tableau récapitulatif filtré
    - envoie le mail
    - recommence pour chaque demandeur de la colonne "E"
    - fasse ceci pour les 2 onglets du classeur

    J'espère avoir correctement expliqué. Sinon n'hésitez pas à me demander.

    Je vous suis par avance très reconnaissante de m'aider!!

    Oriane
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    est-ce qu'envoyer une plage de cellules en corps de mail te conviendrait ?

    http://outlook.developpez.com/faq/?p...VBA_Send_Range
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

    J'avais programmé ça il y a longtemps (a adapter pour ton problème):

    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 decoupage_et_mail()
    With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    End With 'pour ne pas avoir de message d'alertes (confirmation a chaque suppression d'onglets / écrasement de fichier existant ...)
    ' attention pour les phases de test il vaut mieux ne pas le mettre
     
    Dim ObjOutlook As New Outlook.Application
    Dim oBjMail
    Dim Nom_Fichier As String
    Dim i As Integer
    Dim t As Integer
    Dim a As Integer
    'declaration des variables
     
    Windows("Cotations vérif_Final.xlsm").Activate
    Range("A1:K13708").Select
        ActiveWorkbook.Worksheets("Fiche travail").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Fiche travail").Sort.SortFields.Add Key:=Range( _
            "A2:A13708"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Fiche travail").Sort
            .SetRange Range("A1:K13708")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    'Tri du fichier par rapport a la première colonne (ici nom de l'agence)
    Chemin = ActiveWorkbook.Path
     
    i = 2
    t = i
    ' deux compteur pour le découpage, t pour le début et i pour la fin
    a = 0
    ' compteur pour le nom d'itération (ici on sait qu'on a 162 agences)
     
    Do While a < 162
     
    t = i 'debut de la zone de découpage
    nom = Cells(t, 1) ' on récupère le nom de l'agence
     
    Do While Cells(i, 1) = Cells(i + 1, 1) 'tant que l'agence de ne change pas
    i = i + 1 'on incrémente le compteur
    Loop
     
    Workbooks.Add
    ActiveWorkbook.SaveAs Filename:=Chemin & "\" & nom & ".xlsx"
    'on crée et renomme un fichier excel au nom de l'agence
     
    Sheets("Feuil2").Select
        ActiveWindow.SelectedSheets.Delete
        Application.ScreenUpdating = True
    Sheets("Feuil3").Select
        ActiveWindow.SelectedSheets.Delete
        Application.ScreenUpdating = True
    'on supprime les feuilles inutiles
     
    Windows("Cotations vérif_Final.xlsm").Activate
    Range(Cells(1, 1), Cells(1, 8)).Select
    Selection.Copy
    Windows(nom & ".xlsx").Activate
    Range("A1").Select
    ActiveSheet.Paste
    'copie des en-têtes
    Windows("Cotations vérif_Final.xlsm").Activate
    Range(Cells(t, 1), Cells(i, 8)).Select
    Selection.Copy
    Windows(nom & ".xlsx").Activate
    Range("A2").Select
    ActiveSheet.Paste
    'copie des donnée entre les lignes t et i
    ActiveWorkbook.Save
    ActiveWorkbook.Close
     
    Windows("Cotations vérif_Final.xlsm").Activate 'envoi du mail
     Set ObjOutlook = New Outlook.Application
        Set oBjMail = ObjOutlook.CreateItem(olMailItem)
        With oBjMail
            .To = Cells(t, 9) ' le destinataire
           .Subject = Cells(t, 10) ' l'objet du mail
           .Body = Cells(t, 11) 'le corps du mail ..son contenu
           .Attachments.Add Chemin & "\" & nom & ".xlsx" '"C:\Data\essai.txt" ' ou Nomfichier
           .Display
      SendKeys "^{ENTER}" 'pour éviter la confirmation par outlook
        End With
     
     
    i = i + 1
    a = a + 1
    Loop
     
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    'réactivation des alertes
     
    End Sub
    Si besoin un autre fil sur lequel ce code a été adapté http://www.developpez.net/forums/d15...cel-plusieurs/
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    assitante achat
    Inscrit en
    Août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : assitante achat
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    JPCHECK : je te remercie pour le lien. Je suis effectivement tombée dessus lorsque j'ai cherché dans le forum, mais le soucis c'est que je cherche un code qui effectue l'envoie pour chaque demandeur donc il faut que la macro aille chercher l'adresse mail correspondante à chaque fois.

    HALASTER08 : A première vue et avec mon faible niveau en VBA, j'ai l'impression que ton code répondrait à ce que je cherche. Je ne suis malheureusement pas assez calée pour l'adapter à mon cas. Penses-tu pouvoir m'aider ? Si ce n'est pas le cas, je comprendrais. Ce doit être plûtot long à faire. Quand j'ai posté mon sujet je ne pensais pas que ce serait si compliqué. lol La naïveté d'une non aguerrie !

    Dans tous les cas, je vous remercie pour vos réponses et votre aide


    Oriane

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    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 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par oriane13 Voir le message
    HALASTER08 : A première vue et avec mon faible niveau en VBA, j'ai l'impression que ton code répondrait à ce que je cherche. Je ne suis malheureusement pas assez calée pour l'adapter à mon cas. Penses-tu pouvoir m'aider ? Si ce n'est pas le cas, je comprendrais. Ce doit être plûtot long à faire. Quand j'ai posté mon sujet je ne pensais pas que ce serait si compliqué. lol La naïveté d'une non aguerrie !
    Pas besoin d'un haut niveau pour adapter, et ça te permettra de progresser.

    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
    Windows("Cotations vérif_Final.xlsm").Activate
    Range("A1:K13708").Select
        ActiveWorkbook.Worksheets("Fiche travail").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Fiche travail").Sort.SortFields.Add Key:=Range( _
            "A2:A13708"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Fiche travail").Sort
            .SetRange Range("A1:K13708")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    'Tri du fichier par rapport a la première colonne (ici nom de l'agence)
    ici je faisais un tri sur la colonne qui me sert de clé, en as tu besoin si oui, adapter la colonne et le nombre de ligne (et le nom du fichier/feuille)

    tu peux le changer en i<derniere ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom = Cells(t, 1) ' on récupère le nom de l'agence
    A adapter suivant le nom que tu veux donner au fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Windows("Cotations vérif_Final.xlsm").Activate
    Range(Cells(1, 1), Cells(1, 8)).Select
    Selection.Copy
    Windows(nom & ".xlsx").Activate
    Range("A1").Select
    ActiveSheet.Paste
    'copie des en-têtes
    Windows("Cotations vérif_Final.xlsm").Activate
    Range(Cells(t, 1), Cells(i, 8)).Select
    Selection.Copy
    Windows(nom & ".xlsx").Activate
    Range("A2").Select
    ActiveSheet.Paste
    Je copie les colonnes de 1 a 8, a toi de modifier suivant ce que tu veux copier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Windows("Cotations vérif_Final.xlsm").Activate 'envoi du mail
     Set ObjOutlook = New Outlook.Application
        Set oBjMail = ObjOutlook.CreateItem(olMailItem)
        With oBjMail
            .To = Cells(t, 9) ' le destinataire
           .Subject = Cells(t, 10) ' l'objet du mail
           .Body = Cells(t, 11) 'le corps du mail ..son contenu
           .Attachments.Add Chemin & "\" & nom & ".xlsx" '"C:\Data\essai.txt" ' ou Nomfichier
           .Display
      SendKeys "^{ENTER}" 'pour éviter la confirmation par outlook
        End With
    Encore des numeros de colonnes a changer

    Bref rien de compliqué

    Petit conseil: travail sur un petit fichier exemple en premier et test a part le découpage puis l'envoi de mail
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

Discussions similaires

  1. [XL-2010] Macro pour envoyer par mail une copie d'un fichier .xltm sauvé en .xlsm
    Par Tomapaco dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/04/2016, 21h22
  2. [PowerShell] Extract d'un tableau excel et l'envoyer par mail
    Par yassine145 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 04/12/2014, 17h00
  3. Macro enregistrer sous puis envoyer par mail
    Par nico506 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/03/2012, 16h52
  4. [XL-2003] Par macro, envoyer un mail
    Par malabarbe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/01/2011, 14h05
  5. Envoyer par mail un document Rave Report
    Par Wilco dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/10/2004, 10h55

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