Retourner des infos sur excel provenant d'un mail.

lixel Messages postés 25 Statut Membre -  
lixel Messages postés 25 Statut Membre -
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

9 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

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

    🎼 Cordialement,
    Franck 🎶
    0
  2. lixel Messages postés 25 Statut Membre
     
    Bsr bsr Pijaku

    J'utilise Gmail comme boite mail.
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  4. lixel Messages postés 25 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  7. lixel Messages postés 25 Statut Membre
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  8. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  9. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  10. lixel Messages postés 25 Statut Membre
     
    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