Formulaire envoyé depuis Excel par mail

  • Initiateur de la discussion Initiateur de la discussion thomasdu40
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

T

thomasdu40

Guest
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 modification par un modérateur:
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.
 
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 😎
 
Re : Formulaire envoyé depuis Excel par mail

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.
 
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:
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 😀) 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 😛...
Bonne soirée 😎
 
Re : Formulaire envoyé depuis Excel par mail

Re,

Hello JNP, j'avais même pas vu!🙄 Merci🙂

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

A+
 
Re : Formulaire envoyé depuis Excel par mail

OUi après j'avais vu donc trop pressé (mauvais point pour moi)😡

Donc après rectification, nouveau message : L'indice n'appartient pas à la sélection.

Je vais craquer en abandonnant.
 
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+
 
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
 
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:
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 modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
962
Réponses
17
Affichages
2 K
Réponses
2
Affichages
1 K
Réponses
2
Affichages
1 K
Réponses
3
Affichages
739
E
Réponses
1
Affichages
1 K
Réponses
5
Affichages
2 K
Retour