Bonjour à tous,
J'ai créer (en m'inspirant énormément de ce post https://forum.excel-pratique.com/excel/recuperer-les-informations-d-un-mail-t30977.html ). Malheureusement, mon code pêche par moment et je n'arrive pas à comprendre ce qui lui pose problème.
1er problème : il faut impérativement qu'outlook soit "ouvert" ... pourtant mon instruction lance outlook en arrière plan ... ça je le vois ... mais ne fait rien
2e problème : quand j'active ma macro le premier mail est traité et les suivant recopie les informations du premier à partir de cette ligne
3e problème : bizarrement quand je marque manuellement les mais en "non lu" et que je relance la macro celle ci les lit normalement et sus correctement les instructions.
J'espère vraiment que certains pourront me guider pour la modification de cette commande pour mieux comprendre les mails sont sous cette forme :
Code Barre utilisateur : "12345" ou "12345678"
Localisation courrante : **********
Lieu de retrait : ********
Code Barre Exemplaire : 123456
Titre : VBA pour les nuls
Auteur : excel-download
Cote : *******
Ce lien n'existe plus
N de lecteur : "12345" ou "12345678"
Nom : Mr Jean BOMBEUR
Date de naissance : 1111-11-11
Adresse : 10 rue de la soif
Mel : aaaaaaaa@bbbbbb.ccc
Et pour finir voici mon code :
Est ce que j'ai oublié un élément dans la construction de mon code ? Une variable ou autre ? bref est ce qu'il est propre et d'où peuvent venir mes problèmes ?
Petites précisions : idéalement il faudrait prendre en compte qu'outlook est ouvert en parallèle.
En l'état actuel même si outlook est ouvert j'ai le problème au niveau de la lecture du contenu des mails.
Merci d'avance à ceux qui prendront le temps de se pencher sur mon problème.
J'ai créer (en m'inspirant énormément de ce post https://forum.excel-pratique.com/excel/recuperer-les-informations-d-un-mail-t30977.html ). Malheureusement, mon code pêche par moment et je n'arrive pas à comprendre ce qui lui pose problème.
1er problème : il faut impérativement qu'outlook soit "ouvert" ... pourtant mon instruction lance outlook en arrière plan ... ça je le vois ... mais ne fait rien
2e problème : quand j'active ma macro le premier mail est traité et les suivant recopie les informations du premier à partir de cette ligne
Code:
dejafait = True
For compt = 0 To UBound(mybody)
If InStr(1, UCase(mybody(compt)), UCase("Code Barre utilisateur ")) Then
CBlecteur = LTrim(Split(mybody(compt), ":")(1))
dejafait = False
J'espère vraiment que certains pourront me guider pour la modification de cette commande pour mieux comprendre les mails sont sous cette forme :
Code Barre utilisateur : "12345" ou "12345678"
Localisation courrante : **********
Lieu de retrait : ********
Code Barre Exemplaire : 123456
Titre : VBA pour les nuls
Auteur : excel-download
Cote : *******
Ce lien n'existe plus
N de lecteur : "12345" ou "12345678"
Nom : Mr Jean BOMBEUR
Date de naissance : 1111-11-11
Adresse : 10 rue de la soif
Mel : aaaaaaaa@bbbbbb.ccc
Et pour finir voici mon code :
Code:
Sub LireMessages()
Dim olapp As Outlook.Application
Dim NS As Object, Dossier As Object
Dim OlExp As Object
Dim i As Object
Dim mybody() As String
Dim fromsender As String
Dim Obj As OLEObject
Set olapp = CreateObject("Outlook.Application")
Set NS = olapp.GetNamespace("MAPI")
Set Dossier = NS.Folders("aaaaaaaaaaaaaa@bbbbbb.ccc").Folders("Boîte de réception")
For Each i In Dossier.Items
Ligne = Sheets(1).[A65000].End(xlUp).Row + 1
DateT = Now()
If i.UnRead = True Then
If i.SenderEmailAddress = "toujours@la.même" And i.Subject Like ("*disponible*") Then '
chaine = i.Subject
mybody = Split(i.Body, vbCrLf)
fromsender = i.SenderEmailAddress
dateM = i.CreationTime
dejafait = True
For compt = 0 To UBound(mybody)
If InStr(1, UCase(mybody(compt)), UCase("Code Barre utilisateur ")) Then
CBlecteur = LTrim(Split(mybody(compt), ":")(1))
dejafait = False
End If
If InStr(1, UCase(mybody(compt)), UCase("Localisation courrante ")) > 0 Then
Localisation = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Lieu de retrait")) > 0 Then
retrait = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Code Barre Exemplaire")) > 0 Then
codebarre = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Titre")) > 0 Then
titre = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Auteur")) > 0 Then
auteur = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Cote")) > 0 Then
cote = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Nom")) > 0 Then
lecteur = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Téléphone")) > 0 Then
tél = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("HYPERLINK")) > 0 Then
desti = LTrim(Split(mybody(compt), """")(2))
End If
Next
Sheets(1).Range(Cells(Ligne, 1), Cells(Ligne, 14)).Borders.Value = 1
Sheets(1).Cells(Ligne, 13).Interior.Color = RGB(209, 209, 209)
Sheets(1).Cells(Ligne, 1) = sujet
Sheets(1).Cells(Ligne, 2) = dateM
Sheets(1).Cells(Ligne, 3) = CBlecteur
Sheets(1).Cells(Ligne, 6) = lecteur
Sheets(1).Cells(Ligne, 4) = tél
Sheets(1).Cells(Ligne, 5) = desti
Sheets(1).Cells(Ligne, 12) = retrait
Sheets(1).Cells(Ligne, 11) = codebarre & "0390"
Sheets(1).Cells(Ligne, 7) = titre
Sheets(1).Cells(Ligne, 8) = auteur
Sheets(1).Cells(Ligne, 9) = cote
Sheets(1).Cells(Ligne, 10) = Localisation
Sheets(1).Cells(Ligne, 13).Font.Name = "Wingdings"
Sheets(1).Cells(Ligne, 13) = "¨"
Sheets(1).Cells(Ligne, 15) = DateAdd("d", 7, DateT)
i.UnRead = False
Else
If i.SenderEmailAddress = "toujours@la.même" And i.Subject Like ("*Annulation*") Then
chaine = i.Subject
mybody = Split(i.Body, vbCrLf)
fromsender = i.SenderEmailAddress
dateM = i.CreationTime
For compt = 0 To UBound(mybody)
If InStr(1, UCase(mybody(compt)), UCase("Code Barre utilisateur ")) Then
CBlecteur = LTrim(Split(mybody(compt), ":")(1))
End If
If InStr(1, UCase(mybody(compt)), UCase("Code Barre Exemplaire")) > 0 Then
codebarre = LTrim(Split(mybody(compt), ":")(1))
End If
Next
Sheets(1).Range(Cells(Ligne, 1), Cells(Ligne, 14)).Borders.Value = 1
Sheets(1).Cells(Ligne, 13).Interior.Color = RGB(209, 209, 209)
Sheets(1).Cells(Ligne, 1) = sujet
Sheets(1).Cells(Ligne, 2) = dateM
Sheets(1).Cells(Ligne, 3) = CBlecteur
Sheets(1).Cells(Ligne, 11) = codebarre & "0390"
Sheets(1).Cells(Ligne, 13).Font.Name = "Wingdings"
Sheets(1).Cells(Ligne, 13) = "¨"
Sheets(1).Cells(Ligne, 15) = DateAdd("d", 7, DateT)
i.UnRead = False
End If
End If
End If
Next i
Set NS = Nothing
Set Dossier = Nothing
Set i = Nothing
End Sub
Est ce que j'ai oublié un élément dans la construction de mon code ? Une variable ou autre ? bref est ce qu'il est propre et d'où peuvent venir mes problèmes ?
Petites précisions : idéalement il faudrait prendre en compte qu'outlook est ouvert en parallèle.
En l'état actuel même si outlook est ouvert j'ai le problème au niveau de la lecture du contenu des mails.
Merci d'avance à ceux qui prendront le temps de se pencher sur mon problème.
Dernière édition: