Retourner des infos sur excel provenant d'un mail.

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. Modérateur
    Bonjour,

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

    🎼 Cordialement,
    Franck 🎶
    0
    1. Bsr bsr Pijaku

      J'utilise Gmail comme boite mail.
      0
      1. Modérateur
        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
        1. 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
          1. Modérateur
            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
            1. 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. Modérateur
                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
            2. Modérateur
              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
              1. Modérateur
                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. Modérateur
                  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
              2. 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