VBA Excel : récupération d'infos stockés dans une variable object (Outlook)
Bonjour à toutes et tous, je me permet de poster ce message car je maitrise pas très bien le VBA..
Voilà mon problème :
Je suis en train de créer un code en VBA pour mon travail, je voudrais pouvoir envoyer un mail via outlook après avoir rempli un fichier Excel ;
je développe :
1. J'ai un classeur Excel dans lequel j'ai créé un formulaire pour l'aide à la saisie et qui me rempli automatiquement les champs que je désire remplir ->OK
dans mon formulaire, j'ai un champ "alerte" qui peut recevoir 3 valeurs (" " ; P1; P2)
2. Si la valeur est P1 ou P2 je dois envoyer un mail spécifique a l'alerte.
jusque là aucun souci, mon code fonctionne et après avoir rempli mon fichier excel , le code se poursuit par le module de préparation de l'envoi du mail désiré..
Mon problème : mon mail est un model oft qui est stocké dans un répertoire bien spécifique dans outlook (j'ai mon outlook a mon nom et la bal de ma boite)
j'ai réussi à développer le module de préparation qui va aller sélectionner le model de mail a utiliser et le stocker dans une variable MonMail ; la variable j'ai du la déclarer en tant qu'objet pour que ca fonctionne. je peux sauvegarder la variable sur un répertoire de mon PC ou sur notre serveur (via la fonction MonMail.SaveAs), quand je vais voir dans le répertoire le fichier est bien enregistré en .oft et si je le lance en double cliquant dessus, outlook ouvre le model.
Par contre je dois créer un nouveau mail basé sur ce modèle car je dois changer l'émetteur du mail, le sujet, le corps du mail ,la signature mais garder les champs .to et .cc
je voudrais savoir comment récupérer les deux valeurs (.to et .cc) stockées dans le fichier ost que j'ai enregistré où mieux : les récupérer de ma variable MonMail comme cela pas besoin de sauvegarder le fichier modèle sur mon PC ou sur le serveur
J'espères que j'ai été assez clair, si besoin de précisions n'hésitez pas...
merci par avance
Bonjour,
Je ne suis pas sûr d'avoir bien compris.
Mais .to et .cc sont des propriétés (de type string a priori) de l'objet MailItem donc vous devriez pouvoir stocker les valeurs dans une variable :
dim sTo$, sCC$
sTo = MonMail.to
sCC = MonMail.ccSinon, avec du code posté à l'aide des balises </>, ça pourrait permettre à certains d'y voir plus clair.
Cdlt,
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
ci-dessous code :
Set olk = CreateObject("outlook.application")
Set email_modèle = olk.CreateItemFromTemplate(CreateObject("WScript.Shell").SpecialFolders("Templates") & "\modèle.oft")
destinataire_A = email_modèle.to
destinataire_CC = email_modèle.CCBonjour et merci à vous, je viens ajouter l'extrait de mon code pour éclaircir
Public TypeSite As String 'variable qui stockera le type de site
Public TypeInc As String 'variable qui stockera la communication P1/P2
Public NomSite As String 'variable qui stockera le nom du site
Public Equipement As String 'variable qui stockera léquipement impacté
Public etat As String 'variable qui stockera si c'est coupé ou degradé
Public Description As String 'variable qui stockera la description de l'incident
Public Impact As String 'variable qui stockera l'impact de l'incident
Public NumeroInc As String 'variable qui stockera le numero incident
Public Status As String 'variable qui stockera le status du mail
Sub Prepare_envoi_mail()
''''''''''''''''''''''''''
'on declare les variables'
''''''''''''''''''''''''''
Dim X As Outlook.Application
Dim MonNameSpace As Outlook.Namespace
Dim MonDossier As Outlook.Folder 'variable qui stockera le dossier ou se trouve le mail
Dim MonMail As Object 'variable qui stockera le modèle de mail a utiliser
Dim L As Integer
Dim M As Integer 'variable qui stockera le code du modèle de mail a utiliser
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'on vérifie si outlook est chargé : sinon on le charge'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set X = Outlook.Application
On Error Resume Next
If X Is Nothing Then
Set X = CreateObject("Outlook.Application")
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' on selectionne le dossier ou se trouve le mail à ouvrir et on selectionne le mail'
' le mail a ouvrir est fonction que ce soit un P1 ou P2 et fonction du type de site'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sheets("XXXXXX").Select
L = Sheets("XXXXX").Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE
[A65536].End(xlUp).Select
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'On en profite pour récupérer les valeurs des variables que l'on aura besoin'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
TypeSite = ActiveCell.Range("B1").Value
TypeInc = ActiveCell.Range("J1").Value
NomSite = ActiveCell.Range("C1").Value
Equipement = ActiveCell.Range("D1").Value
NumeroInc = ActiveCell.Range("H1").Value
Status = "Ouverture"
Set MonNameSpace = X.GetNamespace("MAPI")
Set MonDossier = MonNameSpace.Folders.Item("BBBB").Folders.Item("CCCC").Folders.Item("Modèle Mail").Folders.Item(8).Folders.Item(TypeSite) 'dossier ou est le mail
Select Case TypeInc
Case "P1 Mail ouverture envoyé" 'là on doit envoyer un Mail service coupé
M = 2 'correspond à l'identifiant du model de mail service coupé dans le dossier outlook
etat = "COUPÉ"
Case "P2 Mail ouverture envoyé" 'là on doit envoyer un Mail service dégradé
M = 1 'correspond à l'identifiant du model de mail service dégradé dans le dossier outlook
etat = "DÉGRADÉ"
Case Else 'code si aucune des conditions précédentes n'est remplie
End Select
Set MonMail = MonDossier.Items(M) 'modèle de mail à utiliser
...mon pb : tout le début du code fonctionne ! Je voudrais pouvoir récupérer les deux informations que j'ai besoin (les destinataires, et ceux en copie) du mail stocké dans ma variable Mon Mail.
dans l'absolu je voudrais affecter une variable string (destinataire) qui aurait pour valeur le contenu de mon champs destinataire du modèle de mail stocké dans la variable MonMail....
du genre :
dim destinataire as string
set destinataire = MonMail.destinataire
mais je ne sais pas si c'est faisable.. si ce n'est pas possible, la piste que j'avais pensé c'etait d'enregistrer ma variable MonMail en tant que fichier oft :
MonMail.saveas (le chemin complet),OlSaveAsType, oltemplate (j'ai bien le fichier ost qui se créé dans le repertoire) mais si ensuite je veux créer une fonction qui va me creer un nouveau mail à partir de ce modèle, ca ne marche plus..
Bonsoir, personne n'as une idée de la solution? je m'en sort pas, je ne sait toujours pas si on peut récupérer certaines informations (les destinataires et ceux en copie) de ma variable object : MonMail.
et quand j'utilise la procédure suivante : ca ne marche pas
Sub CreateFromTemplate()
Dim MyItem As Outlook.MailItem
Set MyItem = Application.CreateItemFromTemplate("chemin fichier modèle\temp.oft") 'exemple ou se trouve mon fichier.oft
MyItem.Display
End Sub MyItem ne prend aucune valeur.
comme si le saveas MonMail (que je met pour sauvegarder ma variable object en tant que fichier outlook model dans un répertoire de mon serveur) n'etait pas reconnu en tant que mailitem. Je précise que quand je double clique sur ce fichier, il ouvre bien le model de mail..
Merci aux personnes qui pourront m'aider
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Set MyItem = Application.CreateItemFromTemplate"Application" correspond à l'application Excel et non à l'application Outlook. Ceci serait mieux :
Dim olk As outlook.Application
Dim MyItem As outlook.MailItem
Set olk = CreateObject("outlook.application")
Set MyItem = olk.CreateItemFromTemplate("chemin fichier modèle\temp.oft") 'exemple ou se trouve mon fichier.oftBonjour, j'ai trouvé une autre solution, j'ai construit mon nouveau mail en html.. ca fonctionne très bien
merci de m'avoir répondu...
sujet clos!