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 automatique d'un mail après chaque modification du classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut Envoi automatique d'un mail après chaque modification du classeur
    Bonjour à tous

    Je suis confronté à un problème, je travaille sur un fichier qui a besoin d'un suivi permanent par différents acteurs donc j'ai pensé à mettre en place des alertes mails.

    J'aimerais qu'un mail soit envoyé automatiquement à chaque personne lorsque quelqu'un modifie et enregistre le document.

    Version Excel 2007


    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à chaque modification cela risque d'être l'enfer, sinon placer l'appel de la procédure de mail dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Pour le mail voir avec CDO, par exemple ici

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut
    Ok merci.
    Cependant, je m'y connais peu en Excel et en macros.
    Quelqu'un pourrait me guider pour mettre en place cet envoi automatique après chaque enregistrement s'il vous plait.

  4. #4
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Bonjour kiki, bonjour thebast

    Il suffit de remplacer BeforeClose par AfterSave ou BeforeSave, sa dépend comment tu veux gérer.

  5. #5
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par nchal Voir le message
    Il suffit de remplacer BeforeClose par AfterSave ...
    C'est nouveau ?

  6. #6
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Bonjour à tous,
    Citation Envoyé par fring Voir le message
    C'est nouveau ?
    Comment sa ?

    Thebast veut que le mail soit envoyé à chaque enregistrement et pas à chaque fois que l'on ferme le classeur. Donc je lui est juste dit de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_AfterSave(Cancel As Boolean)
    Après je ne sais pas quand cette fonction evenementielle a été implémenté. Sur XL10, sa marche en tout cas

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut
    Merci je comprends.

    Par contre quelqu'un peut m'expliquer qu'est ce que je dois mettre et ou je dois le mettre?

  8. #8
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Oui ça a été ajouté à la version 2010. Sinon y'a AfterShave aussi...
    Plus sérieusement pour l'envoi de mail, si via outlook, tu peux essayer ceci (à adapter):
    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
    Sub EnvoiMail(Adresse As String, objet As String, Corps As String, Optional Piece As Variant, Optional cc As Variant, Optional Bcc As Variant)
     
        Dim MonAppliOutlook As New Outlook.Application
        Dim MonMail As Outlook.MailItem
     
        Set MonMail = MonAppliOutlook.CreateItem(olMailItem)
     
        With MonMail
            '.Display ' retirer le commentaire pour que la fenêtre Outlook s'affiche
            .To = Adresse
            If Not IsMissing(cc) Then .cc = CStr(cc)
            If Not IsMissing(Bcc) Then .Bcc = CStr(Bcc)
     
            .Subject = objet
            .Body = Corps
     
            If Not IsMissing(Piece) Then
                .Attachments.Add CStr(Piece), olByValue
            End If
        End With
     
        MonMail.Send
     
         Set MonAppliOutlook = Nothing
         Set MonMail = Nothing
     
    End Sub

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut
    ET je dois adapter quoi ?

  10. #10
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Ben à adapter à ton problème.

    En gros dans la procédure Workbook_BeforeClose ou Workbook_AfterSave (qui gèrent respectivement l'évenement de fermeture du classeur et de sauvegarde du classeur) comme te l'ont indiqué Kiki et Nchal, tu appelles la procédure EnvoiMail avec les arguments qui vont bien pour ton cas (liste des destinataires, objet etc...).
    Encore une fois cela fonctionne si l'envoi de mail se fait via outlook.Sinon voir le lien de Kiki sur l'objet CDO

  11. #11
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par nchal Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_AfterSave(Cancel As Boolean)
    Après je ne sais pas quand cette fonction evenementielle a été implémenté. Sur XL10, sa marche en tout cas
    Alors en effet c'est nouveau (pour moi étant toujours sur un "vieux" 2007... )

  12. #12
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, digression, histoire de rajouter une couche, voir ici , curieux n'est-il pas ?

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut
    Oui mais je mets ou les adresses a qui je dois envoyer les mails?

    Je vous donne mon fichier.

    Pouvez m'établir une macro qui permettrait d'envoyer un mail automatiquement après chaque modification (et je tiens beaucoup à ce principe).

    Je vous remercie d'avance.
    Fichiers attachés Fichiers attachés

  14. #14
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Salut

    Tu m'a demandé en MP mais je préfère te repondre ici, comme sa tout le monde peut le voir (pour en profiter ou pour le corriger)

    Il suffit de reprendre le code de Issoram
    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
    Sub EnvoiMail(Adresse As String, objet As String, Corps As String, Optional Piece As Variant, Optional cc As Variant, Optional Bcc As Variant)
     
        Dim MonAppliOutlook As New Outlook.Application
        Dim MonMail As Outlook.MailItem
     
        Set MonMail = MonAppliOutlook.CreateItem(olMailItem)
     
        With MonMail
            '.Display ' retirer le commentaire pour que la fenêtre Outlook s'affiche
            .To = Adresse
            If Not IsMissing(cc) Then .cc = CStr(cc)
            If Not IsMissing(Bcc) Then .Bcc = CStr(Bcc)
     
            .Subject = objet
            .Body = Corps
     
            If Not IsMissing(Piece) Then
                .Attachments.Add CStr(Piece), olByValue
            End If
        End With
     
        MonMail.Send
     
         Set MonAppliOutlook = Nothing
         Set MonMail = Nothing
     
    End Sub
    Le .To correspond à l'adresse chez qui tu veux l'envoyé. Donc tu rajoute vers le début du code une variable que tu appelles Adresse, ou alors tu remplaces Adresse par une vrai adresse mail.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .To = "collegue-travail@entreprise.job"
    Le .Subjet correspond au titre de ton mail et comme pour l'Adresse, soit tu fait une varaible String que tu appelles objet (pour coller avec le code de issoram) ou alors tu met ton titre directement. On va également faire le body, c'est à dire, ce qu'il va y avoir dans le msg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Subject = "Fichier Excel Modifié"
    .Body = "Bonjour, ceci est un mail automatique, veuillez ne pas y répondre. Le fichier (et la tu peux mettre le nom du fichier pour faire cool avec une concaténation) " & ThisWorkbook.Name & " a été sauvegardé."
    Ensuite, pour les cas spécifique tu peux mettre des personnes en copie ou copie cachée grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            If Not IsMissing(cc) Then .cc = CStr(cc)
            If Not IsMissing(Bcc) Then .Bcc = CStr(Bcc)
    Tu peux également mettre une pièce jointe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not IsMissing(Piece) Then
                .Attachments.Add CStr(Piece), olByValue
            End If
    Il ne faut pas oublier non plus la dernière ligne qui envoie le mail.
    Il me semble que tu peux utiliser le .From pour indiquer ton addresse mais je ne suis pas sur.

    Ensuite si tu utilises XL10, tu epux utiliser la fonction AfterSave, sinon si tu est sur un vieux 2007 comme le vieux fring utilises plutôt BeforeClose.
    Il faut écrire ce code dans le module ThisWorkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_AfterSave(Cancel As Boolean)
    'comme je te l'ai expliqué précedemment, soit tu utilises les varaible dans ce cas tu les mets ici, soit tu mets les noms directements, dans ce cas utulise juste EnvoieMail() et tu soit également redéfinir la signature dans ta fonction.
    Call EnvoiMail(Adresse, objet, Corps,Piece,cc, Bcc )
    Après, je ne suis pas allé voir l'excellent tuto de silkyroad, qui doit beaucoup mieux l'expliquer que moi mais comem tu as pris le temps de m'envoyer un MP, j'ai pris le temps de te repondre.

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut
    ok merci j'ai essayé.

    Et l'adresse mail se met en rouge et un mot dedans est surligné en bleu cela veut dire quoi ?

  16. #16
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    Salut

    Je ne l'ai peut etre pas dit mais je n'ai jamais utiliser le CDO, donc pour les problèmes, je vais faire le max mais je suis pas sur de pouvoir répondre à tous les problèmes. J'ai également décris la fonction sans avoir consulté un tuto donc si je me suis gouré, n'hésitez pas.

    Pour ton problème, est ce que tu es passé par les paramètre de la fonction ou alors tu as mis l'adresse directement.

    Si tu reprend la même fonction que issoram. Essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_AfterSave(Cancel As Boolean)
     
    Adresse = "ton_adresse@mail.net"
    Objet = "Titre du mail"
    Corps = "Corps du mail"
     
    Call EnvoiMail(Adresse, Objet, Corps)
    End Sub
    Remplace "ton_adresse@mail.net" par ta vrai adresse mail et dis moi si sa marche. Reprend exactement la même fonction que issoram t'as donné et met la dans un module.

  17. #17
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut
    Alors je mets le truc d'issoram dans le module 1
    et je mets ton truc dans Thisworkbook
    C'est ça?

    j'ai testé et ça met le private sub... En jaune et surligne en bleu le mot adresse dans thisworkbook

  18. #18
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Résumons...

    Tu souhaites envoyer un mail contenant uniquement un message ?
    Tu utilises quelle version d'Excel ?

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut
    Je souhaite créer un mail qui s'envoie automatiquement avant fermeture.
    Version excel 2007

    Envoi du mail s'il y a eu une modification du classeur

  20. #20
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par Thebast69 Voir le message
    Je souhaite créer un mail qui s'envoie automatiquement
    Oui ok ça j'avais compris mais...il contient quoi ce mail ? le classeur en pièce jointe, un autre fichier ou uniquement un message ?

Discussions similaires

  1. [Mail] Envoi automatique d'e-mails
    Par mosquitout dans le forum Langage
    Réponses: 9
    Dernier message: 03/09/2007, 18h50
  2. [Configuration] Envoi automatique d'e-mail
    Par akara dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 28/08/2007, 12h05
  3. [Configuration] Envoi automatique d'e-mail et base de données
    Par perry_rhodan dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 10/07/2007, 22h21
  4. [SQL] Envoi d'un formulaire/mail après traitement avec sql
    Par chamoix dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/05/2007, 19h46
  5. Envoi automatique d'un mail toutes les heures
    Par VirginieGE dans le forum ASP
    Réponses: 8
    Dernier message: 24/08/2004, 08h10

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