Retourner des infos sur excel provenant d'un mail.

Fermé
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015 - 15 janv. 2015 à 09:20
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015 - 20 janv. 2015 à 11:46
Bonjour à tous,

Je voulais savoir s'il était possible de recuperer des info dans ma boite mail à partir de vba?
Il faudrait qu'à partir d'excel je puisse rentrer mon identifiant et mot de passe et ensuite trouver les mails, les ouvrir et retourner l'info qui m'interresse sur excel.

Merci beaucoup pour vos réponses!!!

Cordialement



A voir également:

9 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 15/01/2015 à 13:19
Bonjour,

Qu'elle boîte mail? Quel logiciel de messagerie?

🎼 Cordialement,
Franck 🎶
0
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015
15 janv. 2015 à 20:32
Bsr bsr Pijaku

J'utilise Gmail comme boite mail.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
16 janv. 2015 à 11:09
Bonjour,

J'ai un peu avancé sur votre projet.
Il me manque maintenant des infos capitales :
> ensuite trouver les mails, ==> Quels mails et comment les retrouver?
> et retourner l'info qui m'interresse sur excel. ==> Idem : qu'elles infos et comment les retrouver?

Info subsidiaire mais très importante, vous devez avoir Internet Explorer installé sur votre machine.
0
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015
18 janv. 2015 à 14:43
Bonjour, désolé pour le temps de réponse j'ai beaucoup de boulot et je n'ai pas pu repondre avant maintenant.
Je souhaite retrouver les mail qui m'interresse grace à l'adresse mail de l'emetteur.
(Si tu peux me fournir aussi toutes les differentes facon de faire les recherche je suis preneur).

Et pour l'info dans le mail... autant tous copier sur excel dans une feuille vierge et s'il faut je mixerai tous ca.


Merci pour ton aide Pijaku
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 janv. 2015 à 09:14
Bonjour,

Plus j'avance dans la macro Excel et plus je me dis que ce que tu essaies de faire est une vraie "usine à gaz".
Si tu disposes d'excel, peut être as tu tout le pack Office?
Si c'est le cas, installe et configure Outlook comme client de messagerie. Je pense que ce logiciel est à même de faire tout ce que tu désires.

Dis moi ce qu'il en est.
0
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015
19 janv. 2015 à 10:41
Bonjour,

:) :) :) je suis un pro pour les usines a gaz!!

Et pour Outlook, je ne suis pas trop interesser. Je prefere passer par internet explorer, je ne ne sait pas me servir de cette outil, ca me fere de l'excercice... Certes il y a peut-etre plus simple mais ca ira!!

Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 janv. 2015 à 14:41
Il est des choses rendues impossibles, ou du moins fortement improbables, par la technique.

En VBA, ta demande me semble être dans ce cas.
J'ai réussi pas mal de choses, mais je butte sur deux bugs qui me semblent insoluble, surtout en ce qui concerne le second.

Je vais tout de même te donner le résultat de mon travail, si tu trouves le moyen de contourner les bugs...

Le premier bug est intermittent.
Parfois la fonction :
Sub Cibler_Table_Msgs(Doc As HTMLDocument)
Dim maColl As IHTMLElementCollection, Tabl As HTMLTable
   
   Set maColl = Doc.getElementsByTagName("table")
   For Each Tabl In maColl
      If Tabl.className = "th" Then Set TableMsgs = Tabl: Exit For
   Next
End Sub

ne retourne rien.
Comme c'est intermittent, j'ai juste traité les fois ou elles ne retourne rien par :
   If Not TableMsgs Is Nothing Then
      Call Collect_Emails(TableMsgs)
   Else
      MsgBox "Bug. Veuillez recommencer"
      IE.Quit
      Set IE = Nothing
      Exit Sub
   End If

Donc, si ça bug, il faut retenter... Pour moi, même si ça n'est pas correct, ce bug est "résolu"...

Par contre, le second est plus ***embêtant***
Il s'agit d'un bug de remplissage de collections.
Dans l'exemple, ce code (tout à fait correct!) :
Sub Lien_Boite_Reception(Doc As HTMLDocument)
Dim maColl As IHTMLElementCollection, Lien As HTMLAnchorElement

   Set maColl = Doc.getElementsByTagName("a")
   For Each Lien In maColl
      If Lien.innerText Like "*" & "Boîte de réception" & "*" Then Set Lien_Reception = Lien: Exit For
   Next
End Sub

buggue sur la ligne :
 If Lien.innerText Like...

Exactement comme si la collection était vide.
Le message d'erreur est une erreur 70 permission refusée...
En Mode pas à pas (F8 successifs), cela se déroule parfaitement, toute la macro se déroule sans souci...

Donc, je ne saurais pas t'aider davantage, et le résultat que je te fourni n'est pas fonctionnel, j'en suis désolé.
Je te place les différentes procédures et mon classeur de test dans une réponse au cas ou quelqu'un pourrait nous dépanner...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 19/01/2015 à 14:51
Précisions :
- Ces codes, dans l'état comporte des bugs, à résoudre,
- la macro ne réalise l'opération que pour la première page des emails. Pour pouvoir le faire sur toutes, il conviendra de résoudre les bugs existants...
J'ai identifié les endroits succeptibles de bugguer dans les commentaires :
 '************* 1er BUG connu
'***** Résolution 1er BUG

&
 '******** Risque de 2ème BUG et
'ICI


Les codes :

Option Explicit

Dim Lien_Reception As HTMLAnchorElement
Dim Lien_Msgs_Prec As HTMLAnchorElement
Dim Tb()
Dim TableMsgs As HTMLTable
Dim Identifier_Mail As String

'**************************************************

Sub Import_Mails_De_Gmail()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim i As Integer

   Do
      Identifier_Mail = InputBox("Saisir un point commun pour identifier vos mails : ", "Correspondance dans la seconde colonne de Gmail")
   Loop While Identifier_Mail = ""
   'Insertion d'une nouvelle feuille
   Call Ajoute_Feuille
   'lance Internet Explorer
   IE.navigate "https://mail.google.com/"
   IE.Visible = True
   WaitIE IE
   Set IEDoc = IE.document
   If Not IEDoc.URL Like "*" & "inbox" & "*" Then Call Connecte(IEDoc)
   WaitIE IE
   Set IEDoc = IE.document
   'Affichage html
   Call AffichageHTML(IEDoc)
   WaitIE IE
   Set IEDoc = IE.document
   'recherche du lien vers boite de réception
   Call Lien_Boite_Reception(IEDoc)
   'recherche du lien vers les mails précédents
   Call Lien_Precedents(IEDoc)
   'cible la table contenant les emails
   Call Cibler_Table_Msgs(IEDoc) '************* 1er BUG connu
   'boucle sur les éléments de cette table et remplit le tableau des liens
   If Not TableMsgs Is Nothing Then
      Call Collect_Emails(TableMsgs)
   Else
      MsgBox "Bug. Veuillez recommencer"  '***** Résolution 1er BUG
      IE.Quit
      Set IE = Nothing
      Exit Sub
   End If
   'Restitution des données
   For i = LBound(Tb) To UBound(Tb)
      Cells(i + 1, 1) = Tb(i)
   Next
   IE.Quit
   Set IE = Nothing
End Sub

'**************************************************

Sub Ajoute_Feuille(Optional SertARien As Byte)
Dim strNewName As String, strCara As String, NouvelleFeuille As Boolean

Do
   NouvelleFeuille = True
   strNewName = InputBox("Nom de la nouvelle feuille : ", "Saisir un nom de feuille valide")
   If Len(strNewName) = 0 Then NouvelleFeuille = False
   If Valid_Name(strNewName, strCara) = False Then
      MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _
            "Un nom de feuille ne peut pas contenir le caractère : " & strCara, vbCritical
      NouvelleFeuille = False
   Else
   End If
   If Feuil_Exist(ThisWorkbook.Name, strNewName) = True Then
      MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _
            "Ce nom de feuille est déjà utilisé dans ce classeur.", vbCritical
      NouvelleFeuille = False
   End If
   If NouvelleFeuille = True Then Exit Do
Loop
ThisWorkbook.Sheets.Add
ActiveSheet.Name = strNewName
End Sub

'**************************************************

'Test si la chaine contient un caractère à éviter
Function Valid_Name(strName As String, strChr As String) As Boolean
Dim i As Byte, Tb_Car() As String, strProhib As String

strProhib = "/\:*?""<>|" ' Liste des caractères à éviter
Tb_Car = Split(StrConv(strProhib, vbUnicode), Chr$(0))
'Boucle sur tous les caractères à éviter
 'Nota : le -1 est dû au Split de la chaine par le séparateur Chr(0)
 'En effet, la chaine se terminant par un Chr(0) il convient d'exclure ce dernier caractère
For i = LBound(Tb_Car) To UBound(Tb_Car) - 1
    'Test si la chaîne contient un caractère prohibé
    If InStr(strName, Tb_Car(i)) > 0 Then
 'Si oui : Return False
        Valid_Name = False
 'ET Retourne le caractère prohibé
        strChr = Tb_Car(i)
        Exit Function
    End If
Next i
'Si OK : Return True
Valid_Name = True
End Function

'**************************************************

'Test si la feuille existe déjà
Function Feuil_Exist(strWbk As String, strWsh As String) As Boolean

'Gestionnaire d'erreur
On Error Resume Next
    '"Test"
    Feuil_Exist = (Workbooks(strWbk).Sheets(strWsh).Name = strWsh)
End Function

'**************************************************

Sub WaitIE(IE As InternetExplorer)
   'On boucle tant que la page n'est pas totalement chargée
   Do Until IE.ReadyState = READYSTATE_COMPLETE
      DoEvents
   Loop
End Sub

'**************************************************

Sub Connecte(Doc As HTMLDocument)
   Dim eMailAdress As String, PassWord As String
   Dim InputMail As HTMLInputElement, InputPass As HTMLInputElement
   Dim InputCookie As HTMLInputElement, InputSubmit As HTMLInputElement
   
   Do
      eMailAdress = InputBox("Adresse e-mail : ", "Saisir votre adresse mail")
   Loop While eMailAdress = ""
   Do
      PassWord = InputBox("Mot de passe : ", "Saisir votre mot de passe")
   Loop While PassWord = ""
   
   Set InputMail = Doc.getElementById("Email") 'Saisie adresse email
   InputMail.Value = eMailAdress
   Set InputPass = Doc.getElementById("Passwd") 'Saisie Mot de passe
   InputPass.Value = PassWord
   Set InputCookie = Doc.getElementById("PersistentCookie") 'Décoche "Rester connecté"
   If InputCookie.Value = "yes" Then InputCookie.Click
   Set InputSubmit = Doc.getElementById("signIn") 'Clic sur Connexion
   InputSubmit.Click
End Sub

'**************************************************

Sub AffichageHTML(Doc As HTMLDocument) '******** Risque de 2ème BUG
Dim maColl As IHTMLElementCollection, Elem As HTMLInputElement
   Set maColl = Doc.getElementsByTagName("input")
   For Each Elem In maColl
      'ICI
      If Elem.Value = "Affichage HTML simplifié" And Elem.className = "submit_as_link" Then Elem.Click: Exit For
   Next
End Sub

'**************************************************

Sub Lien_Boite_Reception(Doc As HTMLDocument) '******** Risque de 2ème BUG
Dim maColl As IHTMLElementCollection, Lien As HTMLAnchorElement

   Set maColl = Doc.getElementsByTagName("a")
   For Each Lien In maColl
      'ICI
      If Lien.innerText Like "*" & "Boîte de réception" & "*" Then Set Lien_Reception = Lien: Exit For
   Next
End Sub

'**************************************************

Sub Lien_Precedents(Doc As HTMLDocument) '******** Risque de 2ème BUG
Dim maColl As IHTMLElementCollection, Lien As HTMLAnchorElement

   Set maColl = Doc.getElementsByTagName("a")
   For Each Lien In maColl
      'ICI
      If Lien.innerText Like "Précédents" & "*" Then Set Lien_Msgs_Prec = Lien: Exit For
   Next
End Sub

'**************************************************

Sub Cibler_Table_Msgs(Doc As HTMLDocument) '******** Risque de 2ème BUG
Dim maColl As IHTMLElementCollection, Tabl As HTMLTable
   
   Set maColl = Doc.getElementsByTagName("table")
   For Each Tabl In maColl
      'ICI
      If Tabl.className = "th" Then Set TableMsgs = Tabl: Exit For
   Next
End Sub

'**************************************************

Sub Collect_Emails(maTable As HTMLTable) '******** Risque de 2ème BUG
'Collecte le contenu des mails "intéressants"
    Dim IE_2 As New InternetExplorer
    Dim IEDoc_2 As HTMLDocument
    Dim CollecLiens As IHTMLElementCollection, TbLiens()
    Dim CollecTR As IHTMLElementCollection, TD As HTMLGenericElement
    Dim CollecDiv As IHTMLElementCollection, Div As HTMLGenericElement
    Dim Elem As HTMLAnchorElement, Element As HTMLGenericElement, Enfant As HTMLGenericElement
    Dim i As Integer, j As Integer, Flag As Boolean
    
    Flag = False
    Set CollecLiens = maTable.getElementsByTagName("a")
    For Each Elem In CollecLiens
        ReDim Preserve TbLiens(i)
        Set TbLiens(i) = Elem
        i = i + 1
    Next
    i = 0
    Set CollecTR = maTable.getElementsByTagName("tr")
    For Each Element In CollecTR
       For Each TD In Element.Children
          If Flag = True Then
             IE_2.navigate TbLiens(i).href
             IE_2.Visible = True
             Flag = False
             Set IEDoc_2 = IE_2.document
             Set CollecDiv = IEDoc_2.getElementsByTagName("div")
             For Each Div In CollecDiv
                 If Div.className = "msg" Then 'ICI
                    For Each Enfant In Div.Children
                       ReDim Preserve Tb(j)
                       Tb(j) = Enfant.innerText
                       j = j + 1
                    Next Enfant
                 End If
             Next Div
          End If
          If TD.innerText = "*" & Identifier_Mail & "*" Then Flag = True
       Next TD
       i = i + 1
    Next Element
   IE_2.Quit
   Set IE_2 = Nothing
   Set IEDoc_2 = Nothing
End Sub


Le fichier :
https://www.cjoint.com/c/EAto5oQjk3h

Encore désolé...

Je vais continuer à suivre ce sujet, au cas ou...
🎼 Cordialement,
Franck 🎶
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 20/01/2015 à 10:51
Bonjour,

Je donnerai les explications après.
Voici le code fonctionnel :
Option Explicit

'Sources : Ces 6 lignes sont à conserver dans votre fichier
    'http://www.commentcamarche.net/forum/affich-31378101-retourner-des-infos-sur-excel-provenant-d-un-mail
    'http://www.commentcamarche.net/faq/41759-vba-ajouter-copier-une-feuille-dans-un-classeur#les-fonctions-de-verification
    'http://www.commentcamarche.net/faq/41585-vba-inputbox
    'http://qwazerty.developpez.com/tutoriels/vba/ie-et-vba-excel/
    'http://www.developpez.net/forums/d1192897-4/logiciels/microsoft-office/excel/contribuez/article-manipulation-d-internet-explorer-via-vba/

'********************************* Déclaration des variables publiques
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim Lien_Msgs_Prec As HTMLAnchorElement
Dim Tb()
Dim TableMsgs As HTMLTable
Dim Identifier_Mail As String

'********************************* Sub Principale
Sub Import_Mails_De_Gmail()
Dim CollLink As IHTMLElementCollection, CollInput As IHTMLElementCollection, CollTable As IHTMLElementCollection
Dim i As Integer

   Do
      Identifier_Mail = InputBox("Saisir un point commun pour identifier vos mails : ", "Correspondance dans la seconde colonne de Gmail")
   Loop While Identifier_Mail = ""
   
   'Insertion d'une nouvelle feuille
   Call Ajoute_Feuille
   
   'lance Internet Explorer
   IE.navigate "https://mail.google.com/"
   IE.Visible = True
   WaitIE IE
   Set IEDoc = IE.document
   WaitDoc IEDoc
   
   'connexion (au cas ou) au compte gmail
   If Not IEDoc.URL Like "*" & "inbox" & "*" Then Call Connecte(IEDoc)
   WaitIE IE
   Set IEDoc = IE.document
   WaitDoc IEDoc
   
   'Affichage html
   Set CollInput = IEDoc.getElementsByTagName("input")
   If Not CollInput Is Nothing Then
      AffichageHTML CollInput
   Else
      Erreur "Collection des liens pour affichage HTML vide"
      Exit Sub
   End If
   WaitIE IE
   Set IEDoc = IE.document
   WaitDoc IEDoc
   Do
      'recherche du lien vers les mails précédents
      Set CollLink = IEDoc.getElementsByTagName("a")
      If Not CollLink Is Nothing Then
         Lien_Precedents CollLink
      Else
         Erreur "Collection des Liens, pour accès mails précédents, vide"
         Exit Sub
      End If
   
      'cible la table contenant les emails
      Set CollTable = IEDoc.getElementsByTagName("table")
      If Not CollTable Is Nothing Then
         Cibler_Table_Msgs CollTable
      Else
         Erreur "Collection des tables contenant les emails vide"
         Exit Sub
      End If
      'boucle sur les éléments de cette table et remplit le tableau des liens
      If Not TableMsgs Is Nothing Then
         Collect_Emails TableMsgs
      Else
         Erreur "Collection des liens (liste des emails) vide"
         Exit Sub
      End If
      'Clic sur le lien "Précédents>" ou sort de la boucle
      If Lien_Msgs_Prec Is Nothing Then
         Exit Do
      Else
         Lien_Msgs_Prec.Click
         Set IEDoc = IE.document
         WaitDoc IEDoc
      End If
   Loop
   IE.Quit
   Set IE = Nothing
   Set IEDoc = Nothing
   'Restitution des données
   For i = LBound(Tb) To UBound(Tb)
      Cells(i + 1, 1) = Tb(i)
   Next
   Columns("A").AutoFit
   MsgBox "Import terminé"
End Sub

'********************************* Traitement d'erreur
Sub Erreur(Texte As String)

MsgBox "Bug à corriger :" & vbCrLf & Texte
IE.Quit
Set IE = Nothing
Set IEDoc = Nothing
End Sub

'********************************* Attente chargement complet de la page Internet Explorer
Sub WaitIE(IE As InternetExplorer)

   Do Until IE.readyState = READYSTATE_COMPLETE
      DoEvents
   Loop
End Sub

'********************************* Attente chargement complet du document (contenu de la page IE)
Sub WaitDoc(doc As HTMLDocument)

  Do While Not doc.readyState = "complete"
    DoEvents
  Loop
End Sub

'********************************* Ajoute la nouvelle feuille pour accueillir les données des mails
Sub Ajoute_Feuille(Optional NouvelleFeuille As Boolean)
Dim strNewName As String, strCara As String

Do
   NouvelleFeuille = True
   strNewName = InputBox("Nom de la nouvelle feuille : ", "Saisir un nom de feuille valide")
   If Len(strNewName) = 0 Then NouvelleFeuille = False
   If Valid_Name(strNewName, strCara) = False Then
      MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _
            "Un nom de feuille ne peut pas contenir le caractère : " & strCara, vbCritical
      NouvelleFeuille = False
   Else
   End If
   If Feuil_Exist(ThisWorkbook.Name, strNewName) = True Then
      MsgBox "Le nom : " & strNewName & " est invalide." & vbCrLf & _
            "Ce nom de feuille est déjà utilisé dans ce classeur.", vbCritical
      NouvelleFeuille = False
   End If
   If NouvelleFeuille = True Then Exit Do
Loop
ThisWorkbook.Sheets.Add
ActiveSheet.Name = strNewName
End Sub

'********************************* Fonction de vérification pour ajout feuille
'Test si la chaine (nom de la future feuille) contient un caractère à éviter
Function Valid_Name(strName As String, strChr As String) As Boolean
Dim i As Byte
Dim Tb_Car() As String
Dim strProhib As String

strProhib = "/\:*?""<>|"
Tb_Car = Split(StrConv(strProhib, vbUnicode), Chr$(0))
For i = LBound(Tb_Car) To UBound(Tb_Car) - 1
    If InStr(strName, Tb_Car(i)) > 0 Then
        Valid_Name = False
        strChr = Tb_Car(i)
        Exit Function
    End If
Next i
Valid_Name = True
End Function

'********************************* Fonction de vérification pour ajout feuille
'Test si la feuille existe déjà
Function Feuil_Exist(strWbk As String, strWsh As String) As Boolean

   On Error Resume Next
   Feuil_Exist = (Workbooks(strWbk).Sheets(strWsh).Name = strWsh)
End Function

'********************************* Connexion au compte Gmail
Sub Connecte(doc As HTMLDocument)
Dim eMailAdress As String, PassWord As String
Dim InputMail As HTMLInputElement, InputPass As HTMLInputElement
Dim InputCookie As HTMLInputElement, InputSubmit As HTMLInputElement
   
   Do
      eMailAdress = InputBox("Adresse e-mail : ", "Saisir votre adresse mail")
   Loop While eMailAdress = ""
   Do
      PassWord = InputBox("Mot de passe : ", "Saisir votre mot de passe")
   Loop While PassWord = ""
   
   Set InputMail = doc.getElementById("Email") 'Saisie adresse email
   InputMail.Value = eMailAdress
   Set InputPass = doc.getElementById("Passwd") 'Saisie Mot de passe
   InputPass.Value = PassWord
   Set InputCookie = doc.getElementById("PersistentCookie") 'Décoche "Rester connecté"
   If InputCookie.Value = "yes" Then InputCookie.Click
   Set InputSubmit = doc.getElementById("signIn") 'Clic sur Connexion
   InputSubmit.Click
End Sub

'********************************* Affiche la page Gmail en affichage HTML (évite les 3 onglets "Principale", "Réseaux sociaux", "Promotions")
Sub AffichageHTML(CollI As IHTMLElementCollection)
Dim Elem As HTMLInputElement

   For Each Elem In CollI
      If Elem.Value = "Affichage HTML simplifié" And Elem.className = "submit_as_link" Then Elem.Click: Exit For
   Next
End Sub

'********************************* Enregistre le lien vers les mails précédents (si plusieurs pages de mails)
Sub Lien_Precedents(CollLiens As IHTMLElementCollection)
Dim Lien As HTMLAnchorElement

   For Each Lien In CollLiens
      If Lien.innerText Like "Précédents" & "*" Then Set Lien_Msgs_Prec = Lien: Exit For
   Next
End Sub

'********************************* Cible la table contenant les liens vers chaque email
Sub Cibler_Table_Msgs(CollT As IHTMLElementCollection)
Dim Tabl As HTMLTable

   For Each Tabl In CollT
      If Tabl.className = "th" Then Set TableMsgs = Tabl: Exit For
   Next
End Sub

'********************************* Ouvre les mails dans une nouvelle page IE et récupère leur contenu
Sub Collect_Emails(maTable As HTMLTable)
'Collecte tous les liens vers les mails "intéressants"
Dim IE_2 As New InternetExplorer
Dim IEDoc_2 As HTMLDocument
Dim CollecLiens As IHTMLElementCollection, CollecTR As IHTMLElementCollection, CollecDiv As IHTMLElementCollection
Dim TD As HTMLGenericElement, Div As HTMLGenericElement, Element As HTMLGenericElement, Enfant As HTMLGenericElement
Dim Elem As HTMLAnchorElement
Dim TbLiens()
Dim i As Integer, j As Integer
Dim Flag As Boolean
    
    Flag = False
    Set CollecLiens = maTable.getElementsByTagName("a")
    For Each Elem In CollecLiens
        ReDim Preserve TbLiens(i)
        Set TbLiens(i) = Elem
        i = i + 1
    Next
    i = 0
    Set CollecTR = maTable.getElementsByTagName("tr")
    For Each Element In CollecTR
       For Each TD In Element.Children
          If Flag = True Then
             IE_2.navigate TbLiens(i).href
             IE_2.Visible = True
             WaitIE IE_2
             Flag = False
             Set IEDoc_2 = IE_2.document
             WaitDoc IEDoc_2
             Set CollecDiv = IEDoc_2.getElementsByTagName("div")
             For Each Div In CollecDiv
                 If Div.className = "msg" Then
                    For Each Enfant In Div.Children
                       ReDim Preserve Tb(j)
                       Tb(j) = Enfant.innerText
                       j = j + 1
                    Next
                 End If
             Next
          End If
          If TD.innerText Like "*" & Identifier_Mail & "*" Then Flag = True
       Next TD
       i = i + 1
    Next Element
   IE_2.Quit
   Set IE_2 = Nothing
   Set IEDoc_2 = Nothing
End Sub


🎼 Cordialement,
Franck 🎶
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 20/01/2015 à 10:53
Explications :

1- les bugs étaient dus au fait que le contenu des pages n'étaient pas chargés totalement alors que la page affichait "chargée"... Du coup, on a une boucle d'attente supplémentaire.

2- Pour faire fonctionner ce code :

=> copier-coller le code dans un module standard de votre classeur
=> !!!!!!!!!!!!!!!!! Toujours sous l'interface VBA : Menu OUtils, choix : références,
Trouvez puis sélectionnez les références :
Microsoft Internet Controls
Microsoft HTML Object Library

=> Depuis une feuille : Alt+F8, choix "Import_Mails_De_Gmail" et cliquer sur Exécuter
=> Question : "Saisir un point commun pour identifier vos mails : "
L'affichage HTML de gmail propose, pour la liste des emails, 4 colonnes :
- 1ère colonne : des cases à cocher,
- 2ème : des noms (soit adresses mails soit autre chose (Facebook par exemple))
- 3ème : objets et un peu du corps de l'email
- 4ème : une date
Pour sélectionner les mails que l'on souhaite exporter, il faut donc répondre à la question "Saisir un point commun pour identifier vos mails : " le contenu que vous souhaitez de votre seconde colonne
=> Question : "Nom de la nouvelle feuille : " saisir un nom de feuille valide. Une nouvelle feuille sera alors créée pour accueillir l'import en cours.
=> éventuellement seront demandés votre email et votre mot de passe pour se connecter.
=> Bien attendre le message final : "Import terminé" avant de faire quoique ce soit.


Cette procédure peut être longue, voir très longue.

Dans l'attente de votre retour.
0
lixel Messages postés 22 Date d'inscription dimanche 23 mai 2010 Statut Membre Dernière intervention 18 juillet 2015
20 janv. 2015 à 11:46
Bonjour,

J'ai juste jeté un coup d'oeil et... Il y a du boulot de fait!!
Je regarderait tout cela plus en detail ce week-end car je n'ai pas beaucoup de temps libre en ce moment.

Encore merci pour ton investissement pour ce sujet.

Cordialement
0