Exporter des informations Outlook vers Excel
Bonjour,
Je cherche à ajouter deux macros dans Outlook.
Les deux macros seraient accessibles via le ruban Outlook et devrait s’appliquer sur le mail en cours « celui en prévisualisation » (dans la fenêtre principale d’Outlook) ou, sur le mail ouvert et dont les macros sont lancées via le bouton du ruban de ce même mail. (Je pense ici à me prémunir du cas où un utilisateur aurait plusieurs mails ouverts en même temps).
1ere macro :
L’objectif de cette macro est de copier des informations issues de ce mail pour les coller dans un classeur connu dans un onglet connu.
Les informations à collecter sont :
- L’adresse de l’expéditeur ;
- La date de réception ;
- L’heure de réception ;
- L’objet du mail ;
- Dans le contenu du mail :
- L’information se trouvant après « nom client : » et jusqu’au « ; »
- L’information se trouvant après « information 2 : » et jusqu’au « ; »
- L’information se trouvant après « activité : » et jusqu’au « ; »
- L’information se trouvant après « information 4 : » et jusqu’au « ; »
- L’information se trouvant après « information 5 : » et jusqu’au « ; »
Chaque « ; » est suivi d’un retour à la ligne.
Ces informations sont ensuite à coller dans un classeur (dont le chemin est connu et toujours identique sur un serveur partagé) et dans un onglet (connu) qui a pour but de se remplir au fur et à mesure de l’application de cette macro sur différents mails. Cela induit qu’à chaque lancement de cette macro les informations sont collectées et collées dans le même ordre (même colonne à chaque fois) et dans la première ligne vide rencontrée.
Une fois collée cette dernière ouvre une insert box avec les différentes informations déjà remplies (si présentes dans le mail) et vide si absente du mail (en effet l’information 5 peux être présente alors qu’il n’y a pas dans le mail d’activité). C’est alors à l’utilisateur de rentrer manuellement les informations manquantes voir de nouvelles qui seront stockées dans les colonnes suivantes.
2ième macro :
La première macro a déjà été exécutée et il s’agit ici d’aller implémenter une nouvelle information (la date d’exécution de cette deuxième macro) dans la ligne qui correspond au mail en question (je pense à une clef composée du nom client & date du mail pour pouvoir identifier la ligne car il peut y avoir plusieurs fois des mails sur le même client) dans une colone specifique et toujours identique.
Voilà mon objectif.
Je ne sais pas comment commencer car je ne sais pas comment faire vis-à-vis d’Outlook.
Sachez que je suis débutant en vba Excel et que je n’ai jamais codé autre que dans vba Excel. Merci donc d’avance de votre indulgence et de votre bienveillance.
Je remercie d'avance tout ceux qui se seront penché sur mon besoin.
Bien à vous,
Bonjour tbo,
Des pistes sur ta première partie dans Outlook.
A mettre dans un module vba Outlook.
Sub info_active_email()
'1- extraire les données de l'email
Dim SelectedMail As MailItem
Dim expediteur, objet, contenu As String
Dim date_reception As Date
Dim heure_reception As Date
Select Case TypeName(ActiveWindow)
Case "Explorer"
Set SelectedMail = ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set SelectedMail = ActiveInspector.CurrentItem
End Select
With SelectedMail
If .SenderEmailType = "EX" Then
expediteur = .Sender.GetExchangeUser().PrimarySmtpAddress
Else
expediteur = .SenderEmailAddress
End If
date_reception = CDate(Int(.ReceivedTime))
heure_reception = TimeValue(.ReceivedTime)
objet = .Subject
contenu = .Body
nom_client = Split(Split(.Body, "nom client :")(1), ";")(0)
information2 = Split(Split(.Body, "information 2 :")(1), ";")(0)
activite = Split(Split(.Body, "activité :")(1), ";")(0)
information4 = Split(Split(.Body, "information 4 :")(1), ";")(0)
information5 = Split(Split(.Body, "information 5 :")(1), ";")(0)
End With
End SubAprès comme je n'ai pas d'exemple concret, je ne peux pas tester si t'aider sur l'intégration dans Excel.
Ici les infos du mail vont dans des variables donc si rien ne s'affiche à l'execution c'est normal. Il faut mettre des points d'arrêt et des espions.
Bonjour Funkyfoenky,
Tout d'abord merci d'avoir pris le temps de t’être penché sur ma problématique.
A ce stade grâce à toi et et mes recherches sur la toile j'en suis là :
Sub test2()
Dim MonApplication As Object
Dim MonFichier As String
Dim XlClas
Dim SelectedMail As MailItem
Dim expediteur, objet, contenu As String
Dim date_reception As Date
Dim heure_reception As Date
Dim Nom_Prenom As String
Select Case TypeName(ActiveWindow)
Case "Explorer"
Set SelectedMail = ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set SelectedMail = ActiveInspector.CurrentItem
End Select
With SelectedMail
If .SenderEmailType = "EX" Then
expediteur = .Sender.GetExchangeUser().PrimarySmtpAddress
Else
expediteur = .SenderEmailAddress
End If
Nom_Prenom = .SenderName
date_reception = CDate(Int(.ReceivedTime))
heure_reception = TimeValue(.ReceivedTime)
objet = .Subject
contenu = .Body
nom_client = Split(Split(.Body, "Nom client :")(1), ";")(0)
CCN = Split(Split(.Body, "CCN :")(1), ";")(0)
activite = Split(Split(.Body, "Activité :")(1), ";")(0)
information4 = Split(Split(.Body, "Information 4 :")(1), ";")(0)
information5 = Split(Split(.Body, "Information 5 :")(1), ";")(0)
End With
Set MonApplication = CreateObject("Excel.Application")
MonFichier = "serveur\...\maquette future.xlsm"
Set XlClas = MonApplication.Workbooks.Open(MonFichier)
'Ecriture des valeurs dans tempo
XlClas.Worksheets("tempo").Range("A2").Value = Nom_Prenom
XlClas.Worksheets("tempo").Range("B2").Value = expediteur
XlClas.Worksheets("tempo").Range("C2").Value = date_reception
XlClas.Worksheets("tempo").Range("D2").Value = heure_reception
XlClas.Worksheets("tempo").Range("E2").Value = objet
XlClas.Worksheets("tempo").Range("F2").Value = nom_client
XlClas.Worksheets("tempo").Range("G2").Value = CCN
XlClas.Worksheets("tempo").Range("H2").Value = activite
XlClas.Worksheets("tempo").Range("I2").Value = information4
XlClas.Worksheets("tempo").Range("J2").Value = information5
XlClas.Worksheets("tempo").Range("K2").Value = contenu
'Sauvegarde des modifications et fermeture du classeur
XlClas.Close True
'On quitte Excel
MonApplication.Quit
'On libère la mémoire des variables
Set XlClas = Nothing
Set MonApplication = Nothing
End SubCela colle plutôt pas mal à mon souhait pour ce qui est du début de la macro 1.
Seul bémol : pour la recherche dans le mail si la notion "Client" n'est pas présente alors cela plante la macro. Est-il possible de mettre quelque chose du type si erreur : on continue la macro ?
Maintenant que l'importation des données Outlook est faite, je pense que le plus simple est de continuer à coder sous vba Excel (en tout cas c'est plus simple pour moi :))
Donc il faut maintenant implémenter à la fin de la macro ci-dessus un "Call" d'une macro qui sera pressente dans le fichier cible "maquette.furure.xlsm".
J'en suis a ce stade. Manifestement la fonction Call ne fonctionne pas si simplement que ça entre une macro Outlook et un fichier Excel mais je cherche :p
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Bonjour,
Entre Excel et Word, pour que call fonctionne (de ce que je sais), il faut aussi spécifier le nom du module dans lequel se trouve la macro. Peut-être est-ce pareil entre Outlook et Excel ?
Bonjour JoyeuxNoel,
Tout d'abord merci d'avoir pris le temps de t’être penché sur ma problématique.
Effectivement tu as raison (je te remercie d'ailleurs de m'avoir mis sur le bon chemin) :
Sub export_des_données()
Dim MonApplication As Object
Dim monfichier As String
Dim XlClas
Dim SelectedMail As MailItem
Dim expediteur, objet, contenu As String
Dim date_reception As Date
Dim heure_reception As Date
Dim Nom_Prenom As String
Select Case TypeName(ActiveWindow)
Case "Explorer"
Set SelectedMail = ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set SelectedMail = ActiveInspector.CurrentItem
End Select
With SelectedMail
If .SenderEmailType = "EX" Then
expediteur = .Sender.GetExchangeUser().PrimarySmtpAddress
Else
expediteur = .SenderEmailAddress
End If
Nom_Prenom = .SenderName
date_reception = CDate(Int(.ReceivedTime))
heure_reception = TimeValue(.ReceivedTime)
objet = .Subject
contenu = .Body
'nom_client = Split(Split(.Body, "Nom client :")(1), ";")(0)
'CCN = Split(Split(.Body, "CCN :")(1), ";")(0)
'activite = Split(Split(.Body, "Activité :")(1), ";")(0)
'information4 = Split(Split(.Body, "Information 4 :")(1), ";")(0)
'information5 = Split(Split(.Body, "Information 5 :")(1), ";")(0)
End With
Set MonApplication = CreateObject("Excel.Application")
MonApplication.Visible = True
monfichier = "\\serveur\...\maquette future.xlsm"
Set XlClas = MonApplication.Workbooks.Open(monfichier)
'Ecriture des valeurs dans tempo
XlClas.Worksheets("tempo").Range("A2").Value = Nom_Prenom
XlClas.Worksheets("tempo").Range("B2").Value = expediteur
XlClas.Worksheets("tempo").Range("C2").Value = date_reception
XlClas.Worksheets("tempo").Range("D2").Value = heure_reception
XlClas.Worksheets("tempo").Range("E2").Value = objet
'XlClas.Worksheets("tempo").Range("F2").Value = nom_client
'XlClas.Worksheets("tempo").Range("G2").Value = CCN
' XlClas.Worksheets("tempo").Range("H2").Value = activite
'XlClas.Worksheets("tempo").Range("I2").Value = information4
' XlClas.Worksheets("tempo").Range("J2").Value = information5
XlClas.Worksheets("tempo").Range("K2").Value = contenu
Dim macro_excel
Set macro_excel = MonApplication.Workbooks.Open("\\serveur\...\maquette future.xlsm")
MonApplication.Run "Module1.macro1excel"
XlClas.Close True 'Sauvegarde des modifications et fermeture du classeur
MonApplication.Quit 'On quitte Excel
Set XlClas = Nothing 'On libère la mémoire des variables
Set MonApplication = Nothing 'On libère la mémoire des variables
MsgBox "fini"
End Subreste ma problématique de données pas pressente dans le corps de mail et passer au traitement des données dans excel...
Ca avance et c'est plaisant! :)
Tu peux ajouter
On Error Resume Nextqui va ignorer les erreurs.