[Excel] envoi mail - enregistrement

Fermé
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 - 23 août 2012 à 16:38
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 24 août 2012 à 15:41
Salut!

Petite question qui ne vous posera sans doute pas de problème. Nous travaillons à plusieurs sur un fichier partagé, et il faudrait qu'une personne reçoive une notification par mail lors de la modification de ce fichier. J'ai bien trouvé des codes, mais je ne sais même pas comment les insérer, ni les faire se déclencher (à l'enregistrement du fichier par exemple).

Merci d'avance à ceux qui pourront m'aider =)


A voir également:

5 réponses

Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 782
24 août 2012 à 10:06
Hum... Up?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 10:20
Bonjour,

tu dis :
J'ai bien trouvé des codes
Lesquels?
Donne nous au moins un de ces codes qui fonctionne, on l'adaptera à l'événement que tu souhaites...
0
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 782
24 août 2012 à 10:45
Donc j'ai trouvé ça comme exemple, mais ce qui me pose problème, c'est justement de le tester, et de le lier à l'évènement. Et au passage, de supprimer la pièce jointe dont on se moque. Donc je ne peux pas dire qu'il fonctionne...

https://forums.commentcamarche.net/forum/affich-2253001-macro-excel-envoi-email-avec-piece-jointe#1
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 10:54
Qu'elle version d'excel?
Eventuellement, quel logiciel de messagerie utilisez vous ? Tous le même?
0
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 782
24 août 2012 à 10:59
Oui, c'est pour une entreprise. Excel 2002, Outlook 2003
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 11:14
Bon on va déjà essayer avec ton code.

- Ouvre un nouveau classeur Excel,
- Enregistre le,
- depuis n'importe qu'elle feuille de ce classeur, tape ALT+F11,
- dans la fenêtre Visual Basic Editor qui vient de s'ouvrir :
==> Menu Insertion/Module
- Dans le module (partie de la fenêtre blanche qui occupe la majeure partie de l'écran) copie-colle ce code :
Sub Envoi()
ThisWorkbook.SendMail Recipients:="prenom.nom@maboite.fr", Subject:="Test envoi classeur", ReturnReceipt:=True
End Sub

- adapte le en remplaçant : prenom.nom@maboite.fr par ton adresse, toujours entourée de guillemets!!
- ferme la fenêtre Visual Basic pour retourner sous ta feuille de calcul,
- Tape ALT+F8, choix : Envoi, clic sur Exécuter.

De 2 choses l'une, soit cela va fonctionner, soit pas.
Si ce code ne fonctionne pas, une fenêtre de débogage (clic sur fin) va apparaitre qui va te faire un blabla sur la méthode SendMail.
Cette méthode peux ne pas fonctionner sous ta version d'excel, il me semble qu'elle a débuté avec Xl2007...

Dans ce cas, reviens on verra avec Outlook qui semble de toutes manières la meilleure des solutions.

Le souci, dans le cas de macro envoie mails, c'est que je ne peux pas tester, n'ayant jamais les mêmes outils à ma disposition...
Donc teste et j'attends ton retour.
0
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 782
24 août 2012 à 11:18
Je viens de faire comme tu m'as dis, mais depuis chez moi, donc je n'ai pas exactement la même configuration qu'au boulot. Excel 2003. Et.. ça ne marche pas quand même: Erreur d'exécution 1004... Donc si c'est une question de version, on aura le même problème au boulot.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 11:36
De toutes façons, je t'ai dit n'importe quoi dans ma réponse précédente...
La méthode SendMail corresponds à la commande Fichier/envoyer vers.
Il se peut que cette commande ne fonctionne pas à cause d'une ligne manquante dans le fichier win.ini :
Si elle ne fonctionne pas, il est possible que le fichier win.ini soit incomplet. Vérifier que ces lignes y sont bien :
[Mail]MAPI=1CMC=1CMCDLLNAME=mapi.dllCMCDLLNAME32=mapi32.dllMAPIX=1MAPIXVER=1.0.0.1OLEMessaging=1

Sources M@rina.
Je me doute que tu ne va pas te taper les fichiers win.ini de tous les ordis du boulot pour vérifier cela...

Donc on va partir sur une procédure d'envoi de mail via Outlook.

Sur les discussions que j'ai lu sur ce sujet, il est fréquent qu'Outlook demande :
Un programme tente d'envoyer un message électronique en votre nom...
Un simple clic sur Oui (ou confirmer) suffit à l'envoi du mail. Ce n'est pas dérangeant pour vous?
0
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 782
24 août 2012 à 11:40
Non, absolument pas. Je pensais bien que de toute façon on allait en arriver là. :)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 15:41
Essaye ce code à la place du dernier transmis :
mise en place ICI
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim MonOutlook As Object
Dim MonMessage As Object
Dim strNomClasseur As String, Utilisateur As String

Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.CreateItem(0)
strNomClasseur = ThisWorkbook.Name
Utilisateur = Environ("username")

MonMessage.To = "prenom.nom@mail.fr"
'MonMessage.CC = "prenom2.nom2@mail.fr"
'MonMessage.Attachments.Add strNomFichier
MonMessage.Subject = "Notification de modification du fichier : " & strNomClasseur
MonMessage.Body = "Le fichier excel : " & strNomClasseur & " a été modifié et enregistré le " _
    & Now & " par l'utilisateur : " & Utilisateur & "."
MonMessage.Send
Set MonOutlook = Nothing
Set MonMessage = Nothing
End Sub 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 11:56
Voici donc un code à tester. Suit bien toutes ces étapes :
1- ouvre un nouveau classeur excel,
2- enregistre le,
3- Tape ALT+F11 depuis n'importe qu'elle feuille
4- sous Visual Basic Editor : Menu Outils / Reference / Cocher "Microsoft Outlook Library"
5- Dans Visual Basic Editor, en haut à gauche de ton écran, tu as : VBA Project (NomDuClasseur.xls) et en dessous : Microsoft Excel Objects.
Dans Microsoft Excel Objects tu trouves : les noms de tes feuilles et ThisWorkBook. Double clic sur ThisWorkBook. Le module Thisworkbook est ainsi ouvert.
6- Copie-colle ce code dans le module :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String, Utilisateur As String

Set ObjOutlook = New Outlook.Application
Set oBjMail = ObjOutlook.CreateItem(olMailItem)

Nom_Fichier = ThisWorkbook.Name
Utilisateur = Environ("username")
With oBjMail
    .To = "prenom.nom@mail.fr"      ' le destinataire
    .Subject = "Notification de modification du fichier : " & Nom_Fichier
    .Body = "Le fichier excel : " & Nom_Fichier & " a été modifié et enregistré le " _
    & Now & " par l'utilisateur : " & Utilisateur & "."
    .Send
End With
ObjOutlook.Quit
Set oBjMail = Nothing
Set ObjOutlook = Nothing
End Sub 

7- Adapte le code en remplaçant : prenom.nom@mail.fr par la bonne adresse mail,
8- ferme Visual Basic Editor
9- Essaye d'enregistrer, normalement l'envoi se fait automatiquement

Tu dis...
-1
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
24 août 2012 à 12:03
Bonjour,

désolé pour l'incruste, mais petite info à propos du code donné par pijaku ci-dessus :
Dans le bloc With objMail... End With, le .Send permet d'envoyer directement le mail.

Lors de la phase de test, pour vérifier que le mail contient bien les bonnes informations, il est préférable de remplacer le .Send par .Display.

De ce fait, le mail apparaîtra à l'écran, et il faudra cliquer sur 'Envoyer' pour que le mail parte.

Cordialement.
0
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 782
24 août 2012 à 12:12
Et bien bonne nouvelle, tu as résolu ça du premier coup!

Merci à toi!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 12:23
Merci et bonjour à Chaussettes pour ces précisions.

Problème non résolu. Je paries que tu va revenir dès les premières utilisations au bureau!

Dans le cas ou la référence "Microsoft Outlook Library" n'est pas active sur un PC, la macro beuggue.
Il faut donc y inclure un test pour vérifier si elle est active ou non et si non alors l'activer...
Tu dis.
0
Apatik Messages postés 5304 Date d'inscription mercredi 28 janvier 2009 Statut Contributeur Dernière intervention 29 mai 2016 782
24 août 2012 à 12:27
Erf... Vu comme ça...
Du coup, j'en saurai d'avantage lundi, quand j'y serai de retour. Je te tiens au jus de toute façon!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
24 août 2012 à 12:43
j'en saurai d'avantage lundi
Pourquoi attendre lundi....
1- ouvres ton classeur (celui que tu viens d'enregistrer)
2- ALT+F11
3- Insertion/Module
4- Copie-colle ce code :
sub Test()
 Cells(1, 1) = ActiveWorkbook.VBProject.References("Outlook").Name
 Cells(1, 2) = ActiveWorkbook.VBProject.References("Outlook").Description
 Cells(1, 3) = ActiveWorkbook.VBProject.References("Outlook").GUID
 Cells(1, 4) = ActiveWorkbook.VBProject.References("Outlook").Major
 Cells(1, 5) = ActiveWorkbook.VBProject.References("Outlook").Minor
 Cells(1, 6) = ActiveWorkbook.VBProject.References.Item("Outlook").fullpath
  end sub

5- ferme VBE
6- depuis une feuille vierge : ALT+F8 choix "Test", Exécuter.
7- revenir ici me donner les résultats de ce test.
0