Formulaire envoyé depuis Excel par mail

thomasdu40

XLDnaute Occasionnel
Bonjour,

Mon souci : j'ai un formulaire qui est complété par des personnes et dès que les personnes le complétent , j'aimerai que ces personnes puissent l'envoyer par mail à une autre personne définie dans la macro et que cette autre personne le reçoive COMPLETE.

Avec le code ci-dessous il est reçu mais vide. Pourquoi ?
Code:
Sub Mail_workbook_Outlook_1()
'Working in 2000-2010
'This example send the last saved version of the Activeworkbook
    Dim OutApp As Object
    Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .To = "toto@test.fr;"
        .CC = ""
        .BCC = ""
        .Subject = "Ouverture d'une nouvelle Fiche d'Action de Progrès"
        .Body = "Bonjour, Vous trouverez ci-joint la Fiche d'Action de Progrès. Cordialement."
        .Attachments.Add ActiveWorkbook.FullName
        'You can add other files also like this
        '.Attachments.Add ("C:\test.txt")
        .Display   'or use .Send
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
 
Dernière édition:

thomasdu40

XLDnaute Occasionnel
Re : Formulaire envoyé depuis Excel par mail

Parce que la personne qui compléte le formulaire travaille sur un document qui doit rester totalement vierge. Elle le complète et l'envoie à une autre personne, cette autre personne le recevra complété mais le formulaire qui a été complété par la première personne doit rester vide. Et si cette première personne refuse l'enregistrement du formulaire ben la personne qui le reçoit, il est vide.

C'est la mon gros problème.
 

JNP

XLDnaute Barbatruc
Re : Formulaire envoyé depuis Excel par mail

Bonjour le fil :),
La solution la plus simple serait peut-être de fournir un fichier XLT au départ, d'enregistrer le fichier en XLS dans C:/Temp avant envoi en PJ, puis d'utiliser un Kill pour supprimer le fichier dans Before_Close...
Bonne journée :cool:
 
G

Guest

Guest
Re : Formulaire envoyé depuis Excel par mail

Re bonjour,
Jnp:)

La macro ci-dessous créer un classeur temporaire avec la feuille (ici nommée 'formulaire') puis et l'attache au mail.

Code:
[COLOR=blue]Sub[/COLOR] Mail_workbook_Outlook_1()
[COLOR=green]'Working [COLOR=blue]in[/COLOR] 2000-2010[/COLOR]
[COLOR=green]'This example send the last saved version of the Activeworkbook[/COLOR]
    [COLOR=blue]Dim[/COLOR] OutApp [COLOR=blue]As[/COLOR] [COLOR=blue]Object[/COLOR]
    [COLOR=blue]Dim[/COLOR] OutMail [COLOR=blue]As[/COLOR] [COLOR=blue]Object[/COLOR]
 
    [COLOR=blue]Dim[/COLOR] CheminFiche [COLOR=blue]As[/COLOR] [COLOR=blue]String[/COLOR]
    [COLOR=blue]Dim[/COLOR] wkb [COLOR=blue]As[/COLOR] Workbook
    [COLOR=green]'Geler l'affichage écran[/COLOR]
     Application.ScreenUpdating = [COLOR=blue]False[/COLOR]
 
     [COLOR=green]'Créée un nouveau classeur à partir de la feuille nommée 'Formulaire' (changer pour le nom idoine)[/COLOR]
     ThisWorkbook.Sheets([I]"Formulaire"[/I]).Copy
     [COLOR=blue]Set[/COLOR] wkb = ActiveWorkbook
 
     [COLOR=green]'Réactive ce classeur (celui qui contient cette macro) et l'affichage écran[/COLOR]
     ThisWorkbook.Activate
     Application.ScreenUpdating = [COLOR=blue]True[/COLOR]
 
     [COLOR=green]'Enregistre le classeur fiche action, évite les alertes le fichier existe déjà[/COLOR]
     Application.DisplayAlerts = [COLOR=blue]False[/COLOR]
     wkb.SaveAs ThisWorkbook.Path & [I]"\fiche action.xls"[/I]
     Application.DisplayAlerts = [COLOR=blue]True[/COLOR]
 
     [COLOR=green]'retient dans une variable le chemin du nouveau classeur[/COLOR]
     CheminFiche = wkb.FullName
 
     [COLOR=green]'ferme le classeur[/COLOR]
     wkb.[COLOR=blue]Close[/COLOR]
 
    [COLOR=blue]Set[/COLOR] OutApp = CreateObject([I]"Outlook.Application"[/I])
    [COLOR=blue]Set[/COLOR] OutMail = OutApp.CreateItem(0)
    [COLOR=blue]On[/COLOR] [COLOR=blue]Error[/COLOR] [COLOR=blue]Resume[/COLOR] [COLOR=blue]Next[/COLOR]
    [COLOR=blue]With[/COLOR] OutMail
        .To = "toto@zorro.fr[I]"[/I]
[I]       .CC = [I]""[/I][/I]
[I]       .BCC = [I]""[/I][/I]
[I]       .Subject = [I]"Ouverture d'une nouvelle Fiche d'Action de Progrès"[/I][/I]
[I]       .Body = [I]"Bonjour, Vous trouverez ci-joint la Fiche d'Action de Progrès. Cordialement."[/I][/I]
[I]       .Attachments.Add CheminFiche[/I]
[I]       [COLOR=green]'You can add other files also [COLOR=blue]like[/COLOR] this[/COLOR][/I]
[i]        [COLOR=green]'.Attachments.Add ([I]"C:\test.txt"[/I])[/COLOR]
        .Display   [COLOR=green]'[COLOR=blue]or[/COLOR] use .Send[/COLOR]
    [COLOR=blue]End[/COLOR] [COLOR=blue]With[/COLOR]
    [COLOR=blue]On[/COLOR] [COLOR=blue]Error[/COLOR] [COLOR=blue]GoTo[/COLOR] 0
    [COLOR=blue]Set[/COLOR] OutMail = [COLOR=blue]Nothing[/COLOR]
    [COLOR=blue]Set[/COLOR] OutApp = [COLOR=blue]Nothing[/COLOR]
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]

A+
 
Dernière modification par un modérateur:

JNP

XLDnaute Barbatruc
Re : Formulaire envoyé depuis Excel par mail

Re :),
Salut Hasco ;),
Bonjour JNP,
Ouh la un fichier XLT ? Etant novice difficile pour moi.
Utiliser un Kill dans Before_close. Jamais utilisé en tout cas.
Si tu peux m'éclairer.
Merci.
Un fichier XLT (XLTM pour 2007) est un fichier modèle. L'avantage est qu'à l'ouverture, c'est un classeur basé sur le modèle mais sans son nom qui s'ouvre, permettant de garder le modèle intact.
Le Kill est une instruction (à utiliser avec modération :D) qui supprime le fichier indiqué par le chemin qui le suit.
Before_Close est ce qu'on appelle une événementielle (mise dans ThisWorkbook) qui permet de donner des instructions à exécuter avant la fermeture du classeur, ici la suppression du fichier stocké temporairement avant l'envoi par mail.
Au vu de la procédure d'hasco qui me parait nickel, j'ajouterait juste un
Code:
Kill CheminFiche
à la fin, ce qui devrait rendre caduque le DisplayAlerts, vu que si le fichier est supprimé, il ne peux pas exister :p...
Bonne soirée :cool:
 
G

Guest

Guest
Re : Formulaire envoyé depuis Excel par mail

Re,

Hello JNP, j'avais même pas vu!:rolleyes: Merci:)

@Thomas, en essayant de comprendre plutôt que de te contenter de faire du copier/coller, tu aurais trouvé.

A+
 
G

Guest

Guest
Re : Formulaire envoyé depuis Excel par mail

Thomas,

Lorsque tu as une erreur, donne la ligne sur laquelle se produit l'erreur.

En l'occurence je ne peux que supposer que c'est celle-ci:

Code:
ThisWorkbook.Sheets("Formulaire").Copy

Mais si tu avais lu le commentaire qu'il y a au-dessus et essayer de comprendre tu aurais vuqu'il te fallait changer le mot 'Formulaire' pour le nom de la feuille que tu veux envoyer.

A+
 

thomasdu40

XLDnaute Occasionnel
Re : Formulaire envoyé depuis Excel par mail

Cette ligne est bien nommée.

Je joins le code complet
Code:
Sub Mail_workbook_Outlook_1()
'Working in 2000-2010
'This example send the last saved version of the Activeworkbook
    Dim OutApp As Object
    Dim OutMail As Object
    
    Dim CheminFiche As String
    Dim wkb As Workbook
    'Geler l'affichage écran
     Application.ScreenUpdating = False
     
     'Créée un nouveau classeur à partir de la feuille nommée 'Formulaire' (changer pour le nom idoine)
     ThisWorkbook.Sheets("Questionnaire satisfaction version 3 send mail").Copy
     Set wkb = ActiveWorkbook
     
     'Réactive ce classeur (celui qui contient cette macro) et l'affichage écran
     ThisWorkbook.Activate
     Application.ScreenUpdating = True
     
     'Enregistre le classeur fiche action, évite les alertes le fichier existe déjà
     Application.DisplayAlerts = False
     wkb.SaveAs ThisWorkbook.Path & "\fiche action.xls"
     Application.DisplayAlerts = True
     
     'retient dans une variable le chemin du nouveau classeur
     CheminFiche = wkb.FullName
     
     'ferme le classeur
     wkb.Close
    
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    On Error Resume Next
    With OutMail
        .To = "thomasdu40@hotmail.fr;"
        .CC = ""
        .BCC = ""
        .Subject = "Questionnaire de satisfaction"
        .Body = "Bonjour, Vous trouverez ci-joint le questionnaire de satisfaction complété. Cordialement."
        .Attachments.Add CheminFiche
        'You can add other files also like this
        '.Attachments.Add ("C:\test.txt")
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
 
G

Guest

Guest
Re : Formulaire envoyé depuis Excel par mail

Re,

Je répète, et c'est la dernière fois,

Lorsque tu as une erreur, donne la ligne sur laquelle se produit l'erreur.

La macro fontionne très bien chez moi.
A+
 
Dernière modification par un modérateur:

thomasdu40

XLDnaute Occasionnel
Re : Formulaire envoyé depuis Excel par mail

Bonjour le forum,

Malgré mais essais, je ne suis pas parvenu à faire fonctionner correctement la macro qu'on m'a transmise et je précise qu'aucune ligne n'est mise en évidence lorsque j'ai ce message d'erreur (L'indice n'appartient pas à la sélection).

Néanmoins je vais revenir à ma première solution en réintégrant mon premier code (voir ci-après) et les personnes devront suivre les opération suivantes :
lorsqu'ils ouvriront le formulaire, les personnes verront automatiquement apparaître une fenêtre les informant des opérations à faire pour envoyer le document enregistré (1° Ouvrir le document, 2° l'enregistrer sur leur disque dur, 3° le compléter, 4° l'enregistrer et 5° l'envoyer).

Sujet clôturé.

Code:
Sub Mail_workbook_Outlook_1()
'Working in 2000-2010
'This example send the last saved version of the Activeworkbook
    Dim OutApp As Object
    Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .To = "h.cazalis@delpeyrat.fr;"
        .CC = ""
        .BCC = ""
        .Subject = "Questionnaire de satisfaction"
        .Body = "Bonjour," & Chr(13) & "Vous trouverez ci-joint le questionnaire de satisfaction complété." & Chr(13) & "Cordialement"
        .Attachments.Add ActiveWorkbook.FullName
        'You can add other files also like this
        '.Attachments.Add ("C:\test.txt")
        .Display   'or use .Send
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
312 493
Messages
2 088 955
Membres
103 989
dernier inscrit
jralonso