Microsoft 365 envoyer un formulaire par e-mail

FLAM04

XLDnaute Nouveau
Bonjour

j'ai créer un formulaire pour enregistrer les anomalies à réceptions de nos marchandises. J'ai trouvé une solution pour envoyer ce formulaire à une adresse mail. Le problème est que je ne souhaiterai envoyer qu'une image de ce formulaire une fois rempli et non le fichier Excel le contenant.
Comment faire pour n'envoyer que l'image dans le corps du mail et non le fichier tont entier.

Ci-joint le fichier concerné.

Merci pour votre aide.
 

Pièces jointes

  • recap anomalies réception.xlsm
    346.2 KB · Affichages: 15

Dudu2

XLDnaute Barbatruc
Bonjour,
- Est-ce que ce que tu appelles "formulaire" est un UserForm ?
- Si c'est un UserForm, est-ce lui qui doit créer son image et envoyer le mail ?
- Ou bien est le code d'une macro quelconque qui a généré le formulaire en vbModeless et doit en envoyer l'image ?
 

Dudu2

XLDnaute Barbatruc
Le Module_UserFormToImageToFile contient la fonction de mise en fichier image d'un UserForm.

J'ai codé les 2 cas en exemple:
- Génération à partir du UserForm
- Génération à partir d'une Macro ayant affiché le UserForm en vbModeless
VB:
'--------------------------------
'Copy a UserForm to an image file
'--------------------------------

'Arguments:
'---------
'
'- UserForm     : a displayed and active UserForm
'- FullFilePath : the FullFilePath that must include the folder and the image file extension (jpg, gif, ...)
'
'Examples:
'--------
'Call UserFormToImageToFile(Me, "D\Temp\Image10.jpg")
'Call UserFormToImageToFile(UserForm1, "F:\Téléchargements\Test.jpg")
'--------------------------------
Sub UserFormToImageToFile(UserForm As Object, FullFilePath As String)

Edit: Comme je ne suis pas sûr que ce soit le UserForm que le demandeur veuille envoyer en image, je joint aussi un fichier qui fait le même genre de manip avec un Range au cas où ce serait le tableau dans la feuille "fiche anomalie" qui serait à mettre en image.

Pour l'envoi par mail, il suffit d'ajouter le fichier image soit en "Embbeded" soit en "Attachment".
 

Pièces jointes

  • UserFormToImageToFile.xlsm
    31.9 KB · Affichages: 7
  • RangeToImageToFile.xlsm
    24.4 KB · Affichages: 6
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @FLAM04 et @Dudu2
Comme à l'accoutumé, j'arrive un peu tard mais j'y vais quand même de ma solution.
Dudu2, je ne connaissais pas tes méthodes proposées pour faire une image d'un formulaire ...😳

Je suis passé par la fiche "fiche anomalie" construite dans le classeur du post#1 et je génère un pdf que j'envoie par Outlook. Dans "Fiche anomalie" j'ai créé des noms définis (préfixe "_f_").

Et j'ai utilisé le Userform fourni avec quelques modifications :
  • n° de fiche (ajouté également dans "Source" et incrémenté automatiquement)
  • initialisation de la date d'émission
  • lien entre référence et désignation de l'article
  • calcul du taux d'anomalies
Pour le mail j'utilise donc Outlook (il faudra paramétrer le destinataire, actuellement c'est anonymisé)

Procédure dans le module mdl_OLk :
Enrichi (BBcode):
Sub OLK_Mail(Destinataire$, Objet$, Corps$, NomFich$)
     'Envoi du mail par Outlook
     Dim OlkApp As Object, OlkMail As Object
     Set OlkApp = CreateObject("Outlook.Application")
     Set OlkMail = OlkApp.CreateItem(0)
    
     On Error Resume Next
     With OlkMail
          .To = Destinataire
          .CC = ""
          .BCC = ""
          .Subject = Objet
          .Body = Corps
          .Attachments.Add NomFich
          .Send
     End With
     On Error GoTo 0
    
     OlkApp.Quit
     Set OlkMail = Nothing
     Set OlkApp = Nothing
End Sub

Modification de l'envoi de mail
Enrichi (BBcode):
'********************************
'Envoi e-mail en automatique
'********************************
Private Sub mailanom_Click()

     Dim Destinataire$, Objet$, Corps$, NomFichier$
     If CDbl(Me.n°fiche) > WorksheetFunction.Max(Source.[_t_sources[N° Fiche]]) Then MsgBox "Enregistrez d'abord la fiche !": Exit Sub
     'Remplir la fiche d'anomalie à partir du formulaire
     With FicheAno
          .[_f_n°.fiche] = CDbl(Me.n°fiche)
          .[_f_date.émission] = DateValue(Me.dateemission)
          .[_f_réceptionnaire] = Me.receptionnaire
          .[_f_date.réception] = DateValue(Me.datereception)
           ......
          .[_f_valideur] = Me.nomvalid
          .[_f_type.document] = Me.typdoc
          .[_f_n°.document.sage] = Me.numsage
          .[_f_commentaire] = "Commentaires : " & Me.comments
     End With
    
     'Eléments du mail
     Objet = "Anomalie de réception N°" & Me.n°fiche
     Corps = "Bonjour," & vbCrLf & vbCrLf & _
             "Veuillez trouver ci-joint la fiche d'anomalie de réception n°" & Me.n°fiche & "." & vbCrLf & vbCrLf & _
             "Cordialement" & vbCrLf & vbCrLf & _
             Me.nomvalid
    
     NomFichier = Environ$("temp") & "\Fiche anomalie réception n°" & Me.n°fiche & ".pdf"
     Application.DisplayAlerts = False
     FicheAno.[_f_Fiche.Anomalie.Réception].ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomFichier, _
                                                                Quality:=xlQualityStandard, IncludeDocProperties:=False, OpenAfterPublish:=False
     With FicheAno
          .[_f_n°.fiche] = ""
          .[_f_date.émission] = ""
          .[_f_réceptionnaire] = ""
          .[_f_date.réception] = ""
          ......
          .[_f_n°.document.sage] = ""
          .[_f_commentaire] = "Commentaires : "
     End With
    

    'Destinataire à paramétrer !
     Destinataire = "xxxxx@yyyyyy.com"
     OLK_Mail Destinataire, Objet, Corps, NomFichier
    
     Kill NomFichier
    
End Sub

Modification de l'ajout dans Source
Enrichi (BBcode):
'**************************************
'Ajout de la nouvelle anomalie
'**************************************
Private Sub ajoutbase_Click()
     Dim dEmiss, dRécep, DCtrl, DRéal, TxAno, QtRécep, QtAno
     If WorksheetFunction.Max(Source.[_t_sources[N° Fiche]]) >= CDbl(Me.n°fiche) Then MsgBox "La fiche est déjà enregistrée !": Exit Sub
     If dateemission = "" Then dEmiss = "" Else dEmiss = DateValue(dateemission)
     If datereception = "" Then dRécep = "" Else dRérep = DateValue(datereception)
     If datcontrole = "" Then DCtrl = "" Else DCtrl = DateValue(datcontrole)
     If datrel = "" Then DRéal = "" Else DRéal = DateValue(datrel)
     If tauxanom = "" Then TxAno = "" Else TxAno = Evaluate(Replace(tauxanom, ",", "."))
     If qterecep = "" Then QtRécep = "" Else QtRécep = CDbl(qterecep)
     If qteanom = "" Then QtAno = "" Else QtAno = CDbl(qteanom)
     With Source
          tb = Array(CDbl(n°fiche), dEmiss, receptionnaire, dRécep, frspresta, transporteur, typano, acceptmarch, _
                     refarticle, design, lot, ddmdluo, DCtrl, QtRécep, QtAno, TxAno, numsage, typeanom, action, _
                     DRéal, nomvalid, typdoc, numdoc, comments)
          
          If .[_t_sources[N° Fiche]].Cells(.[_t_sources[N° Fiche]].Rows.Count) <> "" Or .[_t_sources].ListObject.ListRows.Count = 0 Then .[_t_sources].ListObject.ListRows.Add
          
          With .[_t_sources].ListObject
               .ListRows(.ListRows.Count).Range.Value = tb
          End With
     End With
     
     MsgBox " Votre anomalie réception a bien été enregistrée dans la base de données", vbOKOnly + vbInformation, "CONFIRMATION"
End Sub

Lien référence-Désignation article
Enrichi (BBcode):
Private Sub refarticle_Change()
     Idx = Me.refarticle.ListIndex
     If Idx <> -1 Then
          Me.design = Listes.[_t_designation].Cells(Idx + 1)
     Else
          Me.design = ""
     End If
End Sub

Calcul Taux anomalie
Enrichi (BBcode):
Private Sub qteanom_Change()
     If IsNumeric(Me.qterecep) And Me.qterecep <> 0 And IsNumeric(Me.qteanom) Then
          Me.tauxanom = Format(CDbl(Me.qteanom) / CDbl(Me.qterecep), "0.0%")
     Else
          Me.tauxanom = ""
     End If
End Sub

Private Sub qterecep_Change()
     If IsNumeric(Me.qterecep) And Me.qterecep <> 0 And IsNumeric(Me.qteanom) Then
          Me.tauxanom = Format(CDbl(Me.qteanom) / CDbl(Me.qterecep), "0.1%")
     Else
          Me.tauxanom = ""
     End If
End Sub

Voir Pj
Amicalement
Alain
 

Pièces jointes

  • envoyer un formulaire par e-mail.xlsm
    316.6 KB · Affichages: 19

Dudu2

XLDnaute Barbatruc
J'ai modifié les fichiers du Post #3 pour que les manips faites sur la feuille pour créer / copier / exporter l'image n'impactent pas le Worbook.Saved du classeur et qu'on ne soit pas invité à Enregistrer le classeur si aucune modif n'y a été faite mais seulement des exportations d'images.
 

FLAM04

XLDnaute Nouveau
bonsoir

Merci beaucoup pour votre aide. En revanche même en notant l'adresse e-mail j'ai un message d'erreur en retour sur le fichier. En réfléchissant un peu sur l'intérêt du fichier, je me rends compte que les 3 premières parties sont à remplir par la réception, mais que la partie ACTION, est plutôt à remplir par les valideurs de l'action, comment faire pour qu'il y ait un première envoi par la réception vers les valideurs et un validation de l'action par les valideurs pour un renvoi vers la réception pour mise en place de l'action à mettre en place. il faut bien évidemment qu'une même ligne de l'onglet source soit alimenté

En espérant avoir été suffisamment clair

en tout cas un grand merci pour votre aide!!
 

Dudu2

XLDnaute Barbatruc
Bonsoir,
comment faire pour qu'...
Aucune idée de la partie fonctionnelle donc aucune suggestion possible.
Dans ton process, s'agit-il de faire circuler un classeur, plusieurs classeurs, des mails ? A toi de voir.
Demande-moi de faire décoller un A320 et je trouverai peut-être des éléments de réponse, mais là... !
 

FLAM04

XLDnaute Nouveau
Bonsoir,

Aucune idée de la partie fonctionnelle donc aucune suggestion possible.
Dans ton process, s'agit-il de faire circuler unsseur, plusieurs classeurs, des mails ? A toi de voir.
Demande-moi de faire décoller un A320 et je trouverai peut-être des éléments de réponse, mais là... !
Effectivement difficile d'expliquer.
les parties : réception transport / Article et contrôle sont à complété par notre réceptionnaire, afin de signaler une anomalie. Il n est pas décisionnaire de l'action à mettre en place seuls la qualité, la direction ou le responsable le sont

en bref le réceptionnaire complète ses 3 partie, les enregistre (reception transport / Article et contrôle) envoi l'information par mail via le formulaire aux responsable de l'actions qui lui retourne une réponse par mail toujours via le formulaire. le réceptionnaire enregistre la réponse

je ne sait pas si j'ai été un peu plus clair....

désolé si cela n'est pas le cas .....
 

Dudu2

XLDnaute Barbatruc
Ok, je vois.

Tu ne peux pas te servir du mail pour transporter un formulaire "vivant".
Le formulaire a besoin de l'environnement Excel et des données Excel.
Donc seul un fichier Excel peut être transporté en pièce jointe entre la réception et la validation, fichier qui aura besoin d'être lancé, modifié et ré-attaché en réponse. C'est pas viable. D'autant que dans ce cas il te faudrait 1 fichier Excel par anomalie.

Si ta procédure est basée sur des emails, il faut que:
1 - La saisie initiale se fasse sur formulaire Excel
2 - le formulaire saisi doit populer un tableau dans une feuille Excel
3 - le tableau doit être copié dans le mail envoyé à la validation
4 - la validation répond en modifiant le tableau directement dans le mail
5 - la réception modifie les données Excel via le formulaire en copiant l'action indiquée dans le mail.

Pour copier un tableau dans un mail (étape 3) voir ce sujet récent.
Perso je n'ai rien compris à la solution de @patricktoulon mais ça a l'air de marcher.
Demande à @WarDog ce qu'il a fait si nécessaire.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Mais si la réception et la validation partagent un réseau d'entreprise, je ne ferais pas comme ça.
Je m'arrangerais pour que le fichier partagé sur le réseau comporte une étape de validation des anomalies non encore validées. Et une petite protection pour l'exclusivité d'accès.
 

FLAM04

XLDnaute Nouveau
Bonjour

je viens de penser à une chose, si je scinde mon formulaire en 2:

le Formulaire rempli par le réceptionnaire ne comportant que les parties suivantes:

1656925435771.png


je crée un second formulaire pour les décisionnaire en charge de la mise ne place de l'action:

1656925543799.png


afin que la ligne dans l'onglet source soit rempli, il est peut être possible d'utiliser le n° de litige comme clé? il suffirait alors que lors de la saisie de l'action le par le valideure il précise le n° de litige pour que la ligen puisse se compléter.

qu'en pensez vous et comment le matérialiser?

MErci pour votre aide.
 

Dudu2

XLDnaute Barbatruc
Bonjour,

Je sais pas trop quoi te dire.
C'est sûr que ce sont 2 étapes différentes et donc que les données saisies sont différentes.
Mais la Validation a peut-être besoin de voir les données de la Réception.
Donc pour moi (sans savoir vraiment), soit le même formulaire avec accès à la saisie sélectif selon l'étape, soit 2 formulaires comme tu le présentes si la Validation n'a pas besoin de voir les infos de Réception (ce qui serait étonnant).
 

FLAM04

XLDnaute Nouveau
Bonjour

j'ai effectué des modifications sur le formulaire initiale. J'ai scindé le premier formulaire en 2:

- le formulaire de "saisie anomalie réception" et donc entièrement rempli par la réception et envoyé par e-mail via le bouton prévu à cet effet au service qualité....

- le second formulaire "action anomalie" est remplie par la qualité pour réponse au service réception sur l'action à mettre en place.

je souhaiterais donc que:

- le n° de fiche anomalie réception puisse être repris par la qualité pour que les colonnes "S" à "W" de la feuille source puissent être alimentées grâce à un bouton sur le formulaire "ACTION ANOMALIE"

-Qu'en plus du formulaire envoyé par e-mail, le bouton "ACTION ANOMALIE" puisse aussi être présent dans le corps du mail et fonctionnel pour que le formulaire s'ouvre et que la qualité puisse à son tour répondre en et envoyer sa réponse en automatique grâce à un bouton situé sur son formulaire

En espérant que celà soit possible.

Merci pour votre aide
 

Pièces jointes

  • recap anomalies réceptionv2.xlsm
    313.6 KB · Affichages: 4

FLAM04

XLDnaute Nouveau
Bonjour

j'ai effectué des modifications sur le formulaire initiale. J'ai scindé le premier formulaire en 2:

- le formulaire de "saisie anomalie réception" et donc entièrement rempli par la réception et envoyé par e-mail via le bouton prévu à cet effet au service qualité....

- le second formulaire "action anomalie" est remplie par la qualité pour réponse au service réception sur l'action à mettre en place.

je souhaiterais donc que:

- le n° de fiche anomalie réception puisse être repris par la qualité pour que les colonnes "S" à "W" de la feuille source puissent être alimentées grâce à un bouton sur le formulaire "ACTION ANOMALIE"

-Qu'en plus du formulaire envoyé par e-mail, le bouton "ACTION ANOMALIE" puisse aussi être présent dans le corps du mail et fonctionnel pour que le formulaire s'ouvre et que la qualité puisse à son tour répondre en et envoyer sa réponse en automatique grâce à un bouton situé sur son formulaire

En espérant que celà soit possible.

Merci pour votre aide
 

Pièces jointes

  • recap anomalies réceptionv2.xlsm
    308 KB · Affichages: 9

Discussions similaires

Réponses
2
Affichages
198

Statistiques des forums

Discussions
312 088
Messages
2 085 203
Membres
102 818
dernier inscrit
NeoMaint